|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/5] device tree, arm: supply a flat device tree to dom0
On Mon, 2012-04-02 at 10:21 +0100, David Vrabel wrote:
> On 30/03/12 16:59, Ian Campbell wrote:
> > On Thu, 2012-03-22 at 19:17 +0000, David Vrabel wrote:
> >> From: David Vrabel <david.vrabel@xxxxxxxxxx>
> >>
> >> Build a flat device tree for dom0 based on the one supplied to Xen.
> >> The following changes are made:
> >>
> >> * In the /chosen node, the xen,dom0-bootargs parameter is renamed to
> >> bootargs.
> >>
> >> * In all memory nodes, the reg parameters are adjusted to reflect
> >> the amount of memory dom0 can use. The p2m is updated using this
> >> info.
> >>
> >> Support for passing ATAGS to dom0 is removed.
> >>
> >> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
> >> ---
> >> xen/arch/arm/domain_build.c | 257
> >> +++++++++++++++++++++++++++++------
> >> xen/arch/arm/kernel.c | 2 +-
> >> xen/arch/arm/kernel.h | 8 +-
> >> xen/common/device_tree.c | 47 ++++--
> >> xen/include/xen/device_tree.h | 8 +
> >> xen/include/xen/libfdt/libfdt_env.h | 3 +
> >> 6 files changed, 265 insertions(+), 60 deletions(-)
> >>
> >> diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
> >> index 15632f7..b4c0452 100644
> >> --- a/xen/arch/arm/domain_build.c
> >> +++ b/xen/arch/arm/domain_build.c
> >> @@ -6,6 +6,10 @@
> >> #include <xen/sched.h>
> >> #include <asm/irq.h>
> >> #include <asm/regs.h>
> >> +#include <xen/errno.h>
> >> +#include <xen/device_tree.h>
> >> +#include <xen/libfdt/libfdt.h>
> >> +#include <xen/guest_access.h>
> >>
> >> #include "gic.h"
> >> #include "kernel.h"
> >> @@ -13,6 +17,13 @@
> >> static unsigned int __initdata opt_dom0_max_vcpus;
> >> integer_param("dom0_max_vcpus", opt_dom0_max_vcpus);
> >>
> >> +/*
> >> + * Amount of extra space required to dom0's device tree. No new nodes
> >> + * are added (yet) but one terminating reserve map entry (16 bytes) is
> >> + * added.
> >> + */
> >> +#define DOM0_FDT_EXTRA_SIZE (sizeof(struct fdt_reserve_entry))
> >> +
> >> struct vcpu *__init alloc_dom0_vcpu0(void)
> >> {
> >> if ( opt_dom0_max_vcpus == 0 )
> >> @@ -28,43 +39,210 @@ struct vcpu *__init alloc_dom0_vcpu0(void)
> >> return alloc_vcpu(dom0, 0, 0);
> >> }
> >>
> >> -extern void guest_mode_entry(void);
> >> +static void set_memory_reg(struct domain *d, struct kernel_info *kinfo,
> >> + const void *fdt,
> >> + const u32 *cell, int address_cells, int
> >> size_cells,
> >> + u32 *new_cell, int *len)
> >> +{
> >> + int reg_size = (address_cells + size_cells) * sizeof(*cell);
> >> + int l;
> >> + u64 start;
> >> + u64 size;
> >> +
> >> + l = *len;
> >
> >> +
> >> + while ( kinfo->unassigned_mem > 0 && l >= reg_size
> >> + && kinfo->mem.nr_banks < NR_MEM_BANKS )
> >> + {
> >> + device_tree_get_reg(&cell, address_cells, size_cells, &start,
> >> &size);
> >> + if ( size > kinfo->unassigned_mem )
> >> + size = kinfo->unassigned_mem;
> >> +
> >> + device_tree_set_reg(&new_cell, address_cells, size_cells, start,
> >> size);
> >
> > This assumes/requires that address_cells and size_cells a 1, right? If
> > they end up being 2 or more then device_tree_get_reg will trample on the
> > stack via &start and &size.
>
> No. address_cells and size_cells can be 1 or 2.
Where is that checked or enforced? What happens if someone feeds us a
DTB with 3? Or are you saying that this isn't possible (perhaps due to
some constraint in DTB itself)?
> >> --- a/xen/include/xen/libfdt/libfdt_env.h
> >> +++ b/xen/include/xen/libfdt/libfdt_env.h
> >> @@ -13,4 +13,7 @@
> >> #define fdt64_to_cpu(x) be64_to_cpu(x)
> >> #define cpu_to_fdt64(x) cpu_to_be64(x)
> >>
> >> +/* Xen-specific libfdt error code. */
> >> +#define FDT_ERR_XEN(err) (FDT_ERR_MAX + (err))
> >
> > Looks like the only user is FDT_ERR_XEN(ENOMEM) which could as well be
> > FDT_ERR_NOSPACE?
>
> No. FDT_ERR_NOSPACE means the buffer isn't large enough to add new
> nodes etc. This needs to be a different error code from a memory
> allocation failure.
OK.
> > FWIW I think adding a new error code would be a fair reason to diverge
> > in a controlled way from the pristine upstream source.
>
> I don't know what you're asking for here.
I was suggesting that it would be fine to just add a new error code,
IMHO it's a reasonable reason to diverge from upstream. Could perhaps
even send them the patch?
Ian.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |