qemu-ppc
[Top][All Lists]
Advanced

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

Re: [Qemu-ppc] [PATCH v4 11/12] nvdimm: make get_memory_region() perform


From: David Hildenbrand
Subject: Re: [Qemu-ppc] [PATCH v4 11/12] nvdimm: make get_memory_region() perform checks and initialization
Date: Tue, 19 Jun 2018 12:17:50 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

On 19.06.2018 02:12, David Gibson wrote:
> On Mon, Jun 18, 2018 at 04:25:35PM +0200, David Hildenbrand wrote:
>> We might get a call to get_memory_region() before the device has been
>> realized. We should return a consistent value, as the return value
>> will e.g. later on be used in the pre_plug handler.
>>
>> To avoid duplicating too much code, factor the initialization and checks
>> out into a helper function.
>>
>> Reviewed-by: Igor Mammedov <address@hidden>
>> Signed-off-by: David Hildenbrand <address@hidden>
>> ---
>>  hw/mem/nvdimm.c | 46 +++++++++++++++++++++++++++++++++++++---------
>>  1 file changed, 37 insertions(+), 9 deletions(-)
>>
>> diff --git a/hw/mem/nvdimm.c b/hw/mem/nvdimm.c
>> index db7d8c3050..bba98e57e1 100644
>> --- a/hw/mem/nvdimm.c
>> +++ b/hw/mem/nvdimm.c
>> @@ -71,20 +71,24 @@ static void nvdimm_init(Object *obj)
>>                          NULL, NULL);
>>  }
>>  
>> -static MemoryRegion *nvdimm_get_memory_region(PCDIMMDevice *dimm, Error 
>> **errp)
>> +static void nvdimm_prepare_memory_region(NVDIMMDevice *nvdimm, Error **errp)
>>  {
>> -    NVDIMMDevice *nvdimm = NVDIMM(dimm);
>> +    PCDIMMDevice *dimm = PC_DIMM(nvdimm);
>> +    uint64_t align, pmem_size, size;
>> +    MemoryRegion *mr;
>>  
>> -    return nvdimm->nvdimm_mr;
>> -}
>> +    if (nvdimm->nvdimm_mr) {
>> +        return;
>> +    }
>>  
>> -static void nvdimm_realize(PCDIMMDevice *dimm, Error **errp)
>> -{
>> -    MemoryRegion *mr = host_memory_backend_get_memory(dimm->hostmem);
>> -    NVDIMMDevice *nvdimm = NVDIMM(dimm);
>> -    uint64_t align, pmem_size, size = memory_region_size(mr);
>> +    if (!dimm->hostmem) {
>> +        error_setg(errp, "'" PC_DIMM_MEMDEV_PROP "' property must be set");
>> +        return;
>> +    }
>>  
>> +    mr = host_memory_backend_get_memory(dimm->hostmem);
>>      align = memory_region_get_alignment(mr);
>> +    size = memory_region_size(mr);
>>  
>>      pmem_size = size - nvdimm->label_size;
>>      nvdimm->label_data = memory_region_get_ram_ptr(mr) + pmem_size;
>> @@ -108,6 +112,30 @@ static void nvdimm_realize(PCDIMMDevice *dimm, Error 
>> **errp)
>>      nvdimm->nvdimm_mr->align = align;
>>  }
>>  
>> +static MemoryRegion *nvdimm_get_memory_region(PCDIMMDevice *dimm, Error 
>> **errp)
>> +{
>> +    NVDIMMDevice *nvdimm = NVDIMM(dimm);
>> +    Error *local_err = NULL;
>> +
>> +    if (!nvdimm->nvdimm_mr) {
> 
> nvdimm_prepare..() already checks this internally, so you could just
> call it internally.  Nonetheless
> 

I'll just turn this into an assert as I'll resend. Thanks!

-- 

Thanks,

David / dhildenb



reply via email to

[Prev in Thread] Current Thread [Next in Thread]