From: Amit Machhiwal <amachhiw@linux.ibm.com>
To: Madhavan Srinivasan <maddy@linux.ibm.com>, linuxppc-dev@lists.ozlabs.org
Cc: Amit Machhiwal <amachhiw@linux.ibm.com>,
Nicholas Piggin <npiggin@gmail.com>,
Michael Ellerman <mpe@ellerman.id.au>,
"Christophe Leroy (CS GROUP)" <chleroy@kernel.org>,
"Ritesh Harjani (IBM)" <ritesh.list@gmail.com>,
Shrikanth Hegde <sshegde@linux.ibm.com>,
kvm-ppc@vger.kernel.org, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org,
Gautam Menghani <gautam@linux.ibm.com>,
Harsh Prateek Bora <harshpb@linux.ibm.com>,
R Nageswara Sastry <rnsastry@linux.ibm.com>,
Alexander Graf <agraf@suse.de>,
linux-hardening@vger.kernel.org, stable@vger.kernel.org,
Avi Kivity <avi@redhat.com>
Subject: [PATCH v4 0/3] KVM: PPC: Fixes for Book3S HV HPT locking and paired-single decoding
Date: Wed, 7 Oct 2026 23:51:12 +0530 [thread overview]
Message-ID: <20261007182116.12479-1-amachhiw@linux.ibm.com> (raw)
This series addresses bug fixes across KVM PPC Book3S HV
locking/synchronization and paired-single instruction decoding.
Patches 1 & 2 fix synchronization and preemption issues introduced in
commit 6165d5dd99db ("KVM: PPC: Book3S HV: add virtual mode handlers for
HPT hcalls and page faults"):
- Patch 1 adds SRCU read lock protection when walking memslots during
virtual-mode HPT hcalls to prevent use-after-free races with concurrent
memslot updates.
- Patch 2 adds preempt_disable() around all virtual-mode HPTE bit-lock
holders — both the guest vCPU paths (kvmppc_hpte_hv_fault() and
kvmppc_pseries_do_hpt_hcall()) and the host-side paths
(kvm_unmap_rmapp(), kvm_age_rmapp(), resize_hpt_rehash_hpte()) — to
prevent CPU stalls and deadlocks on preemption.
Patch 3 fixes paired-single D-form instruction emulation:
- Patch 3 fixes get_d_signext() to correctly extract the full 12-bit D
displacement field and perform proper two's-complement sign extension.
Testing:
========
All test kernel builds were compiled with CONFIG_DEBUG_ATOMIC_SLEEP=y.
The following scenarios were verified:
1. Power9 PowerNV (L0) in Radix mode:
- Booted L0 host with kernel containing all 3 patches.
- Booted KVM guests in both Radix and Hash modes.
- Ran kernel build workload inside guests — no errors observed.
- Booted L1 guest with the same kernel — booted and ran cleanly.
2. Power9 PowerNV (L0) in Hash mode:
- Booted L0 host with kernel containing all 3 patches.
- Booted KVM guest in Hash mode.
- Ran kernel build workload inside guest — no errors observed.
- Booted L1 nested guest with the same kernel — booted and ran cleanly.
3. Power10 LPAR (L1):
- Booted Power10 LPAR with the patched kernel.
- Booted KVM guest and ran workloads — no errors observed.
Changes in v4:
==============
- v3: https://lore.kernel.org/all/20261006122404.99358-1-amachhiw@linux.ibm.com/
- Patch 2:
- Fixed missing preemption guard in kvm_htab_write(): introduced
kvmppc_virtmode_do_h_remove(), a thin wrapper that brackets
kvmppc_do_h_remove() with preempt_disable()/preempt_enable(), mirroring
the existing kvmppc_virtmode_do_h_enter() pattern. Replaced both raw
kvmppc_do_h_remove() call sites in kvm_htab_write() with the new wrapper.
- Updated commit message to document the kvm_htab_write() fix.
- Dropped Reviewed-by from Shrikanth Hegde as the patch was materially
extended.
Changes in v3:
==============
- v2: https://lore.kernel.org/all/20260930173750.56759-1-amachhiw@linux.ibm.com/
- Patch 2:
- Fixed preemption window in kvm_unmap_rmapp() and kvm_age_rmapp(): moved
preempt_disable() before lock_rmap() so both the rmap lock and the HPTE
bit-lock are held under a single non-preemptible section, and added
preempt_enable() on all early exits and retry paths before cpu_relax().
- Cleaned up kvm_test_clear_dirty_npages(): removed redundant per-iteration
preempt_disable()/preempt_enable() pairs since the caller
kvmppc_hv_get_dirty_log_hpt() already holds preempt_disable() across the
entire loop.
- Reworded commit message to clearly detail the per-function locking design
and rationale.
- Picked up Reviewed-by tag from Shrikanth Hegde.
- Patch 3:
- Picked up Reviewed-by tag from Shrikanth Hegde.
Changes in v2:
==============
- v1: https://lore.kernel.org/all/20260928122837.8782-1-amachhiw@linux.ibm.com/
- Patch 2: Extended preempt_disable()/preempt_enable() coverage to also wrap
the HPTE bit-lock hold windows in four host-side virtual-mode functions:
kvm_unmap_rmapp(), kvm_age_rmapp(), kvm_test_clear_dirty_npages(), and
resize_hpt_rehash_hpte(). These were identified as vulnerable by Sashiko AI
review and confirmed correct by audit.
- Dropped Reviewed-by from Ritesh as the patch was materially extended.
- Patch 2: Added warning comment above kvmppc_pseries_do_hpt_hcall()
documenting the preemption requirement.
Amit Machhiwal (3):
KVM: PPC: Book3S HV: Add SRCU protection for virtual-mode HPT hcalls
KVM: PPC: Book3S HV: Add preempt_disable() around virtual-mode HPTE
bit-lock users
KVM: PPC: Fix get_d_signext() 12-bit displacement for paired-single
D-form
arch/powerpc/kvm/book3s_64_mmu_hv.c | 33 +++++++++-
arch/powerpc/kvm/book3s_hv.c | 80 +++++++++++++-----------
arch/powerpc/kvm/book3s_paired_singles.c | 7 +--
3 files changed, 77 insertions(+), 43 deletions(-)
base-commit: 602042bf29f6efde39cfb5fdd9289bf4854bc0c5
--
2.54.0 (Apple Git-157)
next reply other threads:[~2026-10-07 18:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-07 18:21 Amit Machhiwal [this message]
2026-10-07 18:21 ` [PATCH v4 1/3] KVM: PPC: Book3S HV: Add SRCU protection for virtual-mode HPT hcalls Amit Machhiwal
2026-10-07 18:21 ` [PATCH v4 2/3] KVM: PPC: Book3S HV: Add preempt_disable() around virtual-mode HPTE bit-lock users Amit Machhiwal
2026-10-07 18:47 ` sashiko-bot
2026-10-07 19:30 ` Amit Machhiwal
2026-10-07 18:26 ` [PATCH v4 3/3] KVM: PPC: Fix get_d_signext() 12-bit displacement for paired-single D-form Amit Machhiwal
2026-10-07 18:35 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261007182116.12479-1-amachhiw@linux.ibm.com \
--to=amachhiw@linux.ibm.com \
--cc=agraf@suse.de \
--cc=avi@redhat.com \
--cc=chleroy@kernel.org \
--cc=gautam@linux.ibm.com \
--cc=harshpb@linux.ibm.com \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=maddy@linux.ibm.com \
--cc=mpe@ellerman.id.au \
--cc=npiggin@gmail.com \
--cc=ritesh.list@gmail.com \
--cc=rnsastry@linux.ibm.com \
--cc=sshegde@linux.ibm.com \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.