Changelog in Linux kernel 6.12.65

 
cpufreq: intel_pstate: Check IDA only before MSR_IA32_PERF_CTL writes [+ + +]
Author: Richa Bharti <richa.bharti@siemens.com>
Date:   Wed Jan 7 17:19:38 2026 +0530

    cpufreq: intel_pstate: Check IDA only before MSR_IA32_PERF_CTL writes
    
    [ Upstream commit 4b747cc628d8f500d56cf1338280eacc66362ff3 ]
    
    Commit ac4e04d9e378 ("cpufreq: intel_pstate: Unchecked MSR aceess in
    legacy mode") introduced a check for feature X86_FEATURE_IDA to verify
    turbo mode support. Although this is the correct way to check for turbo
    mode support, it causes issues on some platforms that disable turbo
    during OS boot, but enable it later [1]. Before adding this feature
    check, users were able to get turbo mode frequencies by writing 0 to
    /sys/devices/system/cpu/intel_pstate/no_turbo post-boot.
    
    To restore the old behavior on the affected systems while still
    addressing the unchecked MSR issue on some Skylake-X systems, check
    X86_FEATURE_IDA only immediately before updates of MSR_IA32_PERF_CTL
    that may involve setting the Turbo Engage Bit (bit 32).
    
    Fixes: ac4e04d9e378 ("cpufreq: intel_pstate: Unchecked MSR aceess in legacy mode")
    Reported-by: Aaron Rainbolt <arainbolt@kfocus.org>
    Closes: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2122531 [1]
    Tested-by: Aaron Rainbolt <arainbolt@kfocus.org>
    Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    [ rjw: Subject adjustment, changelog edits ]
    Link: https://patch.msgid.link/20251111010840.141490-1-srinivas.pandruvada@linux.intel.com
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    [ richa: Backport to 6.12.y with context adjustments ]
    Signed-off-by: Richa Bharti <richa.bharti@siemens.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Forward VMID reservation errors [+ + +]
Author: Natalie Vock <natalie.vock@gmx.de>
Date:   Wed Jan 7 05:53:17 2026 -0500

    drm/amdgpu: Forward VMID reservation errors
    
    [ Upstream commit 8defb4f081a5feccc3ea8372d0c7af3522124e1f ]
    
    Otherwise userspace may be fooled into believing it has a reserved VMID
    when in reality it doesn't, ultimately leading to GPU hangs when SPM is
    used.
    
    Fixes: 80e709ee6ecc ("drm/amdgpu: add option params to enforce process isolation between graphics and compute")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Natalie Vock <natalie.vock@gmx.de>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    [ adapted 3-argument amdgpu_vmid_alloc_reserved(adev, vm, vmhub) call to 2-argument version and added separate error check to preserve reserved_vmid tracking logic. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.12.65 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Jan 11 15:25:22 2026 +0100

    Linux 6.12.65
    
    Link: https://lore.kernel.org/r/20260109112133.973195406@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Slade Watkins <sr@sladewatkins.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/page_alloc: change all pageblocks migrate type on coalescing [+ + +]
Author: Alexander Gordeev <agordeev@linux.ibm.com>
Date:   Tue Jan 6 15:35:01 2026 -0500

    mm/page_alloc: change all pageblocks migrate type on coalescing
    
    [ Upstream commit 7838a4eb8a1d23160bd3f588ea7f2b8f7c00c55b ]
    
    When a page is freed it coalesces with a buddy into a higher order page
    while possible.  When the buddy page migrate type differs, it is expected
    to be updated to match the one of the page being freed.
    
    However, only the first pageblock of the buddy page is updated, while the
    rest of the pageblocks are left unchanged.
    
    That causes warnings in later expand() and other code paths (like below),
    since an inconsistency between migration type of the list containing the
    page and the page-owned pageblocks migration types is introduced.
    
    [  308.986589] ------------[ cut here ]------------
    [  308.987227] page type is 0, passed migratetype is 1 (nr=256)
    [  308.987275] WARNING: CPU: 1 PID: 5224 at mm/page_alloc.c:812 expand+0x23c/0x270
    [  308.987293] Modules linked in: algif_hash(E) af_alg(E) nft_fib_inet(E) nft_fib_ipv4(E) nft_fib_ipv6(E) nft_fib(E) nft_reject_inet(E) nf_reject_ipv4(E) nf_reject_ipv6(E) nft_reject(E) nft_ct(E) nft_chain_nat(E) nf_nat(E) nf_conntrack(E) nf_defrag_ipv6(E) nf_defrag_ipv4(E) nf_tables(E) s390_trng(E) vfio_ccw(E) mdev(E) vfio_iommu_type1(E) vfio(E) sch_fq_codel(E) drm(E) i2c_core(E) drm_panel_orientation_quirks(E) loop(E) nfnetlink(E) vsock_loopback(E) vmw_vsock_virtio_transport_common(E) vsock(E) ctcm(E) fsm(E) diag288_wdt(E) watchdog(E) zfcp(E) scsi_transport_fc(E) ghash_s390(E) prng(E) aes_s390(E) des_generic(E) des_s390(E) libdes(E) sha3_512_s390(E) sha3_256_s390(E) sha_common(E) paes_s390(E) crypto_engine(E) pkey_cca(E) pkey_ep11(E) zcrypt(E) rng_core(E) pkey_pckmo(E) pkey(E) autofs4(E)
    [  308.987439] Unloaded tainted modules: hmac_s390(E):2
    [  308.987650] CPU: 1 UID: 0 PID: 5224 Comm: mempig_verify Kdump: loaded Tainted: G            E       6.18.0-gcc-bpf-debug #431 PREEMPT
    [  308.987657] Tainted: [E]=UNSIGNED_MODULE
    [  308.987661] Hardware name: IBM 3906 M04 704 (z/VM 7.3.0)
    [  308.987666] Krnl PSW : 0404f00180000000 00000349976fa600 (expand+0x240/0x270)
    [  308.987676]            R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:3 PM:0 RI:0 EA:3
    [  308.987682] Krnl GPRS: 0000034980000004 0000000000000005 0000000000000030 000003499a0e6d88
    [  308.987688]            0000000000000005 0000034980000005 000002be803ac000 0000023efe6c8300
    [  308.987692]            0000000000000008 0000034998d57290 000002be00000100 0000023e00000008
    [  308.987696]            0000000000000000 0000000000000000 00000349976fa5fc 000002c99b1eb6f0
    [  308.987708] Krnl Code: 00000349976fa5f0: c020008a02f2        larl    %r2,000003499883abd4
                              00000349976fa5f6: c0e5ffe3f4b5        brasl   %r14,0000034997378f60
                             #00000349976fa5fc: af000000            mc      0,0
                             >00000349976fa600: a7f4ff4c            brc     15,00000349976fa498
                              00000349976fa604: b9040026            lgr     %r2,%r6
                              00000349976fa608: c0300088317f        larl    %r3,0000034998800906
                              00000349976fa60e: c0e5fffdb6e1        brasl   %r14,00000349976b13d0
                              00000349976fa614: af000000            mc      0,0
    [  308.987734] Call Trace:
    [  308.987738]  [<00000349976fa600>] expand+0x240/0x270
    [  308.987744] ([<00000349976fa5fc>] expand+0x23c/0x270)
    [  308.987749]  [<00000349976ff95e>] rmqueue_bulk+0x71e/0x940
    [  308.987754]  [<00000349976ffd7e>] __rmqueue_pcplist+0x1fe/0x2a0
    [  308.987759]  [<0000034997700966>] rmqueue.isra.0+0xb46/0xf40
    [  308.987763]  [<0000034997703ec8>] get_page_from_freelist+0x198/0x8d0
    [  308.987768]  [<0000034997706fa8>] __alloc_frozen_pages_noprof+0x198/0x400
    [  308.987774]  [<00000349977536f8>] alloc_pages_mpol+0xb8/0x220
    [  308.987781]  [<0000034997753bf6>] folio_alloc_mpol_noprof+0x26/0xc0
    [  308.987786]  [<0000034997753e4c>] vma_alloc_folio_noprof+0x6c/0xa0
    [  308.987791]  [<0000034997775b22>] vma_alloc_anon_folio_pmd+0x42/0x240
    [  308.987799]  [<000003499777bfea>] __do_huge_pmd_anonymous_page+0x3a/0x210
    [  308.987804]  [<00000349976cb08e>] __handle_mm_fault+0x4de/0x500
    [  308.987809]  [<00000349976cb14c>] handle_mm_fault+0x9c/0x3a0
    [  308.987813]  [<000003499734d70e>] do_exception+0x1de/0x540
    [  308.987822]  [<0000034998387390>] __do_pgm_check+0x130/0x220
    [  308.987830]  [<000003499839a934>] pgm_check_handler+0x114/0x160
    [  308.987838] 3 locks held by mempig_verify/5224:
    [  308.987842]  #0: 0000023ea44c1e08 (vm_lock){++++}-{0:0}, at: lock_vma_under_rcu+0xb2/0x2a0
    [  308.987859]  #1: 0000023ee4d41b18 (&pcp->lock){+.+.}-{2:2}, at: rmqueue.isra.0+0xad6/0xf40
    [  308.987871]  #2: 0000023efe6c8998 (&zone->lock){..-.}-{2:2}, at: rmqueue_bulk+0x5a/0x940
    [  308.987886] Last Breaking-Event-Address:
    [  308.987890]  [<0000034997379096>] __warn_printk+0x136/0x140
    [  308.987897] irq event stamp: 52330356
    [  308.987901] hardirqs last  enabled at (52330355): [<000003499838742e>] __do_pgm_check+0x1ce/0x220
    [  308.987907] hardirqs last disabled at (52330356): [<000003499839932e>] _raw_spin_lock_irqsave+0x9e/0xe0
    [  308.987913] softirqs last  enabled at (52329882): [<0000034997383786>] handle_softirqs+0x2c6/0x530
    [  308.987922] softirqs last disabled at (52329859): [<0000034997382f86>] __irq_exit_rcu+0x126/0x140
    [  308.987929] ---[ end trace 0000000000000000 ]---
    [  308.987936] ------------[ cut here ]------------
    [  308.987940] page type is 0, passed migratetype is 1 (nr=256)
    [  308.987951] WARNING: CPU: 1 PID: 5224 at mm/page_alloc.c:860 __del_page_from_free_list+0x1be/0x1e0
    [  308.987960] Modules linked in: algif_hash(E) af_alg(E) nft_fib_inet(E) nft_fib_ipv4(E) nft_fib_ipv6(E) nft_fib(E) nft_reject_inet(E) nf_reject_ipv4(E) nf_reject_ipv6(E) nft_reject(E) nft_ct(E) nft_chain_nat(E) nf_nat(E) nf_conntrack(E) nf_defrag_ipv6(E) nf_defrag_ipv4(E) nf_tables(E) s390_trng(E) vfio_ccw(E) mdev(E) vfio_iommu_type1(E) vfio(E) sch_fq_codel(E) drm(E) i2c_core(E) drm_panel_orientation_quirks(E) loop(E) nfnetlink(E) vsock_loopback(E) vmw_vsock_virtio_transport_common(E) vsock(E) ctcm(E) fsm(E) diag288_wdt(E) watchdog(E) zfcp(E) scsi_transport_fc(E) ghash_s390(E) prng(E) aes_s390(E) des_generic(E) des_s390(E) libdes(E) sha3_512_s390(E) sha3_256_s390(E) sha_common(E) paes_s390(E) crypto_engine(E) pkey_cca(E) pkey_ep11(E) zcrypt(E) rng_core(E) pkey_pckmo(E) pkey(E) autofs4(E)
    [  308.988070] Unloaded tainted modules: hmac_s390(E):2
    [  308.988087] CPU: 1 UID: 0 PID: 5224 Comm: mempig_verify Kdump: loaded Tainted: G        W   E       6.18.0-gcc-bpf-debug #431 PREEMPT
    [  308.988095] Tainted: [W]=WARN, [E]=UNSIGNED_MODULE
    [  308.988100] Hardware name: IBM 3906 M04 704 (z/VM 7.3.0)
    [  308.988105] Krnl PSW : 0404f00180000000 00000349976f9e32 (__del_page_from_free_list+0x1c2/0x1e0)
    [  308.988118]            R:0 T:1 IO:0 EX:0 Key:0 M:1 W:0 P:0 AS:3 CC:3 PM:0 RI:0 EA:3
    [  308.988127] Krnl GPRS: 0000034980000004 0000000000000005 0000000000000030 000003499a0e6d88
    [  308.988133]            0000000000000005 0000034980000005 0000034998d57290 0000023efe6c8300
    [  308.988139]            0000000000000001 0000000000000008 000002be00000100 000002be803ac000
    [  308.988144]            0000000000000000 0000000000000001 00000349976f9e2e 000002c99b1eb728
    [  308.988153] Krnl Code: 00000349976f9e22: c020008a06d9        larl    %r2,000003499883abd4
                              00000349976f9e28: c0e5ffe3f89c        brasl   %r14,0000034997378f60
                             #00000349976f9e2e: af000000            mc      0,0
                             >00000349976f9e32: a7f4ff4e            brc     15,00000349976f9cce
                              00000349976f9e36: b904002b            lgr     %r2,%r11
                              00000349976f9e3a: c030008a06e7        larl    %r3,000003499883ac08
                              00000349976f9e40: c0e5fffdbac8        brasl   %r14,00000349976b13d0
                              00000349976f9e46: af000000            mc      0,0
    [  308.988184] Call Trace:
    [  308.988188]  [<00000349976f9e32>] __del_page_from_free_list+0x1c2/0x1e0
    [  308.988195] ([<00000349976f9e2e>] __del_page_from_free_list+0x1be/0x1e0)
    [  308.988202]  [<00000349976ff946>] rmqueue_bulk+0x706/0x940
    [  308.988208]  [<00000349976ffd7e>] __rmqueue_pcplist+0x1fe/0x2a0
    [  308.988214]  [<0000034997700966>] rmqueue.isra.0+0xb46/0xf40
    [  308.988221]  [<0000034997703ec8>] get_page_from_freelist+0x198/0x8d0
    [  308.988227]  [<0000034997706fa8>] __alloc_frozen_pages_noprof+0x198/0x400
    [  308.988233]  [<00000349977536f8>] alloc_pages_mpol+0xb8/0x220
    [  308.988240]  [<0000034997753bf6>] folio_alloc_mpol_noprof+0x26/0xc0
    [  308.988247]  [<0000034997753e4c>] vma_alloc_folio_noprof+0x6c/0xa0
    [  308.988253]  [<0000034997775b22>] vma_alloc_anon_folio_pmd+0x42/0x240
    [  308.988260]  [<000003499777bfea>] __do_huge_pmd_anonymous_page+0x3a/0x210
    [  308.988267]  [<00000349976cb08e>] __handle_mm_fault+0x4de/0x500
    [  308.988273]  [<00000349976cb14c>] handle_mm_fault+0x9c/0x3a0
    [  308.988279]  [<000003499734d70e>] do_exception+0x1de/0x540
    [  308.988286]  [<0000034998387390>] __do_pgm_check+0x130/0x220
    [  308.988293]  [<000003499839a934>] pgm_check_handler+0x114/0x160
    [  308.988300] 3 locks held by mempig_verify/5224:
    [  308.988305]  #0: 0000023ea44c1e08 (vm_lock){++++}-{0:0}, at: lock_vma_under_rcu+0xb2/0x2a0
    [  308.988322]  #1: 0000023ee4d41b18 (&pcp->lock){+.+.}-{2:2}, at: rmqueue.isra.0+0xad6/0xf40
    [  308.988334]  #2: 0000023efe6c8998 (&zone->lock){..-.}-{2:2}, at: rmqueue_bulk+0x5a/0x940
    [  308.988346] Last Breaking-Event-Address:
    [  308.988350]  [<0000034997379096>] __warn_printk+0x136/0x140
    [  308.988356] irq event stamp: 52330356
    [  308.988360] hardirqs last  enabled at (52330355): [<000003499838742e>] __do_pgm_check+0x1ce/0x220
    [  308.988366] hardirqs last disabled at (52330356): [<000003499839932e>] _raw_spin_lock_irqsave+0x9e/0xe0
    [  308.988373] softirqs last  enabled at (52329882): [<0000034997383786>] handle_softirqs+0x2c6/0x530
    [  308.988380] softirqs last disabled at (52329859): [<0000034997382f86>] __irq_exit_rcu+0x126/0x140
    [  308.988388] ---[ end trace 0000000000000000 ]---
    
    Link: https://lkml.kernel.org/r/20251215081002.3353900A9c-agordeev@linux.ibm.com
    Link: https://lkml.kernel.org/r/20251212151457.3898073Add-agordeev@linux.ibm.com
    Fixes: e6cf9e1c4cde ("mm: page_alloc: fix up block types when merging compatible blocks")
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Reported-by: Marc Hartmayer <mhartmay@linux.ibm.com>
    Closes: https://lore.kernel.org/linux-mm/87wmalyktd.fsf@linux.ibm.com/
    Acked-by: Vlastimil Babka <vbabka@suse.cz>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Reviewed-by: Wei Yang <richard.weiyang@gmail.com>
    Cc: Marc Hartmayer <mhartmay@linux.ibm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [ adapted context for function removal ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: consider non-anon swap cache folios in folio_expected_ref_count() [+ + +]
Author: Bijan Tabatabai <bijan311@gmail.com>
Date:   Tue Jan 6 18:07:47 2026 -0500

    mm: consider non-anon swap cache folios in folio_expected_ref_count()
    
    [ Upstream commit f183663901f21fe0fba8bd31ae894bc529709ee0 ]
    
    Currently, folio_expected_ref_count() only adds references for the swap
    cache if the folio is anonymous.  However, according to the comment above
    the definition of PG_swapcache in enum pageflags, shmem folios can also
    have PG_swapcache set.  This patch makes sure references for the swap
    cache are added if folio_test_swapcache(folio) is true.
    
    This issue was found when trying to hot-unplug memory in a QEMU/KVM
    virtual machine.  When initiating hot-unplug when most of the guest memory
    is allocated, hot-unplug hangs partway through removal due to migration
    failures.  The following message would be printed several times, and would
    be printed again about every five seconds:
    
    [   49.641309] migrating pfn b12f25 failed ret:7
    [   49.641310] page: refcount:2 mapcount:0 mapping:0000000033bd8fe2 index:0x7f404d925 pfn:0xb12f25
    [   49.641311] aops:swap_aops
    [   49.641313] flags: 0x300000000030508(uptodate|active|owner_priv_1|reclaim|swapbacked|node=0|zone=3)
    [   49.641314] raw: 0300000000030508 ffffed312c4bc908 ffffed312c4bc9c8 0000000000000000
    [   49.641315] raw: 00000007f404d925 00000000000c823b 00000002ffffffff 0000000000000000
    [   49.641315] page dumped because: migration failure
    
    When debugging this, I found that these migration failures were due to
    __migrate_folio() returning -EAGAIN for a small set of folios because the
    expected reference count it calculates via folio_expected_ref_count() is
    one less than the actual reference count of the folios.  Furthermore, all
    of the affected folios were not anonymous, but had the PG_swapcache flag
    set, inspiring this patch.  After applying this patch, the memory
    hot-unplug behaves as expected.
    
    I tested this on a machine running Ubuntu 24.04 with kernel version
    6.8.0-90-generic and 64GB of memory.  The guest VM is managed by libvirt
    and runs Ubuntu 24.04 with kernel version 6.18 (though the head of the
    mm-unstable branch as a Dec 16, 2025 was also tested and behaves the same)
    and 48GB of memory.  The libvirt XML definition for the VM can be found at
    [1].  CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE is set in the guest
    kernel so the hot-pluggable memory is automatically onlined.
    
    Below are the steps to reproduce this behavior:
    
    1) Define and start and virtual machine
      host$ virsh -c qemu:///system define ./test_vm.xml # test_vm.xml from [1]
      host$ virsh -c qemu:///system start test_vm
    
    2) Setup swap in the guest
      guest$ sudo fallocate -l 32G /swapfile
      guest$ sudo chmod 0600 /swapfile
      guest$ sudo mkswap /swapfile
      guest$ sudo swapon /swapfile
    
    3) Use alloc_data [2] to allocate most of the remaining guest memory
      guest$ ./alloc_data 45
    
    4) In a separate guest terminal, monitor the amount of used memory
      guest$ watch -n1 free -h
    
    5) When alloc_data has finished allocating, initiate the memory
    hot-unplug using the provided xml file [3]
      host$ virsh -c qemu:///system detach-device test_vm ./remove.xml --live
    
    After initiating the memory hot-unplug, you should see the amount of
    available memory in the guest decrease, and the amount of used swap data
    increase.  If everything works as expected, when all of the memory is
    unplugged, there should be around 8.5-9GB of data in swap.  If the
    unplugging is unsuccessful, the amount of used swap data will settle below
    that.  If that happens, you should be able to see log messages in dmesg
    similar to the one posted above.
    
    Link: https://lkml.kernel.org/r/20251216200727.2360228-1-bijan311@gmail.com
    Link: https://github.com/BijanT/linux_patch_files/blob/main/test_vm.xml [1]
    Link: https://github.com/BijanT/linux_patch_files/blob/main/alloc_data.c [2]
    Link: https://github.com/BijanT/linux_patch_files/blob/main/remove.xml [3]
    Fixes: 86ebd50224c0 ("mm: add folio_expected_ref_count() for reference count calculation")
    Signed-off-by: Bijan Tabatabai <bijan311@gmail.com>
    Acked-by: David Hildenbrand (Red Hat) <david@kernel.org>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Shivank Garg <shivankg@amd.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Kairui Song <ryncsn@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: simplify folio_expected_ref_count() [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Tue Jan 6 18:07:46 2026 -0500

    mm: simplify folio_expected_ref_count()
    
    [ Upstream commit 78cb1a13c42a6d843e21389f74d1edb90ed07288 ]
    
    Now that PAGE_MAPPING_MOVABLE is gone, we can simplify and rely on the
    folio_test_anon() test only.
    
    ... but staring at the users, this function should never even have been
    called on movable_ops pages. E.g.,
    * __buffer_migrate_folio() does not make sense for them
    * folio_migrate_mapping() does not make sense for them
    * migrate_huge_page_move_mapping() does not make sense for them
    * __migrate_folio() does not make sense for them
    * ... and khugepaged should never stumble over them
    
    Let's simply refuse typed pages (which includes slab) except hugetlb, and
    WARN.
    
    Link: https://lkml.kernel.org/r/20250704102524.326966-26-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Reviewed-by: Zi Yan <ziy@nvidia.com>
    Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Brendan Jackman <jackmanb@google.com>
    Cc: Byungchul Park <byungchul@sk.com>
    Cc: Chengming Zhou <chengming.zhou@linux.dev>
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
    Cc: Eugenio Pé rez <eperezma@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Gregory Price <gourry@gourry.net>
    Cc: "Huang, Ying" <ying.huang@linux.alibaba.com>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jason Gunthorpe <jgg@ziepe.ca>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Jerrin Shaji George <jerrin.shaji-george@broadcom.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: John Hubbard <jhubbard@nvidia.com>
    Cc: Jonathan Corbet <corbet@lwn.net>
    Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
    Cc: Liam Howlett <liam.howlett@oracle.com>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Mathew Brost <matthew.brost@intel.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Miaohe Lin <linmiaohe@huawei.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Naoya Horiguchi <nao.horiguchi@gmail.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Qi Zheng <zhengqi.arch@bytedance.com>
    Cc: Rakie Kim <rakie.kim@sk.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
    Cc: xu xin <xu.xin16@zte.com.cn>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: f183663901f2 ("mm: consider non-anon swap cache folios in folio_expected_ref_count()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: ensure context reset on disconnect() [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Jan 6 18:07:52 2026 -0500

    mptcp: ensure context reset on disconnect()
    
    [ Upstream commit 86730ac255b0497a272704de9a1df559f5d6602e ]
    
    After the blamed commit below, if the MPC subflow is already in TCP_CLOSE
    status or has fallback to TCP at mptcp_disconnect() time,
    mptcp_do_fastclose() skips setting the `send_fastclose flag` and the later
    __mptcp_close_ssk() does not reset anymore the related subflow context.
    
    Any later connection will be created with both the `request_mptcp` flag
    and the msk-level fallback status off (it is unconditionally cleared at
    MPTCP disconnect time), leading to a warning in subflow_data_ready():
    
      WARNING: CPU: 26 PID: 8996 at net/mptcp/subflow.c:1519 subflow_data_ready (net/mptcp/subflow.c:1519 (discriminator 13))
      Modules linked in:
      CPU: 26 UID: 0 PID: 8996 Comm: syz.22.39 Not tainted 6.18.0-rc7-05427-g11fc074f6c36 #1 PREEMPT(voluntary)
      Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
      RIP: 0010:subflow_data_ready (net/mptcp/subflow.c:1519 (discriminator 13))
      Code: 90 0f 0b 90 90 e9 04 fe ff ff e8 b7 1e f5 fe 89 ee bf 07 00 00 00 e8 db 19 f5 fe 83 fd 07 0f 84 35 ff ff ff e8 9d 1e f5 fe 90 <0f> 0b 90 e9 27 ff ff ff e8 8f 1e f5 fe 4c 89 e7 48 89 de e8 14 09
      RSP: 0018:ffffc9002646fb30 EFLAGS: 00010293
      RAX: 0000000000000000 RBX: ffff88813b218000 RCX: ffffffff825c8435
      RDX: ffff8881300b3580 RSI: ffffffff825c8443 RDI: 0000000000000005
      RBP: 000000000000000b R08: ffffffff825c8435 R09: 000000000000000b
      R10: 0000000000000005 R11: 0000000000000007 R12: ffff888131ac0000
      R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
      FS:  00007f88330af6c0(0000) GS:ffff888a93dd2000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f88330aefe8 CR3: 000000010ff59000 CR4: 0000000000350ef0
      Call Trace:
       <TASK>
       tcp_data_ready (net/ipv4/tcp_input.c:5356)
       tcp_data_queue (net/ipv4/tcp_input.c:5445)
       tcp_rcv_state_process (net/ipv4/tcp_input.c:7165)
       tcp_v4_do_rcv (net/ipv4/tcp_ipv4.c:1955)
       __release_sock (include/net/sock.h:1158 (discriminator 6) net/core/sock.c:3180 (discriminator 6))
       release_sock (net/core/sock.c:3737)
       mptcp_sendmsg (net/mptcp/protocol.c:1763 net/mptcp/protocol.c:1857)
       inet_sendmsg (net/ipv4/af_inet.c:853 (discriminator 7))
       __sys_sendto (net/socket.c:727 (discriminator 15) net/socket.c:742 (discriminator 15) net/socket.c:2244 (discriminator 15))
       __x64_sys_sendto (net/socket.c:2247)
       do_syscall_64 (arch/x86/entry/syscall_64.c:63 (discriminator 1) arch/x86/entry/syscall_64.c:94 (discriminator 1))
       entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
      RIP: 0033:0x7f883326702d
    
    Address the issue setting an explicit `fastclosing` flag at fastclose
    time, and checking such flag after mptcp_do_fastclose().
    
    Fixes: ae155060247b ("mptcp: fix duplicate reset on fastclose")
    Cc: stable@vger.kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251212-net-mptcp-subflow_data_ready-warn-v1-2-d1f9fd1c36c8@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: fallback earlier on simult connection [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Tue Jan 6 12:05:27 2026 -0500

    mptcp: fallback earlier on simult connection
    
    [ Upstream commit 71154bbe49423128c1c8577b6576de1ed6836830 ]
    
    Syzkaller reports a simult-connect race leading to inconsistent fallback
    status:
    
      WARNING: CPU: 3 PID: 33 at net/mptcp/subflow.c:1515 subflow_data_ready+0x40b/0x7c0 net/mptcp/subflow.c:1515
      Modules linked in:
      CPU: 3 UID: 0 PID: 33 Comm: ksoftirqd/3 Not tainted syzkaller #0 PREEMPT(full)
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2~bpo12+1 04/01/2014
      RIP: 0010:subflow_data_ready+0x40b/0x7c0 net/mptcp/subflow.c:1515
      Code: 89 ee e8 78 61 3c f6 40 84 ed 75 21 e8 8e 66 3c f6 44 89 fe bf 07 00 00 00 e8 c1 61 3c f6 41 83 ff 07 74 09 e8 76 66 3c f6 90 <0f> 0b 90 e8 6d 66 3c f6 48 89 df e8 e5 ad ff ff 31 ff 89 c5 89 c6
      RSP: 0018:ffffc900006cf338 EFLAGS: 00010246
      RAX: 0000000000000000 RBX: ffff888031acd100 RCX: ffffffff8b7f2abf
      RDX: ffff88801e6ea440 RSI: ffffffff8b7f2aca RDI: 0000000000000005
      RBP: 0000000000000000 R08: 0000000000000005 R09: 0000000000000007
      R10: 0000000000000004 R11: 0000000000002c10 R12: ffff88802ba69900
      R13: 1ffff920000d9e67 R14: ffff888046f81800 R15: 0000000000000004
      FS:  0000000000000000(0000) GS:ffff8880d69bc000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000560fc0ca1670 CR3: 0000000032c3a000 CR4: 0000000000352ef0
      Call Trace:
       <TASK>
       tcp_data_queue+0x13b0/0x4f90 net/ipv4/tcp_input.c:5197
       tcp_rcv_state_process+0xfdf/0x4ec0 net/ipv4/tcp_input.c:6922
       tcp_v6_do_rcv+0x492/0x1740 net/ipv6/tcp_ipv6.c:1672
       tcp_v6_rcv+0x2976/0x41e0 net/ipv6/tcp_ipv6.c:1918
       ip6_protocol_deliver_rcu+0x188/0x1520 net/ipv6/ip6_input.c:438
       ip6_input_finish+0x1e4/0x4b0 net/ipv6/ip6_input.c:489
       NF_HOOK include/linux/netfilter.h:318 [inline]
       NF_HOOK include/linux/netfilter.h:312 [inline]
       ip6_input+0x105/0x2f0 net/ipv6/ip6_input.c:500
       dst_input include/net/dst.h:471 [inline]
       ip6_rcv_finish net/ipv6/ip6_input.c:79 [inline]
       NF_HOOK include/linux/netfilter.h:318 [inline]
       NF_HOOK include/linux/netfilter.h:312 [inline]
       ipv6_rcv+0x264/0x650 net/ipv6/ip6_input.c:311
       __netif_receive_skb_one_core+0x12d/0x1e0 net/core/dev.c:5979
       __netif_receive_skb+0x1d/0x160 net/core/dev.c:6092
       process_backlog+0x442/0x15e0 net/core/dev.c:6444
       __napi_poll.constprop.0+0xba/0x550 net/core/dev.c:7494
       napi_poll net/core/dev.c:7557 [inline]
       net_rx_action+0xa9f/0xfe0 net/core/dev.c:7684
       handle_softirqs+0x216/0x8e0 kernel/softirq.c:579
       run_ksoftirqd kernel/softirq.c:968 [inline]
       run_ksoftirqd+0x3a/0x60 kernel/softirq.c:960
       smpboot_thread_fn+0x3f7/0xae0 kernel/smpboot.c:160
       kthread+0x3c2/0x780 kernel/kthread.c:463
       ret_from_fork+0x5d7/0x6f0 arch/x86/kernel/process.c:148
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
       </TASK>
    
    The TCP subflow can process the simult-connect syn-ack packet after
    transitioning to TCP_FIN1 state, bypassing the MPTCP fallback check,
    as the sk_state_change() callback is not invoked for * -> FIN_WAIT1
    transitions.
    
    That will move the msk socket to an inconsistent status and the next
    incoming data will hit the reported splat.
    
    Close the race moving the simult-fallback check at the earliest possible
    stage - that is at syn-ack generation time.
    
    About the fixes tags: [2] was supposed to also fix this issue introduced
    by [3]. [1] is required as a dependence: it was not explicitly marked as
    a fix, but it is one and it has already been backported before [3]. In
    other words, this commit should be backported up to [3], including [2]
    and [1] if that's not already there.
    
    Fixes: 23e89e8ee7be ("tcp: Don't drop SYN+ACK for simultaneous connect().") [1]
    Fixes: 4fd19a307016 ("mptcp: fix inconsistent state on fastopen race") [2]
    Fixes: 1e777f39b4d7 ("mptcp: add MSG_FASTOPEN sendmsg flag support") [3]
    Cc: stable@vger.kernel.org
    Reported-by: syzbot+0ff6b771b4f7a5bce83b@syzkaller.appspotmail.com
    Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/586
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20251212-net-mptcp-subflow_data_ready-warn-v1-1-d1f9fd1c36c8@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ adapted mptcp_try_fallback() call ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
net: phy: mediatek: fix nvmem cell reference leak in mt798x_phy_calibration [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Tue Jan 6 20:03:14 2026 -0500

    net: phy: mediatek: fix nvmem cell reference leak in mt798x_phy_calibration
    
    [ Upstream commit 1e5a541420b8c6d87d88eb50b6b978cdeafee1c9 ]
    
    When nvmem_cell_read() fails in mt798x_phy_calibration(), the function
    returns without calling nvmem_cell_put(), leaking the cell reference.
    
    Move nvmem_cell_put() right after nvmem_cell_read() to ensure the cell
    reference is always released regardless of the read result.
    
    Found via static analysis and code review.
    
    Fixes: 98c485eaf509 ("net: phy: add driver for MediaTek SoC built-in GE PHYs")
    Cc: stable@vger.kernel.org
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Reviewed-by: Daniel Golle <daniel@makrotopia.org>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20251211081313.2368460-1-linmq006@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF. [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Wed Jan 7 14:19:50 2026 -0300

    net: Remove RTNL dance for SIOCBRADDIF and SIOCBRDELIF.
    
    commit ed3ba9b6e280e14cc3148c1b226ba453f02fa76c upstream.
    
    SIOCBRDELIF is passed to dev_ioctl() first and later forwarded to
    br_ioctl_call(), which causes unnecessary RTNL dance and the splat
    below [0] under RTNL pressure.
    
    Let's say Thread A is trying to detach a device from a bridge and
    Thread B is trying to remove the bridge.
    
    In dev_ioctl(), Thread A bumps the bridge device's refcnt by
    netdev_hold() and releases RTNL because the following br_ioctl_call()
    also re-acquires RTNL.
    
    In the race window, Thread B could acquire RTNL and try to remove
    the bridge device.  Then, rtnl_unlock() by Thread B will release RTNL
    and wait for netdev_put() by Thread A.
    
    Thread A, however, must hold RTNL after the unlock in dev_ifsioc(),
    which may take long under RTNL pressure, resulting in the splat by
    Thread B.
    
      Thread A (SIOCBRDELIF)           Thread B (SIOCBRDELBR)
      ----------------------           ----------------------
      sock_ioctl                       sock_ioctl
      `- sock_do_ioctl                 `- br_ioctl_call
         `- dev_ioctl                     `- br_ioctl_stub
            |- rtnl_lock                     |
            |- dev_ifsioc                    '
            '  |- dev = __dev_get_by_name(...)
               |- netdev_hold(dev, ...)      .
           /   |- rtnl_unlock  ------.       |
           |   |- br_ioctl_call       `--->  |- rtnl_lock
      Race |   |  `- br_ioctl_stub           |- br_del_bridge
      Window   |     |                       |  |- dev = __dev_get_by_name(...)
           |   |     |  May take long        |  `- br_dev_delete(dev, ...)
           |   |     |  under RTNL pressure  |     `- unregister_netdevice_queue(dev, ...)
           |   |     |               |       `- rtnl_unlock
           \   |     |- rtnl_lock  <-'          `- netdev_run_todo
               |     |- ...                        `- netdev_run_todo
               |     `- rtnl_unlock                   |- __rtnl_unlock
               |                                      |- netdev_wait_allrefs_any
               |- netdev_put(dev, ...)  <----------------'
                                                    Wait refcnt decrement
                                                    and log splat below
    
    To avoid blocking SIOCBRDELBR unnecessarily, let's not call
    dev_ioctl() for SIOCBRADDIF and SIOCBRDELIF.
    
    In the dev_ioctl() path, we do the following:
    
      1. Copy struct ifreq by get_user_ifreq in sock_do_ioctl()
      2. Check CAP_NET_ADMIN in dev_ioctl()
      3. Call dev_load() in dev_ioctl()
      4. Fetch the master dev from ifr.ifr_name in dev_ifsioc()
    
    3. can be done by request_module() in br_ioctl_call(), so we move
    1., 2., and 4. to br_ioctl_stub().
    
    Note that 2. is also checked later in add_del_if(), but it's better
    performed before RTNL.
    
    SIOCBRADDIF and SIOCBRDELIF have been processed in dev_ioctl() since
    the pre-git era, and there seems to be no specific reason to process
    them there.
    
    [0]:
    unregister_netdevice: waiting for wpan3 to become free. Usage count = 2
    ref_tracker: wpan3@ffff8880662d8608 has 1/1 users at
         __netdev_tracker_alloc include/linux/netdevice.h:4282 [inline]
         netdev_hold include/linux/netdevice.h:4311 [inline]
         dev_ifsioc+0xc6a/0x1160 net/core/dev_ioctl.c:624
         dev_ioctl+0x255/0x10c0 net/core/dev_ioctl.c:826
         sock_do_ioctl+0x1ca/0x260 net/socket.c:1213
         sock_ioctl+0x23a/0x6c0 net/socket.c:1318
         vfs_ioctl fs/ioctl.c:51 [inline]
         __do_sys_ioctl fs/ioctl.c:906 [inline]
         __se_sys_ioctl fs/ioctl.c:892 [inline]
         __x64_sys_ioctl+0x1a4/0x210 fs/ioctl.c:892
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xcb/0x250 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 893b19587534 ("net: bridge: fix ioctl locking")
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Reported-by: yan kang <kangyan91@outlook.com>
    Reported-by: yue sun <samsun1006219@gmail.com>
    Closes: https://lore.kernel.org/netdev/SY8P300MB0421225D54EB92762AE8F0F2A1D32@SY8P300MB0421.AUSP300.PROD.OUTLOOK.COM/
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Acked-by: Stanislav Fomichev <sdf@fomichev.me>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://patch.msgid.link/20250316192851.19781-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [cascardo: fixed conflict at dev_ifsioc]
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pwm: stm32: Always program polarity [+ + +]
Author: Sean Nyekjaer <sean@geanix.com>
Date:   Thu Jan 8 13:45:23 2026 +0100

    pwm: stm32: Always program polarity
    
    Commit 7346e7a058a2 ("pwm: stm32: Always do lazy disabling") triggered a
    regression where PWM polarity changes could be ignored.
    
    stm32_pwm_set_polarity() was skipped due to a mismatch between the
    cached pwm->state.polarity and the actual hardware state, leaving the
    hardware polarity unchanged.
    
    Fixes: 7edf7369205b ("pwm: Add driver for STM32 plaftorm")
    Cc: stable@vger.kernel.org # <= 6.12
    Signed-off-by: Sean Nyekjaer <sean@geanix.com>
    Co-developed-by: Uwe Kleine-König <ukleinek@kernel.org>
    Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>

 
Revert "iommu/amd: Skip enabling command/event buffers for kdump" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Fri Jan 9 11:48:34 2026 +0100

    Revert "iommu/amd: Skip enabling command/event buffers for kdump"
    
    This reverts commit 3344716ddee01d7caa35b470d30fd87781c661b1 which is
    commit 9be15fbfc6c5c89c22cf6e209f66ea43ee0e58bb upstream.
    
    This causes problems in older kernel trees as SNP host kdump is not
    supported in them, so drop it from the stable branches.
    
    Reported-by: Ashish Kalra <ashish.kalra@amd.com>
    Link: https://lore.kernel.org/r/dacdff7f-0606-4ed5-b056-2de564404d51@amd.com
    Cc: Vasant Hegde <vasant.hegde@amd.com>
    Cc: Sairaj Kodilkar <sarunkod@amd.com>
    Cc: Joerg Roedel <joerg.roedel@amd.com>
    Cc: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sched/fair: Proportional newidle balance [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Fri Nov 7 17:01:31 2025 +0100

    sched/fair: Proportional newidle balance
    
    commit 33cf66d88306663d16e4759e9d24766b0aaa2e17 upstream.
    
    Add a randomized algorithm that runs newidle balancing proportional to
    its success rate.
    
    This improves schbench significantly:
    
     6.18-rc4:                      2.22 Mrps/s
     6.18-rc4+revert:               2.04 Mrps/s
     6.18-rc4+revert+random:        2.18 Mrps/S
    
    Conversely, per Adam Li this affects SpecJBB slightly, reducing it by 1%:
    
     6.17:                  -6%
     6.17+revert:            0%
     6.17+revert+random:    -1%
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Tested-by: Chris Mason <clm@meta.com>
    Link: https://lkml.kernel.org/r/6825c50d-7fa7-45d8-9b81-c6e7e25738e2@meta.com
    Link: https://patch.msgid.link/20251107161739.770122091@infradead.org
    [ Ajay: Modified to apply on v6.12 ]
    Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched/fair: Small cleanup to sched_balance_newidle() [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Fri Nov 7 17:01:24 2025 +0100

    sched/fair: Small cleanup to sched_balance_newidle()
    
    commit e78e70dbf603c1425f15f32b455ca148c932f6c1 upstream.
    
    Pull out the !sd check to simplify code.
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Tested-by: Chris Mason <clm@meta.com>
    Link: https://patch.msgid.link/20251107161739.525916173@infradead.org
    [ Ajay: Modified to apply on v6.12 ]
    Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

sched/fair: Small cleanup to update_newidle_cost() [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Fri Nov 7 17:01:27 2025 +0100

    sched/fair: Small cleanup to update_newidle_cost()
    
    commit 08d473dd8718e4a4d698b1113a14a40ad64a909b upstream.
    
    Simplify code by adding a few variables.
    
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Tested-by: Chris Mason <clm@meta.com>
    Link: https://patch.msgid.link/20251107161739.655208666@infradead.org
    [ Ajay: Modified to apply on v6.12 ]
    Signed-off-by: Ajay Kaher <ajay.kaher@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
virtio_console: fix order of fields cols and rows [+ + +]
Author: Maximilian Immanuel Brandtner <maxbr@linux.ibm.com>
Date:   Mon Mar 24 15:42:46 2025 +0100

    virtio_console: fix order of fields cols and rows
    
    commit 5326ab737a47278dbd16ed3ee7380b26c7056ddd upstream.
    
    According to section 5.3.6.2 (Multiport Device Operation) of the virtio
    spec(version 1.2) a control buffer with the event VIRTIO_CONSOLE_RESIZE
    is followed by a virtio_console_resize struct containing cols then rows.
    The kernel implements this the wrong way around (rows then cols) resulting
    in the two values being swapped.
    
    Signed-off-by: Maximilian Immanuel Brandtner <maxbr@linux.ibm.com>
    Message-Id: <20250324144300.905535-1-maxbr@linux.ibm.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Cc: Filip Hejsek <filip.hejsek@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: mac80211: Discard Beacon frames to non-broadcast address [+ + +]
Author: Jouni Malinen <jouni.malinen@oss.qualcomm.com>
Date:   Tue Jan 6 18:08:39 2026 -0500

    wifi: mac80211: Discard Beacon frames to non-broadcast address
    
    [ Upstream commit 193d18f60588e95d62e0f82b6a53893e5f2f19f8 ]
    
    Beacon frames are required to be sent to the broadcast address, see IEEE
    Std 802.11-2020, 11.1.3.1 ("The Address 1 field of the Beacon .. frame
    shall be set to the broadcast address"). A unicast Beacon frame might be
    used as a targeted attack to get one of the associated STAs to do
    something (e.g., using CSA to move it to another channel). As such, it
    is better have strict filtering for this on the received side and
    discard all Beacon frames that are sent to an unexpected address.
    
    This is even more important for cases where beacon protection is used.
    The current implementation in mac80211 is correctly discarding unicast
    Beacon frames if the Protected Frame bit in the Frame Control field is
    set to 0. However, if that bit is set to 1, the logic used for checking
    for configured BIGTK(s) does not actually work. If the driver does not
    have logic for dropping unicast Beacon frames with Protected Frame bit
    1, these frames would be accepted in mac80211 processing as valid Beacon
    frames even though they are not protected. This would allow beacon
    protection to be bypassed. While the logic for checking beacon
    protection could be extended to cover this corner case, a more generic
    check for discard all Beacon frames based on A1=unicast address covers
    this without needing additional changes.
    
    Address all these issues by dropping received Beacon frames if they are
    sent to a non-broadcast address.
    
    Cc: stable@vger.kernel.org
    Fixes: af2d14b01c32 ("mac80211: Beacon protection using the new BIGTK (STA)")
    Signed-off-by: Jouni Malinen <jouni.malinen@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251215151134.104501-1-jouni.malinen@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    [ changed RX_DROP to RX_DROP_MONITOR ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>