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

Re: [Xen-devel] [PATCH RESEND 13/14] libxl/arm: initialize memory information of ACPI blob



On 2016年06月06日 19:40, Stefano Stabellini wrote:
> On Tue, 31 May 2016, Shannon Zhao wrote:
>> From: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
>>
>> Assign the guest memory space for ACPI tables and replace the reg in DT
>> with real values.
>>
>> Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx>
>> ---
>>  tools/libxc/xc_dom_arm.c | 16 +++++++++++++++-
>>  tools/libxl/libxl_arm.c  | 40 ++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 55 insertions(+), 1 deletion(-)
>>
>> diff --git a/tools/libxc/xc_dom_arm.c b/tools/libxc/xc_dom_arm.c
>> index 64a8b67..e21e3e9 100644
>> --- a/tools/libxc/xc_dom_arm.c
>> +++ b/tools/libxc/xc_dom_arm.c
>> @@ -383,9 +383,11 @@ static int meminit(struct xc_dom_image *dom)
>>      const uint64_t kernsize = kernend - kernbase;
>>      const uint64_t dtb_size = dom->devicetree_blob ?
>>          ROUNDUP(dom->devicetree_size, XC_PAGE_SHIFT) : 0;
>> +    const uint64_t acpi_size = dom->acpitable_blob ?
>> +        ROUNDUP(dom->acpitable_size, XC_PAGE_SHIFT) : 0;
>>      const uint64_t ramdisk_size = dom->ramdisk_blob ?
>>          ROUNDUP(dom->ramdisk_size, XC_PAGE_SHIFT) : 0;
>> -    const uint64_t modsize = dtb_size + ramdisk_size;
>> +    const uint64_t modsize = dtb_size + acpi_size + ramdisk_size;
>>      const uint64_t ram128mb = bankbase[0] + (128<<20);
>>  
>>      xen_pfn_t p2m_size;
>> @@ -500,6 +502,18 @@ static int meminit(struct xc_dom_image *dom)
>>          modbase += dtb_size;
>>      }
>>  
>> +    if ( acpi_size )
>> +    {
>> +        dom->acpi_seg.vstart = modbase;
>> +        dom->acpi_seg.vend = modbase + acpi_size;
>> +
>> +        DOMPRINTF("%s: acpi: 0x%" PRIx64 " -> 0x%" PRIx64 "",
>> +                  __FUNCTION__,
>> +                  dom->acpi_seg.vstart, dom->acpi_seg.vend);
>> +
>> +        modbase += dtb_size;
> 
> shouldn't this be 
> 
> modbase += acpi_size
> 
> ?
> 
right, will fix.

> 
>> +    }
>> +
>>      return 0;
>>  }
>>  
>> diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c
>> index e7cb578..bf1eeea 100644
>> --- a/tools/libxl/libxl_arm.c
>> +++ b/tools/libxl/libxl_arm.c
>> @@ -230,6 +230,27 @@ static int fdt_property_regs(libxl__gc *gc, void *fdt,
>>      return fdt_property(fdt, "reg", regs, sizeof(regs));
>>  }
>>  
>> +static int fdt_property_inplace_regs(void *fdt, int nodeoffset,
>> +                                     unsigned addr_cells, unsigned 
>> size_cells,
>> +                                     unsigned num_regs, ...)
>> +{
>> +    uint32_t regs[num_regs*(addr_cells+size_cells)];
>> +    be32 *cells = &regs[0];
>> +    int i;
>> +    va_list ap;
>> +    uint64_t base, size;
>> +
>> +    va_start(ap, num_regs);
>> +    for (i = 0 ; i < num_regs; i++) {
>> +        base = addr_cells ? va_arg(ap, uint64_t) : 0;
>> +        size = size_cells ? va_arg(ap, uint64_t) : 0;
>> +        set_range(&cells, addr_cells, size_cells, base, size);
>> +    }
>> +    va_end(ap);
>> +
>> +    return fdt_setprop_inplace(fdt, nodeoffset, "reg", regs, sizeof(regs));
>> +}
> 
> The va_arg stuff is a bit overkill. Also, can't you call
> finalise_one_memory_node instead?
> 
OK, thank you.

-- 
Shannon

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel

 


Rackspace

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