[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 5/5] xen/arm: Support ARM standard PV time for domains created via toolstack


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Koichiro Den <den@xxxxxxxxxxxxx>
  • Date: Wed, 9 Jul 2025 17:04:17 +0900
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=yfP7CC/JxIt9m+JVWBk7zPJB3UkSUYo3PR2K9A+WYvg=; b=g65RYGgyhZftNRMzW2Ik08RGliaYAp0LbyAnC7acFHPW3B77eF/u2i35Z4NiyuNjhKUJAvvOXA9YD96gSkNx16zqbCQZYllXFErohPXxSXjermiBjxYxYmWWow4C4vRq3eyBidNXvTLPqK04DcHV+PPohPGJdO3g1ZMWtAAvNql8RsUaDsZNpS0JuFhh3i1cp0PWIdv8lMA/FHIE/EZDMgDcb8N31PqamrfKW7b4vVoEN0njbx7opP53YcWz6xvN1gf4ULZmJmcWRjtEmJjnU6RSQcSwaaDCm5Y02+Ef065NZ5+BBnuYC+WR63/JNhj4KPgXDhN4lnuNIVYCIgTIBg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bUVZLCczkcastHVdCFYhKfOHY3ZRsbGMNQO1dKdOABpMyksiSJzLG0W/uzsvpAK9zKGpHdQpePugIDNcfEnio9BPxN4+DHhWcbnctGXu9dqc1/k0yp6DjxX7aGig0s9ZZ+E9N75DsoPCgdznfK5dpsImAr7vWBA+FPygn0xOKf9+z20Ae/0O/DcZtjRL3TvxTWBrrHISkcG/lpDqWwICvw3RO/AyLDwzehDbOqZ6Zu970Kx0iB3jSQ4gfLBkUXzzuNd5QQ3yYWdFEidpBxmu17QiRV9IqYd44SlkF11NB3UvZOSm/sw1lZLV45OAjFGwgIiuwKlhjJZJQYYn2ZCqQA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp;
  • Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Julien Grall <julien@xxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
  • Delivery-date: Wed, 09 Jul 2025 08:04:31 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Mon, Jul 07, 2025 at 10:01:47AM +0200, Jan Beulich wrote:
> On 05.07.2025 16:27, Koichiro Den wrote:
> > --- a/xen/arch/arm/mm.c
> > +++ b/xen/arch/arm/mm.c
> > @@ -180,7 +180,21 @@ int xenmem_add_to_physmap_one(
> >      case XENMAPSPACE_dev_mmio:
> >          rc = map_dev_mmio_page(d, gfn, _mfn(idx));
> >          return rc;
> > +    case XENMAPSPACE_pv_time:
> > +#ifdef CONFIG_ARM_64
> 
> These two lines want to change places, I think.

Will fix it, thank you.

> 
> > +        ASSERT(IS_POWER_OF_TWO(sizeof(struct pv_time_region)));
> 
> BUILD_BUG_ON() please, so that an issue here can be spotted at build time
> rather than only at runtime.
> 
> > +        if ( idx >= DIV_ROUND_UP(d->max_vcpus * sizeof(struct 
> > pv_time_region),
> > +                                 PAGE_SIZE) )
> > +            return -EINVAL;
> > +
> > +        if ( idx == 0 )
> > +            d->arch.pv_time_regions_gfn = gfn;
> 
> This looks fragile, as it'll break once d->max_vcpus can grow large enough to
> permit a non-zero idx by way of the earlier if() falling through. Imo you'll
> need at least one further BUILD_BUG_ON() here.

get_pv_region() can legitimately call xc_domain_add_to_physmap(..,
XENMAPSPACE_pv_time, ..) with idx > 0, but only if the preceding call with
idx == 0 succeeded. So while this may look odd at first glance, I think
this is not broken. What do you think?

> 
> >  
> > +        mfn = virt_to_mfn(d->arch.pv_time_regions[idx]);
> > +        t = p2m_ram_ro;
> 
> Is this the correct type to use here? That is, do you really mean guest write
> attempts to be silently dropped, rather than being reported to the guest as a
> fault? Then again I can't see such behavior being implemented on Arm, despite
> the comment on the enumerator saying so (likely inherited from x86).

No I didn't intend the "silently drop" behavior. IIUC, we may as well
correct the comment on the enum for Arm:

    diff --git a/xen/arch/arm/include/asm/p2m.h b/xen/arch/arm/include/asm/p2m.h
    index 2d53bf9b6177..927c588dbcb0 100644
    --- a/xen/arch/arm/include/asm/p2m.h
    +++ b/xen/arch/arm/include/asm/p2m.h
    @@ -123,7 +123,7 @@ struct p2m_domain {
     typedef enum {
         p2m_invalid = 0,    /* Nothing mapped here */
         p2m_ram_rw,         /* Normal read/write guest RAM */
    -    p2m_ram_ro,         /* Read-only; writes are silently dropped */
    +    p2m_ram_ro,         /* Read-only */

> 
> > +        break;
> > +#endif
> >      default:
> >          return -ENOSYS;
> >      }
> 
> As to style: Please, rather than absorbing the blank line that was there, make
> sure non-fall-through case blocks are separated from adjacent ones by a blank
> line.

Will do so in the next take.

> 
> > --- a/xen/include/public/memory.h
> > +++ b/xen/include/public/memory.h
> > @@ -217,6 +217,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_mapping_t);
> >                                        Stage-2 using the Normal Memory
> >                                        Inner/Outer Write-Back Cacheable
> >                                        memory attribute. */
> > +#define XENMAPSPACE_pv_time      6 /* PV time shared region (ARM64 only) */
> 
> The comment isn't specific enough. As per the struct declaration in patch 4,
> this interface is solely about stolen time. There's a wider PV interface,
> which at least x86 Linux also uses, and which has been adopted by KVM as
> well iirc. Hence this new type wants to clarify what exactly it's used for
> right now, while leaving open other uses on other architectures.

That sounds reasonable, I'll update it in the next iteration.

Thanks for the review.
-Koichiro

> 
> Jan



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.