diff mbox

Device assignment hotplug broken

Message ID 87eit1c3dz.fsf@pike.pond.sub.org (mailing list archive)
State New, archived
Headers show

Commit Message

Markus Armbruster June 30, 2009, 12:28 p.m. UTC
Sheng Yang <sheng@linux.intel.com> writes:

> On Friday 26 June 2009 01:24:03 Avi Kivity wrote:
>> The impact of the hotplug changes on device assignment were too
>> difficult for me to fix up during the merge, so I disabled it
>> temporarily.  Please take a look at qemu-kvm.git commit a3b371477e3.
>
> When the device assignment can come back? 4 day passed and no message from 
> Markus Armbruster till now.

I'm having difficulties testing my patch.  If it works for you, please
let me know.  Once I'm satisfied it works, I'll post it properly.

Comments

Sheng Yang July 1, 2009, 1:54 a.m. UTC | #1
On Tuesday 30 June 2009 20:28:08 Markus Armbruster wrote:
> Sheng Yang <sheng@linux.intel.com> writes:
> > On Friday 26 June 2009 01:24:03 Avi Kivity wrote:
> >> The impact of the hotplug changes on device assignment were too
> >> difficult for me to fix up during the merge, so I disabled it
> >> temporarily.  Please take a look at qemu-kvm.git commit a3b371477e3.
> >
> > When the device assignment can come back? 4 day passed and no message
> > from Markus Armbruster till now.
>
> I'm having difficulties testing my patch.  If it works for you, please
> let me know.  Once I'm satisfied it works, I'll post it properly.

Hi Markus

In my (limited) test, the patch works well.

Thanks!
Markus Armbruster July 1, 2009, 3:45 p.m. UTC | #2
Sheng Yang <sheng@linux.intel.com> writes:

> On Tuesday 30 June 2009 20:28:08 Markus Armbruster wrote:
>> Sheng Yang <sheng@linux.intel.com> writes:
>> > On Friday 26 June 2009 01:24:03 Avi Kivity wrote:
>> >> The impact of the hotplug changes on device assignment were too
>> >> difficult for me to fix up during the merge, so I disabled it
>> >> temporarily.  Please take a look at qemu-kvm.git commit a3b371477e3.
>> >
>> > When the device assignment can come back? 4 day passed and no message
>> > from Markus Armbruster till now.
>>
>> I'm having difficulties testing my patch.  If it works for you, please
>> let me know.  Once I'm satisfied it works, I'll post it properly.
>
> Hi Markus
>
> In my (limited) test, the patch works well.
>
> Thanks!

Many thanks for testing this.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/hw/device-assignment.c b/hw/device-assignment.c
index e282498..88c3baf 100644
--- a/hw/device-assignment.c
+++ b/hw/device-assignment.c
@@ -1126,9 +1126,8 @@  static int assigned_dev_register_msix_mmio(AssignedDevice *dev)
 struct PCIDevice *init_assigned_device(AssignedDevInfo *adev,
                                        const char *devaddr)
 {
-    printf("init_assigned_device: fix me please\n");
-    return NULL;
-#if 0
+    PCIBus *bus;
+    int devfn;
     int r;
     AssignedDevice *dev;
     PCIDevice *pci_dev;
@@ -1138,8 +1137,9 @@  struct PCIDevice *init_assigned_device(AssignedDevInfo *adev,
     DEBUG("Registering real physical device %s (bus=%x dev=%x func=%x)\n",
           adev->name, adev->bus, adev->dev, adev->func);
 
+    bus = pci_get_bus_devfn(&devfn, devaddr);
     pci_dev = pci_register_device(bus, adev->name,
-              sizeof(AssignedDevice), -1, assigned_dev_pci_read_config,
+              sizeof(AssignedDevice), devfn, assigned_dev_pci_read_config,
               assigned_dev_pci_write_config);
     dev = container_of(pci_dev, AssignedDevice, dev);
 
@@ -1203,7 +1203,6 @@  assigned_out:
 out:
     free_assigned_device(adev);
     return NULL;
-#endif
 }
 
 /*
@@ -1268,7 +1267,7 @@  void add_assigned_devices(PCIBus *bus, const char **devices, int n_devices)
             exit(1);
         }
 
-        if (!init_assigned_device(adev, bus)) {
+        if (!init_assigned_device(adev, NULL)) {
             fprintf(stderr, "Failed to initialize assigned device %s\n",
                     devices[i]);
             exit(1);
diff --git a/hw/pci.c b/hw/pci.c
index 618582a..0107096 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -290,7 +290,7 @@  int pci_read_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp)
     return pci_parse_devaddr(devaddr, domp, busp, slotp);
 }
 
-static PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr)
+PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr)
 {
     int dom, bus;
     unsigned slot;
diff --git a/hw/pci.h b/hw/pci.h
index 7d8df83..a2c3a23 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -239,6 +239,7 @@  int pci_read_devaddr(const char *addr, int *domp, int *busp, unsigned *slotp);
 
 int pci_parse_host_devaddr(const char *addr, int *busp,
                            int *slotp, int *funcp);
+PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr);
 
 void pci_info(Monitor *mon);
 PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did,