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

Re: [Xen-devel] PCI Device Subtree Change from Traditional to Upstream

On 01/05/2018 11:10 AM, Kevin Stange wrote:
> On 01/04/2018 03:16 PM, Kevin Stange wrote:
>> On 01/04/2018 06:52 AM, Anthony PERARD wrote:
>>> On Wed, Jan 03, 2018 at 05:10:54PM -0600, Kevin Stange wrote:
>>>> On 01/03/2018 11:57 AM, Anthony PERARD wrote:
>>>>> On Wed, Dec 20, 2017 at 11:40:03AM -0600, Kevin Stange wrote:
>>>>>> Hi,
>>>>>> I've been working on transitioning a number of Windows guests under HVM
>>>>>> from using QEMU traditional to QEMU upstream as is recommended in the
>>>>>> documentation.  When I move these guests, the PCI subtree for Xen
>>>>>> devices changes and Windows creates a totally new copy of each device.
>>>>>> Windows tracks down the storage without issue, but it treats the new
>>>>>> instance of the NIC driver as a new device and clears the network
>>>>>> configuration even though the MAC address is unchanged.  Manually
>>>>>> booting the guest back on the traditional device model reactivates the
>>>>>> original PCI subtree and the old network configuration with it.
>>>>>> The only thing that I have been able to find that's substantially
>>>>>> different comparing the device trees is that the device instance ID
>>>>>> values differ on the parent Xen PCI device:
>>>>>> PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\3&267A616A&3&18
>>>>>> PCI\VEN_5853&DEV_0001&SUBSYS_00015853&REV_01\3&267A616A&3&10
>>>>>> Besides actually setting the guest to boot using QEMU traditional, is
>>>>>> there a way to convince Windows to treat these devices as the same?  A
>>>>>> patch-based solution would be acceptable to me if there is one, but I
>>>>>> don't understand the code well enough to create my own solution.
>>>>> Hi Kevin,
>>>>> I've got a patch to QEMU that seems to do the trick:
>>>>> From: Anthony PERARD <anthony.perard@xxxxxxxxxx>
>>>>> Subject: [PATCH] xen-platform: Hardcode PCI slot to 3
>>>>> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
>>>>> ---
>>>>>  hw/i386/pc_piix.c | 2 +-
>>>>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>>>> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
>>>>> index 5e47528993..93e3a9a916 100644
>>>>> --- a/hw/i386/pc_piix.c
>>>>> +++ b/hw/i386/pc_piix.c
>>>>> @@ -405,7 +405,7 @@ static void pc_xen_hvm_init(MachineState *machine)
>>>>>      bus = pci_find_primary_bus();
>>>>>      if (bus != NULL) {
>>>>> -        pci_create_simple(bus, -1, "xen-platform");
>>>>> +        pci_create_simple(bus, PCI_DEVFN(3, 0), "xen-platform");
>>>>>      }
>>>>>  }
>>>>>  #endif
>>>>> The same thing could be done by libxl, by providing specific command
>>>>> line options to qemu. (I think that could even be done via a different
>>>>> config file for the guest.)
>>>> This patch doesn't seem to work for me.  It seems like the device model
>>>> process is exiting immediately, but I haven't been able to find any
>>>> information as to what is going wrong.  I tested with Xen 4.6.6 and the
>>>> QEMU packaged with that release.  Should I try it on a different version
>>>> of Xen and QEMU?
>>> What this patch does is asking QEMU to insert the PCI card
>>> "xen-platform" into the 3rd PCI slot. My guess is that failed because
>>> there is already a PCI device there.
>>> You could check qemu's logs, it's in
>>> /var/log/xen/qemu-dm-${guest_name}.log
>> The log file in question only says:
>> qemu: terminating on signal 1 from pid 8865
>>> Let's try something else, instead of patching QEMU, we can patch libxl,
>>> that might work better. Can you try this patch? (I've only test
>>> compiled.) I've write the patch for Xen 4.6, since that the version you
>>> are using.
>> This isn't doing the trick either, with the same misbehavior. The log
>> file is the same in both cases.
> I'm getting confusing behavior here. I tried to boot a guest using a
> build with the second patch and behaves the way the first one did, with
> the qemu-system-i386 process exiting and preventing the guest from ever
> booting.  However, I tried to downgrade the packages to completely
> unpatched version in preparation to reboot again and once the older copy
> of the runtime is installed, the qemu-system-i386 starts properly using
> the command line arguments that libxl had specified and the system comes
> up with the correct PCI subtree.
> This leads me to believe something about my build is screwed up somehow
> such that my qemu-system-i386 is broken.  I'm quite sure I'm not
> applying any extra patches to it that weren't otherwise in the CentOS
> virt packages.

George pointed me at the fact I had failed to pull in the seabios
package from CentOS virt.  The version from RHEL is broken and that was
my issue.  Sorry for generating extra noise as a result.

I can confirm that patch 2 (and probably patch 1, really) work around
the issue for me.  Thank you for the help!

It would be nice if there was a way to set default or override options
to domains from a configuration file that is read by libxl, qemu, or
libvirt but I see no code or documentation to support that right now.

Kevin Stange
Chief Technology Officer
Steadfast | Managed Infrastructure, Datacenter and Cloud Services
800 S Wells, Suite 190 | Chicago, IL 60607
312.602.2689 X203 | Fax: 312.602.2688
kevin@xxxxxxxxxxxxx | www.steadfast.net

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.