Bug 1264331

Summary: Unbale to find suitable driver for vport0p2 device
Product: [Community] Virtualization Tools Reporter: Jean-Pierre Ribeauville <jpribeauville>
Component: virtio-winAssignee: Amnon Ilan <ailan>
Status: CLOSED NOTABUG QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: unspecifiedCC: bcao, crobinso, ghammer, virt-maint, vrozenfe, yvugenfi
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Windows   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-09-18 14:31:26 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jean-Pierre Ribeauville 2015-09-18 08:31:40 UTC
Description of problem:
No Windows class installer for 'vport0p2'
 
Version-Release number of selected component (if applicable):
virtio-win-0.1.109.iso
qemu-kvm-0.12.1.2-2.415.el6.x86_64
host : Linux 2.6.32-431.el6.x86_64
guest : W2008R2

How reproducible:


Steps to Reproduce:
1. Add a channel device within Windows Guest configuration
such as :
<channel type='unix'>
      <source mode='bind' path='//var/lib/libvirt/qemu/omnivision_123.agent'/>
      <target type='virtio' name='omnivision_123.agent'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
 </channel>

2. Restart guest
3. Check, within setupapi.dev.log, wether the vport0p2 is correctly installed

Actual results:


The vioser driver is correctly installed.

I presume that the new vportp02 device is detected because within registry followiny key appears : 

Key Name:          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\{6FDE7547-1B65-48ae-B628-80BE62016026}\VIOSerialPort\4&7e8053e&4&02
Class Name:        <NO CLASS>
Last Write Time:   9/18/2015 - 6:30 AM
Value 0
  Name:            DeviceDesc
  Type:            REG_SZ
  Data:            vport0p2
Value 1
  Name:            Capabilities
  Type:            REG_DWORD
  Data:            0xe6
Value 2
  Name:            UINumber
  Type:            REG_DWORD
  Data:            0x2
Value 3
  Name:            ConfigFlags
  Type:            REG_DWORD
  Data:            0
Value 4
  Name:            HardwareID
  Type:            REG_MULTI_SZ
  Data:            {6FDE7547-1B65-48ae-B628-80BE62016026}\VIOSerialPort
Value 5
  Name:            CompatibleIDs
  Type:            REG_MULTI_SZ
  Data:            
Value 6
  Name:            ContainerID
  Type:            REG_SZ
  Data:            {52d75f0b-5d50-11e5-9ef7-525400b48527}
Value 7
  Name:            LocationInformation
  Type:            REG_SZ
  Data:            RedHat VIOSerial Port

Key Name:          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\{6FDE7547-1B65-48ae-B628-80BE62016026}\VIOSerialPort\4&7e8053e&4&02\LogConf
Class Name:        <NO CLASS>
Last Write Time:   9/18/2015 - 6:30 AM

Key Name:          HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\{6FDE7547-1B65-48ae-B628-80BE62016026}\VIOSerialPort\4&7e8053e&4&02\Control
Class Name:        <NO CLASS> 

setupapi.dev.log shows this error :

>>>  [Device Install (Hardware initiated) - {6FDE7547-1B65-48ae-B628-80BE62016026}\VIOSerialPort\4&7e8053e&4&02]
>>>  Section start 2015/09/17 17:39:39.343
     ump: Creating Install Process: DrvInst.exe 17:39:39.343
     ndv: Retrieving device info...
     ndv: Setting device parameters...
     ndv: Searching Driver Store and Device Path...
     dvi: {Build Driver List} 17:39:39.359
     dvi:      Searching for hardware ID(s):
     dvi:           {6fde7547-1b65-48ae-b628-80be62016026}\vioserialport
     cpy:      Policy is set to make all digital signatures equal.
     dvi:      Enumerating INFs from path list 'C:\Windows\inf'
     inf:      Searched 0 potential matches in published INF directory
     inf:      Searched 36 INFs in directory: 'C:\Windows\inf'
     dvi: {Build Driver List - exit(0x00000000)} 17:39:39.406
     ndv: Selecting best match from Driver Store (including Device Path)...
     dvi: {DIF_SELECTBESTCOMPATDRV} 17:39:39.406
     dvi:      No class installer for 'vport0p2'
     dvi:      No CoInstallers found
     dvi:      Default installer: Enter 17:39:39.406
     dvi:           {Select Best Driver}
