From: Leonardo Bras <leo.bras@arm.com>
To: Sean Christopherson <seanjc@google.com>
Cc: Leonardo Bras <leo.bras@arm.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Shuah Khan <shuah@kernel.org>,
David Matlack <dmatlack@google.com>,
Ackerley Tng <ackerleytng@google.com>,
Marc Zyngier <maz@kernel.org>, Josh Hilke <jrhilke@google.com>,
Oliver Upton <oupton@kernel.org>,
Wu Fei <wu.fei9@sanechips.com.cn>,
Steffen Eiden <seiden@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
kvm@vger.kernel.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v1 2/3] KVM: selftests: Check dirty-ring size before enabling
Date: Fri, 2 Oct 2026 12:14:22 +0100 [thread overview]
Message-ID: <ar-SDkBLBV0GDCDV@LeoBrasDK> (raw)
In-Reply-To: <ar7XFr51N_oK7hN-@google.com>
On Thu, Oct 01, 2026 at 02:56:38PM -0700, Sean Christopherson wrote:
> On Thu, Oct 01, 2026, Leonardo Bras wrote:
> > On Thu, Oct 01, 2026 at 03:46:51PM +0100, Leonardo Bras wrote:
> > > On Wed, Sep 30, 2026 at 01:31:25PM -0700, Sean Christopherson wrote:
> > > > On Tue, Sep 29, 2026, Leonardo Bras wrote:
> > > > > void vm_enable_dirty_ring(struct kvm_vm *vm, u32 ring_size)
> > > > > {
> > > > > - if (vm_check_cap(vm, KVM_CAP_DIRTY_LOG_RING_ACQ_REL))
> > > > > - vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING_ACQ_REL, ring_size);
> > > > > - else
> > > > > - vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING, ring_size);
> > > > > + long cap = KVM_CAP_DIRTY_LOG_RING_ACQ_REL;
> > > > > + int max_size = vm_check_cap(vm, cap);
> > > > > +
> > > > > + if (!max_size) {
> > > > > + cap = KVM_CAP_DIRTY_LOG_RING;
> > > > > + max_size = vm_check_cap(vm, cap);
> > > > > + }
> > > > > +
> > > > > + TEST_ASSERT(max_size > 0,
> > > >
> > > > Rather than open code this, which is kinda sorta going to show up in multiple
> > > > places, what if we do this as a prep patch? Then vm_enable_dirty_ring() can use
> > > > kvm_get_dirty_ring_cap() (completely untested).
> > >
> > > Sure, if you think it's useful :)
> >
> > Oh, vm_check_cap() is different than kvm_has_cap()/kvm_check_cap():
> > IIUC, the vm* version will check if the extension is enabled in the current
> > VM,
>
> No, the VM-scoped version checks if the VM *can* support the capability in its
> current configuration, e.g. some capabilities are fundamentally incompatible with
> certain VM types.
>
> > while the kvm* version will open a new /dev/kvm fd and check the
> > extension there, probably meaning the CAP is available in the system.
> >
> > So, maybe we would need a slightly different approach?
> > I.E. have the kvm_get_dirty_ring_cap() to use the VM version, and
> > have dirty_ring_supported() to start the new /dev/kvm fd and free it later?
> >
> > What do you think?
>
> It's not necessary in this case. All KVM_CHECK_EXTENSION calls feed into
> kvm_vm_ioctl_check_extension_generic(), the only difference is that the @kvm
> pointer will be NULL when called on /dev/kvm. While some capabilities do behave
> differently if @kvm is valid, the majority do not, including the dirty ring ones:
>
> case KVM_CAP_DIRTY_LOG_RING:
> #ifdef CONFIG_HAVE_KVM_DIRTY_RING_TSO
> return KVM_DIRTY_RING_MAX_ENTRIES * sizeof(struct kvm_dirty_gfn);
> #else
> return 0;
> #endif
> case KVM_CAP_DIRTY_LOG_RING_ACQ_REL:
> #ifdef CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL
> return KVM_DIRTY_RING_MAX_ENTRIES * sizeof(struct kvm_dirty_gfn);
> #else
> return 0;
> #endif
>
> I.e. the VM version and /dev/kvm version will always yield the same result. Very
> theoretically that could change, but it's unlikely. And we can always update
> KVM selftests in the unlikely case a specific VM type comes along that doesn't
> support the dirty ring even when the broader architectures does.
All right then, thanks!
Leo
next prev parent reply other threads:[~2026-10-02 11:14 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-29 11:37 [PATCH v1 0/3] KVM: selftests: Add support for dirty-ring on dirty_log_perf_test Leonardo Bras
2026-09-29 11:37 ` [PATCH v1 1/3] KVM: selftests: memstress: Add option to enable dirty-ring on VM creation Leonardo Bras
2026-09-30 18:21 ` Sean Christopherson
2026-10-01 14:40 ` Leonardo Bras
2026-09-29 11:37 ` [PATCH v1 2/3] KVM: selftests: Check dirty-ring size before enabling Leonardo Bras
2026-09-30 20:31 ` Sean Christopherson
2026-10-01 14:46 ` Leonardo Bras
2026-10-01 17:02 ` Leonardo Bras
2026-10-01 21:56 ` Sean Christopherson
2026-10-02 11:14 ` Leonardo Bras [this message]
2026-10-01 23:18 ` Sean Christopherson
2026-10-02 11:14 ` Leonardo Bras
2026-09-29 11:37 ` [PATCH v1 3/3] KVM: selftests: dirty_log_perf_test: Add dirty-ring support Leonardo Bras
2026-09-29 11:53 ` sashiko-bot
2026-09-29 14:13 ` Leonardo Bras
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=ar-SDkBLBV0GDCDV@LeoBrasDK \
--to=leo.bras@arm.com \
--cc=ackerleytng@google.com \
--cc=dmatlack@google.com \
--cc=imbrenda@linux.ibm.com \
--cc=jrhilke@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=seiden@linux.ibm.com \
--cc=shuah@kernel.org \
--cc=wu.fei9@sanechips.com.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.