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

Re: [Xen-devel] [PATCH LIBVIRT] libxl: Support cmdline= in xl config files



On 01/19/2016 05:03 AM, Ian Campbell wrote:
> I went to ping this but noticed that I had sent it to "jimfehlig" (i.e. no
> domain), so no wonder there was no reply!
>
> To: line fixed here, let me know if you would prefer a resend.

That would be much appreciated, thanks!

>
> Ian.
>
> On Wed, 2015-12-16 at 12:09 +0000, Ian Campbell wrote:
>> ... and consolidate the cmdline/extra/root parsing to facilitate doing
>> so.
>>
>> The logic is the same as xl's parse_cmdline from the current xen.git master
>> branch (e6f0e099d2c17de47fd86e817b1998db903cab61), except I was unable
>> to figure out how/where to route the warning about ignoring
>> root+extra if cmdline was specified.

I think VIR_WARN() would be appropriate.

>>
>> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
>> ---
>>  src/xenconfig/xen_xl.c | 62 ++++++++++++++++++++++++++++++------------
>> --------
>>  1 file changed, 37 insertions(+), 25 deletions(-)
>>
>> diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
>> index 91cdff6..ba8b938 100644
>> --- a/src/xenconfig/xen_xl.c
>> +++ b/src/xenconfig/xen_xl.c
>> @@ -58,11 +58,45 @@ extern int xlu_disk_parse(XLU_Config *cfg,
>>                            libxl_device_disk *disk);
>>  #endif
>>  
>> +static int xenParseCmdline(virConfPtr conf, char **r_cmdline)
>> +{
>> +    char *cmdline = NULL;
>> +    const char *root = NULL, *extra = NULL, *buf = NULL;

In theory, these three don't need to be initialized since xenConfigGetString
will do that. But in practice, I worry that Coverity might complain :-/.

Regards,
Jim

>> +
>> +    if (xenConfigGetString(conf, "cmdline", &buf, NULL) < 0)
>> +        return -1;
>> +
>> +    if (xenConfigGetString(conf, "root", &root, NULL) < 0)
>> +        return -1;
>> +
>> +    if (xenConfigGetString(conf, "extra", &extra, NULL) < 0)
>> +        return -1;
>> +
>> +    if (buf) {
>> +        if (VIR_STRDUP(cmdline, buf) < 0)
>> +            return -1;
>> +        /* root or extra are ignored in this case. */
>> +    } else {
>> +        if (root && extra) {
>> +            if (virAsprintf(&cmdline, "root=%s %s", root, extra) < 0)
>> +                return -1;
>> +        } else if (root) {
>> +            if (virAsprintf(&cmdline, "root=%s", root) < 0)
>> +                return -1;
>> +        } else if (extra) {
>> +            if (VIR_STRDUP(cmdline, extra) < 0)
>> +                return -1;
>> +        }
>> +    }
>> +
>> +    *r_cmdline = cmdline;
>> +    return 0;
>> +}
>> +
>>  static int
>>  xenParseXLOS(virConfPtr conf, virDomainDefPtr def, virCapsPtr caps)
>>  {
>>      size_t i;
>> -    const char *extra, *root;
>>  
>>      if (def->os.type == VIR_DOMAIN_OSTYPE_HVM) {
>>          const char *boot;
>> @@ -84,19 +118,8 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def,
>> virCapsPtr caps)
>>          if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) <
>> 0)
>>              return -1;
>>  
>> -        if (xenConfigGetString(conf, "extra", &extra, NULL) < 0)
>> -            return -1;
>> -
>> -        if (xenConfigGetString(conf, "root", &root, NULL) < 0)
>> +        if (xenParseCmdline(conf, &def->os.cmdline) < 0)
>>              return -1;
>> -
>> -        if (root) {
>> -            if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra)
>> < 0)
>> -                return -1;
>> -        } else {
>> -            if (VIR_STRDUP(def->os.cmdline, extra) < 0)
>> -                return -1;
>> -        }
>>  #endif
>>  
>>          if (xenConfigGetString(conf, "boot", &boot, "c") < 0)
>> @@ -132,19 +155,8 @@ xenParseXLOS(virConfPtr conf, virDomainDefPtr def,
>> virCapsPtr caps)
>>          if (xenConfigCopyStringOpt(conf, "ramdisk", &def->os.initrd) <
>> 0)
>>              return -1;
>>  
>> -        if (xenConfigGetString(conf, "extra", &extra, NULL) < 0)
>> -            return -1;
>> -
>> -        if (xenConfigGetString(conf, "root", &root, NULL) < 0)
>> +        if (xenParseCmdline(conf, &def->os.cmdline) < 0)
>>              return -1;
>> -
>> -        if (root) {
>> -            if (virAsprintf(&def->os.cmdline, "root=%s %s", root, extra)
>> < 0)
>> -                return -1;
>> -        } else {
>> -            if (VIR_STRDUP(def->os.cmdline, extra) < 0)
>> -                return -1;
>> -        }
>>      }
>>  
>>      return 0;
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel


_______________________________________________
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®.