From nobody Wed Dec 17 04:05:12 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1510080616642372.79397274770315; Tue, 7 Nov 2017 10:50:16 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3099A285BA; Tue, 7 Nov 2017 18:50:15 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 10ED460BE3; Tue, 7 Nov 2017 18:50:15 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CE8623D38D; Tue, 7 Nov 2017 18:50:14 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vA7Inhwf024897 for ; Tue, 7 Nov 2017 13:49:43 -0500 Received: by smtp.corp.redhat.com (Postfix) id 4FA7B5EDE0; Tue, 7 Nov 2017 18:49:43 +0000 (UTC) Received: from mx1.redhat.com (ext-mx03.extmail.prod.ext.phx2.redhat.com [10.5.110.27]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 4AD665D6A9 for ; Tue, 7 Nov 2017 18:49:43 +0000 (UTC) Received: from mail-qt0-f171.google.com (mail-qt0-f171.google.com [209.85.216.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 542AF7E424 for ; Tue, 7 Nov 2017 18:49:42 +0000 (UTC) Received: by mail-qt0-f171.google.com with SMTP id 1so295714qtn.3 for ; Tue, 07 Nov 2017 10:49:42 -0800 (PST) Received: from dawid-fedora.datto.lan ([47.19.105.250]) by smtp.gmail.com with ESMTPSA id t34sm1313175qtb.79.2017.11.07.10.49.40 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 07 Nov 2017 10:49:40 -0800 (PST) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 3099A285BA Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; dmarc=fail (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx06.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 3099A285BA Authentication-Results: mx1.redhat.com; dkim=fail reason="signature verification failed" (2048-bit key) header.d=datto-com.20150623.gappssmtp.com header.i=@datto-com.20150623.gappssmtp.com header.b="ECM1k9Be" DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 542AF7E424 Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; dmarc=pass (p=none dis=none) header.from=datto.com Authentication-Results: ext-mx03.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=dzamirski@datto.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 542AF7E424 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datto-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=2DnCflPrf+xHyJt5m1kh6sa+U6TuqfdKpFKeleOzC/o=; b=ECM1k9Be589hJEAdiunSbQIDxvqTMIuIrIWA69Xe0udBrbhI6e1ruzQH2ljWfpFY1r gy9ZTHjRoQcdyjLNrP2pvpzR/LxVB7xN0hca1e/nZ68AWnSzaSEUttutqAySND7Rv9D3 QhXMj0kquP/vLdjRWZRU7T90nn1qW3R73WsdL+hUt+me7+5bNTXW8QX5tCVqRytY2274 dqYMqZxiVrRoHh4GhQhz+3fbULFT6l0oU+nSC6vM9pY/i0V9R/p2TCWngAFnyRTcqed2 aRCr9L4QzNd2THt62qTjx7BkVWSJZiJvmRwNdFaDcN2+DJYixdjyJQkfqoa0HVgj1kJK OwRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=2DnCflPrf+xHyJt5m1kh6sa+U6TuqfdKpFKeleOzC/o=; b=CkT/ZX2m4bYHm9Ps8ry0Rr6mlIWCPvVSOh1PRj8dlL2PfsJVWqGnrxVqI8KDxC+IMv nnQyGZC35YYruK3DvNZa5NudoB6FcShAGa/akfd8Vy6OHskuLDFU9XKt+ZgbEoxdvg+F 3Uw6Lgn2WKBJfnyDcoivHAh9Q44JE6WZG4Q2qJr1EXjHrdtc3skFA82PDpcZPQPEdcRC jv3y3OmNIokja3/4JDVB5QFYZs9LEAT7POWxKYC5su66qb/RV3oFUYCWsWRZo/5YHDqu EKXi5GFaD4JXuMKx3Tlu0nZCUGXAh9FJXy3ZQ14itQSo8ogvxCvM9KSPj/7u7xYO4l5B eu6g== X-Gm-Message-State: AMCzsaWPQuTA2ltNzek7eXQZzVyadCF+MAFRuFlH9LY5Wh/nYeNiq5RI U9V5p5z/YEOJVUwpNIoKgnvCexesTF8= X-Google-Smtp-Source: ABhQp+SEm1f0s0yknKc7bavPA3XyuLOKFcieoeUa2gIvnT12VG6cbOOyx+jz1NE7s+DqdWlV0tdCWw== X-Received: by 10.200.47.85 with SMTP id k21mr30386743qta.286.1510080581314; Tue, 07 Nov 2017 10:49:41 -0800 (PST) From: Dawid Zamirski To: libvir-list@redhat.com Date: Tue, 7 Nov 2017 13:49:29 -0500 Message-Id: <20171107184930.12769-13-dzamirski@datto.com> In-Reply-To: <20171107184930.12769-1-dzamirski@datto.com> References: <20171107184930.12769-1-dzamirski@datto.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 07 Nov 2017 18:49:42 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Tue, 07 Nov 2017 18:49:42 +0000 (UTC) for IP:'209.85.216.171' DOMAIN:'mail-qt0-f171.google.com' HELO:'mail-qt0-f171.google.com' FROM:'dzamirski@datto.com' RCPT:'' X-RedHat-Spam-Score: 0.469 (DKIM_SIGNED, DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, RCVD_IN_SORBS_SPAM, SPF_PASS) 209.85.216.171 mail-qt0-f171.google.com 209.85.216.171 mail-qt0-f171.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.27 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v3 12/13] vbox: Add SAS controller support X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Tue, 07 Nov 2017 18:50:15 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In VirtualBox SAS and SCSI are separate controller types whereas libvirt does not make such distinction. This patch adds support for attaching the VBOX SAS controllers by mapping the 'lsisas1068' controller model in libvirt XML to VBOX SAS controller type. If VBOX VM has disks attached to both SCSI and SAS controller libvirt domain XML will have two elements with index and model attributes set accordingly. In this case, each respective element must have
element specified to assign it to respective SCSI controller. --- src/vbox/vbox_common.c | 86 ++++++++++++++++++++++++++++++++++++++++------= ---- src/vbox/vbox_common.h | 1 + 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 8da08240e..a1d9b2e7d 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -312,20 +312,27 @@ vboxGenerateMediumName(PRUint32 storageBus, char *name =3D NULL; int total =3D 0; =20 - if ((storageBus < StorageBus_IDE) || - (storageBus > StorageBus_Floppy)) - return NULL; - - if (storageBus =3D=3D StorageBus_IDE) { + switch ((enum StorageBus) storageBus) { + case StorageBus_IDE: prefix =3D "hd"; total =3D devicePort * 2 + deviceSlot; - } else if ((storageBus =3D=3D StorageBus_SATA) || - (storageBus =3D=3D StorageBus_SCSI)) { + + break; + case StorageBus_SATA: + case StorageBus_SCSI: + case StorageBus_SAS: prefix =3D "sd"; total =3D sdCount; - } else if (storageBus =3D=3D StorageBus_Floppy) { + + break; + case StorageBus_Floppy: total =3D deviceSlot; prefix =3D "fd"; + + break; + case StorageBus_Null: + + return NULL; } =20 name =3D virIndexToDiskName(total, prefix); @@ -391,11 +398,17 @@ vboxSetStorageController(virDomainControllerDefPtr co= ntroller, case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_BUSLOGIC: vboxModel =3D StorageControllerType_BusLogic; =20 + break; + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068: + /* in vbox, lsisas has a dedicated SAS bus type with no model = */ + VBOX_UTF16_FREE(controllerName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SAS_NAME, &controllerName); + vboxBusType =3D StorageBus_SAS; + break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: - case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1078: case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST: virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -1034,7 +1047,7 @@ static int vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr data, IMachine *machin= e) { size_t i; - int type, ret =3D 0; + int type, ret =3D 0, model =3D -1; const char *src =3D NULL; nsresult rc =3D 0; virDomainDiskDefPtr disk =3D NULL; @@ -1113,6 +1126,13 @@ vboxAttachDrives(virDomainDefPtr def, vboxDriverPtr = data, IMachine *machine) case VIR_DOMAIN_DISK_BUS_SCSI: VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SCSI_NAME, &storageCtlName); =20 + model =3D virDomainDeviceFindControllerModel(def, &disk->info, + VIR_DOMAIN_CONTROLL= ER_TYPE_SCSI); + if (model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068) { + VBOX_UTF16_FREE(storageCtlName); + VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_SAS_NAME, &storageCtlNa= me); + } + break; case VIR_DOMAIN_DISK_BUS_FDC: VBOX_UTF8_TO_UTF16(VBOX_CONTROLLER_FLOPPY_NAME, &storageCtlNam= e); @@ -3127,6 +3147,9 @@ vboxDumpStorageControllers(virDomainDefPtr def, IMach= ine *machine) =20 break; case StorageControllerType_LsiLogicSas: + model =3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068; + + break; case StorageControllerType_IntelAhci: case StorageControllerType_I82078: case StorageControllerType_Null: @@ -3195,12 +3218,13 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) PRBool readOnly; nsresult rc; virDomainDiskDefPtr disk =3D NULL; + virDomainControllerDefPtr ctrl =3D NULL; char *mediumLocUtf8 =3D NULL; - size_t sdCount =3D 0, i; + size_t sdCount =3D 0, i, j; =20 def->ndisks =3D 0; gVBoxAPI.UArray.vboxArrayGet(&mediumAttachments, machine, - gVBoxAPI.UArray.handleMachineGetMediumAtt= achments(machine)); + gVBoxAPI.UArray.handleMachineGetMediumAttachments(machine= )); =20 /* get the number of attachments */ for (i =3D 0; i < mediumAttachments.count; i++) { @@ -3353,15 +3377,38 @@ vboxDumpDisks(virDomainDefPtr def, vboxDriverPtr da= ta, IMachine *machine) =20 break; case StorageBus_SCSI: + case StorageBus_SAS: disk->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; sdCount++; =20 + /* In vbox, if there's a disk attached to SAS controller, ther= e will + * be libvirt SCSI controller present with model "lsi1068", an= d we + * need to find its index + */ + for (j =3D 0; j < def->ncontrollers; j++) { + ctrl =3D def->controllers[j]; + + if (ctrl->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI) + continue; + + if (storageBus =3D=3D StorageBus_SAS && + ctrl->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LS= ISAS1068) { + disk->info.addr.drive.controller =3D ctrl->idx; + break; + } + + if (storageBus =3D=3D StorageBus_SCSI && + ctrl->model !=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSIS= AS1068) { + disk->info.addr.drive.controller =3D ctrl->idx; + break; + } + } + break; case StorageBus_Floppy: disk->bus =3D VIR_DOMAIN_DISK_BUS_FDC; =20 break; - case StorageBus_SAS: case StorageBus_Null: virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Unsupported null storage bus")); @@ -5829,7 +5876,8 @@ vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPtr= def, * in XML, but we need to update "sdCount" so that device name= s match * in domain dumpxml and snapshot dumpxml */ - if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Sto= rageBus_SCSI) + if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Sto= rageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) sdCount++; =20 VBOX_RELEASE(storageController); @@ -5890,8 +5938,10 @@ vboxSnapshotGetReadWriteDisks(virDomainSnapshotDefPt= r def, VBOX_RELEASE(disk); diskCount++; =20 - if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Storage= Bus_SCSI) + if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Storage= Bus_SCSI || + storageBus =3D=3D StorageBus_SAS) sdCount++; + } gVBoxAPI.UArray.vboxArrayRelease(&mediumAttachments); =20 @@ -6044,7 +6094,8 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotDefPtr = def, * in XML, but we need to update "sdCount" so that device name= s match * in domain dumpxml and snapshot dumpxml */ - if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Sto= rageBus_SCSI) + if (storageBus =3D=3D StorageBus_SATA || storageBus =3D=3D Sto= rageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) sdCount++; =20 VBOX_RELEASE(storageController); @@ -6087,7 +6138,8 @@ vboxSnapshotGetReadOnlyDisks(virDomainSnapshotDefPtr = def, } else if (storageBus =3D=3D StorageBus_SATA) { sdCount++; def->dom->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SATA; - } else if (storageBus =3D=3D StorageBus_SCSI) { + } else if (storageBus =3D=3D StorageBus_SCSI || + storageBus =3D=3D StorageBus_SAS) { sdCount++; def->dom->disks[diskCount]->bus =3D VIR_DOMAIN_DISK_BUS_SCSI; } else if (storageBus =3D=3D StorageBus_Floppy) { diff --git a/src/vbox/vbox_common.h b/src/vbox/vbox_common.h index 5dc87239d..05636fea2 100644 --- a/src/vbox/vbox_common.h +++ b/src/vbox/vbox_common.h @@ -332,6 +332,7 @@ enum HardDiskVariant # define VBOX_CONTROLLER_FLOPPY_NAME "Floppy Controller" # define VBOX_CONTROLLER_SATA_NAME "SATA Controller" # define VBOX_CONTROLLER_SCSI_NAME "SCSI Controller" +# define VBOX_CONTROLLER_SAS_NAME "SAS Controller" =20 /* Simplied definitions in vbox_CAPI_*.h */ =20 --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list