!    dvi:                Selecting driver failed(0xe0000228)
     dvi:           {Select Best Driver - exit(0xe0000228)}
!    dvi:      Default installer: failed!
!    dvi:      Error 0xe0000228: There are no compatible drivers for this device.
     dvi: {DIF_SELECTBESTCOMPATDRV - exit(0xe0000228)} 17:39:39.421
     ndv: {Core Device Install} 17:39:39.421
!    ndv:      Installing NULL driver!
     dvi:      Set selected driver complete.
     dvi:      {DIF_ALLOW_INSTALL} 17:39:39.453
     dvi:           No class installer for 'vport0p2'
     dvi:           Default installer: Enter 17:39:39.453
     dvi:           Default installer: Exit
     dvi:      {DIF_ALLOW_INSTALL - exit(0xe000020e)} 17:39:39.453
     dvi:      {DIF_INSTALLDEVICE} 17:39:39.453
     dvi:           No class installer for 'vport0p2'
     dvi:           Default installer: Enter 17:39:39.453
!    dvi:                Installing NULL driver!
     dvi:                Writing common driver property settings.
     dvi:                {Restarting Devices} 17:39:39.468
     dvi:                     Restart: {6FDE7547-1B65-48AE-B628-80BE62016026}\VIOSERIALPORT\4&7E8053E&4&02
     dvi:                     Restart complete.
     dvi:                {Restarting Devices exit} 17:39:39.546
     dvi:           Default installer: Exit
     dvi:      {DIF_INSTALLDEVICE - exit(0x00000000)} 17:39:39.546
     ndv:      Device install status=0xe0000203
     ndv:      Performing device install final cleanup...
!    ndv:      Queueing up error report since device installation failed...
     ndv: {Core Device Install - exit(0xe0000203)} 17:39:39.546
     ump: Server install process exited with code 0xe0000203 17:39:39.562
<<<  Section end 2015/09/17 17:39:39.562
<<<  [Exit status: FAILURE(0xe0000203)]



Expected results:

Expects that channel device will be correctly installed

Additional info:


Thanks for help.

Comment 1 Vadim Rozenfeld 2015-09-18 10:12:48 UTC
vioserial exposes ports as RAW PDOs. No additional device driver is required to handle requests addressed to such kind of device objects.

Best regards,
Vadim.

Comment 2 Jean-Pierre Ribeauville 2015-09-18 10:37:05 UTC
Hi,

Fine.

So, I,don't worry about setupapi.dev.log complaint.

My concern is to retrieve vportp02 device path name of to be able to issue a CreateFile on it.


I try to get it with thing such as :

SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT,
, by no way up to now.


Any hint ?
What should vportp02 device path look like ?

Thanks for help.
Regards,

J.P.

