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

RE: [PATCH v6 1/9] xen/arm: introduce static shared memory


  • To: Julien Grall <julien@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Penny Zheng <Penny.Zheng@xxxxxxx>
  • Date: Mon, 29 Aug 2022 06:57:28 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=m7h6UkEUgGUt7qynhP5I71NuSYAdge7kW5t0hkkkOxE=; b=A4ZyU7ttPsiA+Kd5p+GdVep9GyOz2W6gGdoJGyWODCcfqIkWWrS2CrYYX1bQMI7AaFm+ML8K1i/uKHHDMbT7dBvnPp7XlD68O0Hzxf28e2rjNr3rPwPuSNWXEgFdMBXN21h71GhPJrcIVD2YvC17zSZ6ThddRPzZbtdN6yr8ybV9RueRDFJdDIbBw1997TLDIwweVsvBkMxjBQgoJKLmcYp0oxJ27YG01Y1Xy7OTBLWHHCdCufy2wgPq/EDyGPBsrUHKHYsOcbVDhFH7iMIUxf5WED6y5h7Xn6dU9rzaBwjlesuldNAdbQMMNdIK4b7fDlwpqzLZf02Qk1AtRqRDoQ==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=m7h6UkEUgGUt7qynhP5I71NuSYAdge7kW5t0hkkkOxE=; b=ZNjQCHbAlYZ+u596vwjQ9gYBzgqw6wc6jf/+wMG87OJssmG2XhObgaLaXUODZjTMQKFwwG71Ywrhup5kc8t5dwerkZ4H5aWm34/r7LRZmRny+VE1cjwkKtKNkaomXdSggCE2QoYcDH3Mq4jOTEPLDwW7rEqF6GYOX+zJvENfAZeeI7n0dKRgnOqCisUws7E/LpVaDixweRGTx91CTlDx6YMM8pigm7vI5QbJk/7lZdTqrNsox7PoebzTS9YVrDYgmgXMjweB19lkmynLZgMH/EFTMw/Zc8G8kzBvS8PvDE/J//3rFA7L4Cx2v+W/Ce7tKzY8P0Vpo6Q1Y/xdEan2ng==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=maeKmc6BrIKNdMdLL+IATizU085H+CPgLq0pKYD5Oo0PDq1fOL9TqjLAcS78WPY1y6md91bPehi6cn7vEvE0XeZ/LRgC2xrrP8e+GV/YswuxkXeuhCbFvqROKNy+4FXTDa2UHDKoYZv5ZECtU7IWaihZ7/iEjBRK64gSpvRdKyMvH4oEO6ArOQR6AU2vlOTFChNu9Yq5H01krRevKBRq9NtE6gre7L9rz7nxFqddodzeSEiyWGUENe3TOYkuBqAoLn3Fxn5WM2kC+RgkWl96o6x0g9dJO9oBTy1vsJeSnxlRarKp4Nc5PkudSG6LvtMgw15VILgZ9LR8u1rZUmyzxQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gP0t9Gp7BJtNu5NiRNeBfqRVRvtOXy/yFmCtJzWRfOyX8p6b8w3W6hidZhNaUWXQQo26AFN2YNVx84uwTbIsXFRbfyxEYwkgXMlsJ9SbCZ4IYvyjt7pQ4SfMeU63kdhS4zNEsaJUNomiqzVTiE68654+F28XTsIXiVLGY7ZRhOyJDsdyDQid7tv4hwauc0IGd0rGC3MvD2Ev5q6+2Ipu4TiGx0ahf5w3ETpffFlw+Ip455ra8L0mpmd5NoaA+lSCw+PPWTtWcUy8Dbfp+yFbHF7/rJNkZRBJartX40NpkkbVHlqvOkcqCB/UOmDSkFzQ4WqOCH8/f2gJ9rgHKO4c7w==
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>
  • Delivery-date: Mon, 29 Aug 2022 06:57:50 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHYnQTR3P1Hf4Rlc0O1VRJveInV4K3BYj8AgARCxIA=
  • Thread-topic: [PATCH v6 1/9] xen/arm: introduce static shared memory

> -----Original Message-----
> From: Julien Grall <julien@xxxxxxx>
> Sent: Friday, August 26, 2022 9:17 PM
> To: Penny Zheng <Penny.Zheng@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>; Bertrand Marquis
> <Bertrand.Marquis@xxxxxxx>; Volodymyr Babchuk
> <Volodymyr_Babchuk@xxxxxxxx>
> Subject: Re: [PATCH v6 1/9] xen/arm: introduce static shared memory
> 
> Hi Penny,
>

Hi Julien
 
