Message ID | 1255527031-19008-1-git-send-email-kraxel@redhat.com |
---|---|
State | New |
Headers | show |
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
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
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
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
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>
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
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);
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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