[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 1/2] xen_platform: unplug also SCSI disks
From: |
Stefano Stabellini |
Subject: |
Re: [Qemu-devel] [PATCH v2 1/2] xen_platform: unplug also SCSI disks |
Date: |
Wed, 14 Sep 2016 18:50:11 -0700 (PDT) |
User-agent: |
Alpine 2.10 (DEB 1266 2009-07-14) |
On Fri, 2 Sep 2016, Olaf Hering wrote:
> Using 'vdev=sd[a-o]' will create an emulated LSI controller, which can
> be used by the emulated BIOS to boot from disk. If the HVM domU has also
> PV driver the disk may appear twice in the guest. To avoid this an
> unplug of the emulated hardware is needed, similar to what is done for
> IDE and NIC drivers already.
>
> Since the SCSI controller provides only disks the entire controller can
> be unplugged at once.
>
> Impact of the change for classic and pvops based guest kernels:
>
> vdev=sda:disk0
> before: pvops: disk0=pv xvda + emulated sda
> classic: disk0=pv sda + emulated sdq
> after: pvops: disk0=pv xvda
> classic: disk0=pv sda
>
> vdev=hda:disk0, vdev=sda:disk1
> before: pvops: disk0=pv xvda
> disk1=emulated sda
> classic: disk0=pv hda
> disk1=pv sda + emulated sdq
> after: pvops: disk0=pv xvda
> disk1=not accessible by blkfront, index hda==index sda
> classic: disk0=pv hda
> disk1=pv sda
>
> vdev=hda:disk0, vdev=sda:disk1, vdev=sdb:disk2
> before: pvops: disk0=pv xvda
> disk1=emulated sda
> disk2=pv xvdb + emulated sdb
> classic: disk0=pv hda
> disk1=pv sda + emulated sdq
> disk2=pv sdb + emulated sdr
> after: pvops: disk0=pv xvda
> disk1=not accessible by blkfront, index hda==index sda
> disk2=pv xvdb
> classic: disk0=pv hda
> disk1=pv sda
> disk2=pv sda
>
> Signed-off-by: Olaf Hering <address@hidden>
> ---
> hw/i386/xen/xen_platform.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/hw/i386/xen/xen_platform.c b/hw/i386/xen/xen_platform.c
> index aa78393..53be3c7 100644
> --- a/hw/i386/xen/xen_platform.c
> +++ b/hw/i386/xen/xen_platform.c
> @@ -114,6 +114,10 @@ static void unplug_disks(PCIBus *b, PCIDevice *d, void
> *o)
> PCI_CLASS_STORAGE_IDE
> && strcmp(d->name, "xen-pci-passthrough") != 0) {
> pci_piix3_xen_ide_unplug(DEVICE(d));
> + } else if (pci_get_word(d->config + PCI_CLASS_DEVICE) ==
> + PCI_CLASS_STORAGE_SCSI
> + && strcmp(d->name, "xen-pci-passthrough") != 0) {
> + object_unparent(OBJECT(d));
> }
> }
Written like this, the code will unplug any Xen SCSI disks together with
Xen IDE disks when the guest writes "1" to ioport `0x10`. I am sorry to
be pedantic, but the recent changes introduced to
docs/misc/hvm-emulated-unplug.markdown do not cover any changes in
behavior to the existing ioport address (I am looking specifically at
point 6). Sorry to only notice this now.