[libvirt] [PATCH v3 1/3] Add NVRAM device

Li Zhang zhlcindy at gmail.com
Thu Apr 11 09:47:51 UTC 2013


On 2013年04月11日 17:36, Daniel P. Berrange wrote:
> On Wed, Mar 27, 2013 at 01:07:54PM +0800, Li Zhang wrote:
>> From: Li Zhang <zhlcindy at linux.vnet.ibm.com>
>>
>> For pSeries guest in QEMU, NVRAM is one kind of spapr-vio device.
>> Users are allowed to specify spapr-vio devices'address.
>> But NVRAM is not supported in libvirt. So this patch is to
>> add NVRAM device to allow users to specify its address.
>>
>> In QEMU, NVRAM device's address is specified by
>>   "-global spapr-nvram.reg=xxxxx".
>>
>> In libvirt, XML file is defined as the following:
>>
>>    <nvram>
>>      <address type='spapr-vio' reg='0x3000'/>
>>    </nvram>
>>
>> Signed-off-by: Li Zhang <zhlcindy at linux.vnet.ibm.com>
>> ---
>>   v3 -> v2:
>>    * Add NVRAM in domaincommon.rng and formatdomain.xml.in suggested by Daniel P.Berrange
>>    * Add NVRAM test cases suggested by Daniel P.Berrange
>>    * Remove nvram allocation when it is not specified suggested by Daniel P.Berrange
>>    * Add several error reports suggested by Daniel P.Berrange
>>
>>   v2 -> v1:
>>    * Add NVRAM parameters parsing in qemuParseCommandLine
>>
>>   src/conf/domain_conf.c  |   76 +++++++++++++++++++++++++++++++++++++++++++++++
>>   src/conf/domain_conf.h  |   10 +++++++
>
>>   src/qemu/qemu_command.c |   67 +++++++++++++++++++++++++++++++++++++++++
>>   src/qemu/qemu_command.h |    2 ++
>>   4 files changed, 155 insertions(+)
> The QEMU pieces should be separate from the parser pieces. Basically instead
> of the 3 patches you have here you should have 2 patches with the following
> files in each one:
>
>   1.  src/conf/domain_conf.*, docs/schemas/* and
>       docs/formatdomain.html.in
>
>   2. src/qemu/* and tests/qemuxml2argv*
OK, got it.
>> @@ -13854,6 +13911,21 @@ virDomainMemballoonDefFormat(virBufferPtr buf,
>>   }
>>   
>>   static int
>> +virDomainNVRAMDefFormat(virBufferPtr buf,
>> +                             virDomainNVRAMDefPtr def,
>> +                             unsigned int flags)
>> +{
>> +    virBufferAsprintf(buf, "    <nvram>\n");
>> +    if (virDomainDeviceInfoIsSet(&def->info, flags))
>> +        if (virDomainDeviceInfoFormat(buf, &def->info, flags) < 0)
>> +            return -1;
>> +
>> +     virBufferAddLit(buf, "    </nvram>\n");
>> +
>> +     return 0;
> There's inconsistent indentation here
>
I will correct it.
>>   qemuBuildUSBInputDevStr(virDomainInputDefPtr dev,
>> @@ -7492,6 +7527,21 @@ qemuBuildCommandLine(virConnectPtr conn,
>>               goto error;
>>       }
>>   
>> +    if (def->nvram) {
>> +        if (def->os.arch == VIR_ARCH_PPC64 &&
>> +            STREQ(def->os.machine, "pseries")) {
>> +            char *optstr;
>> +            virCommandAddArg(cmd, "-global");
>> +            optstr = qemuBuildNVRAMDevStr(def->nvram);
>> +            if (!optstr)
>> +                goto error;
>> +            if (optstr)
>> +                virCommandAddArg(cmd, optstr);
>> +            VIR_FREE(optstr);
>> +        } else
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>> +                          _("NVRAM device is not supported"));
>
> Missing a 'goto error' here

Ok, I will add it.

>> @@ -9584,6 +9634,23 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr qemuCaps,
>>                   goto error;
>>               }
>>   
>> +        } else if (STREQ(arg, "-global") &&
>> +                   STRPREFIX(progargv[i + 1], "spapr-nvram.reg=")) {
>> +
>> +            WANT_VALUE();
>> +
>> +            if (VIR_ALLOC(def->nvram) < 0)
>> +                goto no_memory;
>> +
>> +            val += strlen("spapr-nvram.reg=");
>> +            if (virStrToLong_ull(val, NULL, 16,
>> +                                 &def->nvram->info.addr.spaprvio.reg) < 0) {
> Don't you need to set the address type too.

Ah, yes. I will add it.

>> +                virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                               _("invalid value for spapr-nvram.reg :"
>> +                                 "'%s'"), val);
>> +                goto error;
>> +            }
>> +
>>           } else if (STREQ(arg, "-S")) {
>>               /* ignore, always added by libvirt */
>>           } else {
>
>
> Daniel




More information about the libvir-list mailing list