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

RE: [PATCH v5 1/7] xen/arm: introduce new helper device_tree_get_meminfo


  • To: Julien Grall <julien@xxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, "sstabellini@xxxxxxxxxx" <sstabellini@xxxxxxxxxx>
  • From: Penny Zheng <Penny.Zheng@xxxxxxx>
  • Date: Tue, 7 Sep 2021 03:05:49 +0000
  • Accept-language: en-US
  • 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=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=uRCisFhpggo291C6aobRFvXGwFA/5l47T6YR9tpJq30=; b=jUh+OV2HjmuW8aCK9cDCwGrLCQqZtgf8zda0tA5hAj/rfTqN9YRt0ZghuqxaBa4oqscr6R+YmuQzoGKGQuUQYBAgDYHzjbQiZuiG3LG8mjbdZ4Sex0BNoFilzaOrVkJ/yFfsXl8VGBl7Zv1o8jA3t6SockLmxdolES6/JHqrNxuWDp1XFBRmg10UmszTil5tf/0c4LSRTSN1VT0gOo/F+XVCrdoaznLPc3thipnugI9gTr+/g1RPdtzpGUKmnWhDhmL+FI2x+Uh/Pc7xlLg0buVdH/EDBxAQyjLbfFCzJnqEjjosctXu6utHrqQc6LuUngkRZByAPLGDOxkj77CDYg==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nOqDZk45ztnl5sPmS/exIS4JdOkueecBfm903RmYtWQco20jmhz6LrS7zqMgYLucx4bqa9cllGxH9uBePzwk7JNwGt5veEnPBV3Rbx4zq0JWdWmf3QSS8w68nuACF4yHx+1Rsoa0XYq44EEPdXwP3NP0jTRmC/onE5xn721JuM8MnCHQQW4eBdgQkBHLr8CEhkbpBpW4L2sjjcdFqFzPbmyX0y1Suo0fC9h18lO3bJl0zLEj0B4p9NWUYelmQDv9bF3syfx7oyz8XMl4JWEshNVZARtbsVxWqQJzr+mh0y8URnJVmTCGIenMsd9QQdZytPLbnc5cVKpvmDDz2wpktA==
  • Authentication-results-original: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
  • Cc: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>, Wei Chen <Wei.Chen@xxxxxxx>, nd <nd@xxxxxxx>
  • Delivery-date: Tue, 07 Sep 2021 03:06:27 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Original-authentication-results: xen.org; dkim=none (message not signed) header.d=none;xen.org; dmarc=none action=none header.from=arm.com;
  • Thread-index: AQHXmM2TtDweULKD40q5wirMZQfui6uO7RIAgAkLAqA=
  • Thread-topic: [PATCH v5 1/7] xen/arm: introduce new helper device_tree_get_meminfo

Hi Julien

> -----Original Message-----
> From: Julien Grall <julien@xxxxxxx>
> Sent: Wednesday, September 1, 2021 4:57 PM
> To: Penny Zheng <Penny.Zheng@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx;
> sstabellini@xxxxxxxxxx
> Cc: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>; Wei Chen
> <Wei.Chen@xxxxxxx>; nd <nd@xxxxxxx>
> Subject: Re: [PATCH v5 1/7] xen/arm: introduce new helper
> device_tree_get_meminfo
> 
> Hi Penny,
> 
> On 24/08/2021 10:50, Penny Zheng wrote:
> > A few functions iterate over the device tree property to get memory
> > info, like "reg" or the later "xen,static-mem", so this commit creates
> > a new helper device_tree_get_meminfo to extract the common codes.
> 
> The commit message needs to be updated as the patch has been reshuffled.
> 