> On 21/07/2022 14:21, Penny Zheng wrote:
> > From: Penny Zheng <penny.zheng@xxxxxxx>
> >
> > This patch series introduces a new feature: setting up static shared
> > memory on a dom0less system, through device tree configuration.
> >
> > This commit parses shared memory node at boot-time, and reserve it in
> > bootinfo.reserved_mem to avoid other use.
> >
> > This commits proposes a new Kconfig CONFIG_STATIC_SHM to wrap
> > static-shm-related codes, and this option depends on static memory(
> > CONFIG_STATIC_MEMORY). That's because that later we want to reuse a
> > few helpers, guarded with CONFIG_STATIC_MEMORY, like
> > acquire_staticmem_pages, etc, on static shared memory.
> >
> > Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx>
> > ---
> > v6 change:
> > - when host physical address is ommited, output the error message
> > since xen doesn't support it at the moment
> > - add the following check: 1) The shm ID matches and the region
> > exactly match
> > 2) The shm ID doesn't match and the region doesn't overlap
> > - change it to "unsigned int" to be aligned with nr_banks
> > - check the len of the property to confirm is it big enough to contain
> > "paddr", "size", and "gaddr"
> > - shm_id defined before nr_shm_domain, so we could re-use the existing
> > hole and avoid increasing the size of the structure.
> > - change "nr_shm_domain" to "nr_shm_borrowers", to not increment if
> > the role is owner in parsing code
> > - make "xen,shm_id" property as arbitrary string, with a strict limit
> > on the number of characters, MAX_SHM_ID_LENGTH
> > ---
> > v5 change:
> > - no change
> > ---
> > v4 change:
> > - nit fix on doc
> > ---
> > v3 change:
> > - make nr_shm_domain unsigned int
> > ---
> > v2 change:
> > - document refinement
> > - remove bitmap and use the iteration to check
> > - add a new field nr_shm_domain to keep the number of shared domain
> > ---
> >   docs/misc/arm/device-tree/booting.txt | 124 ++++++++++++++++++++
> >   xen/arch/arm/Kconfig                  |   6 +
> >   xen/arch/arm/bootfdt.c                | 157 ++++++++++++++++++++++++++
> >   xen/arch/arm/include/asm/setup.h      |   9 ++
> >   4 files changed, 296 insertions(+)
> >
> > diff --git a/docs/misc/arm/device-tree/booting.txt
> > b/docs/misc/arm/device-tree/booting.txt
> > index 98253414b8..8013fb98fe 100644
> > --- a/docs/misc/arm/device-tree/booting.txt
> > +++ b/docs/misc/arm/device-tree/booting.txt
> > @@ -378,3 +378,127 @@ device-tree:
> >
> >   This will reserve a 512MB region starting at the host physical address
> >   0x30000000 to be exclusively used by DomU1.
> > +
> > +Static Shared Memory
> > +====================
> > +
> > +The static shared memory device tree nodes allow users to statically
> > +set up shared memory on dom0less system, enabling domains to do
> > +shm-based communication.
> > +
> > +- compatible
> > +
> > +    "xen,domain-shared-memory-v1"
> > +
> > +- xen,shm-id
> > +
> > +    An arbitrary string that represents the unique identifier of the shared
> > +    memory region, with a strict limit on the number of characters(\0
> included),
> > +    `MAX_SHM_ID_LENGTH(16)`. e.g. "xen,shm-id = "my-shared-mem-1"".
> > +
> > +- xen,shared-mem
> > +
> > +    An array takes a physical address, which is the base address of the
> > +    shared memory region in host physical address space, a size, and a
> guest
> > +    physical address, as the target address of the mapping.
> > +    e.g. xen,shared-mem = < [host physical address] [size] [guest
> > + address] >
> 
> Your implementation below is checking for overlap and also have some
> restriction. Can they be documented in the binding?
> 
> > +
> > +    The number of cells for the host address (and size) is the same as the
> > +    guest pseudo-physical address and they are inherited from the parent
> node.
> 
> In v5, we discussed to have the host address optional. However, the binding
> has not been updated to reflect that. Note that I am not asking to implement,
> but instead request that the binding can be used for such setup.
> 

How about:
"
Host physical address could be omitted by users, and let Xen decide where it 
locates.
"
Do you think I shall further point out that right now, this part feature is not 
implemented
in codes?

> > a/xen/arch/arm/include/asm/setup.h
> b/xen/arch/arm/include/asm/setup.h
> > index 2bb01ecfa8..39d4e93b8b 100644
> > --- a/xen/arch/arm/include/asm/setup.h
> > +++ b/xen/arch/arm/include/asm/setup.h
> > @@ -23,10 +23,19 @@ typedef enum {
> >   }  bootmodule_kind;
> >
> >
> > +#ifdef CONFIG_STATIC_SHM
> > +/* Indicates the maximum number of characters(\0 included) for shm_id
> > +*/ #define MAX_SHM_ID_LENGTH 16 #endif
> 
> Is the #ifdef really needed?
> 
> > +
> >   struct membank {
> >       paddr_t start;
> >       paddr_t size;
> >       bool xen_domain; /* whether the memory bank is bound to a Xen
> > domain. */
> > +#ifdef CONFIG_STATIC_SHM
> > +    char shm_id[MAX_SHM_ID_LENGTH];
> > +    unsigned int nr_shm_borrowers;
> > +#endif
> >   };
> 
> If I calculated right, the structure will grow from 24 to 40 bytes. At the
> moment, this is protected with CONFIG_STATIC_SHM which is unsupported.
> However, I think we will need to do something as we can't continue to grow
> 'membank' like that.
> 
> I don't have a quick suggestion for 4.17 (the feature freeze is in a week). 
> Long
> term, I think we will want to consider to move the shm ID in a separate array
> that could be referenced here.
> 
> The other solution would be to have the shared memory regions in a
> separate array. They would have their own structure which would either
> embedded "membank" or contain a pointer/index to the bank.
> 

Ok, so other than this fixing, others will be addressed in the next serie. And 
this
part fixing will be introduced in a new follow-up patch serie after 4.17 
release.

I'm in favor of introducing a new structure to contain shm-related data and let
'membank' contains a pointer to it, like
```
 +struct shm_membank {
+    char shm_id[MAX_SHM_ID_LENGTH];
+    unsigned int nr_shm_borrowers;
+}
+
 struct membank {
     paddr_t start;
     paddr_t size;
     bool xen_domain; /* whether the memory bank is bound to a Xen domain. */
+    struct shm_membank *shm;
 };
```
Then every time we introduce a new feature here, following this strategy, 
'membank' will
at most grow 8 bytes for the reference.

I'm open to the discussion and will let it decide what it finally will be. ;)

> Cheers,
> 
> --
> Julien Grall

Cheers,

--
Penny Zheng

 


Rackspace

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