From nobody Tue Sep 9 02:51:21 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1748860471; cv=none; d=zohomail.com; s=zohoarc; b=M4+g4ullkKGbZSGR2WHb+7025YlEAJp1e46zqSsuZXZhkDCfNKLsYxt9F61CY0xhI1rnFMXsBa0Jf5ynwA+DJ7uyp0e3E5TBJ2YBnj+zO617ll8SoUKCzVIFxi/OXibrgbhQ+9WClBD25apCiapF6p3mLABPMl7H2ILTl28GI1I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1748860471; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=UF8Ta7rbuU4+oiRjcDZ6KWGfV0rGyLcKN2jOaAWeAJ0=; b=mzlkqbyTvpOYzrcSaK6oUrVp/c6Y4n1ps5lyqMLNObvVUdCtvXQCzRT8/6e28tgDNkP/sdzxlgS0oJvWZBIxN7hWc7fBRYDfk5gGywmBJBoZ5lBY+l9WFAPyQMmVnxG8sfw3Zzs0Mn7TpFMLkkRnKN5FHCOmUry4nHHH5sSXrBo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1748860471216310.6511341979084; Mon, 2 Jun 2025 03:34:31 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 220FB1477; Mon, 2 Jun 2025 06:34:30 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 3915F137A; Mon, 2 Jun 2025 06:31:19 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id A4789E8C; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 121A9E79 for ; Mon, 2 Jun 2025 06:31:05 -0400 (EDT) Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-19-yU4qtujPNt231XdHVzO12Q-1; Mon, 02 Jun 2025 06:31:03 -0400 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-442fda1cba7so19393285e9.1 for ; Mon, 02 Jun 2025 03:31:03 -0700 (PDT) Received: from wheatley.localdomain ([85.93.96.130]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-450d30e2746sm82664525e9.1.2025.06.02.03.30.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Jun 2025 03:31:00 -0700 (PDT) Received: from wheatley.brq.redhat.com (wheatley.k8r.cz [127.0.0.1]) by wheatley.localdomain (Postfix) with ESMTP id A269CB55DC7A for ; Mon, 02 Jun 2025 12:30:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748860264; h=from:from: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; bh=WbJmbAEnvdFqqipYgExs8S7RN5pCI9UaCdqISUUc8zQ=; b=LDRm7jusEr1iMm03q3KMy/apUqFl32YMXK1/v92nmdRFG2owpFg4tD0lECZNqN1tQHNk/e HBbfWXzgo0ZbMknLpA1GIhGWhsHlkuavx6XbYzUAKjtD9OUnfPes6ChAL+khX5rzw1vE8k AI5e2oKOIu4RWWSODZGWttE0ZKilN/M= X-MC-Unique: yU4qtujPNt231XdHVzO12Q-1 X-Mimecast-MFC-AGG-ID: yU4qtujPNt231XdHVzO12Q_1748860263 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748860262; x=1749465062; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WbJmbAEnvdFqqipYgExs8S7RN5pCI9UaCdqISUUc8zQ=; b=pjB5u+FnpFyyUmzXAr4NAuANYe1AV9mlCc05cfMW9jy+keKzxyJXGnOhwkPxpRZ3QT chwYsEsaTYZ8c6zJTfzhYxJlFGMLfzbZLGE44yVtY6ccFj/fYhIpGbn7kv3NYiY8qHs/ llNRshqThLc0QrtgMjO3QcZB7bFZzwCEok7I9zImPqgxoNJzJTw5+SMQSkdvt5ruynho bgxOT0CuE1JZ3wnvnWwMjxwAGaRwwchPx7xRGh89BUPOQWYl4fa1qGxD0dj4pWx7aLhl JwATFX9ypqGyLn0QhtDd6EQ7QUO6kXFTRrA+ceWFgavQNUjF2q4ovzPBDTWGw0F42WuR 49bA== X-Gm-Message-State: AOJu0YzU3rpm5x5R8s9R1IUTk4+z8Lh2T4+CYNEEFRHLSW7XBgPhowWq wl6uZROjgSyVAJMmilKPlav042r4ONyszqDMEemxFZIUjCa6s3HfLUp0Rr6cUlCOxAuvhqivvpZ 9KmpA6Y3gMy0wboS81V6BKVXpqNKHJ1co9Pwe7IgIs6xa3Svc4GsZTv2y67Ia1TVSS3wt75GZdd NQ5CAYLs/+bCvCNqHtmrTvIiHIDvo3X54REtIAisVQGkM= X-Gm-Gg: ASbGncu6P2FwpE3927/zq7CAlSv3aoy5l2U589Arw/48IBywNorunBhgpbPsCqJjDYG iTmSzruUX4a6qqWEN2S7GOS7VH2h0dspEVgmMFZiOp8+cJEnAamMnnCBeIOuHgpMehhtDSg66HF 8JgqPyi1IXqJX4IzEmM2VzSUD50/vjw4+8L8wFYLk19/Kfc5ujvHd2rS2Om6n7BwdyQIWh6gyo8 IvsxENoxFvJRUCMy1hpfM8XwswidKwrZ4AXqHt2m2vXbXJ8iescELhAh6SCWmBnpcVIoAAju357 VZgqa1rrA+FYYIq6+s03BLzfRgQogkE= X-Received: by 2002:a05:600c:45d0:b0:43b:ca39:6c7d with SMTP id 5b1f17b1804b1-450d882b1e0mr120696555e9.3.1748860262520; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGkVhbqOuItuxY1U6QGb4XGnhMggr73n8uMoBFFkRlLz8OvntDL5chNykMoAJTMSjbb9Q0Krg== X-Received: by 2002:a05:600c:45d0:b0:43b:ca39:6c7d with SMTP id 5b1f17b1804b1-450d882b1e0mr120696085e9.3.1748860262015; Mon, 02 Jun 2025 03:31:02 -0700 (PDT) To: devel@lists.libvirt.org Subject: [PATCH 08/11] qemu: Add support for NVMe controllers Date: Mon, 2 Jun 2025 12:30:51 +0200 Message-ID: X-Mailer: git-send-email 2.49.0 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: YzSFzmTicadYaaVOxvHBlH_4CabF58B622VobKgvWSE_1748860263 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: LEU3EJXWCAVFBJFZSVLPMYVUO4DZKKLJ X-Message-ID-Hash: LEU3EJXWCAVFBJFZSVLPMYVUO4DZKKLJ X-MailFrom: mkletzan@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Martin Kletzander via Devel Reply-To: Martin Kletzander X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1748860473396116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Martin Kletzander Without any hotplug. Signed-off-by: Martin Kletzander Signed-off-by: Honglei Wang --- src/qemu/qemu_command.c | 12 ++++++++++ src/qemu/qemu_domain_address.c | 2 ++ src/qemu/qemu_hotplug.c | 3 ++- src/qemu/qemu_validate.c | 44 +++++++++++++++++++++++++++------- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 528a8fc8ca86..9ec9ce343b50 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2854,6 +2854,17 @@ qemuBuildControllerDevProps(const virDomainDef *doma= inDef, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + if (virJSONValueObjectAdd(&props, + "s:driver", "nvme", + "s:id", def->info.alias, + "s:serial", def->opts.nvmeopts.serial, + "p:num_queues", def->queues, + "T:ioeventfd", def->ioeventfd, + NULL) < 0) + return -1; + + break; + case VIR_DOMAIN_CONTROLLER_TYPE_IDE: case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: @@ -3016,6 +3027,7 @@ qemuBuildControllersCommandLine(virCommand *cmd, VIR_DOMAIN_CONTROLLER_TYPE_IDE, VIR_DOMAIN_CONTROLLER_TYPE_SATA, VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL, + VIR_DOMAIN_CONTROLLER_TYPE_NVME, }; =20 for (i =3D 0; i < G_N_ELEMENTS(contOrder); i++) { diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 9b2faf1e8e37..bb86cfa0c3f3 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -617,6 +617,8 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDef *dev, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + return pciFlags; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: case VIR_DOMAIN_CONTROLLER_TYPE_XENBUS: diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 9427eec64384..e1ed8181e303 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5941,7 +5941,8 @@ qemuDomainDetachPrepController(virDomainObj *vm, int idx; virDomainControllerDef *controller =3D NULL; =20 - if (match->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI) { + if (match->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_SCSI && + match->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_NVME) { virReportError(VIR_ERR_OPERATION_UNSUPPORTED, _("'%1$s' controller cannot be hot unplugged."), virDomainControllerTypeToString(match->type)); diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index a264185f5f43..8730cf4e941f 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -3633,6 +3633,26 @@ qemuValidateDomainDeviceDefControllerSATA(const virD= omainControllerDef *controll } =20 =20 +static int +qemuValidateDomainDeviceDefControllerNVME(const virDomainControllerDef *co= ntroller, + const virDomainDef *def G_GNUC_U= NUSED, + virQEMUCaps *qemuCaps) +{ + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVME)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("NVMe controllers are not supported with this QEM= U binary")); + } + + if (!controller->opts.nvmeopts.serial) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Missing mandatory serial for NVMe controller")); + return -1; + } + + return 0; +} + + static int qemuValidateDomainDeviceDefControllerIDE(const virDomainControllerDef *con= troller, const virDomainDef *def) @@ -3804,10 +3824,17 @@ qemuValidateDomainDeviceDefControllerAttributes(con= st virDomainControllerDef *co (controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTI= O_SCSI || controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTI= O_TRANSITIONAL || controller->model =3D=3D VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTI= O_NON_TRANSITIONAL))) { - if (controller->queues) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("'queues' is only supported by virtio-scsi co= ntroller")); - return -1; + if (controller->type !=3D VIR_DOMAIN_CONTROLLER_TYPE_NVME) { + if (controller->queues) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("'queues' is only supported by virtio-scs= i and nvme controllers")); + return -1; + } + if (controller->ioeventfd) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("'ioeventfd' is only supported by virtio-= scsi and nvme controllers")); + return -1; + } } if (controller->cmd_per_lun) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", @@ -3819,11 +3846,6 @@ qemuValidateDomainDeviceDefControllerAttributes(cons= t virDomainControllerDef *co _("'max_sectors' is only supported by virtio-sc= si controller")); return -1; } - if (controller->ioeventfd) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("'ioeventfd' is only supported by virtio-scsi= controller")); - return -1; - } if (controller->iothread) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("'iothread' is only supported for virtio-scsi= controller")); @@ -4408,6 +4430,10 @@ qemuValidateDomainDeviceDefController(const virDomai= nControllerDef *controller, break; =20 case VIR_DOMAIN_CONTROLLER_TYPE_NVME: + ret =3D qemuValidateDomainDeviceDefControllerNVME(controller, def, + qemuCaps); + break; + case VIR_DOMAIN_CONTROLLER_TYPE_FDC: case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL: case VIR_DOMAIN_CONTROLLER_TYPE_CCID: --=20 2.49.0