[libvirt] [PATCH 2/2] qemu: add a check when cold-plug a Chr device

lhuang lhuang at redhat.com
Thu Jan 22 01:45:06 UTC 2015


On 01/22/2015 07:16 AM, John Ferlan wrote:
>
> On 12/09/2014 01:48 AM, Luyao Huang wrote:
>> Add a func just check the base target type which
>> qemu support. But i still doubt this will be useful
>> , we already have a check when we try to start the
>> vm. And this check only check the target type, and
>> the other things will be done in virDomainChrDefParseXML.
>>
>> Signed-off-by: Luyao Huang <lhuang at redhat.com>
>> ---
>>   src/qemu/qemu_hotplug.c | 64 +++++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 64 insertions(+)
>>
> I forgot to add that this didn't build without:
>
> --- a/src/libvirt_private.syms
> +++ b/src/libvirt_private.syms
> @@ -145,6 +145,8 @@ virDomainBlockedReasonTypeFromString;
>   virDomainBlockedReasonTypeToString;
>   virDomainCapabilitiesPolicyTypeToString;
>   virDomainCapsFeatureTypeToString;
> +virDomainChrChannelTargetTypeFromString;
> +virDomainChrChannelTargetTypeToString;
>   virDomainChrConsoleTargetTypeFromString;
>   virDomainChrConsoleTargetTypeToString;
>   virDomainChrDefForeach;
>
>
> Since it seems you'll be resending your patches, I'll wait for your
> patches before proceeding1...

Thanks a lot for pointing out, I will add these code in next version.
> John
>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>> index b9a0cee..fe91ec7 100644
>> --- a/src/qemu/qemu_hotplug.c
>> +++ b/src/qemu/qemu_hotplug.c
>> @@ -1384,10 +1384,74 @@ int qemuDomainAttachRedirdevDevice(virQEMUDriverPtr driver,
>>   
>>   }
>>   
>> +static int
>> +qemuDomainChrCheckDefSupport(virDomainChrDefPtr chr)
>> +{
>> +    int ret = -1;
>> +
>> +    switch (chr->deviceType) {
>> +    case VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL:
>> +        switch ((virDomainChrSerialTargetType) chr->targetType) {
>> +        case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_ISA:
>> +        case VIR_DOMAIN_CHR_SERIAL_TARGET_TYPE_USB:
>> +            ret = 0;
>> +            break;
>> +
>> +        default:
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                           _("unsupported serial target type %s for qemu"),
>> +                           NULLSTR(virDomainChrSerialTargetTypeToString(chr->targetType)));
>> +            break;
>> +        }
>> +        break;
>> +
>> +    case VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL:
>> +        ret = 0;
>> +        break;
>> +
>> +    case VIR_DOMAIN_CHR_DEVICE_TYPE_CHANNEL:
>> +        switch ((virDomainChrChannelTargetType) chr->targetType) {
>> +        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_GUESTFWD:
>> +        case VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO:
>> +            ret = 0;
>> +            break;
>> +
>> +        default:
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                           _("unsupported channel target type %s for qemu"),
>> +                           NULLSTR(virDomainChrChannelTargetTypeToString(chr->targetType)));
>> +            break;
>> +        }
>> +        break;
>> +
>> +    case VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE:
>> +        switch ((virDomainChrConsoleTargetType) chr->targetType) {
>> +        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL:
>> +        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_VIRTIO:
>> +        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLP:
>> +        case VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SCLPLM:
>> +            ret = 0;
>> +            break;
>> +
>> +        default:
>> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>> +                           _("unsupported console target type %s for qemu"),
>> +                           NULLSTR(virDomainChrConsoleTargetTypeToString(chr->targetType)));
>> +            break;
>> +        }
>> +        break;
>> +    }
>> +
>> +    return ret;
>> +}
>> +
>>   int
>>   qemuDomainChrInsert(virDomainDefPtr vmdef,
>>                       virDomainChrDefPtr chr)
>>   {
>> +    if (qemuDomainChrCheckDefSupport(chr) < 0)
>> +        return -1;
>> +
>>       if (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE &&
>>           chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) {
>>           virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
>>

Luyao




More information about the libvir-list mailing list