Skip to content

Rebase edera/mainline onto master @ 05441d697f7f - #86

Closed
edera-rebase-app[bot] wants to merge 10000 commits into
edera/mainlinefrom
rebase/edera-mainline/20261104-8f315d39b605-05441d697f7f
Closed

edera-rebase-app[bot] wants to merge 10000 commits into
edera/mainlinefrom
rebase/edera-mainline/20261104-8f315d39b605-05441d697f7f

Conversation

@edera-rebase-app

Copy link
Copy Markdown

Nightly rebase of edera/mainline (8f315d39b605) onto master (05441d697f7f), driven by Claude. Not pushed automatically because the checker found drift and Claude's report asks for a decision. Run log.

Important

Do not use the merge button: this branch replaces edera/mainline rather than merging into it. Approve the pull request to land it; the land workflow force-pushes edera/mainline to the approved head, pinned to 8f315d39b605, and keeps a backup.

Independent checks

Builds: success (x86_64 vmlinux on the Edera host config and arm64 vmlinux, both with the Edera features built in; per-build results in the run).

Old tip 8f315d39b605
New tip a726ab2b6103
Old upstream base 864c07de0c7d
New upstream base 05441d697f7f
  • New branch is based on the upstream tip.
  • Downstream series is linear.
  • Downstream commit set changed: 110 before, 110 after; 1 commit(s) lost, added, or with different +/- lines.
  • Downstream drift: the tree changed by more than the upstream delta.
Commits whose hunk context moved (own +/- lines identical)
  • ea62ac9f1b0f iommu/xen: Add Xen PV-IOMMU driver → 8eb1463d84bd
  • bd1c0dba57c3 sysctl: wire up PaX softmode setting → 6d236746bd06
  • 849ed61740ea use maximum supported mmap rnd entropy by default → 540fc3e8147c
  • 5b1ff5bbc8cb 9p/xen: carry the 9P session across a restore → 76c211cb8768
Commits lost, added, or whose own +/- lines changed
Before After
f492e4d0cb26 9p/xen: reconnect to the backend on resume 29e1bfa11fd3 9p/xen: reconnect to the backend on resume
Drift (changed lines: upstream delta vs. actual change)
--- upstream-lines
+++ actual-lines
@@ -852322,6 +852322,18 @@
 +	return ret;
 +}
 +