Comment 3 Vadim Rozenfeld 2015-09-18 10:48:16 UTC
(In reply to Jean-Pierre Ribeauville from comment #2)
> Hi,
> 
> Fine.
> 
> So, I,don't worry about setupapi.dev.log complaint.
> 
> My concern is to retrieve vportp02 device path name of to be able to issue a
> CreateFile on it.
> 
> 
> I try to get it with thing such as :
> 
> SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT,
> , by no way up to now.
> 

 
you need to use GUID_VIOSERIAL_PORT

defined in sys/public.h as 

DEFINE_GUID(GUID_VIOSERIAL_PORT,
0x6fde7521, 0x1b65, 0x48ae, 0xb6, 0x28, 0x80, 0xbe, 0x62, 0x1, 0x60, 0x26);
// {6FDE7521-1B65-48ae-B628-80BE62016026}


Cheers, 
Vadim.
> 
> Any hint ?
> What should vportp02 device path look like ?
> 
> Thanks for help.
> Regards,
> 
> J.P.

Comment 4 Vadim Rozenfeld 2015-09-18 10:57:38 UTC
(In reply to Vadim Rozenfeld from comment #3)
> (In reply to Jean-Pierre Ribeauville from comment #2)
> > Hi,
> > 
> > Fine.
> > 
> > So, I,don't worry about setupapi.dev.log complaint.
> > 
> > My concern is to retrieve vportp02 device path name of to be able to issue a
> > CreateFile on it.
> > 
> > 
> > I try to get it with thing such as :
> > 
> > SetupDiGetClassDevs(&GUID_DEVINTERFACE_COMPORT,
> > , by no way up to now.
> > 
> 
>  
> you need to use GUID_VIOSERIAL_PORT
> 
> defined in sys/public.h as 
> 
> DEFINE_GUID(GUID_VIOSERIAL_PORT,
> 0x6fde7521, 0x1b65, 0x48ae, 0xb6, 0x28, 0x80, 0xbe, 0x62, 0x1, 0x60, 0x26);
> // {6FDE7521-1B65-48ae-B628-80BE62016026}
> 
> 
> Cheers, 
> Vadim.
> > 
> > Any hint ?
> > What should vportp02 device path look like ?
> > 

something like 

L"\\\\.\\Global\\omnivision_123.agent"

> > Thanks for help.
> > Regards,
> > 
> > J.P.

Comment 5 Jean-Pierre Ribeauville 2015-09-18 11:26:03 UTC
Hi,

Now, I found it .

By using SetupDiGetDeviceInterfaceDetail(), I got this device path :

Device Path = \\?\{6fde7547-1b65-48ae-b628-80be62016026}#vioserialport#4&7e8053e
&4&02#{6fde7521-1b65-48ae-b628-80be62016026}

Surely, I miss something ???



J.P.

Comment 6 Vadim Rozenfeld 2015-09-18 12:35:17 UTC
(In reply to Jean-Pierre Ribeauville from comment #5)
> Hi,
> 
> Now, I found it .
> 
> By using SetupDiGetDeviceInterfaceDetail(), I got this device path :
> 
> Device Path =
> \\?\{6fde7547-1b65-48ae-b628-80be62016026}#vioserialport#4&7e8053e
> &4&02#{6fde7521-1b65-48ae-b628-80be62016026}
> 
> Surely, I miss something ???
> 
> 
> 
> J.P.

You should be able to use symbolic link name. The port name, specified when adding a new port, should also be visible inside of the guest. Try using winobj from sysinternals to inspect symbolic names under Global?? directory. You should be able to see "omnivision_123.agent" there.

Comment 7 Jean-Pierre Ribeauville 2015-09-18 14:16:09 UTC
Hi,

Effectively, I found it via winobj.

I notice that , if the host side has not open the socket, then write issued by the guest fails with following error :

C:\>copy omv_bdc_var   "\\.\Global\omnivision_123.agent"
Used to indicate that an operation cannot continue without blocking for I/O.
        0 file(s) copied.

Is it the waited behavior ?

On another hand, I realize that this thread is not really related to a "bug" but
it's more "calrification" on how to use this channel to exchange datas between host and guest.

It should be held in libvirt-users mailing list , isn't?

I potsed on bugzilla-redhat cos I hoped to have faster answer , and this is the case.

Is it a problem to use it instead of libvirt-users?

Or do you survey both sites ?


Thanks for help.

Regards,


J.P.

Comment 8 Cole Robinson 2015-09-18 14:31:26 UTC
In the future, questions about how to use virtio-win drivers should be directed to a public mailing list. I think qemu-devel is probably best.