qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Xiaoyao Li <xiaoyao.li@intel.com>
To: "Chenyi Qiang" <chenyi.qiang@intel.com>,
	"Peter Xu" <peterx@redhat.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Alexey Kardashevskiy" <aik@amd.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Philippe Mathieu-Daudé" <philmd@linaro.org>
Cc: qemu-devel@nongnu.org, Gao Chao <chao.gao@intel.com>,
	Farrah Chen <farrah.chen@intel.com>
Subject: Re: [PATCH v2 1/2] ram-block-attributes: Avoid the overkill of shared memory with hugetlbfs backend
Date: Fri, 24 Oct 2025 08:16:19 +0800	[thread overview]
Message-ID: <c161e462-53f8-4d90-9133-b00164a33301@intel.com> (raw)
In-Reply-To: <20251023095526.48365-2-chenyi.qiang@intel.com>

On 10/23/2025 5:55 PM, Chenyi Qiang wrote:
> Currently, CoCo VMs can perform conversion at the base page granularity,
> which is the granularity that has to be tracked. In relevant setups, the
> target page size is assumed to be equal to the host page size, thus
> fixing the block size to the host page size.
> 
> However, since private memory and shared memory have different backend
> at present, users can specify shared memory with a hugetlbfs backend
> while private memory with guest_memfd backend only supports 4K page
> size. In this scenario, ram_block->page_size is different from the host
> page size which will trigger an assertion when retrieving the block
> size.
> 
> To address this, return the host page size directly to relax the
> restriction. This changes fixes a regression of using hugetlbfs backend
> for shared memory within CoCo VMs, with or without VFIO devices' presence.
> 
> Acked-by: David Hildenbrand <david@redhat.com>
> Tested-by: Farrah Chen <farrah.chen@intel.com>
> Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>

The change looks good to me.

Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>

> ---
> Changes in v2:
>    - Modify the commit message
>    - Remove the argument in ram_block_attributes_get_block_size()
> ---
>   system/ram-block-attributes.c | 18 ++++++++----------
>   1 file changed, 8 insertions(+), 10 deletions(-)
> 
> diff --git a/system/ram-block-attributes.c b/system/ram-block-attributes.c
> index 68e8a027032..a7579de5b46 100644
> --- a/system/ram-block-attributes.c
> +++ b/system/ram-block-attributes.c
> @@ -22,16 +22,14 @@ OBJECT_DEFINE_SIMPLE_TYPE_WITH_INTERFACES(RamBlockAttributes,
>                                             { })
>   
>   static size_t
> -ram_block_attributes_get_block_size(const RamBlockAttributes *attr)
> +ram_block_attributes_get_block_size(void)
>   {
>       /*
>        * Because page conversion could be manipulated in the size of at least 4K
>        * or 4K aligned, Use the host page size as the granularity to track the
>        * memory attribute.
>        */
> -    g_assert(attr && attr->ram_block);
> -    g_assert(attr->ram_block->page_size == qemu_real_host_page_size());
> -    return attr->ram_block->page_size;
> +    return qemu_real_host_page_size();
>   }
>   
>   
> @@ -40,7 +38,7 @@ ram_block_attributes_rdm_is_populated(const RamDiscardManager *rdm,
>                                         const MemoryRegionSection *section)
>   {
>       const RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm);
> -    const size_t block_size = ram_block_attributes_get_block_size(attr);
> +    const size_t block_size = ram_block_attributes_get_block_size();
>       const uint64_t first_bit = section->offset_within_region / block_size;
>       const uint64_t last_bit =
>           first_bit + int128_get64(section->size) / block_size - 1;
> @@ -81,7 +79,7 @@ ram_block_attributes_for_each_populated_section(const RamBlockAttributes *attr,
>   {
>       unsigned long first_bit, last_bit;
>       uint64_t offset, size;
> -    const size_t block_size = ram_block_attributes_get_block_size(attr);
> +    const size_t block_size = ram_block_attributes_get_block_size();
>       int ret = 0;
>   
>       first_bit = section->offset_within_region / block_size;
> @@ -122,7 +120,7 @@ ram_block_attributes_for_each_discarded_section(const RamBlockAttributes *attr,
>   {
>       unsigned long first_bit, last_bit;
>       uint64_t offset, size;
> -    const size_t block_size = ram_block_attributes_get_block_size(attr);
> +    const size_t block_size = ram_block_attributes_get_block_size();
>       int ret = 0;
>   
>       first_bit = section->offset_within_region / block_size;
> @@ -163,7 +161,7 @@ ram_block_attributes_rdm_get_min_granularity(const RamDiscardManager *rdm,
>       const RamBlockAttributes *attr = RAM_BLOCK_ATTRIBUTES(rdm);
>   
>       g_assert(mr == attr->ram_block->mr);
> -    return ram_block_attributes_get_block_size(attr);
> +    return ram_block_attributes_get_block_size();
>   }
>   
>   static void
> @@ -265,7 +263,7 @@ ram_block_attributes_is_valid_range(RamBlockAttributes *attr, uint64_t offset,
>       g_assert(mr);
>   
>       uint64_t region_size = memory_region_size(mr);
> -    const size_t block_size = ram_block_attributes_get_block_size(attr);
> +    const size_t block_size = ram_block_attributes_get_block_size();
>   
>       if (!QEMU_IS_ALIGNED(offset, block_size) ||
>           !QEMU_IS_ALIGNED(size, block_size)) {
> @@ -322,7 +320,7 @@ int ram_block_attributes_state_change(RamBlockAttributes *attr,
>                                         uint64_t offset, uint64_t size,
>                                         bool to_discard)
>   {
> -    const size_t block_size = ram_block_attributes_get_block_size(attr);
> +    const size_t block_size = ram_block_attributes_get_block_size();
>       const unsigned long first_bit = offset / block_size;
>       const unsigned long nbits = size / block_size;
>       const unsigned long last_bit = first_bit + nbits - 1;



  parent reply	other threads:[~2025-10-24  0:17 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-23  9:55 [PATCH v2 0/2] Fix a regression with hugetlbfs for shared memory in CoCo VMs Chenyi Qiang
2025-10-23  9:55 ` [PATCH v2 1/2] ram-block-attributes: Avoid the overkill of shared memory with hugetlbfs backend Chenyi Qiang
2025-10-23 10:16   ` David Hildenbrand
2025-10-23 13:47     ` Peter Xu
2025-10-24  0:16   ` Xiaoyao Li [this message]
2025-10-23  9:55 ` [PATCH v2 2/2] ram-block-attributes: Unify the retrieval of the block size Chenyi Qiang
2025-10-23 10:17   ` David Hildenbrand
2025-10-23 11:52     ` Chenyi Qiang
2025-10-24  0:16   ` Xiaoyao Li

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=c161e462-53f8-4d90-9133-b00164a33301@intel.com \
    --to=xiaoyao.li@intel.com \
    --cc=aik@amd.com \
    --cc=chao.gao@intel.com \
    --cc=chenyi.qiang@intel.com \
    --cc=david@redhat.com \
    --cc=farrah.chen@intel.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).