Yes! I'll reconstruct.
> > Signed-off-by: Penny Zheng <penny.zheng@xxxxxxx>
> > ---
> >   xen/arch/arm/bootfdt.c | 68 ++++++++++++++++++++++++------------------
> >   1 file changed, 39 insertions(+), 29 deletions(-)
> >
> > diff --git a/xen/arch/arm/bootfdt.c b/xen/arch/arm/bootfdt.c index
> > 476e32e0f5..8c81be3379 100644
> > --- a/xen/arch/arm/bootfdt.c
> > +++ b/xen/arch/arm/bootfdt.c
> > @@ -63,6 +63,44 @@ void __init device_tree_get_reg(const __be32 **cell,
> u32 address_cells,
> >       *size = dt_next_cell(size_cells, cell);
> >   }
> >
> > +static int __init device_tree_get_meminfo(const void *fdt, int node,
> > +                                          const char *prop_name,
> > +                                          u32 address_cells, u32 
> > size_cells,
> > +                                          void *data) {
> > +    const struct fdt_property *prop;
> > +    unsigned int i, banks;
> > +    const __be32 *cell;
> > +    u32 reg_cells = address_cells + size_cells;
> > +    paddr_t start, size;
> > +    struct meminfo *mem = data;
> > +
> > +    prop = fdt_get_property(fdt, node, prop_name, NULL);
> > +    if ( !prop )
> > +        return -ENOENT;
> > +
> > +    cell = (const __be32 *)prop->data;
> > +    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
> > +
> > +    for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
> > +    {
> > +        device_tree_get_reg(&cell, address_cells, size_cells, &start, 
> > &size);
> > +        /* Some DT may describe empty bank, ignore them */
> > +        if ( !size )
> > +            continue;
> > +        mem->bank[mem->nr_banks].start = start;
> > +        mem->bank[mem->nr_banks].size = size;
> > +        mem->nr_banks++;
> > +    }
> > +
> > +    if ( i < banks )
> > +    {
> > +        printk("Warning: Max number of supported memory regions
> reached.\n");
> > +        return -ENOSPC;
> > +    }
> > +    return 0;
> > +}
> > +
> >   u32 __init device_tree_get_u32(const void *fdt, int node,
> >                                  const char *prop_name, u32 dflt)
> >   {
> > @@ -139,14 +177,6 @@ static int __init process_memory_node(const void
> *fdt, int node,
> >                                         u32 address_cells, u32 size_cells,
> >                                         void *data)
> >   {
> > -    const struct fdt_property *prop;
> > -    int i;
> > -    int banks;
> > -    const __be32 *cell;
> > -    paddr_t start, size;
> > -    u32 reg_cells = address_cells + size_cells;
> > -    struct meminfo *mem = data;
> > -
> >       if ( address_cells < 1 || size_cells < 1 )
> 
> This check will be the same for "xen,static-mem". So can it be moved to
> device_tree_get_meminfo()?
> 

Sure. I'll move it.

> >       {
> >           printk("fdt: node `%s': invalid #address-cells or
> > #size-cells", @@ -154,27 +184,7 @@ static int __init
> process_memory_node(const void *fdt, int node,
> >           return -EINVAL;
> >       }
> >
> > -    prop = fdt_get_property(fdt, node, "reg", NULL);
> > -    if ( !prop )
> > -        return -ENOENT;
> > -
> > -    cell = (const __be32 *)prop->data;
> > -    banks = fdt32_to_cpu(prop->len) / (reg_cells * sizeof (u32));
> > -
> > -    for ( i = 0; i < banks && mem->nr_banks < NR_MEM_BANKS; i++ )
> > -    {
> > -        device_tree_get_reg(&cell, address_cells, size_cells, &start, 
> > &size);
> > -        /* Some DT may describe empty bank, ignore them */
> > -        if ( !size )
> > -            continue;
> > -        mem->bank[mem->nr_banks].start = start;
> > -        mem->bank[mem->nr_banks].size = size;
> > -        mem->nr_banks++;
> > -    }
> > -
> > -    if ( i < banks )
> > -        return -ENOSPC;
> > -    return 0;
> > +    return device_tree_get_meminfo(fdt, node, "reg", address_cells,
> > + size_cells, data);
> >   }
> >
> >   static int __init process_reserved_memory_node(const void *fdt, int
> > node,
> >
> 
> Cheers,
> 
> --
> Julien Grall

 


Rackspace

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