Patchwork [STABLE] hotplug: fix scsi hotplug.

login
register
mail settings
Submitter Gerd Hoffmann
Date Oct. 14, 2009, 1:30 p.m.
Message ID <1255527031-19008-1-git-send-email-kraxel@redhat.com>
Download mbox | patch
Permalink /patch/35964/
State New
Headers show

Comments

Gerd Hoffmann - Oct. 14, 2009, 1:30 p.m.
Well, partly just papering over the issues.  But without proper scsi bus
infrastructure we hardly can do better.  Changes:

 * Avoid auto-attach by setting the bus number to -1.
 * Ignore the unit value calculated by drive_init().
 * Explicitly attach the devices to the adapter.
 * Add sanity checks.  Don't allow attaching scsi drives to your
   network device.
 * Kill the bus+unit printing.  The values are bogus, and we can't
   easily figure the correct ones.  I doubt this ever worked correctly
   with multiple scsi adapters present in the system.

Should come more close to the expected behavior now ...

Oh, and pc-bios/bios.bin needs a update too, otherwise pci hotplug
doesn't work at all.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 hw/pci-hotplug.c |   24 +++++++++++++++++++-----
 pc-bios/bios.bin |  Bin 131072 -> 131072 bytes
 2 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/pc-bios/bios.bin b/pc-bios/bios.bin
index e4323c0504f8f4faf72d56e288c0d457b37bf442..542beddc6fa9c267893283c919158be28f61cb05 100644
GIT binary patch
delta 18924
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

delta 13383
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
Anthony Liguori - Oct. 14, 2009, 2:49 p.m.
Gerd Hoffmann wrote:
> Well, partly just papering over the issues.  But without proper scsi bus
> infrastructure we hardly can do better.  Changes:
>
>  * Avoid auto-attach by setting the bus number to -1.
>  * Ignore the unit value calculated by drive_init().
>  * Explicitly attach the devices to the adapter.
>  * Add sanity checks.  Don't allow attaching scsi drives to your
>    network device.
>  * Kill the bus+unit printing.  The values are bogus, and we can't
>    easily figure the correct ones.  I doubt this ever worked correctly
>    with multiple scsi adapters present in the system.
>
> Should come more close to the expected behavior now ...
>
> Oh, and pc-bios/bios.bin needs a update too, otherwise pci hotplug
> doesn't work at all.
>   

What's it being updated to?

Regards,

Anthony Liguori
Dustin Kirkland - Oct. 14, 2009, 3:43 p.m.
On Wed, Oct 14, 2009 at 8:30 AM, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Oh, and pc-bios/bios.bin needs a update too, otherwise pci hotplug
> doesn't work at all.

Hi Gerd-

I'm having trouble applying the pc-bios/bios.bin binary patch.  Can
you explain how to apply this diff?

:-Dustin
Gerd Hoffmann - Oct. 14, 2009, 3:44 p.m.
On 10/14/09 16:49, Anthony Liguori wrote:

>> Oh, and pc-bios/bios.bin needs a update too, otherwise pci hotplug
>> doesn't work at all.
>
> What's it being updated to?

pcbios da5ff65dc9473e3f069736d38b9a189ea14a67eb (same as master).

cheers,
   Gerd
Gerd Hoffmann - Oct. 14, 2009, 3:45 p.m.
On 10/14/09 17:43, Dustin Kirkland wrote:
> On Wed, Oct 14, 2009 at 8:30 AM, Gerd Hoffmann<kraxel@redhat.com>  wrote:
>> Oh, and pc-bios/bios.bin needs a update too, otherwise pci hotplug
>> doesn't work at all.
>
> Hi Gerd-
>
> I'm having trouble applying the pc-bios/bios.bin binary patch.  Can
> you explain how to apply this diff?

"git am" should work.  You can also simply ignore the patch and copy 
bios.bin over from the master branch.

HTH,
   Gerd
