All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Leonardo Bras <leo.bras@arm.com>
Cc: 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: Thu, 1 Oct 2026 14:56:38 -0700	[thread overview]
Message-ID: <ar7XFr51N_oK7hN-@google.com> (raw)
In-Reply-To: <ar6SHjnMYNqiEpVa@LeoBrasDK>

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.

  reply	other threads:[~2026-10-01 21:56 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 [this message]
2026-10-02 11:14           ` Leonardo Bras
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=ar7XFr51N_oK7hN-@google.com \
    --to=seanjc@google.com \
    --cc=ackerleytng@google.com \
    --cc=dmatlack@google.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=jrhilke@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=leo.bras@arm.com \
    --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=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.