All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leonardo Bras <leo.bras@arm.com>
To: Tian Zheng <zhengtian10@huawei.com>
Cc: Leonardo Bras <leo.bras@arm.com>,
	maz@kernel.org, oupton@kernel.org, catalin.marinas@arm.com,
	will@kernel.org, corbet@lwn.net, pbonzini@redhat.com,
	yuzenghui@huawei.com, wangzhou1@hisilicon.com,
	yangjinqian1@huawei.com, caijian11@h-partners.com,
	liuyonglong@huawei.com, tangchengchang@huawei.com,
	yezhenyu2@huawei.com, yubihong@huawei.com, linuxarm@huawei.com,
	joey.gouly@arm.com, kvmarm@lists.linux.dev, kvm@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, seiden@linux.ibm.com,
	suzuki.poulose@arm.com, fuad.tabba@linux.dev,
	mark.rutland@arm.com, seanjc@google.com, rdunlap@infradead.org,
	linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org,
	skhan@linuxfoundation.org
Subject: Re: [PATCH v5 13/15] KVM: arm64: Add HDBSS buffer size ioctl for dirty-bitmap mode
Date: Fri,  6 Nov 2026 15:37:33 +0000	[thread overview]
Message-ID: <au30PSHX_UBIIx_Y@LeoBrasDK> (raw)
In-Reply-To: <5a096cca-713a-4449-83dc-c763dc06c085@huawei.com>

On Fri, Nov 06, 2026 at 06:27:27PM +0800, Tian Zheng wrote:
> 
> 
> On 11/2/2026 11:12 PM, Leonardo Bras wrote:
> > On Tue, Sep 29, 2026 at 06:36:53PM +0800, Tian Zheng wrote:
> > > In dirty-bitmap mode, a larger HDBSS buffer lets the guest dirty more
> > > pages between VM exits, at the cost of memory. The default of one page
> > > per vCPU is a reasonable starting point, so allow userspace to opt
> > > into a larger buffer via KVM_CAP_ARM_HDBSS_BUFFER_SIZE.
> > > 
> > > The size is specified in bytes through KVM_ENABLE_CAP and must be a
> > > power of two in [PAGE_SIZE, SZ_2M]: the upper bound is the largest
> > > HDBSSBR_EL2.SZ encoding, and the power-of-two requirement matches the
> > > buddy allocator. It must be set before any vCPU is created: -EINVAL
> > > after vCPUs exist, -EBUSY if already set.
> > > 
> > > The capability is rejected in dirty-ring mode, where the size is
> > > pinned by kvm_arch_dirty_ring_size_updated().
> > > 
> > > KVM_CHECK_EXTENSION returns the configured size for a VM, or SZ_2M
> > > when queried globally with a NULL kvm.
> > > 
> > > Signed-off-by: Tian Zheng <zhengtian10@huawei.com>
> > > ---
> > >   arch/arm64/kvm/arm.c     | 34 ++++++++++++++++++++++++++++++++++
> > >   include/uapi/linux/kvm.h |  1 +
> > >   2 files changed, 35 insertions(+)
> > > 
> > > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
> > > index 5a7046acb62e..eadbf3a88d31 100644
> > > --- a/arch/arm64/kvm/arm.c
> > > +++ b/arch/arm64/kvm/arm.c
> > > @@ -19,6 +19,7 @@
> > >   #include <linux/kvm.h>
> > >   #include <linux/kvm_irqfd.h>
> > >   #include <linux/irqbypass.h>
> > > +#include <linux/log2.h>
> > >   #include <linux/sched/stat.h>
> > >   #include <linux/psci.h>
> > >   #include <trace/events/kvm.h>
> > > @@ -203,6 +204,31 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
> > >   		r = 0;
> > >   		set_bit(KVM_ARCH_FLAG_EXIT_SEA, &kvm->arch.flags);
> > >   		break;
> > > +	case KVM_CAP_ARM_HDBSS_BUFFER_SIZE: {
> > > +		u64 size = cap->args[0];
> > > +
> > > +		if (!system_supports_hdbss())
> > > +			break;
> > > +		if (kvm->dirty_ring_size)
> > > +			break;
> > > +		if (size < KVM_ARM_HDBSS_DEFAULT_SIZE ||
> > > +		    size > KVM_ARM_HDBSS_MAX_SIZE)
> > > +			break;
> > > +		if (!is_power_of_2(size))
> > > +			break;
> > > +
> > > +		mutex_lock(&kvm->lock);
> > > +		if (kvm->created_vcpus) {
> > > +			r = -EINVAL;
> > > +		} else if (kvm->arch.hdbss_buffer_size) {
> > > +			r = -EBUSY;
> > > +		} else {
> > > +			kvm->arch.hdbss_buffer_size = size;
> > > +			r = 0;
> > > +		}
> > > +		mutex_unlock(&kvm->lock);
> > > +		break;
> > > +	}
> > >   	default:
> > >   		break;
> > >   	}
> > > @@ -500,6 +526,14 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
> > >   		else
> > >   			r = KVM_ARM_EAGER_SPLIT_CHUNK_SIZE_DEFAULT;
> > >   		break;
> > > +	case KVM_CAP_ARM_HDBSS_BUFFER_SIZE:
> > > +		if (!system_supports_hdbss())
> > > +			r = 0;
> > > +		else if (kvm)
> > > +			r = kvm->arch.hdbss_buffer_size ?: KVM_ARM_HDBSS_DEFAULT_SIZE;
> > 
> > This whole thing of allowing hdbss_buf_size to be set only once makes
> > everything more complex. Why do we have this limitation again?
> > 
> > I mean, if we want to restrict size changes after the first hdbss buffer
> > gets allocated, it makes sense, other than that, I would like to understand
> > the reason for that.
> > 
> > Thanks!
> > Leo
> 
> Hi Leo,
> 
> You're right, I re-examined the whole flow and the "set once"
> restriction isn't actually needed. I'll remove it.
> 

