[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] xen/arm: Skip memory nodes if not enabled
Hi Leo, On 28/09/2023 16:31, Leo Yan wrote: > > > Currently, the Xen hypervisor doesn't handle the status, the issue can > be described from two perspectives: the memory nodes and the reserved > memory nodes. > > - If a memory node has a status "disabled" it implies that it should > not be used. Xen does not handle the status property for the memory > node and ends up using it. > > - If a reserved memory node has a status "disabled", it means that this > region is no longer reserved and can be used, but the "disabled" > status is not handled by Xen. > > Xen passes the intact device tree binding of the reserved memory nodes > to Dom0 and creates a memory node to cover reserved regions. Disabled > reserved memory nodes are ignored by the Dom0 Linux kernel, thus the > Dom0 Linux kernel will continue to allocate pages from such a region. > > On the other hand, since the disabled status is not handled by Xen, > the disabled reserved memory regions are excluded from the page > management in Xen which results in Xen being unable to obtain the > corresponding MFN, in the end, Xen reports error like: > > (XEN) arch/arm/p2m.c:2202: d0v0: Failing to acquire the MFN 0x1a02dc > > This patch introduces a function device_tree_node_is_available(). If it > detects a memory node is not enabled, Xen will not add the memory region > into the memory lists. In the end, this avoids to generate the memory > node for the disabled memory regions sent to the kernel and the kernel > cannot use the disabled memory nodes any longer. > > Since this patch adds checking device node's status in the > device_tree_get_meminfo() function, except it checks for memory nodes > and reserved memory nodes, it also supports status for static memory > and static heap. > > Suggested-by: Michal Orzel <michal.orzel@xxxxxxx> > Signed-off-by: Leo Yan <leo.yan@xxxxxxxxxx> > --- > > Changes from v1: > - Renamed function to device_tree_node_is_available() (Michal Orzel); > - Polished coding style (Michal Orzel); > - Refined commit log (Michal Orzel, Julien Grall). > > xen/arch/arm/bootfdt.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c > index 2673ad17a1..1b80d2d622 100644 > --- a/xen/arch/arm/bootfdt.c > +++ b/xen/arch/arm/bootfdt.c > @@ -16,6 +16,19 @@ > #include <xsm/xsm.h> > #include <asm/setup.h> > > +static bool __init device_tree_node_is_available(const void *fdt, int node) > +{ > + const char *status = fdt_getprop(fdt, node, "status", NULL); Please see Julien's comment for v1. To save some jumps,instructions we should also check for length of the property to be > 0, just like we do in dt_device_is_available(). Apart from that the patch looks good. ~Michal
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |