From: Tao Cui <cui.tao@linux.dev>
To: Zeng Chi <zeng_chi911@163.com>,
zhaotianrui@loongson.cn, maobibo@loongson.cn,
chenhuacai@kernel.org
Cc: cui.tao@linux.dev, kvm@vger.kernel.org,
loongarch@lists.linux.dev, linux-kernel@vger.kernel.org,
zengchi@kylinos.cn, stable@vger.kernel.org
Subject: Re: [PATCH] LoongArch: KVM: Preserve memslot arch flags on KVM_MR_FLAGS_ONLY
Date: Mon, 31 Aug 2026 14:30:48 +0800 [thread overview]
Message-ID: <354b192a-52f4-44fb-9034-5df51a92dd3e@linux.dev> (raw)
In-Reply-To: <20260828094825.357630-1-zeng_chi911@163.com>
在 2026/8/28 17:48, Zeng Chi 写道:
> From: Zeng Chi <zengchi@kylinos.cn>
>
> kvm_arch_prepare_memory_region() computes new->arch.flags, i.e. whether
> a memslot is KVM_MEM_HUGEPAGE_CAPABLE or KVM_MEM_HUGEPAGE_INCAPABLE, only
> for KVM_MR_CREATE and KVM_MR_MOVE, and returns early for every other
> change. But the generic code allocates a zeroed memslot for every
> change and never copies old->arch, so after a KVM_MR_FLAGS_ONLY update,
> e.g. toggling KVM_MEM_LOG_DIRTY_PAGES for live migration, the active
> memslot has arch.flags == 0.
>
> With both flags clear, fault_supports_huge_mapping() falls through to
> the alignment check on the HVA range alone, which no longer verifies
> that the GPA and HVA have the same offset within a PMD. A memslot that
> was marked KVM_MEM_HUGEPAGE_INCAPABLE because of a GPA/HVA offset
> mismatch can then be mapped with PMD entries on read faults, and since
> kvm_map_page() aligns the gfn and the pfn independently, the guest ends
> up accessing the wrong host pages, exactly the "d -> f, e -> g" case
> described in the comment above the check.
>
> Carry the arch flags over from the old memslot for KVM_MR_FLAGS_ONLY,
> as the GPA, HVA and size are guaranteed to be unchanged for that case.
>
> Fixes: 7ab6fb505b2a ("LoongArch: KVM: Optimization for memslot hugepage checking")
> Cc: stable@vger.kernel.org
> Signed-off-by: Zeng Chi <zengchi@kylinos.cn>
> ---
> arch/loongarch/kvm/mmu.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/arch/loongarch/kvm/mmu.c b/arch/loongarch/kvm/mmu.c
> index e104897aa532..4ca7c6ea8f08 100644
> --- a/arch/loongarch/kvm/mmu.c
> +++ b/arch/loongarch/kvm/mmu.c
> @@ -383,6 +383,16 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, const struct kvm_memory_slot
> hva_t hva_start;
> size_t size, gpa_offset, hva_offset;
>
> + /*
> + * The generic code allocates a fresh, zeroed memslot for every change,
> + * so the arch flags computed below must be carried over when only the
> + * userspace flags change, e.g. when dirty logging is toggled.
> + */
> + if (change == KVM_MR_FLAGS_ONLY) {
> + new->arch = old->arch;
> + return 0;
> + }
> +
> if ((change != KVM_MR_MOVE) && (change != KVM_MR_CREATE))
> return 0;
> /*
I verified this on a Loongson-3A6000 host with a KVM selftest that uses
a GPA/HVA offset-mismatched memslot and toggles dirty logging: the
unpatched kernel maps the wrong host pages into the guest after the
toggle, and with this patch the mapping stays correct.
Tested-by: Tao Cui <cuitao@kylinos.cn>
Reviewed-by: Tao Cui <cuitao@kylinos.cn>
next prev parent reply other threads:[~2026-08-31 6:30 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-28 9:48 [PATCH] LoongArch: KVM: Preserve memslot arch flags on KVM_MR_FLAGS_ONLY Zeng Chi
2026-08-31 2:09 ` Bibo Mao
2026-08-31 6:30 ` Tao Cui [this message]
2026-09-05 15:08 ` Huacai Chen
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=354b192a-52f4-44fb-9034-5df51a92dd3e@linux.dev \
--to=cui.tao@linux.dev \
--cc=chenhuacai@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=loongarch@lists.linux.dev \
--cc=maobibo@loongson.cn \
--cc=stable@vger.kernel.org \
--cc=zeng_chi911@163.com \
--cc=zengchi@kylinos.cn \
--cc=zhaotianrui@loongson.cn \
/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.