Dustin Kirkland - Oct. 14, 2009, 5:30 p.m.
On Wed, Oct 14, 2009 at 8:30 AM, Gerd Hoffmann <kraxel@redhat.com> wrote:
> Well, partly just papering over the issues.  But without proper scsi bus
> infrastructure we hardly can do better.  Changes:
>
>  * Avoid auto-attach by setting the bus number to -1.
>  * Ignore the unit value calculated by drive_init().
>  * Explicitly attach the devices to the adapter.
>  * Add sanity checks.  Don't allow attaching scsi drives to your
>   network device.
>  * Kill the bus+unit printing.  The values are bogus, and we can't
>   easily figure the correct ones.  I doubt this ever worked correctly
>   with multiple scsi adapters present in the system.
>
> Should come more close to the expected behavior now ...
>
> Oh, and pc-bios/bios.bin needs a update too, otherwise pci hotplug
> doesn't work at all.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  hw/pci-hotplug.c |   24 +++++++++++++++++++-----
>  pc-bios/bios.bin |  Bin 131072 -> 131072 bytes
>  2 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
> index d0f2911..8bedea2 100644
> --- a/hw/pci-hotplug.c
> +++ b/hw/pci-hotplug.c
> @@ -52,9 +52,10 @@ void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
>  {
>     int dom, pci_bus;
>     unsigned slot;
> -    int drive_idx, type, bus;
> +    int drive_idx, type;
>     int success = 0;
>     PCIDevice *dev;
> +    char buf[128];
>
>     if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) {
>         return;
> @@ -74,11 +75,19 @@ void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
>         return;
>     }
>     type = drives_table[drive_idx].type;
> -    bus = drive_get_max_bus (type);
>
>     switch (type) {
>     case IF_SCSI:
> +        if (!dev->qdev.info || strcmp(dev->qdev.info->name, "lsi53c895a") != 0) {
> +            monitor_printf(mon, "Device is not a scsi adapter\n");
> +            break;
> +        }
>         success = 1;
> +        drives_table[drive_idx].bus = -1;
> +        drives_table[drive_idx].unit = -1;
> +        if (get_param_value(buf, sizeof(buf), "unit", opts)) {
> +            drives_table[drive_idx].unit = atoi(buf);
> +        }
>         lsi_scsi_attach(&dev->qdev, drives_table[drive_idx].bdrv,
>                         drives_table[drive_idx].unit);
>         break;
> @@ -87,9 +96,7 @@ void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
>     }
>
>     if (success)
> -        monitor_printf(mon, "OK bus %d, unit %d\n",
> -                       drives_table[drive_idx].bus,
> -                       drives_table[drive_idx].unit);
> +        monitor_printf(mon, "OK\n");
>     return;
>  }
>
> @@ -130,7 +137,14 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
>
>     switch (type) {
>     case IF_SCSI:
> +        drives_table[drive_idx].bus = -1;
> +        drives_table[drive_idx].unit = -1;
> +        if (get_param_value(buf, sizeof(buf), "unit", opts)) {
> +            drives_table[drive_idx].unit = atoi(buf);
> +        }
>         dev = pci_create("lsi53c895a", devaddr);
> +        lsi_scsi_attach(&dev->qdev, drives_table[drive_idx].bdrv,
> +                        drives_table[drive_idx].unit);
>         break;
>     case IF_VIRTIO:
>         dev = pci_create("virtio-blk-pci", devaddr);

Thanks, Gerd.

I applied this patch against qemu-kvm-0.11.0 stable, built, and tested
it.  I can verify that it fixes the scsi hot-add issues I was seeing.
I am now able to add/remove/add/remove/add/remove a scsi disk to a
running instance without segfaulting qemu.

Note that on remove, I do get a stack track in the guest's kernel
(2.6.31), though the remove does succeed, and the disk disappears.

Also note that I did not replace the bios.bin, as it appears to me
that the qemu-kvm-0.11 bios.bin is working properly.

Tested-by: Dustin Kirkland <kirkland@canonical.com>
Gerd Hoffmann - Oct. 15, 2009, 7:42 a.m.
On 10/14/09 19:30, Dustin Kirkland wrote:
> Also note that I did not replace the bios.bin, as it appears to me
> that the qemu-kvm-0.11 bios.bin is working properly.

Yes, kvm has its own bios, only for vanilla upstream the bios must be 
replaced.

cheers,
   Gerd

Patch

diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index d0f2911..8bedea2 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -52,9 +52,10 @@  void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
 {
     int dom, pci_bus;
     unsigned slot;
-    int drive_idx, type, bus;
+    int drive_idx, type;
     int success = 0;
     PCIDevice *dev;
+    char buf[128];
 
     if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) {
         return;
@@ -74,11 +75,19 @@  void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
         return;
     }
     type = drives_table[drive_idx].type;
-    bus = drive_get_max_bus (type);
 
     switch (type) {
     case IF_SCSI:
+        if (!dev->qdev.info || strcmp(dev->qdev.info->name, "lsi53c895a") != 0) {
+            monitor_printf(mon, "Device is not a scsi adapter\n");
+            break;
+        }
         success = 1;
+        drives_table[drive_idx].bus = -1;
+        drives_table[drive_idx].unit = -1;
+        if (get_param_value(buf, sizeof(buf), "unit", opts)) {
+            drives_table[drive_idx].unit = atoi(buf);
+        }
         lsi_scsi_attach(&dev->qdev, drives_table[drive_idx].bdrv,
                         drives_table[drive_idx].unit);
         break;
@@ -87,9 +96,7 @@  void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
     }
 
     if (success)
-        monitor_printf(mon, "OK bus %d, unit %d\n",
-                       drives_table[drive_idx].bus,
-                       drives_table[drive_idx].unit);
+        monitor_printf(mon, "OK\n");
     return;
 }
 
@@ -130,7 +137,14 @@  static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
 
     switch (type) {
     case IF_SCSI:
+        drives_table[drive_idx].bus = -1;
+        drives_table[drive_idx].unit = -1;
+        if (get_param_value(buf, sizeof(buf), "unit", opts)) {
+            drives_table[drive_idx].unit = atoi(buf);
+        }
         dev = pci_create("lsi53c895a", devaddr);
+        lsi_scsi_attach(&dev->qdev, drives_table[drive_idx].bdrv,
+                        drives_table[drive_idx].unit);
         break;
     case IF_VIRTIO:
         dev = pci_create("virtio-blk-pci", devaddr);