All of lore.kernel.org
 help / color / mirror / Atom feed
From: Penny Zheng <Penny.Zheng@arm.com>
To: Julien Grall <julien@xen.org>,
	"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Stefano Stabellini <sstabellini@kernel.org>,
	Bertrand Marquis <Bertrand.Marquis@arm.com>,
	Volodymyr Babchuk <Volodymyr_Babchuk@epam.com>
Subject: RE: [PATCH v6 1/9] xen/arm: introduce static shared memory
Date: Mon, 29 Aug 2022 06:57:28 +0000	[thread overview]
Message-ID: <AM0PR08MB453055962750CBD525997CE7F7769@AM0PR08MB4530.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <ce6c2e20-2d5f-dccc-e4d0-0e8ce92caeb4@xen.org>

> -----Original Message-----
> From: Julien Grall <julien@xen.org>
> Sent: Friday, August 26, 2022 9:17 PM
> To: Penny Zheng <Penny.Zheng@arm.com>; xen-devel@lists.xenproject.org
> Cc: Stefano Stabellini <sstabellini@kernel.org>; Bertrand Marquis
> <Bertrand.Marquis@arm.com>; Volodymyr Babchuk
> <Volodymyr_Babchuk@epam.com>
> 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@arm.com>
> >
> > 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@arm.com>
> > ---
> > 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

  reply	other threads:[~2022-08-29  6:58 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-21 13:21 [PATCH v6 0/9] static shared memory on dom0less system Penny Zheng
2022-07-21 13:21 ` [PATCH v6 1/9] xen/arm: introduce static shared memory Penny Zheng
2022-08-26 13:17   ` Julien Grall
2022-08-29  6:57     ` Penny Zheng [this message]
2022-08-29 21:16       ` Stefano Stabellini
2022-09-01 15:40       ` Julien Grall
2022-09-01 15:44         ` Bertrand Marquis
2022-09-02  3:26         ` Penny Zheng
2022-09-02  8:13           ` Julien Grall
2022-07-21 13:21 ` [PATCH v6 2/9] xen/arm: allocate static shared memory to the default owner dom_io Penny Zheng
2022-08-26 13:59   ` Julien Grall
2022-07-21 13:21 ` [PATCH v6 3/9] xen/arm: allocate static shared memory to a specific owner domain Penny Zheng
2022-07-21 13:21 ` [PATCH v6 4/9] xen/arm: introduce put_page_nr and get_page_nr Penny Zheng
2022-07-21 13:21 ` [PATCH v6 5/9] xen/arm: Add additional reference to owner domain when the owner is allocated Penny Zheng
2022-09-01 17:12   ` Julien Grall
2022-09-02  1:59     ` Stefano Stabellini
2022-07-21 13:21 ` [PATCH v6 6/9] xen/arm: set up shared memory foreign mapping for borrower domain Penny Zheng
2022-07-21 13:21 ` [PATCH v6 7/9] xen/arm: create shared memory nodes in guest device tree Penny Zheng
2022-08-26 13:13   ` Julien Grall
2022-07-21 13:21 ` [PATCH v6 8/9] xen/arm: enable statically shared memory on Dom0 Penny Zheng
2022-07-21 13:21 ` [PATCH v6 9/9] xen: Add static memory sharing in SUPPORT.md Penny Zheng
2022-08-26  7:21   ` Michal Orzel
2022-08-29  6:20     ` Penny 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=AM0PR08MB453055962750CBD525997CE7F7769@AM0PR08MB4530.eurprd08.prod.outlook.com \
    --to=penny.zheng@arm.com \
    --cc=Bertrand.Marquis@arm.com \
    --cc=Volodymyr_Babchuk@epam.com \
    --cc=julien@xen.org \
    --cc=sstabellini@kernel.org \
    --cc=xen-devel@lists.xenproject.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 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.