Awesome, thanks!
Leo

  reply	other threads:[~2026-11-06 15:37 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-29 10:36 [PATCH v5 00/15] KVM: arm64: FEAT_HDBSS support for stage-2 dirty tracking Tian Zheng
2026-09-29 10:36 ` [PATCH v5 01/15] KVM: arm64: pgtables: Change write bit from S2AP_W to DBM Tian Zheng
2026-09-30  0:25   ` Oliver Upton
2026-09-30  2:44     ` Tian Zheng
2026-10-26 15:02       ` Leonardo Bras
2026-10-29  7:08         ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 02/15] KVM: arm64: Add KVM_PGTABLE_PROT_DIRTY Tian Zheng
2026-09-30  0:35   ` Oliver Upton
2026-09-30  2:57     ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 03/15] KVM: arm64: Introduce a dedicated walker for stage2 write-protect Tian Zheng
2026-09-29 10:36 ` [PATCH v5 04/15] KVM: arm64: Add KVM_REQ_RELOAD_STAGE2 Tian Zheng
2026-09-29 10:50   ` sashiko-bot
2026-09-30  1:44     ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 05/15] KVM: arm64: Harvest stage-2 dirty state into the host folio account Tian Zheng
2026-10-26 18:05   ` Leonardo Bras
2026-10-29 14:02     ` Tian Zheng
2026-10-30 12:24       ` Leonardo Bras
2026-11-06  3:16         ` Tian Zheng
2026-11-06 12:04           ` Leonardo Bras
2026-09-29 10:36 ` [PATCH v5 06/15] KVM: arm64: Add support for FEAT_HDBSS Tian Zheng
2026-10-26 18:12   ` Leonardo Bras
2026-10-30  2:53     ` Tian Zheng
2026-10-30 14:15       ` Leonardo Bras
2026-09-29 10:36 ` [PATCH v5 07/15] KVM: arm64: Add HDBSS per-vCPU buffer management Tian Zheng
2026-10-26 18:27   ` Leonardo Bras
2026-10-30  3:47     ` Tian Zheng
2026-10-30 14:47       ` Leonardo Bras
2026-11-06  8:49         ` Tian Zheng
2026-11-06 15:21           ` Leonardo Bras
2026-09-29 10:36 ` [PATCH v5 08/15] KVM: arm64: Flush the HDBSS buffer on VM exit Tian Zheng
2026-10-27 18:13   ` Leonardo Bras
2026-10-30  4:57     ` Tian Zheng
2026-10-30 16:52       ` Leonardo Bras
2026-11-06  9:02         ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 09/15] KVM: arm64: Handle HDBSS faults Tian Zheng
2026-09-29 10:53   ` sashiko-bot
2026-11-09  7:36     ` Tian Zheng
2026-11-02 14:34   ` Leonardo Bras
2026-11-06  9:44     ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 10/15] KVM: Add kvm_arch_dirty_ring_size_updated() hook Tian Zheng
2026-09-29 10:52   ` sashiko-bot
2026-11-09  6:37     ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 11/15] KVM: arm64: Reserve dirty ring space for the HDBSS buffer Tian Zheng
2026-09-29 11:00   ` sashiko-bot
2026-11-09 10:03     ` Tian Zheng
2026-11-09 18:07       ` Leonardo Bras
2026-11-02 14:54   ` Leonardo Bras
2026-11-06 10:36     ` Tian Zheng
2026-11-06 15:36       ` Leonardo Bras
2026-11-09  4:00         ` Tian Zheng
2026-11-09 18:18           ` Leonardo Bras
2026-11-10  8:54             ` Tian Zheng
2026-11-10 12:49               ` Leonardo Bras
2026-11-12 13:15                 ` Tian Zheng
2026-11-12 15:26                   ` Leonardo Bras
2026-11-06 10:58     ` Tian Zheng
2026-09-29 10:36 ` [PATCH v5 12/15] KVM: arm64: Derive the VM hardware dirty mode from dirty logging Tian Zheng
2026-09-29 11:16   ` sashiko-bot
2026-09-30  8:27     ` Tian Zheng
2026-11-02 15:03   ` Leonardo Bras
2026-11-06 10:46     ` Tian Zheng
2026-11-06 15:37       ` Leonardo Bras
2026-09-29 10:36 ` [PATCH v5 13/15] KVM: arm64: Add HDBSS buffer size ioctl for dirty-bitmap mode Tian Zheng
2026-11-02 15:12   ` Leonardo Bras
2026-11-06 10:27     ` Tian Zheng
2026-11-06 15:37       ` Leonardo Bras [this message]
2026-09-29 10:36 ` [PATCH v5 14/15] KVM: arm64: Document HDBSS buffer size ioctl Tian Zheng
2026-09-29 11:06   ` sashiko-bot
2026-09-29 10:36 ` [PATCH v5 15/15] KVM: arm64: selftests: Add HDBSS buffer size ioctl interface test Tian Zheng

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=au30PSHX_UBIIx_Y@LeoBrasDK \
    --to=leo.bras@arm.com \
    --cc=caijian11@h-partners.com \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=fuad.tabba@linux.dev \
    --cc=joey.gouly@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=liuyonglong@huawei.com \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=oupton@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rdunlap@infradead.org \
    --cc=seanjc@google.com \
    --cc=seiden@linux.ibm.com \
    --cc=skhan@linuxfoundation.org \
    --cc=suzuki.poulose@arm.com \
    --cc=tangchengchang@huawei.com \
    --cc=wangzhou1@hisilicon.com \
    --cc=will@kernel.org \
    --cc=yangjinqian1@huawei.com \
    --cc=yezhenyu2@huawei.com \
    --cc=yubihong@huawei.com \
    --cc=yuzenghui@huawei.com \
    --cc=zhengtian10@huawei.com \
    /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.