From nobody Fri Dec 19 19:20:18 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1588766954; cv=none; d=zohomail.com; s=zohoarc; b=BdQensQkoiwAxNqU15RVjRGUZ9NXQahMxWh0QxSqjdcFibZS8gpWt2DQ9zpEoSUp7V0z7OHrX0rCzBxh5p9p8bwZ7gU1hNyDwNk1I+N/dqVhY+Wmp6CdNUJllY1tAuopIg2NUoSGnu+KQtSSpzbsHvgp8o4z67pgtKtr25mAQbQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588766954; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=9agSns27Pl1uwRdaMOGV2ZyWKfQtbAOhOuG4+lPyDkA=; b=mu5wKRhU1asmVYp+K2qVrsy4ogz+NU5E98pEf7rC1hjMXhS1GMrVv18x1HMHyDIeUNjapnGbwgoMPts99YgBE5ajU37mSQ03YJkNlnSmpCQEf6zNJlHi5uK7tTtWA11JVUcZsRxcofaIDCStBx9yhArOOCUyi38vxQV+qPSfy9g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1588766954592199.05500109612808; Wed, 6 May 2020 05:09:14 -0700 (PDT) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-465-EJawg8h_N4mDgm8Yn-ZIBA-1; Wed, 06 May 2020 08:09:11 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 2137F1005510; Wed, 6 May 2020 12:09:06 +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 C4F6F5C1D6; Wed, 6 May 2020 12:09:05 +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 5C62E54D04; Wed, 6 May 2020 12:09:05 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 046C93hP029779 for ; Wed, 6 May 2020 08:09:03 -0400 Received: by smtp.corp.redhat.com (Postfix) id 990885C241; Wed, 6 May 2020 12:09:03 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.40.208.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id 15CFD5C1BD for ; Wed, 6 May 2020 12:09:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1588766953; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=9agSns27Pl1uwRdaMOGV2ZyWKfQtbAOhOuG4+lPyDkA=; b=NAHDflQBMNn+lPAz3GwsqXA9EfcGBIpz/kRg2q8SvW/INiOz0UnI5Hvisgfldzu2oFAEcz pifEI+ATKgxwEh/nV4ac8sBHdn8ranRE/UOaP7PqXKvIUGJIDKzFis7OZPXOY8ABN8MSFV j65Xbqthf6oy6fYnoszhCJ7+Cufh1Xs= X-MC-Unique: EJawg8h_N4mDgm8Yn-ZIBA-1 From: Peter Krempa To: libvir-list@redhat.com Subject: [PATCH 19/20] qemu: Prepare for 'sd' card use together with blockdev Date: Wed, 6 May 2020 14:08:34 +0200 Message-Id: <3bf2929f5285a5bafd5eabb5054de2edb62cc896.1588766791.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com 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: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" SD cards need to be instantiated via -drive if=3Dsd. This means that all cases where we use the blockdev path need to be special-cased for SD cards. Note that at this point QEMU_CAPS_BLOCKDEV is still cleared if the VM config has a SD card. Signed-off-by: Peter Krempa --- src/qemu/qemu_command.c | 3 ++- src/qemu/qemu_domain.c | 13 +++++++++---- src/qemu/qemu_driver.c | 3 ++- src/qemu/qemu_hotplug.c | 3 ++- src/qemu/qemu_process.c | 6 +++++- src/qemu/qemu_validate.c | 4 +++- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 07669ded44..5b803f106b 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2089,7 +2089,8 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd, g_autofree char *copyOnReadPropsStr =3D NULL; size_t i; - if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) { + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV) && + !qemuDiskBusIsSD(disk->bus)) { if (virStorageSourceIsEmpty(disk->src)) return 0; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 395cc3daee..0c122f300d 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -8216,6 +8216,8 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver, virStorageSourcePtr src; /* iterator for the backing chain declared in= XML */ virStorageSourcePtr n; /* iterator for the backing chain detected from= disk */ qemuDomainObjPrivatePtr priv =3D vm->privateData; + bool blockdev =3D virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV); + bool isSD =3D qemuDiskBusIsSD(disk->bus); uid_t uid; gid_t gid; @@ -8298,13 +8300,14 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr drive= r, if (n->format =3D=3D VIR_STORAGE_FILE_ISO) n->format =3D VIR_STORAGE_FILE_RAW; - if (qemuDomainValidateStorageSource(n, priv->qemuCaps, false) < 0) + /* mask-out blockdev for 'sd' disks */ + if (qemuDomainValidateStorageSource(n, priv->qemuCaps, isSD) < 0) return -1; qemuDomainPrepareStorageSourceConfig(n, cfg, priv->qemuCaps); qemuDomainPrepareDiskSourceData(disk, n); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && + if (blockdev && !isSD && qemuDomainPrepareStorageSourceBlockdev(disk, n, priv, cfg) < 0) return -1; } @@ -8362,7 +8365,8 @@ qemuDomainDiskGetBackendAlias(virDomainDiskDefPtr dis= k, { *backendAlias =3D NULL; - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) { + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV) || + qemuDiskBusIsSD(disk->bus)) { if (!(*backendAlias =3D qemuAliasDiskDriveFromDisk(disk))) return -1; @@ -13238,7 +13242,8 @@ qemuDomainPrepareDiskSource(virDomainDiskDefPtr dis= k, disk->src->format =3D VIR_STORAGE_FILE_RAW; } - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) { + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && + !qemuDiskBusIsSD(disk->bus)) { if (qemuDomainPrepareDiskSourceBlockdev(disk, priv, cfg) < 0) return -1; } else { diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1617f79d34..63b4a49c3c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -10808,7 +10808,8 @@ qemuDomainBlockResize(virDomainPtr dom, disk->src->format =3D=3D VIR_STORAGE_FILE_QED) size =3D VIR_ROUND_UP(size, 512); - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV)) { + if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) && + !qemuDiskBusIsSD(disk->bus)) { if (virStorageSourceIsEmpty(disk->src) || disk->src->readonly) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("can't resize empty or readonly disk '%s'"), diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index f1b2fbb1a8..ab5a7aef84 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -4270,7 +4270,8 @@ qemuDomainRemoveDiskDevice(virQEMUDriverPtr driver, disk->info.alias, vm, vm->def->name); - if (blockdev) { + if (blockdev && + !qemuDiskBusIsSD(disk->bus)) { corAlias =3D g_strdup(diskPriv->nodeCopyOnRead); if (diskPriv->blockjob) { diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index fe2ac2dcfe..b1751d4b52 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6405,7 +6405,7 @@ qemuProcessPrepareHostStorage(virQEMUDriverPtr driver, continue; /* backing chain needs to be redetected if we aren't using blockde= v */ - if (!blockdev) + if (!blockdev || qemuDiskBusIsSD(disk->bus)) virStorageSourceBackingStoreClear(disk->src); /* @@ -6634,6 +6634,10 @@ qemuProcessSetupDiskThrottlingBlockdev(virQEMUDriver= Ptr driver, virDomainDiskDefPtr disk =3D vm->def->disks[i]; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(dis= k); + /* sd-cards are instantiated via -drive */ + if (qemuDiskBusIsSD(disk->bus)) + continue; + if (!qemuDiskConfigBlkdeviotuneEnabled(disk)) continue; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index f49181b639..2cde678ca0 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -2259,6 +2259,7 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDe= f *disk, virQEMUCapsPtr qemuCaps) { const char *driverName =3D virDomainDiskGetDriver(disk); + bool isSD =3D qemuDiskBusIsSD(disk->bus); virStorageSourcePtr n; int idx; int partition; @@ -2298,7 +2299,8 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDe= f *disk, } for (n =3D disk->src; virStorageSourceIsBacking(n); n =3D n->backingSt= ore) { - if (qemuDomainValidateStorageSource(n, qemuCaps, false) < 0) + /* blockdev support is masked out for 'sd' disks */ + if (qemuDomainValidateStorageSource(n, qemuCaps, isSD) < 0) return -1; } --=20 2.26.2