From: sashiko-bot@kernel.org
To: "Claudio Imbrenda" <imbrenda@linux.ibm.com>
Cc: kvm@vger.kernel.org, "Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
linux-s390@vger.kernel.org
Subject: Re: [PATCH v5 07/13] KVM: s390: cmma: Fix dirty tracking when removing memslot
Date: Wed, 29 Jul 2026 17:38:59 +0000 [thread overview]
Message-ID: <20260729173859.A4C971F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260729152938.782383-8-imbrenda@linux.ibm.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
New issues:
- [High] Missing `DAT_WALK_ANY` flag skips swapped-out pages, leaking the CMMA dirty counter.
Pre-existing issues:
- [High] Silent failure in `kvm_arch_commit_memory_region` leaves KVM memslots and s390 DAT tables out of sync.
--
--- Patch [7]: [PATCH v5 07/13] KVM: s390: cmma: Fix dirty tracking when removing memslot ---
commit 209a02966d18973e5f9b2678eee5bc92d7952603
Author: Claudio Imbrenda <imbrenda@linux.ibm.com>
KVM: s390: cmma: Fix dirty tracking when removing memslot
When a memslot is removed, all ptes that mapped the slot are cleared or
even deallocated. If this happens while the system is in migration
mode, and if cmma-dirty pages are removed, the cmma-dirty counter will
not reflect reality.
Fix by appropriately decrementing the cmma-dirty counter when removing
a memslot.
Opportunistically improve kvm_arch_commit_memory_region() to use
__free() for the struct kvm_s390_mmu_cache.
> diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
> index a72ffd515c866..2ae431030621e 100644
> --- a/arch/s390/kvm/kvm-s390.c
> +++ b/arch/s390/kvm/kvm-s390.c
[ ... ]
> @@ -5804,14 +5804,30 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm,
> return 0;
> }
>
> +static long cmma_d_count_pte(union pte *ptep, gfn_t gfn, gfn_t next, struct dat_walk *walk)
[ ... ]
> void kvm_arch_commit_memory_region(struct kvm *kvm,
> struct kvm_memory_slot *old,
> const struct kvm_memory_slot *new,
> enum kvm_mr_change change)
> {
> - struct kvm_s390_mmu_cache *mc = NULL;
> + const struct dat_walk_ops ops = { .pte_entry = cmma_d_count_pte, };
> + struct kvm_s390_mmu_cache *mc __free(kvm_s390_mmu_cache) = NULL;
[Severity: High]
This is a pre-existing issue, but if kvm_s390_new_mmu_cache() fails to
allocate memory and returns NULL later in this function, doesn't it
silently skip updating the DAT tables?
Since kvm_arch_commit_memory_region() returns void, KVM assumes the changes
are applied infallibly. Could this leave KVM memslots and the s390 hardware
DAT tables fatally out of sync under host memory pressure?
> int rc = 0;
>
> + guard(mutex)(&kvm->slots_arch_lock);
> +
> if (change == KVM_MR_FLAGS_ONLY)
> return;
>
> @@ -5822,6 +5838,12 @@ void kvm_arch_commit_memory_region(struct kvm *kvm,
> }
>
> scoped_guard(write_lock, &kvm->mmu_lock) {
> + if (kvm->arch.migration_mode && kvm->arch.use_cmma && old) {
> + _dat_walk_gfn_range(old->base_gfn, old->base_gfn + old->npages,
> + kvm->arch.gmap->asce, &ops, DAT_WALK_IGN_HOLES,
> + &kvm->arch.cmma_dirty_pages);
> + }
[Severity: High]
Does this walk miss swapped-out pages by omitting the DAT_WALK_ANY flag?
If DAT_WALK_ANY is not passed to _dat_walk_gfn_range(), holes are skipped
and cmma_d_count_pte() is never called for swapped-out pages, leaking the
cmma_dirty_pages count.
However, the subsequent dat_delete_slot() will process those same holes and
wipe their dirty status.
Will this cause an infinite loop in userspace migration wait loops if the
dirty count never drops to zero?
> +
> switch (change) {
> case KVM_MR_DELETE:
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260729152938.782383-1-imbrenda@linux.ibm.com?part=7
next prev parent reply other threads:[~2026-07-29 17:39 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 15:29 [PATCH v5 00/13] KVM: s390: Misc fixes Claudio Imbrenda
2026-07-29 15:29 ` [PATCH v5 01/13] KVM: s390: Fix unlikely NULL gmap dereference Claudio Imbrenda
2026-07-29 15:43 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 02/13] KVM: s390: Fix kvm_s390_vcpu_unsetup_cmma() Claudio Imbrenda
2026-07-29 16:06 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 03/13] KVM: s390: Fix overclearing ESCA in case of error Claudio Imbrenda
2026-07-29 16:35 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 04/13] KVM: s390: ucontrol: Fix sca_clear_ext_call() Claudio Imbrenda
2026-07-29 16:55 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 05/13] KVM: s390: Fix leaking of PGM_ADDRESSING to userspace Claudio Imbrenda
2026-07-29 17:08 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 06/13] KVM: s390: Fix race in __do_essa() Claudio Imbrenda
2026-07-29 17:22 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 07/13] KVM: s390: cmma: Fix dirty tracking when removing memslot Claudio Imbrenda
2026-07-29 17:38 ` sashiko-bot [this message]
2026-07-29 15:29 ` [PATCH v5 08/13] KVM: s390: ucontrol: Add missing locking around gmap_remove_child() Claudio Imbrenda
2026-07-29 17:50 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 09/13] KVM: s390: Free the mmu cache when kvm_arch_vcpu_create() fails Claudio Imbrenda
2026-07-29 18:02 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 10/13] KVM: s390: Return -EINTR if a signal was pending while faulting-in Claudio Imbrenda
2026-07-29 18:12 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 11/13] KVM: s390: Fix ordering when adding to SCA Claudio Imbrenda
2026-07-29 18:33 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 12/13] KVM: s390: Fix cleanup in kvm_s390_pv_create_cpu() Claudio Imbrenda
2026-07-29 18:39 ` sashiko-bot
2026-07-29 15:29 ` [PATCH v5 13/13] KVM: s390: Fix kvm_arch_commit_memory_region() when low on memory Claudio Imbrenda
2026-07-29 18:53 ` 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=20260729173859.A4C971F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=agordeev@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=imbrenda@linux.ibm.com \
--cc=kvm@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/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.