[libvirt] [PATCH 1/2] Add VSCSI bus type and VSCSI controller type for pseries guest.

Daniel P. Berrange berrange at redhat.com
Fri May 4 09:04:08 UTC 2012


On Fri, May 04, 2012 at 10:05:13AM +0800, Li Zhang wrote:
> Now, there is only SCSI bus and controller type in libvirt.
> And when configuring VSCSI controller, it needs to configure
> the spapr-vio bus address type externally. It's a little
> inconvenient to configure the controller type.
> 
> This patch is to add VSCSI bus type and VSCSI controller type.
> And handle with the problems when VSCSI and SCSI devices
> working together, by assign the even number to index of
> VSCSI controller and odd number to index of SCSI controller.
> 
> And when the VSCSI controller is always assigned as SPAPRVIO
> bus address type and SCSI controller will be always assigned
> as PCI bus address, which is implemented according to the 
> controllers' type.
> 
> So when one disk is based on VSCSI controller, then assign 
> the bus as 'vscsi', and one right VSCSI controller will be 
> selected. 

I'm not at all convinced by this description that we need
a new controller type. At most we need a separate <address/>
type for the VSCSI controller under an existing SCSI controller
element.


> ---
>  src/conf/domain_conf.c  |   62 ++++++++++++++++++++++++++++++++++++++++++-----
>  src/conf/domain_conf.h  |    2 ++
>  src/qemu/qemu_command.c |   11 +++++++--
>  3 files changed, 67 insertions(+), 8 deletions(-)
> 
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 184ff23..99005b7 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -177,7 +177,8 @@ VIR_ENUM_IMPL(virDomainDiskBus, VIR_DOMAIN_DISK_BUS_LAST,
>                "xen",
>                "usb",
>                "uml",
> -              "sata")
> +              "sata",
> +              "vscsi")
>  
>  VIR_ENUM_IMPL(virDomainDiskCache, VIR_DOMAIN_DISK_CACHE_LAST,
>                "default",
> @@ -236,7 +237,8 @@ VIR_ENUM_IMPL(virDomainController, VIR_DOMAIN_CONTROLLER_TYPE_LAST,
>                "sata",
>                "virtio-serial",
>                "ccid",
> -              "usb")
> +              "usb",
> +              "vscsi")
>  
>  VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
>                "auto",
> @@ -2973,6 +2975,7 @@ virDomainDiskDefAssignAddress(virCapsPtr caps, virDomainDiskDefPtr def)
>  
>      switch (def->bus) {
>      case VIR_DOMAIN_DISK_BUS_SCSI:
> +    case VIR_DOMAIN_DISK_BUS_VSCSI:
>          def->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE;
>  
>          if (caps->hasWideScsiBus) {
> @@ -2981,6 +2984,16 @@ virDomainDiskDefAssignAddress(virCapsPtr caps, virDomainDiskDefPtr def)
>               * Unit 7 is the SCSI controller itself. Therefore unit 7
>               * cannot be assigned to disks and is skipped.
>               */
> +
> +            /* assign even number to index of vscsi controller,
> +             * and odd number to index of scsi controller, which can
> +             * make vscsi controller and scsi controller work together.
> +             */
> +            if (def->bus == VIR_DOMAIN_DISK_BUS_VSCSI)
> +                def->info.addr.drive.controller = (idx / 15) * 2;
> +            else
> +                def->info.addr.drive.controller = (idx / 15) * 2 + 1;

No, controller numbers *must* be contiguous starting from 0.

> @@ -2992,6 +3005,17 @@ virDomainDiskDefAssignAddress(virCapsPtr caps, virDomainDiskDefPtr def)
>          } else {
>              /* For a narrow SCSI bus we define the default mapping to be
>               * 7 units per bus, 1 bus per controller, many controllers */
> +
> +            /* assign even number to index of vscsi controller,
> +             * and odd number to index of scsi controller, which can
> +             * make vscsi controller and scsi controller work together.
> +             */
> +
> +            if (def->bus == VIR_DOMAIN_DISK_BUS_VSCSI)
> +                def->info.addr.drive.controller = (idx / 7) * 2;
> +            else
> +                def->info.addr.drive.controller = (idx / 7 ) * 2 + 1;
> +

Again NACK to this.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list