All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Chen <Wei.Chen@arm.com>
To: Stefano Stabellini <sstabellini@kernel.org>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
	"julien@xen.org" <julien@xen.org>,
	Bertrand Marquis <Bertrand.Marquis@arm.com>,
	Penny Zheng <Penny.Zheng@arm.com>,
	Henry Wang <Henry.Wang@arm.com>, nd <nd@arm.com>
Subject: RE: Proposal for Porting Xen to Armv8-R64 - DraftA
Date: Thu, 3 Mar 2022 01:05:38 +0000	[thread overview]
Message-ID: <PAXPR08MB742017360AAF65AC2CCB1DF49E049@PAXPR08MB7420.eurprd08.prod.outlook.com> (raw)
In-Reply-To: <alpine.DEB.2.22.394.2203021454090.3261@ubuntu-linux-20-04-desktop>

Hi Stefano,

> -----Original Message-----
> From: Stefano Stabellini <sstabellini@kernel.org>
> Sent: 2022年3月3日 6:56
> To: Wei Chen <Wei.Chen@arm.com>
> Cc: Stefano Stabellini <sstabellini@kernel.org>; xen-
> devel@lists.xenproject.org; julien@xen.org; Bertrand Marquis
> <Bertrand.Marquis@arm.com>; Penny Zheng <Penny.Zheng@arm.com>; Henry Wang
> <Henry.Wang@arm.com>; nd <nd@arm.com>
> Subject: RE: Proposal for Porting Xen to Armv8-R64 - DraftA
> 
> On Wed, 2 Mar 2022, Wei Chen wrote:
> > > > > > > If not, and considering that we have to generate
> > > > > > > ARM_MPU_*_MEMORY_START/END anyway at build time, would it make
> > > sense
> > > > > to
> > > > > > > also generate mpu,guest-memory-section, xen,static-mem, etc.
> at
> > > build
> > > > > > > time rather than passing it via device tree to Xen at runtime?
> > > > > > >
> > > > > >
> > > > > > Did you mean we still add these information in device tree, but
> for
> > > > > build
> > > > > > time only. In runtime we don't parse them?
> > > > >
> > > > > Yes, something like that, but see below.
> > > > >
> > > > >
> > > > > > > What's the value of doing ARM_MPU_*_MEMORY_START/END at build
> time
> > > and
> > > > > > > everything else at runtime?
> > > > > >
> > > > > > ARM_MPU_*_MEMORY_START/END is defined by platform. But other
> things
> > > are
> > > > > > users customized. They can change their usage without rebuild
> the
> > > image.
> > > > >
> > > > > Good point.
> > > > >
> > > > > We don't want to have to rebuild Xen if the user updated a guest
> > > kernel,
> > > > > resulting in a larger boot-module-section.
> > > > >
> > > > > So I think it makes sense that "mpu,boot-module-section" is
> generated
> > > by
> > > > > the scripts (e.g. ImageBuilder) at build time, and Xen reads the
> > > > > property at boot from the runtime device tree.
> > > > >
> > > > > I think we need to divide the information into two groups:
> > > > >
> > > > >
> > > > > # Group1: board info
> > > > >
> > > > > This information is platform specific and it is not meant to
> change
> > > > > depending on the VM configuration. Ideally, we build Xen for a
> > > platform
> > > > > once, then we can use the same Xen binary together with any
> > > combination
> > > > > of dom0/domU kernels and ramdisks.
> > > > >
> > > > > This kind of information doesn't need to be exposed to the runtime
> > > > > device tree. But we can still use a build-time device tree to
> generate
> > > > > the addresses if it is convenient.
> > > > >
> > > > > XEN_START_ADDRESS, ARM_MPU_DEVICE_MEMORY_*, and
> > > ARM_MPU_NORMAL_MEMORY_*
> > > > > seem to be part of this group.
> > > > >
> > > >
> > > > Yes.
> > > >
> > > > >
> > > > > # Group2: boot configuration
> > > > >
> > > > > This information is about the specific set of binaries and VMs
> that we
> > > > > need to boot. It is conceptually similar to the dom0less device
> tree
> > > > > nodes that we already have. If we change one of the VM binaries,
> we
> > > > > likely have to refresh the information here.
> > > > >
> > > > > "mpu,boot-module-section" probably belongs to this group (unless
> we
> > > find
> > > > > a way to define "mpu,boot-module-section" generically so that we
> don't
> > > > > need to change it any time the set of boot modules change.)
> > > > >
> > > > >
> > > >
> > > > I agree.
> > > >
> > > > > > > It looks like we are forced to have the sections definitions
> at
> > > build
> > > > > > > time because we need them before we can parse device tree. In
> that
> > > > > case,
> > > > > > > we might as well define all the sections at build time.
> > > > > > >
> > > > > > > But I think it would be even better if Xen could automatically
> > > choose
> > > > > > > xen,static-mem, mpu,guest-memory-section, etc. on its own
> based on
> > > the
> > > > > > > regular device tree information (/memory, /amba, etc.),
> without
> > > any
> > > > > need
> > > > > > > for explicitly describing each range with these new properties.
> > > > > > >
> > > > > >
> > > > > > for mpu,guest-memory-section, with the limitations: no other
> usage
> > > > > between
> > > > > > different guest' memory nodes, this is OK. But for xen,static-
> mem
> > > (heap),
> > > > > > we just want everything on a MPU system is dertermistic. But, of
> > > course
> > > > > Xen
> > > > > > can select left memory for heap without static-mem.
> > > > >
> > > > > It is good that you think they can be chosen by Xen.
> > > > >
> > > > > Differently from "boot-module-section", which has to do with the
> boot
> > > > > modules selected by the user for a specific execution,
> > > > > guest-memory-section and static-mem are Xen specific memory
> > > > > policies/allocations.
> > > > >
> > > > > A user wouldn't know how to fill them in. And I worry that even a
> > > script
> > > >
> > > > But users should know it, because static-mem for guest must be
> allocated
> > > > in this range. And users take the responsibility to set the DomU's
> > > > static allocate memory ranges.
> > >
> > > Let me premise that my goal is to avoid having many users reporting
> > > errors to xen-devel and xen-users when actually it is just a wrong
> > > choice of addresses.
> > >
> > > I think we need to make a distinction between addresses for the boot
> > > modules, e.g. addresses where to load xen, the dom0/U kernel, dom0/U
> > > ramdisk in memory at boot time, and VM static memory addresses.
> > >
> > > The boot modules addresses are particularly difficult to fill in
> because
> > > they are many and a small update in one of the modules could
> invalidate
> > > all the other addresses. This is why I ended up writing ImageBuilder.
> > > Since them, I received several emails from users thanking me for
> > > ImageBuilder :-)
> > >
> >
> > Thanks +999 😊
> >
> >
> > > The static VM memory addresses (xen,static-mem) should be a bit easier
> > > to fill in correctly. They are meant to be chosen once, and it
> shouldn't
> > > happen that an update on a kernel forces the user to change all the VM
> > > static memory addresses. Also, I know that some users actually want to
> > > be able to choose the domU addresses by hand because they have
> specific
> > > needs. So it is good that we can let the user choose the addresses if
> > > they want to.
> > >
> >
> > Yes.
> >
> > > With all of that said, I do think that many users won't have an
> opinion
> > > on the VM static memory addresses and won't know how to choose them.
> > > It would be error prone to let them try to fill them in by hand. So I
> > > was already planning on adding support to ImageBuilder to
> automatically
> > > generate xen,static-mem for dom0less domains.
> > >
> >
> > Let me make sure that's what you said: Users give an VM memory size to
> > ImageBuilder, and ImageBuilder will generate xen,static-mem = <start,
> size>.
> > For specific VM, ImageBuilder also can accept start and size as inputs?
> >
> > Do I understand this correctly?
> 
> Yes, exactly
> 
> 
> > > Going back to this specific discussion about boot-module-section: I
> can
> > > see now that, given xen,static-mem is chosen by ImageBuilder (or
> >
> > By hand : )
> >
> > > similar) and not Xen, then it makes sense to have ImageBuilder (or
> > > similar) also generate boot-module-section.
> > >
> >
> > If my above understanding is right, then yes.
> 
> Yes, I think we are on the same page
> 
> 
> > > > > like ImageBuilder wouldn't be the best place to pick these values
> --
> > > > > they seem too "important" to leave to a script.
> > > > >
> > > > > But it seems possible to choose the values in Xen:
> > > > > - Xen knows ARM_MPU_NORMAL_MEMORY_* because it was defined at
> build
> > > time
> > > > > - Xen reads boot-module-section from device tree
> > > > >
> > > > > It should be possible at this point for Xen to pick the best
> values
> > > for
> > > > > guest-memory-section and static-mem based on the memory available.
> > > > >
> > > >
> > > > How Xen to pick? Does it mean in static allocation DomU DT node, we
> just
> > > > need a size, but don't require a start address for static-mem?
> > >
> > > Yes the idea was that the user would only provide the size (e.g.
> > > DOMU_STATIC_MEM[1]=1024) and the addresses would be automatically
> > > calculated. But I didn't mean to change the existing xen,static-mem
> > > device tree bindings. So it is best if the xen,static-mem addresses
> > > generation is done by ImageBuilder (or similar tool) instead of Xen.
> > >
> >
> > If we still keep the option for user to specify the start and size
> > parameters for VM memory, because it maybe very important for a
> > deterministic system (fully static system), I agree with you.
> >
> > And in current static-allocation, I think Xen doesn't generate
> > xen,static-mem addresses, all by hands...
> 
> Yeah
> 
> 