++#ifdef CONFIG_OPENPAX_SOFTMODE
++static const struct ctl_table pax_table[] = {
++	{
++		.procname       = "softmode",
++		.data           = &pax_softmode,
++		.maxlen         = sizeof(int),
++		.mode           = 0600,
++		.proc_handler   = proc_dointvec,
++	},
++};
++#endif
++
 +static const struct ctl_table sysctl_subsys_table[] = {
 +	{
 +		.procname	= "sysctl_writes_strict",
@@ -852369,6 +852381,9 @@
 +int __init sysctl_init_bases(void)
 +{
 +	register_sysctl_init("kernel", sysctl_subsys_table);
++#ifdef CONFIG_OPENPAX_SOFTMODE
++	register_sysctl_init("kernel/pax", pax_table);
++#endif
 +
 +	return 0;
 +}
@@ -852402,6 +852417,18 @@
 -	mutex_unlock(&static_key_mutex);
 -	return ret;
 +	return -ENOSYS;
+-#ifdef CONFIG_OPENPAX_SOFTMODE
+-static const struct ctl_table pax_table[] = {
+-	{
+-		.procname       = "softmode",
+-		.data           = &pax_softmode,
+-		.maxlen         = sizeof(int),
+-		.mode           = 0600,
+-		.proc_handler   = proc_dointvec,
+-	},
+-};
+-#endif
+-
 -static const struct ctl_table sysctl_subsys_table[] = {
 -#ifdef CONFIG_SYSCTL
 -	{
@@ -852451,6 +852478,9 @@
 -int __init sysctl_init_bases(void)
 -{
 -	register_sysctl_init("kernel", sysctl_subsys_table);
+-#ifdef CONFIG_OPENPAX_SOFTMODE
+-	register_sysctl_init("kernel/pax", pax_table);
+-#endif
 -
 -	return 0;
 -}
@@ -885304,64 +885334,15 @@
 +
 +			if (req)
 +				p9_req_put(priv->client, req);
--	if (priv->rings) {
--		for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
--			struct xen_9pfs_dataring *ring = &priv->rings[i];
-+	for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
-+		struct xen_9pfs_dataring *ring = &priv->rings[i];
--			cancel_work_sync(&ring->work);
-+		if (!ring->intf)
-+			break;
-+		if (ring->irq >= 0) {
-+			unbind_from_irqhandler(ring->irq, ring);
-+			ring->irq = -1;
-+		}
+-		cancel_work_sync(&ring->work);
+-
 +		cancel_work_sync(&ring->work);
--			if (!ring->intf)
--				break;
--			if (ring->irq >= 0) {
--				unbind_from_irqhandler(ring->irq, ring);
--				ring->irq = -1;
--			}
--			if (ring->data.in) {
--				for (j = 0; j < (1 << ring->intf->ring_order);
--				     j++) {
--					grant_ref_t ref;
--
--					ref = ring->intf->ref[j];
--					gnttab_end_foreign_access(ref, NULL);
--					ring->intf->ref[j] = INVALID_GRANT_REF;
--				}
--				free_pages_exact(ring->data.in,
--						 1UL << (ring->intf->ring_order +
--							 XEN_PAGE_SHIFT));
--				ring->data.in = NULL;
--				ring->data.out = NULL;
--			}
--			if (ring->ref != INVALID_GRANT_REF) {
--				gnttab_end_foreign_access(ring->ref, NULL);
--				ring->ref = INVALID_GRANT_REF;
-+		if (ring->data.in) {
-+			for (j = 0; j < (1 << ring->intf->ring_order); j++) {
-+				grant_ref_t ref;
-+
-+				ref = ring->intf->ref[j];
-+				gnttab_end_foreign_access(ref, NULL);
-+				ring->intf->ref[j] = INVALID_GRANT_REF;
--			free_page((unsigned long)ring->intf);
--			ring->intf = NULL;
-+			free_pages_exact(ring->data.in,
-+					 1UL << (ring->intf->ring_order +
-+						 XEN_PAGE_SHIFT));
-+			ring->data.in = NULL;
-+			ring->data.out = NULL;
++
+-	if (priv->rings) {
+-		xen_9pfs_front_free_rings(priv);
 -		kfree(priv->rings);
-+		if (ring->ref != INVALID_GRANT_REF) {
-+			gnttab_end_foreign_access(ring->ref, NULL);
-+			ring->ref = INVALID_GRANT_REF;
-+		}
-+		free_page((unsigned long)ring->intf);
-+		ring->intf = NULL;
+-	}
++	xen_9pfs_front_free_rings(priv);
 -	priv->rings = kzalloc_objs(*priv->rings, XEN_9PFS_NUM_RINGS);
 -	if (!priv->rings) {
 -		kfree(priv);

Claude's report

Summary

Rebased edera/mainline (8f315d39b605) onto torvalds master 05441d697f7f (v7.2-rc5-41534-g05441d697f7f) from merge base 864c07de0c7d (v7.2-rc5-26646-g864c07de0c7d). That is 14082 non-merge upstream commits (merge window). All 110 downstream commits were replayed onto rebase-result (new tip a726ab2b6103). Four conflicts were resolved: kernel/sysctl.c, arch/Kconfig, and two in net/9p/trans_xen.c. No commit was dropped, squashed, reordered or reworded, and no build fixes were needed. x86_64 and arm64 vmlinux both build. verify-upstream-rebase.sh reports "commit set changed" and "drift". I expected both, and all of it comes from the resolutions below: base and linearity pass, 110 commits before and 110 after, and only 29e1bfa11fd3 9p/xen: reconnect to the backend on resume has different +/- lines. Two upstream changes reach downstream features without conflicting, so they are listed for a decision.

Needs a decision

  • UNSURE: Upstream 228e21764b38 Drivers: hv: Run VMBus kexec cleanup from syscore shutdown moved hv_kexec_handler() (vmbus_initiate_unload() plus cpuhp_remove_state(hyperv_cpuhp_online), which runs hv_synic_cleanup() on every CPU) out of x86 hv_machine_shutdown() and into a VMBus syscore .shutdown callback. That callback runs whenever kexec_is_in_progress(). In the nested-on-Xen dom0 mode (hyperv_nested_on_xen), ms_hyperv_init_platform() never runs, because the detected hypervisor is Xen. So machine_ops.shutdown = hv_machine_shutdown was never installed, and VMBus was never unloaded on kexec. After this rebase it will be, on a Linux-side kernel_kexec(), through the downstream SynIC host-frame and Xen VIRQ bridge setup.
    • Reading 1: this is a fix the nested mode also gets (a clean VMBus unload before kexec).
    • Reading 2: the path has never run with Xen-side SynIC pages and the VIRQ_HYPERV_VMBUS bridge, and hyperv_remove_xen_vmbus_irq() is not called on this path.
    • Committed: upstream's change as-is, nothing downstream changed. Someone who knows the nested-on-Xen kexec flow should confirm it is safe. If Xen-mediated kexec in dom0 never goes through kernel_kexec(), the callback is not reached and this does not matter.
  • UNSURE: Upstream 241d46901226 9p: reject RERROR/RLERROR with zero errcode closes a hole in p9_check_errors() (net/9p/client.c). The downstream session-transfer control path in net/9p/trans_xen.c, xen_9pfs_front_ctl() (from 9p/xen: carry the 9P session across a restore), parses RLERROR itself and returns -(int)ecode. With ecode == 0 it returns 0, which callers treat as success:
    • Tsession_restore: the reply is treated as accepted.
    • Tsession_save: len underflows, kvmalloc then fails with -ENOMEM and the saved session is discarded.
    • This is not a regression from the rebase. The same code existed before, and the upstream fix does not reach it because it bypasses p9_check_errors().
    • Reading 1: leave it, since only a malicious backend triggers it and the effect is a failed save or restore.
    • Reading 2: mirror upstream and map ecode == 0 to -EPROTO in xen_9pfs_front_ctl().
    • Committed: unchanged. Fixing it would be a downstream behaviour change, which belongs in its own commit, not in a rebase.

Conflicts resolved

  • sysctl: wire up PaX softmode setting, kernel/sysctl.c.
    • Collided with: 443bea2f71c5 sysctl: consolidate CONFIG_SYSCTL into a single block in kernel/sysctl.c (and acd19f2c56f2, which dropped the inner #ifdef CONFIG_SYSCTL). Upstream moved sysctl_subsys_table and sysctl_init_bases() into the first CONFIG_SYSCTL block and added a proc_do_static_key() stub to the #else branch.
    • Kept: upstream's layout. The downstream pax_table (#ifdef CONFIG_OPENPAX_SOFTMODE) goes before sysctl_subsys_table at its new location, and the register_sysctl_init("kernel/pax", pax_table) call goes into the moved sysctl_init_bases(). The added lines are identical to the original; only their position changed.
  • use maximum supported mmap rnd entropy by default, arch/Kconfig.
    • Collided with: 8cdae75cebe0 arch/Kconfig: fix dead conditions by removing dead options, which deleted ARCH_MMAP_RND_BITS_DEFAULT and ARCH_MMAP_RND_COMPAT_BITS_DEFAULT and their always-false default ... if ... lines.
    • Kept: upstream's removal, plus the downstream change itself (default ARCH_MMAP_RND_BITS_MIN → default ARCH_MMAP_RND_BITS_MAX, and the same for COMPAT). The removed lines never applied (an int used as a condition is always false), so the resolved value is the same as before.
    • Results: x86_64 resolves to 32 (the max). arm64 resolves to 28, from the arch-specific default in arch/arm64/Kconfig (ac9de62b1902, already in the old base). That is unchanged from the old tip.
  • 9p/xen: reconnect to the backend on resume, net/9p/trans_xen.c.
    • Collided with:
      • b3d07d64832c 9p/xen: Use array for data rings: rings became a fixed rings[XEN_9PFS_NUM_RINGS] member, and the kzalloc_objs/kfree(priv->rings) calls were removed.
      • 7b6f2e3c29fb 9p/xen: drain response work after unbinding IRQ (Fixes:, Cc: stable): cancel_work_sync() now runs after unbind_from_irqhandler().
    • Kept: upstream's fixed array, so no allocation and no if (priv->rings) guard. xen_9pfs_front_free() now calls xen_9pfs_front_free_rings() unconditionally.
    • Kept: the stable fix's ordering (unbind the IRQ, then cancel_work_sync()) inside the downstream xen_9pfs_front_free_rings(). That function is also what the resume/disconnect path uses, so that path gets the fix too.
    • Added the downstream fields ring_order, rings_sem and connected, and the init_rwsem()/ring_order setup in xen_9pfs_front_init().
    • The reconnect logic does not depend on rings being a pointer: it re-allocates the per-ring resources into the same array. This is the one commit whose own +/- lines changed, because its original diff contained the kzalloc_objs/kfree lines and the old cancel_work_sync() position.
  • 9p/xen: carry the 9P session across a restore, net/9p/trans_xen.c.
    • Collided with:
      • 9b4cf60c6b73 9p/xen: validate the response size from the backend (Fixes:, Cc: stable).
      • b3d07d64832c again.
    • Kept: upstream's h.size < sizeof(h) || h.size > queued check first in p9_xen_response(), with the downstream P9_NOTAG control-reply branch after it. A malformed control reply now hits the check before the code does cons += h.size. In that case the control waiter gets -ETIMEDOUT through its existing wait_for_completion_timeout().
    • For the array conversion: dropped the commit's kzalloc_objs/kfree(priv->rings) lines, and kept its INIT_LIST_HEAD(&priv->session), init_completion(&priv->ctl_done) and xen_9pfs_front_session_free() additions.
    • The commit's other priv->rings uses (ring == priv->rings, XEN_9PFS_RING_SIZE(priv->rings)) work unchanged with the array, which decays to &priv->rings[0].
    • The checker lists this commit as context-moved only.

Dropped downstream commits

None.

Build fixes

None.

Upstream commits that meet the series

Fixes (Fixes:, Cc: stable, or a fix by description) and my reading of the final tree:

  • 7b6f2e3c29fb 9p/xen: drain response work after unbinding IRQ: intact. xen_9pfs_front_free_rings() unbinds the IRQ, then runs cancel_work_sync(), then frees. The downstream disconnect path (schedule_work + flush_work under rings_sem, then free_rings) goes through the same function.
  • 9b4cf60c6b73 9p/xen: validate the response size from the backend: intact, and it runs before the downstream control-reply branch (see conflicts).
  • 4d183e6f1532 9p/xen: fix refcount leak in p9_xen_response() on wrong tag: intact (p9_req_put() in the wrong-tag branch).
  • 241d46901226 9p: reject RERROR/RLERROR with zero errcode: intact in p9_check_errors(). The downstream additions to net/9p/client.c are pure additions. The downstream Xen control path has its own copy of the issue (see Needs a decision).
  • 2acd800de882 9p: fix caches_show() out-of-bounds write: intact. Downstream only adds the separate features_show attribute.
  • 7fb9bd365905 9p: fix privport option setting wrong RDMA field: intact. Downstream adds only Opt_tag.
  • 0f4a9e682f7f xattr: always invoke cap_convert_nscap() for security.capability writes: intact. Downstream adds only pax_getxattr(), which reads a user. xattr.
  • 1c8f6308e557 iommu/dma: Catch scatterlist length overflows, fdd81f15fc43 iommu/dma: Clean up redundant MSI cookie check: intact. Downstream only adds the xen_iommu_manages_iova() check in iova_reserve_iommu_regions().
  • 228e21764b38 Drivers: hv: Run VMBus kexec cleanup from syscore shutdown: intact. It reaches the nested-on-Xen mode semantically (see Needs a decision).
  • dd57772e36f7 Drivers: hv: vmbus: Check ACPI companion before use: intact. The downstream hunks in vmbus_bus_init()/vmbus_exit() are elsewhere.
  • 278b2abf660a init/bootconfig: pass init arguments in documented order, 51e766bcd35e init/main: fix false-positive kernel panic on environment variable overwrite, b82ed0e3a1da init/main: fix off-by-one in argv_init cleanup: intact. Downstream only adds pax_softmode and its __setup.
  • 68cb098eadda mm/vma: avoid broken uffd merge on mremap, 7135a05838e8 mm/vma: avoid spurious write locks when mm->mm_lock_seq overflows, dc0b17144d62 mm/vma: don't remove VMA from rmap if pgoff unchanged, 5728d3523f12 memblock: reject non-page-aligned reserve_mem regions, 8bb0279930cc 9p: skip intermediate directory entry name copy in p9dirent_read(): none of them touch the downstream lines. The downstream changes in mm/ are limited to map_deny_write_exec(), brk(), arch_randomize_brk(), create_init_stack_vma() and one include, and upstream did not change those functions' contracts.
  • 6eecb67b69af xen/grant-table: stop setting PG_private on pages for grant mapping: downstream gnttab_alloc_pages_node() goes through gnttab_pages_set_private()/gnttab_pages_clear_private(), so it picks up the new behaviour. A tree-wide grep finds no PagePrivate/SetPagePrivate/ClearPagePrivate use in drivers/xen or arch/x86/xen.

Semantic checks I ruled out:

  • 2690d4156b51 iommu/hyperv: Add para-virtualized IOMMU support for Hyper-V guest: it hooks x86_init.iommu.iommu_init only from hyperv_init(). The nested-on-Xen path uses its own init (arch/x86/hyperv/hv_init.c, called from xen_hyperv_init()), so it cannot activate next to the Xen PV-IOMMU.
  • 118bdac10546 Drivers: hv: Add logical device ID registry for vPCI devices: pci-hyperv now registers each bus in an rhashtable that hv_common_init() sets up. The nested-on-Xen init calls hv_common_init(), so the table is there.
  • 1ae140d0f272 iommu: Make iommu-dma helpers private: xen-iommu.c already includes iommu-priv.h, and the build passes. dma-iommu.c now includes iommu-priv.h twice (once from upstream, once from downstream iommu/dma: Don't reserve PCI windows under a paravirtual IOMMU). That is harmless because the header is guarded, and I left it to keep the downstream commit unchanged.
  • 8cdae75cebe0 arch/Kconfig: fix dead conditions by removing dead options: no reference to the removed symbols remains in the tree or in kernel-build.sh.

Other upstream commits that touch shared files (refactors or features, no fix tag; no interaction found beyond the above):
9eb9b583ea35 9p: remove duplicated assignment in v9fs_fill_super(), 33625427a382 net/9p: add vsock transport (a new p9_trans_module; the downstream share_client field defaults to false for it), 5852cdf0006f net/9p: fix typos in comments, 14a5c975b138, 38564710f443, 6a9ef02c60bf, 72a993449cb0, 44debd840ec9, c911e7ebebf5, 94c86564538e, 88d77002e1a1, 9201d0f5b9d5, 7fdbc26b69c0, b7b4d8f37a4f, 4852f3421456, 9cae38dc11da, 86a779c53204, f85eb0656c40, e59c9a971a9f, 4b019e056f6c, 35e340a47888, 47e725702b0b, 69d38c792c53, 2e83e2ce34ff, c2d4ccfbba3f (mm/vma and arch/Kconfig), 56fb075b77f8 mshv: Redesign hypervisor memory deposit logic, d0ec95a8a4e7 hv_netvsc: Advertise the SR-IOV capability for CoCo VMs, 28d5df7b7274, 537ec2b15fdd, 681f3b68f435 (KVM docs and Kconfig), 0bf031ba8c49, 42eed9bb9ca4 (iommu Kconfig/Makefile), 641a9b9cc697, 95d2fec40c48 (dma-mapping), 084100a1b579, aabe6e1b36ce, 677f83795fdf, 958c01049e0a, 10823ced2f18, 8ebd2eb87f50 (init/bootconfig/kho), 443bea2f71c5, acd19f2c56f2, 242bac52294e, d08ab285b096, 2bfbb09b505c (sysctl; pax_table is a scalar proc_dointvec entry, so the vector-handling changes do not affect it), bbe5d3b3d402, f000a06da2a5, abaa0835b4f3, 264d8fd2794f, 799203afd298, e3e7a85730a4 (kernel-parameters.txt).

Builds

  • x86_64: pass. Edera host config with CONFIG_XEN_IOMMU, CONFIG_HYPERV, CONFIG_HYPERV_PVIOMMU, CONFIG_NET_9P_XEN and CONFIG_OPENPAX_SOFTMODE all =y; net/9p/trans_xen.o and kernel/sysctl.o were built.
  • arm64: pass (defconfig plus the downstream features; net/9p/trans_xen.o was built).

Linus Torvalds and others added 30 commits October 30, 2026 09:44
…l/git/chenhuacai/linux-loongson

Pull LoongArch updates from Huacai Chen:

 - Add LoongArch-specific ACPI initialization

 - Set NX compat flag in PE/COFF efi header

 - Use pa_to_nid()/nid_to_addrbase() rather than hard-code

 - Detect and expose LAMCAS/DIV32 feature existence

 - Fix and improve perf hardware breakpoints

 - Fix and improve BPF JIT (trampoline and 32-bit operations)

 - Add arch_crash_save_vmcoreinfo() support

 - Some bug fixes and other small changes

* tag 'loongarch-7.4' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson: (24 commits)
  soc: loongson: loongson2_guts: Use of_root instead of own reference
  soc: loongson: loongson2_pm: Fix build warnings for 32BIT
  LoongArch: dts: loongson-2k0500: Drop unsupported bus_id in DWMAC
  LoongArch: BPF: Optimize 32-bit operations using native instructions
  LoongArch: BPF: Clean up and decouple is32 parameter from move_imm()
  LoongArch: BPF: Fix stack arguments for indirect trampolines
  LoongArch: Add arch_crash_save_vmcoreinfo() support
  LoongArch: Fix one-shot limitation for perf hardware breakpoints
  LoongArch: Fix perf hardware breakpoint failure via installation
  LoongArch: Only send SIGTRAP signal if necessary in do_watch()
  LoongArch: Fix architectural naming typo for CSR_FWPS_SKIP
  LoongArch: Fix bitmask corruption in update_bp_registers()
  LoongArch: Remove redundant call in update_bp_registers()
  LoongArch: Remove arch-specific __smp_mb__{before,after}_atomic()
  LoongArch: Detect and expose DIV32 feature existence
  LoongArch: Detect and expose LAMCAS feature existence
  LoongArch: Use pa_to_nid()/nid_to_addrbase() rather than hard-code
  LoongArch: Don't init & online empty nodes
  LoongArch: Call cpu_final_simd() with pure_initcall()
  LoongArch: Use assign_bit() API where applicable
  ...
…git/arm64/linux

Pull arm64 fixes from Catalin Marinas:
 "Three fixes that turned up during the merging window: shadow stack not
  freed during a failed fork or it is unmapped from parent when a worker
  thread exits (same commit covers both); PTE_CONT set on PROT_NONE
  entries but subsequently ignored by the unfolding code since
  pte_valid() is false (pte_present() is true); an MPAM lock not
  released on the error path.

  Summary:

   - Release the GCS on a failed fork.

     copy_thread() can allocate a GCS for CLONE_VM threads but a later
     copy_process() failure left the VMA in the parent's mm. Implement
     exit_thread() to free it and stop kernel threads and user workers
     inheriting the parent's GCS base/size. Add a kselftest for the
     clone3() failure case

   - Do not set PTE_CONT on invalid PTEs in contpte_set_ptes().

     Batched set_ptes() of present-invalid entries (e.g. PROT_NONE)
     created contpte groups that the single-PTE helpers did not unfold,
     corrupting a neighbouring guard marker via
     test_and_clear_young_ptes()

   - Release the MPAM mon_sel lock on the mpam_save_mbwu_state() error
     paths"

* tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux:
  selftests/arm64: GCS must not leak on a failed clone3
  arm64/gcs: release GCS on failed fork
  arm64/mm: restrict transparent contpte mappings to valid PTEs
  arm_mpam: Release the mon_sel lock on mpam_save_mbwu_state() errors
Pull more KVM updates from Paolo Bonzini:
 "ARM64:

   - Fix a couple of embarrassing merge mistakes in kvmarm-7.4

   - Cleanup the HCR_EL2 bit fields to exclusively use the generated
     definitions, fixings a nasty regression introduced in 6.16, where
     barriers were not upgraded from NSH to ISH anymore

   - Fix publication of state when a vcpu is forced out of the guest

   - Let vcpu pausing nest correctly

   - Sanitise ID_AA64MMFR3_EL1.S1P[IO]E to follow the rules of the
     architecture

   - Don't warn on SMCCC filter reserved range allocation failure

   - Prevent GICv5 and TLBI hypercalls to be used from the host when
     pKVM is active

   - Enforce that only GICv3 guests are supported for pKVM

   - Don't try to access GICv5 EL2 sysregs from EL1

   - Compute architectrally correct values for ID_AA64MMFR3_EL1.S1P[IO]E
     by checking the feature dependencies

   - Require matching VGIC and ITS model

   - Cleanup TRACE_REMOTE dependencies

   - Fix random comments

  ARM64 selftests:

   - selftests: Skip unwritable ID fields in the failed-run test

   - Move pkvm_selftests() after all CPUs have initialized EL2

  RISC-V:

   - Allow Zicclsm, Ziccamoa, Ziccif, Za64rs for KVM guest

   - Implement KVM_PRE_FAULT_MEMORY ioctl()

   - Replace imsic switch-case macros with range checks

  RISC-V fixes:

   - Avoid redundant interrupt check for pending timers

   - Reject vCPU creation after AIA initialization

   - Fix build with vector support disabled

   - Fix IPI delivery for out-of-order vcpu_id

   - Use a raw lock for IMSIC wakeup state

   - Reject vCPU creation after AIA initialization

  RISC-V selftests:

   - Lazy V-extension enablement for KVM selftests

   - Show sepc/scause/stval CSRs in KVM selftests vcpu dump"

* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (42 commits)
  KVM: selftests: Reject GICv3 ITS with a GICv5 VGIC
  KVM: arm64: vgic: Require matching VGIC and ITS models
  KVM: arm64: gic-v5: Drop unused addr variable
  KVM: arm64: Sanitise ID_AA64MMFR3_EL1.S1P[IO]E
  KVM: arm64: selftests: Skip unwritable ID fields in the failed-run test
  tracing/remotes: Fix TRACE_REMOTE build when TRACING=n
  KVM: arm64: Move pkvm_selftests() after all CPUs have initialized EL2
  KVM: arm64: Get rid of compatibility HCR_EL2 aliases
  KVM: arm64: Convert HCR_xyz to HCR_EL2_xyz
  KVM: arm64: Set HCR_EL2.BSU to Inner Shareable for guests
  KVM: arm64: Fix stale VGICv3 comments in the nVHE world switch
  KVM: arm64: vgic: Do not access the GICv5 CPU interface from EL1
  KVM: arm64: Validate the host-provided vgic model in pKVM
  KVM: arm64: Reject the stage-2 flush hypercalls under pKVM
  KVM: arm64: Return on kvm_gmem_get_pfn() failure in gmem_abort()
  KVM: riscv: selftest: add Zicclsm, Ziccamoa, Ziccif, Za64rs
  RISC-V: KVM: Allow Zicclsm, Ziccamoa, Ziccif, Za64rs in guest
  MAINTAINERS: name the kvm-riscv/linux riscv_kvm_next branch
  RISC-V: KVM: Don't write MMIO load result to x0
  RISC-V: KVM: Use a raw lock for IMSIC wakeup state
  ...
Merge a fix for Intel thermal tests for 7.4-rc1:

 - Allow cross builds of the Intel thermal tests (Sasha Levin)

* thermal-intel:
  selftests/thermal: allow cross builds of the Intel tests
ds1685_rtc_poweroff() always sets WIE. The wake-up alarm then compares
the time-of-day and date alarm registers, which hold whatever was last
written to them, and a match powers the machine straight back on.

Set WIE only when AIE is set in Control B, and clear it otherwise.

Fixes: aaaf5fb ("rtc: add driver for DS1685 family of real time clocks")
Signed-off-by: Imre Kaloz <kaloz@kernel.org>
Acked-by: Joshua Kinard <linux@kumba.dev>
Link: https://patch.msgid.link/20261013120208.11268-2-kaloz@kernel.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Power-off handlers run from an atomic notifier chain and must not
sleep. Use mdelay() for the delay before setting PAB.

Fixes: aaaf5fb ("rtc: add driver for DS1685 family of real time clocks")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://lore.kernel.org/all/sashiko-outbox-169477@kernel.org/
Signed-off-by: Imre Kaloz <kaloz@kernel.org>
Acked-by: Joshua Kinard <linux@kumba.dev>
Link: https://patch.msgid.link/20261013120208.11268-3-kaloz@kernel.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
A kickstart or wake-up flag set while its interrupt is enabled (KF with
KSE, WF with WIE) clears PAB, and the system stays powered. Clear the
event flags together with setting PAB, and repeat the write until power
is gone.

Signed-off-by: Imre Kaloz <kaloz@kernel.org>
Acked-by: Joshua Kinard <linux@kumba.dev>
Link: https://patch.msgid.link/20261013120208.11268-4-kaloz@kernel.org
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Since commit 0c3772a ("x86/ftrace: Implement DYNAMIC_FTRACE_WITH_JMP")
ftrace_call_replace() emits a jmp instead of a call when bit 0 of the
target is set, the mark of a direct trampoline that is entered by a jmp.
ftrace_update_ftrace_func() and arch_ftrace_update_trampoline() use it
too, for the call of the ftrace callback in ftrace_caller, ftrace_regs_caller
and the ftrace trampolines, but a callback is a C function and can start
at an odd address. It does with gcc13 and CONFIG_CC_OPTIMIZE_FOR_SIZE=y:
gcc13 has no -fmin-function-alignment, so CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT
is not set, and the -falign-functions=16 used in its place does not apply
to functions optimized for size. Here ftrace_ops_list_func() starts at:

  ffffffff810e0147 T ftrace_ops_list_func

ftrace_regs_call then becomes a jmp to the byte before it:

  ftrace_regs_call ffffffff810374f3: e9 4e 8c 0a 00

That byte is the last one of the preceding function's tail jump, and with
the first two of ftrace_ops_list_func() it decodes as an inc DWORD PTR
[rcx+0x57], which swallows the push %r15 of the prologue. Entered without
a return address and one push short, the list function returns through
the pt_regs that ftrace_regs_caller saved, here to the saved R14:

  BUG: unable to handle page fault for address: ffff888116c29f40
  #PF: supervisor instruction fetch in kernel mode
  RIP: 0010:0xffff888116c29f40
  R13: 0000000000000000 R14: ffff888116c29f40 R15: 0000000000000000
  Call Trace:
   ? bpf_trampoline_6442499918+0x1/0x149
   ? bpf_lsm_file_open+0x5/0x8
   ? bpf_lsm_file_open+0x5/0x8
   ? security_file_open+0x19/0x46
   ? do_dentry_open+0x16c/0x32a

The list function is installed whenever two ftrace_ops are registered,
and a function that two of them trace calls it. A kprobe next to a BPF
trampoline is one such case, and with the single ftrace_ops of the BPF
trampolines every update_ftrace_direct_mod() is another, as it registers
a stub ops for the sites it modifies. Here, detaching one of several BPF
LSM programs from a busy hook crashed the tasks that ran the hook during
the update.

Bit 0 is free only in the direct trampolines that a dyn_ftrace record can
point to, but bit 63 is set in every kernel text address on x86_64. Thus,
mark jmp mode by clearing bit 63 instead, so that ftrace_is_jmp() is false
for any callback, whatever its alignment, and ftrace_regs_caller sets the
bit again where it cleared bit 0 before. A marked address is not canonical,
so a return or indirect branch to one that missed ftrace_jmp_get() faults
instead of running from a byte before its target.

Fixes: 0c3772a ("x86/ftrace: Implement DYNAMIC_FTRACE_WITH_JMP")
Suggested-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Reviewed-by: Jiri Olsa <jolsa@kernel.org>
Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
Link: https://patch.msgid.link/20261028202345.1215859-1-daniel@iogearbox.net
A kprobe next to a BPF trampoline makes the ftrace site of the function
call ftrace_regs_caller and from there the list of ftrace callbacks,
the path that crashed while ftrace_ops_list_func() started at an odd
address. No test covers a function traced by both. Thus, attach an
fentry program and a kprobe to bpf_fentry_test1(), then a second fentry
program, which modifies the trampoline of the shared site, then an fexit
program, after which ftrace_regs_caller enters the trampoline by a jmp,
then detach the kprobe, after which the site jumps to it directly. After
each step, check that every attached program ran once for the call and
saw its argument, and the fexit program its return value.

Without the previous fix the test crashes the kernel, but only where
ftrace_ops_list_func() is at an odd address (in my test with gcc +
CONFIG_CC_OPTIMIZE_FOR_SIZE=y). With the fix it passes:

  # LDLIBS=-static PKG_CONFIG='pkg-config --static' ./vmtest.sh -- ./test_progs -t fentry_kprobe_shared
  [...]
  #147     fentry_kprobe_shared:OK
  Summary: 1/0 PASSED, 0 SKIPPED, 0/0 FAILED

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: https://patch.msgid.link/20261028202345.1215859-2-daniel@iogearbox.net
With CONFIG_CFI=y, every jited line info entry after a function's
first is cfi_get_offset() bytes too high on x86-64, riscv64 and arm64,
so tools that use it show the wrong source line.

The JITs count the insn_to_jit_off[] offsets from the start of the
image. Since the CFI commits below, prog->bpf_func starts
cfi_get_offset() bytes into the image, and bpf_prog_fill_jited_linfo()
adds the offsets to prog->bpf_func. s390 corrects its offsets before
the call, the other three JITs do not.

Subtract cfi_get_offset() once in bpf_prog_fill_jited_linfo() and drop
the s390 correction. jited_linfo[0] stays prog->bpf_func, the
function's ksym address. Without CONFIG_CFI, cfi_get_offset() is 0 and
nothing changes.

Fixes: 4f9087f ("x86/cfi,bpf: Fix BPF JIT call")
Fixes: e63985e ("bpf, riscv64/cfi: Support kCFI + BPF on riscv64")
Fixes: 710618c ("arm64/cfi,bpf: Support kCFI + BPF on arm64")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Reported-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Jose Fernandez (Anthropic) <jose.fernandez@linux.dev>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://patch.msgid.link/20261030-b4-arm64-bpf-linfo-cfi-v2-1-4eac83435d4b@linux.dev
Closes: https://lore.kernel.org/all/20260904014748.C04AA1F000E9@smtp.kernel.org/
Closes: https://lore.kernel.org/all/DLNXZ2WK7TPD.2RZBUNRS4FA4L@gmail.com/
The element count of a large non-preallocated hash map is a
percpu_counter, whose slow path takes fbc->lock with
raw_spin_lock_irqsave(). That is not safe against BPF programs that run
while the lock is held or contended: NMI programs and, as
queued_spin_lock_slowpath() calls trace_contention_end() with the lock
already held, programs attached to the contention_end tracepoint. If such
a program updates the same map it spins on the lock its own CPU holds:

  WARNING: possible recursive locking detected
  cend/250 is trying to acquire lock:
  (key#5){....}-{2:2}, at: _raw_spin_lock_irqsave+0x18/0x30
  but task is already holding lock:
  (key#5){....}-{2:2}, at: _raw_spin_lock_irqsave+0x18/0x30
    percpu_counter_add_batch+0xd8/0x160
    alloc_htab_elem+0x408/0x480
    htab_map_update_elem+0x1e8/0x6a0
    bpf_prog_7a29a1ae68aedf07_cend+0x14c/0x1f8
    __bpf_trace_contention_end+0x14/0x20
    queued_spin_lock_slowpath+0x2e8/0x468
    percpu_counter_add_batch+0xd8/0x160
    alloc_htab_elem+0x408/0x480
    htab_map_update_elem+0x1e8/0x6a0

is_map_full() is affected too, as __percpu_counter_compare() falls back
to percpu_counter_sum(), which takes the same lock.

map.elem_count already is a lockless per-cpu count of the same elements.
Make htab->count follow it in steps of PERCPU_COUNTER_BATCH and let
is_map_full() sum elem_count once count is within nr_cpu_ids * batch of
max_entries. Each cpu's elem_count is ahead of count by less than the
batch, so that is exact, in NMI as well.

Fixes: 86fe28f ("bpf: Optimize element count in non-preallocated hash map.")
Suggested-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Puranjay Mohan <puranjay@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://patch.msgid.link/20261021185117.650403-1-puranjay@kernel.org
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(rv3029_hwmon_show_temp and rv3029_hwmon_show_update_interval) to
conform to the recommended sysfs attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-1-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in the sysfs show callback
(timestamp_show) to conform to the recommended sysfs attribute
formatting guidelines in Documentation/filesystems/sysfs.rst.

Reviewed-by: Bruno Thomsen <bruno.thomsen@gmail.com>
Link: https://patch.msgid.link/20261029132339.925021-2-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(comp_preload_show and comp_delete_show) to conform to the
recommended sysfs attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-3-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in the sysfs show callback
(bq32k_sysfs_show_tricklecharge_bypass) to conform to the recommended
sysfs attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-4-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(x1205_sysfs_show_atrim and x1205_sysfs_show_dtrim) to conform to the
recommended sysfs attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-5-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in the sysfs show callback
(rx8025_sysfs_show_clock_adjust) to conform to the recommended sysfs
attribute formatting guidelines in Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-7-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(ds1343_show_glitchfilter and ds1343_show_tricklecharger) to conform
to the recommended sysfs attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-8-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(ds1685_rtc_sysfs_battery_show, ds1685_rtc_sysfs_auxbatt_show and
ds1685_rtc_sysfs_serial_show) to conform to the recommended sysfs
attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Acked-by: Joshua Kinard <linux@kumba.dev>
Link: https://patch.msgid.link/20261029132339.925021-9-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(timestamp0_show, isl1208_sysfs_show_atrim, isl1208_sysfs_show_dtrim
and isl1208_sysfs_show_usr) to conform to the recommended sysfs
attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-10-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in the sysfs show callback
(ds3231_hwmon_show_temp) to conform to the recommended sysfs attribute
formatting guidelines in Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-11-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Use sysfs_emit() instead of sprintf() in sysfs show callbacks
(rs5c372_sysfs_show_trim and rs5c372_sysfs_show_osc) to conform to the
recommended sysfs attribute formatting guidelines in
Documentation/filesystems/sysfs.rst.

Link: https://patch.msgid.link/20261029132339.925021-12-alexandre.belloni@bootlin.com
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
…el/git/rafael/linux-pm

Pull ACPI support fixes from Rafael Wysocki:
 "These address assorted issues in ACPI support code and work around
  concurrency-related issues in AML on some platforms:

   - Separate handler locking from sysfs lifetime in the ACPI platform
     profile driver to avoid possible deadlocks due to sysfs accesses
     during driver removal (Daniel Lezcano)

   - Introduce additional locking around the evaluation of selected ACPI
     control methods in a few places to work around issues related to
     concurrency in AML on some platforms (Ali Ahmet Memiş)

   - Address two issues reported by Sashiko in the ACPI table data sysfs
     interface (Jamie Nguyen)

   - Initialize parser_state.aml_end in acpi_install_method() properly
     to avoid out-of-bounds accesses during control method installation
     (Ivan Hu)"

* tag 'acpi-7.4-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  ACPI: sysfs: Finish sysfs init when creating a table file fails
  ACPI: sysfs: Map only the requested range in acpi_data_show()
  ACPICA: Initialize parser_state.aml_end in acpi_install_method()
  ACPI: platform_profile: Separate handler locking from sysfs lifetime
  platform/x86: ideapad-laptop: Evaluate ACPI methods exclusively
  thermal: intel: int340x: Evaluate _TMP exclusively
  ACPI: battery: Evaluate battery methods exclusively
  ACPI: utils: Add exclusive AML evaluation helpers
…/git/rafael/linux-pm

Pull power management fixes from Rafael Wysocki:
 "These address assorted issues in the power management code and update
  documentation:

   - Fix potential out-of-bounds access in deferred reset in the cpufreq
     statistics code (Zhongqiu Han)

   - Cancel HWP notify work in the intel_pstate driver cleanup to
     prevent possible use-after-free from occurring (Tristan Madani)

   - Adjust state names and descriptions for ACPI _LPI idle states in
     the intel_idle driver to make them follow the driver's idle state
     naming convention (Rafael Wysocki)

   - Document the new pm_runtime_use_autosuspend() undo mechanism that
     triggers automatically on driver exit (Joshua Crofts)

   - Do not call suspend_ops->begin()/end() for suspend-to-idle to avoid
     driver confusion (Ovidiu Panait)

   - Make the energy model management code allocate the cpumask for
     non-CPU perf domains to prevent out-of-bounds reads from occurring
     in the EM netlink interface (Karl Mehltretter)"

* tag 'pm-7.4-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  PM: runtime: clarify pm_runtime_use_autosuspend() undo mechanism
  cpufreq: stats: Fix potential out-of-bounds access in deferred reset
  PM: suspend: Do not call suspend_ops->begin()/end() for s2idle
  intel_idle: Adjust state names and descriptions for _LPI states
  PM: EM: allocate the cpumask for every perf domain
  cpufreq: intel_pstate: cancel HWP notify work in driver cleanup
…ernel/git/rafael/linux-pm

Pull thermal control fixes from Rafael Wysocki:
 "These fix three issues related to thermal control:

   - Fix CPU mask truncation in power limit trace event used by the
     power allocator thermal governor (Hungyu Lin)

   - Fix code indentation in create_s32_tzp_attr() and rearrange it to
     use early return when applicable (Thorsten Blum)

   - Allow cross builds of the Intel thermal tests (Sasha Levin)"

* tag 'thermal-7.4-rc1-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  thermal: sysfs: Fix indentation in create_s32_tzp_attr()
  thermal: Fix CPU mask truncation in power limit trace event
  selftests/thermal: allow cross builds of the Intel tests
…erity/linux

Pull fsverity fixes from Eric Biggers:
 "Fixes for several bugs found by LLMs:

   - Fix bypass of IPE's fsverity support, and a use-after-free in
     certain cases, when FS_IOC_ENABLE_VERITY fails when almost done

   - Fix FS_IOC_MEASURE_VERITY and FS_IOC_READ_VERITY_METADATA to no
     longer bypass Landlock and AppArmor's read permission checks

   - Be robust against the filesystem returning different values for a
     file's verity descriptor length in two successive queries"

* tag 'fsverity-for-linus' of git://git.kernel.org/pub/scm/fs/fsverity/linux:
  fsverity: Set S_VERITY only after rollback is no longer possible
  fsverity: Tell LSMs about signature only after verity is enabled
  fsverity: Be more careful with return value of ->get_verity_descriptor()
  fsverity: Explicitly require FMODE_READ to retrieve hashes
Pull smb client fixes from Paulo Alcantara:

 - Validate the offsets and lengths a server puts in its responses
   before using them, so that a malicious or broken server can no longer
   make the client read past the received data:
     - POSIX lock data (which leaked kernel bytes through F_GETLK)
     - NT transaction responses and SMB1 EA lists (both wrapping their
       pointer checks on 32-bit)
     - short SESSION_SETUP responses (which sent stale buffer content
       back to the server in the NTLMv2 AUTHENTICATE message)
     - SMB2 READ data areas
     - empty truncated fiemap responses

 - Fix a heap overflow in SMB2_tcon() with UNC paths longer than
   MAX_SHARENAME_LENGTH

 - Fix a slab-out-of-bounds write when chmod() rewrites a security
   descriptor that needs more room than was reserved

 - Fix a use-after-free of the server info between the cifsd thread and
   the release of the last session reference (reported by syzbot)

 - Fix a use-after-free in the demultiplex thread when a receive error
   reconnects and frees the read request still being processed

 - Fix a double teardown of a tcon that the cached directory laundromat
   took a reference on while it was being freed

 - Fix a NULL pointer dereference when /proc/fs/cifs/DebugData is read
   while the module is still initializing

* tag 'cifs-fixes-7.4-rc1' of https://git.manguebit.org/linux:
  smb: client: validate SMB1 EA list bounds before parsing
  smb: client: stop processing a read response after a receive error
  smb: client: don't resurrect an exiting tcon from cached dir workers
  smb: client: fix early procfs exposure race
  smb: client: fix slab-out-of-bounds write in id_mode_to_cifs_acl()
  smb: client: hold server info until cifsd exits
  smb: client: fix fiemap wild read on empty truncated response
  smb: client: validate the data area in SMB2_read()
  smb: client: reject short SESSION_SETUP responses
  smb: client: fix buffer overflow in SMB2_tcon()
  smb: client: validate NT transaction response layout and offsets
  smb: client: bound POSIX lock data area by response length
…/kernel

Pull drm fixes from Dave Airlie:
 "The final set of merge window fixes, from AMD mostly. with one set of
  panthor mmu fixes.

  amdgpu:
   - UALink fixes
   - Runtime PM fixes
   - GPUVM fixes
   - Mac fixes
   - HDMI fixes
   - DP MST fix
   - Userptr fix
   - SMU fixes
   - DSC fix
   - VCE/UVD sched teardown fix
   - Display runpm reference fix
   - Display TD-LUT fix
   - SMU 13.x fixes
   - SMU 14.x fixes
   - Gang submit fix
   - Passive DVI sink fix
   - USB4 tunnel fix
   - Freesync fix

  amdkfd:
   - SVM fixes
   - Fix doorbell allocation race
   - GC 12.1 fix
   - GPU reset fix
   - Buffer accounting fixes
   - Bounds checking fixes
   - Hotplug fixes
   - SVM fixes
   - CRIU fixes
   - GFX12 fix

  panthor:
   - Fix bugs in MMU handling"

* tag 'drm-next-2026-10-31' of https://gitlab.freedesktop.org/drm/kernel: (52 commits)
  drm/amd/display: refresh cached HDMI FreeSync state
  drm/amd/display: Cap DSC bpp for USB4 DP tunnels
  drm/amd/display: Poll passive DVI sinks for EDID readiness
  drm/amdgpu: re-enable GFXOFF for compute on GFX12
  drm/amdkfd: evict the queues only once for CRIU PROCESS_INFO
  drm/amdgpu: drop the gang leader reference when freeing gang jobs
  drm/amdkfd: send SMI process and VM fault events only to allowed clients
  drm/amdkfd: validate SRAT subtables before parsing
  drm/amd/pm: preserve committed OD features for SMU 14.0.2
  drm/amd/pm: add zero fan stop temperature support on smu 14.0.2
  drm/amd/pm: preserve committed OD features for SMU 13.0.0/13.0.7
  drm/amd/display: Initialize missing TD-LUT programming inputs
  drm/amdkfd: split vram_pages of SVM ranges prefetched without a GPU mapping
  drm/amdgpu: reject CS chunks too large for kvmalloc()
  drm/amd/display: take a runtime PM reference only when a CRTC turns on
  drm/amdgpu: guard VCE/UVD sched entity teardown on failed probe
  drm/amdkfd: stop restore retries on device unplug
  drm/amdkfd: tear down KFD processes before early fini_sw on disconnect
  drm/amdkfd: Validate the control stack of a restored queue
  drm/amdkfd: correct vram_available calculation
  ...
…it/rostedt/linux-ktest

Pull ktest updates from Steven Rostedt:

 - Sort configs before writing config file

   Currently the .config file is created from the perl hash array from
   reading the applied min-configs. The order is determined by how perl
   hashes the values. This causes the .config file to be created in
   different orders for each run, and the order may determine the final
   value of the .config file after it goes through a make oldconfig.

   Sort the values when creating the .config so that the result is the
   same for every run.

 - Add total test time to run output

   Have ktest display the total test time of running all the tests. This
   is useful to find issues in the build, install, boot or test run
   where things are hanging for longer than expected.

 - Update reading of the git output during bisect

   The ktest bisect is an automated way to run git bisect. Since there
   currently no easy way to know if the bisect found the bad commit (I'm
   talking with the git maintainers to fix this[1]), it parses the
   output for the line "is first bad commit". But a recent update to git
   has the output state "is the first 'bad' commit" which breaks ktest
   bisect.

   Have ktest handle both output strings.

   [1] https://lore.kernel.org/all/20261020141011.0015d172@gandalf.local.home/

* tag 'ktest-v7.4' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-ktest:
  ktest: Accept quoted bad term in git bisect output
  ktest.pl: Add total test run time to output
  ktest: Sort config keys before writing config files
…kernel/git/kbuild/linux

Pull Kbuild fixes from Nathan Chancellor:

 - Move probing of '-mfentry' back into Makefile instead of Kconfig
   because it does not interact well with toolchains that support
   multiple bit widths

 - Add a big comment in scripts/Kconfig.toolchain of two pitfalls when
   moving cc-option checks from Kbuild to Kconfig

* tag 'kbuild-fixes-7.4-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kbuild/linux:
  scripts/Kconfig.toolchain: Highlight cc-option differences between Kconfig and Kbuild
  kbuild: Move testing of '-mfentry' back to Makefile from Kconfig
Alex Zenla and others added 26 commits November 4, 2026 03:42
A request that does not fit in its ring sleeps in
io_wait_event_killable() until the backend frees space, but the event
handler wakes the ring with wake_up_interruptible(), which only wakes
TASK_INTERRUPTIBLE sleepers. A TASK_KILLABLE waiter therefore sleeps
until it is killed, which hangs a guest that has enough large requests
in flight to fill a ring.

Wake the ring with wake_up() so killable waiters see the freed space.

Fixes: 9523fea ("net/9p: Switch to wait_event_killable()")
Signed-off-by: Alex Zenla <alex@edera.dev>
The frontend's resume handler only warned that suspend and resume are
unsupported. After a restore its rings, grant references and event
channels are gone, yet the mounted client kept writing requests into
them, so every request on the mount hung. The next InitWait from the
backend then allocated a second frontend instance for the same device,
which no client used.

On resume, collect any replies the backend left in the rings, free the
rings, fail the requests that are still unanswered with -EIO, and
publish Initialising so that a backend which still serves the old rings
starts over. When the backend reaches InitWait, allocate and publish new
rings for the existing frontend, keeping its clients. Requests that
arrive while the frontend is not connected wait until it is, and a
rw_semaphore keeps them off the rings while a resume replaces them.

Signed-off-by: Alex Zenla <alex@edera.dev>
A forked, restored or imported domain resumes against a new backend
whose fid table is empty, while the guest's 9P clients still hold the
fids of the session they were suspended with. With the transport
reconnected every request on those fids still fails, so even an idle
mount comes back unusable.

When the backend advertises feature-session-transfer, wait at suspend
for the requests in flight to be answered, then ask the backend for its
fid table with Tsession_save and keep the pages in guest memory, where
they survive into whatever domain the guest resumes in. Once a restored
frontend's new backend connects, replay the pages with Tsession_restore
before any request can use the rings. The pages are opaque to the
frontend; the backend validates every entry as it would a walk or open.

Signed-off-by: Alex Zenla <alex@edera.dev>
The toolstack has to know whether a guest can carry its 9P session into a
new backend before it exports the domain, because a guest that cannot
comes back with every open file on its mounts unusable. Until now only the
backend advertised the feature, and the frontend's support was invisible
from dom0.

Publish feature-session-transfer = 1 in the frontend's own xenstore
directory, next to version and num-rings.

Signed-off-by: Alex Zenla <alex@edera.dev>
arch/x86/xen/enlighten.c includes xen/interface/memory.h for
XENMEM_maximum_reservation, but memory.h uses xen_ulong_t, domid_t and
GUEST_HANDLE without including where they are defined,
xen/interface/xen.h. Other configurations reach those through an earlier
include. The zone-tiny configuration does not, and fails to build with
CONFIG_WERROR=y:

  include/xen/interface/physdev.h:41:5: error: unknown type name 'xen_ulong_t'

Include xen/interface/xen.h first, as arch/arm/xen/enlighten.c does.

Signed-off-by: Alex Zenla <alex@edera.dev>
A node whose pool is short called fill_list() even when other nodes
still held free pages. fill_list() takes new address space from
iomem_resource, which on a PVH dom0 can overlap MMIO that Xen has
identity mapped. A later grant map onto such a gfn makes Xen refuse the
p2m change and crash dom0.

Carve a new region only when every node's pool is short, and otherwise
take pages from the preferred node first, then the others. Return pages
to the pool of their own node when the PV p2m allocation fails.
…ode variant

Borrowing across nodes made xen_alloc_unpopulated_pages_node() best
effort, so a caller that asked for a node could get pages of another.

The node variant now takes pages only from the requested node's pool and
fails with -ENOMEM when it is short. It no longer carves a region.
xen_alloc_unpopulated_pages() has no node requirement: it prefers the
local pool, borrows from other nodes, and carves a region only when
every pool is short. xenbus falls back to it when the node's pool is
short, and gnttab_alloc_pages_node() uses it for NUMA_NO_NODE.
GitHub starts no workflow for a review of a pull request it cannot
compute a merge ref for, and a rebase often conflicts with the tree it
replaces: approving #48 started nothing, and it had to be landed by
hand.

The land workflow can now also be run with a pull request number. It
then reads the head, branch and base from the pull request, requires
the same rebase/edera-mainline/... branch into edera/mainline, and
lands on the most recent approval of the current head from a reviewer
whose latest review is still an approval. Everything after that, the
write-access check, the tip check, the backup and the leased push, is
unchanged.
When a backport pull request merges into edera/6.18-lts, delete its
branch and retry the mainline pull requests waiting for it.

A backport/edera-6.18-lts/pr-<N> branch is the automation's own and is
of no use once its pull request has merged, but delete_branch_on_merge
stays off so feature branches survive, and the merged ones pile up. It
is deleted only if it still points at the commit that merged.

The retry was meant to happen already, from lts-backport-merged.yml on
edera/6.18-lts, but that has never run: pull_request_target always takes
the workflow from the default branch. This copy of that path lives on
edera/mainline and runs edera/6.18-lts's retry-backports.sh.
edera/6.18-lts audits itself for Edera commits from edera/mainline that
it lacks (kernel-nightly.yml with audit=true), but scheduled workflows
run only from the default branch. Add a workflow here whose only job is
to dispatch that audit every Monday.
The acceptance build judged x86_64 against defconfig with the Edera
options forced on, which is not the kernel we ship. Merge the latest
configs/x86_64/host.config from edera-dev/linux-kernel-oci over
defconfig first, the way linux-kernel-oci itself applies it (the file
is a fragment against x86_64_defconfig and omits SMP, NET and the rest
of what matches it), and log the commit it came from.

The Edera options are still forced on as built-ins afterwards: the host
config builds OpenPaX out and 9P/Xen, virtio-gpu and the Hyper-V
network drivers as modules, which a vmlinux build would never compile.
AGP joins that list on x86_64 because host.config has it as a module,
which caps DRM at m.

arm64 is unchanged.
A rebase whose independent build failed went straight to a pull request,
and in practice that was a run Claude never finished: the Bash tool's
two-minute default timeout cannot hold a kernel build, so the build went
to the background and the session ended "waiting for the x86 build"
(#47, and #35 before it). Nobody saw the error until a reviewer did.

Give the rebase step a 90-minute Bash timeout, and tell the skill to run
builds in the foreground and to keep fixing and rebuilding until both
pass rather than treat a failing build as an outcome to report.

If the independent build still fails, a new read-only fix job hands
Claude its branch and the build logs for one repair round, following a
new "Repairing a failed build" section of the skill. A repaired branch
is verified and built again from scratch before publish judges it; the
checker now runs on whichever branch is final. Publish takes the
repaired branch and report when there is one, says so in the pull
request, and keeps the repair round's report when it repaired nothing.

The build job moves to a reusable rebase-build.yml so the first build
and the rebuild are the same job, and it now keeps each build's log as
an artifact for the repair round to read.

A repair changes downstream commits, so a repaired branch still shows
drift and still goes to review rather than being pushed: what changes is
that the reviewer gets a branch that builds.
The previous commit moved the build job into rebase-build.yml and calls
it twice, but the file itself never made it into the commit: the
kernel's .gitignore ignores dot-directories, so it has to be added with
-f. Without it, upstream-rebase.yml calls a workflow that does not exist.
This reverts commit 0a2ac17.

Signed-off-by: Alexander M. Merritt <alexander@edera.dev>
This reverts commit 8788269.

We no longer want to split the unpopulated boot-time space between
the dom0 balloon and grant and foreign mappings.

Signed-off-by: Alexander M. Merritt <alexander@edera.dev>
This reverts commit 7498978.

Signed-off-by: Alexander M. Merritt <alexander@edera.dev>
Consolidate existing duplicated code. No functional change.

Signed-off-by: Alexander M. Merritt <alexander@edera.dev>
The boot-time unbacked address space reaches the unpopulated allocator
(page_list) one 4 KiB page at a time, with a lock round trip and a list
push for each page. On a large dom0 that is millions of round trips at
boot. page_list also is unaware of page contiguity, limiting dom0
balloon growth to 4 KiB updates.

Hand each extra memory region over whole, and keep its aligned 2 MiB
blocks on a list per node, linked through the first page of each
block as page_list links pages. The pages around the blocks, and a
block that a node boundary cuts, go on page_list.

Grants and foreign mappings still take pages from page_list only.
When page_list of a node is empty, one block moves onto it, so taking
a page stays a list pop. Pages given back go on page_list and do not
form a block again.
With no pages parked on the balloon, dom0 grows by hotplugging a
memory section at the first free physical address. That address space
can belong to a PCI device that has not claimed it yet, and Xen does
not stop dom0 from growing when dom0_mem sets no max:.

dom0's balloon needs room to grow into, and grows faster when Xen
populates a whole 2 MiB extent at a time. The unpopulated allocator
keeps that room, the boot-time unbacked address space. Grant and foreign
mappings and the balloon have to share it.

Feed the dom0 balloon from the allocator's 2 MiB blocks when it is
instructed to grow.
Add `info/room_kb` to the sysfs of the xen balloon driver, so user tools
can discover the amount of memory dom0 can grow by. Reported are only
complete 2MiB blocks in the unpopulated allocator.
The data pages of a ring are granted as the first page's frame plus the
page index. That holds for auto-translated guests, whose grant frames are
pseudo-physical. A PV guest grants machine frames, and alloc_pages_exact()
only promises pseudo-physical contiguity. When the pages are not
machine-contiguous the backend maps the frames that follow the first one.
Some of those are other pages of the guest, so requests read as garbage,
and some cannot be granted at all, so the mapping fails.

A freshly built PV guest is usually machine-contiguous within a 2 MiB
block, which hid this. A PV guest restored from a snapshot gets its frames
one page at a time, so its first request on ring 0 after the restore
arrives as a malformed frame and the mount hangs.

Look up the frame of each page instead.

Signed-off-by: Kavi Daula <kavi@edera.dev>
gntdev_ioctl_map_grant_ref() calls copy_to_user() with priv->lock held.
A fault in that copy takes mmap_lock, while gntdev_mmap() is called with
mmap_lock held and takes priv->lock, so lockdep reports a circular
dependency, and a thread mapping grants can deadlock against another
thread of the same process mmapping the same gntdev fd.

Read the index under the lock, take an extra reference on the map, and
copy after unlocking. If the copy fails, take the map off the list only
if an unmap ioctl has not already done so, then drop both references.

Fixes: 45ca1af ("xen/gntdev: fix error handling in ioctl")

Signed-off-by: Kavi <kavi@edera.dev>
xen_pgd_alloc() keeps the user pgd of a 64-bit PV mm in page->private of
the kernel pgd page, and xen_pgd_free() frees it without clearing the
pointer. page->private shares its slot with ptdesc->ptl, so when split
ptlocks are allocated separately (lock debugging, PREEMPT_RT),
pagetable_dtor() hands the freed user pgd to kmem_cache_free() as a
ptlock. With SLUB consistency checks this warns "virt_to_cache: Object is
not a Slab page!" on every mm teardown; without them it corrupts the slab.

Clear page->private once the user pgd is freed.

Signed-off-by: Kavi <kavi@edera.dev>
gntdev_ioctl_grant_copy() resets nr_ops and nr_pages on the batch it
takes but not writeable, and a batch fresh from kmalloc() holds whatever
was in that memory. If the first segment fails before
gntdev_grant_copy_seg() sets writeable, gntdev_put_pages() loads the
uninitialised bool, which UBSAN reports as an invalid load. No pages are
pinned at that point, so nothing is unpinned with the wrong flag.

Reset writeable with the counters.

Signed-off-by: Kavi <kavi@edera.dev>
Since a6aa4eb ("xen/x86: add extra pages to unpopulated-alloc if
available"), a domU built below its maximum hands the rest of its physmap
to the unpopulated allocator at boot, so its balloon stays empty until
the toolstack first resizes it. balloon_oom_notify() only deflates pages
already on the balloon, so a freshly built domU kills a task instead of
growing toward its maximum.

When the balloon is empty, park one 2 MiB block from the unpopulated
allocator on it and deflate that, as dom0's balloon does when it grows.
The allocator allocates memory with its lock held, so the OOM path only
tries the lock, through a new xen_try_alloc_unpopulated_blocks().

Signed-off-by: Kavi <kavi@edera.dev>
@edera-rebase-app

ghost commented Nov 6, 2026

Copy link
Copy Markdown
Author

Superseded by #93.

@edera-rebase-app edera-rebase-app Bot closed this Nov 6, 2026
@edera-rebase-app
edera-rebase-app Bot deleted the rebase/edera-mainline/20261104-8f315d39b605-05441d697f7f branch November 6, 2026 05:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.