I will update my proposal to cover our above discussion, but I forgot one
thing. As the platform header files will be generated from DTS, does it
mean we have to maintain platform dts files in Xen like what Zephyr has
done? And do you have some idea to integrate the "ImageBuilder"? Make it
as a submodule of Xen or integrate to xen-tools?


> > > Sorry for the confusion!
> > >
> >
> > NP ; )

  reply	other threads:[~2022-03-03  1:06 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-24  6:01 Proposal for Porting Xen to Armv8-R64 - DraftA Wei Chen
2022-02-24 11:52 ` Ayan Kumar Halder
2022-02-25  6:33   ` Wei Chen
2022-02-25  0:55 ` Stefano Stabellini
2022-02-25 10:48   ` Wei Chen
2022-02-25 20:12     ` Julien Grall
2022-03-01  6:29       ` Wei Chen
2022-03-01 13:17         ` Julien Grall
2022-03-02  6:43           ` Wei Chen
2022-03-02 10:24             ` Julien Grall
2022-03-03  1:35               ` Wei Chen
2022-03-03  9:15                 ` Julien Grall
2022-03-03 10:43                   ` Wei Chen
2022-02-25 23:54     ` Stefano Stabellini
2022-03-01 12:55       ` Wei Chen
2022-03-01 23:38         ` Stefano Stabellini
2022-03-02  7:13           ` Wei Chen
2022-03-02 22:55             ` Stefano Stabellini
2022-03-03  1:05               ` Wei Chen [this message]
2022-03-03  2:03                 ` Stefano Stabellini
2022-03-03  2:12                   ` Wei Chen
2022-03-03  2:15                     ` Stefano Stabellini
2022-02-25 20:55 ` Julien Grall
2022-03-01  7:51   ` Wei Chen
2022-03-02  7:21     ` Penny Zheng
2022-03-02 12:06       ` Julien Grall
2022-03-02 12:00     ` Julien Grall
2022-03-03  2:06       ` Wei Chen
2022-03-03 19:51         ` Julien Grall
2022-03-04  5:38           ` Wei Chen
2022-03-07  2:12         ` Wei Chen
2022-03-07 22:58           ` Stefano Stabellini
2022-03-08  7:28             ` Wei Chen
2022-03-08 19:49               ` Stefano Stabellini

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=PAXPR08MB742017360AAF65AC2CCB1DF49E049@PAXPR08MB7420.eurprd08.prod.outlook.com \
    --to=wei.chen@arm.com \
    --cc=Bertrand.Marquis@arm.com \
    --cc=Henry.Wang@arm.com \
    --cc=Penny.Zheng@arm.com \
    --cc=julien@xen.org \
    --cc=nd@arm.com \
    --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.