From nobody Sat Feb 7 19:50:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1602708253; cv=none; d=zohomail.com; s=zohoarc; b=F9OQzpnmiFmoDqLFZLW049gT1H4swlENbOxG9A8qJvTZl4dw79YXRgRDJGcQGssYkZyMO4fzoE+kFgf1vWJts398txe5LxVoqPrGXPMWgNseAnMvkrDgqlalblwjnMrX2r3vTF0ePLErN6balkcdaK0Yked+gekd3h6pwRSse7Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1602708253; h=Content-Type:Content-Transfer-Encoding:Cc: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=iKib7gSGpUGIDFqsrbaNTT7Z8dCY2m3wz0WrHkVHlAc=; b=i9OZswIVPo6uJUI6YI/lS+aRBx90VLYzupY/xUFiBKWiQ2PH1Sy4qJIPE4ZrYTocPWSyFr8zVtM8rFo6CDKyDcjlme52lYgoiq0FPZXqAThZ4tscFtjuY1/MwHX78E8+XnlhGP/Y8rB0utZJpMdzIg2j/cSvPrOPcaaKXpXHRkk= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1602708253588489.7111332216898; Wed, 14 Oct 2020 13:44:13 -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-578-hqDdwCE1OM-BmkTboTtdCA-1; Wed, 14 Oct 2020 16:44:09 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5886B835B58; Wed, 14 Oct 2020 20:44:03 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 76EA019C4F; Wed, 14 Oct 2020 20:44:01 +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 0355218199F6; Wed, 14 Oct 2020 20:44:00 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 09EKhvFJ028854 for ; Wed, 14 Oct 2020 16:43:57 -0400 Received: by smtp.corp.redhat.com (Postfix) id 471191711D8; Wed, 14 Oct 2020 20:43:57 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 416D8151125 for ; Wed, 14 Oct 2020 20:43:57 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id CC34780018B for ; Wed, 14 Oct 2020 20:43:56 +0000 (UTC) Received: from mail-io1-f65.google.com (mail-io1-f65.google.com [209.85.166.65]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-394-DLynj7yPOJad2bFO9MgYyQ-1; Wed, 14 Oct 2020 16:43:53 -0400 Received: by mail-io1-f65.google.com with SMTP id y20so965739iod.5 for ; Wed, 14 Oct 2020 13:43:53 -0700 (PDT) Received: from rekt.ibmuc.com ([2804:431:c7c6:5a9b:54fc:df2a:8a5e:989b]) by smtp.gmail.com with ESMTPSA id i4sm492202ilc.27.2020.10.14.13.43.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Oct 2020 13:43:51 -0700 (PDT) X-MC-Unique: hqDdwCE1OM-BmkTboTtdCA-1 X-MC-Unique: DLynj7yPOJad2bFO9MgYyQ-1 X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iKib7gSGpUGIDFqsrbaNTT7Z8dCY2m3wz0WrHkVHlAc=; b=JWiivAQu51iyHyxp8ROmSrGBBYfDfjVJwqEhRILsFkG/EpWZHZ71t83QaYiw0urDcz wg85GGhjeFjZLU/uF99fySHNZZAdykX73SLaKqkqeG7BlF/uuWvKEViEnGO0dDlbOzEp tnDHCFY1xmLD/3XpPovoAtsp2fae8b05sNwGWekuEX6FoY0Ek8pRsBgTH2ry94wDGyCz lxtt3fq/bUQwr+4d/zYbF/upnP7kWsfzpP1FXPtPTNvyoW2cnLU9mqnCyayD9ttCAp7T BskflDPv1noTcyXPnRjNZm5DF+9M/yaMlAT11g0Wv1z5kSoVQEvyazScaQ1ClkGxHpdb 8CNw== X-Gm-Message-State: AOAM532goE4hgod0/QsYp8jMIElWYUHoNNO0elC/XLGPowb3+NtR5tMz +KG6+e9yfH5Dd+kH8OJ7Z0mszIXbwjo= X-Google-Smtp-Source: ABdhPJyHbwdUFtj8o3l0uampX+/goC6PhXp9g86vwALVAwS66YbsICcGiwxx0LVQN7jJCLYCj95eGQ== X-Received: by 2002:a05:6638:92a:: with SMTP id 10mr1082479jak.125.1602708232286; Wed, 14 Oct 2020 13:43:52 -0700 (PDT) From: Daniel Henrique Barboza To: libvir-list@redhat.com Subject: [PATCH v1 20/24] qemu_command.c: move 'panic' validation to qemu_validate.c Date: Wed, 14 Oct 2020 17:43:03 -0300 Message-Id: <20201014204307.631746-21-danielhb413@gmail.com> In-Reply-To: <20201014204307.631746-1-danielhb413@gmail.com> References: <20201014204307.631746-1-danielhb413@gmail.com> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Cc: Daniel Henrique Barboza 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.84 on 10.5.11.23 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Daniel Henrique Barboza --- src/qemu/qemu_command.c | 78 +-------------- src/qemu/qemu_validate.c | 96 +++++++++++++++++++ .../pseries-panic-address.err | 2 +- tests/qemuxml2argvtest.c | 10 +- tests/qemuxml2xmltest.c | 8 +- 5 files changed, 111 insertions(+), 83 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 16bb8dbdbe..ed14e1d01f 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9325,78 +9325,13 @@ qemuBuildVMCoreInfoCommandLine(virCommandPtr cmd, =20 static int qemuBuildPanicCommandLine(virCommandPtr cmd, - const virDomainDef *def, - virQEMUCapsPtr qemuCaps) + const virDomainDef *def) { size_t i; =20 for (i =3D 0; i < def->npanics; i++) { switch ((virDomainPanicModel) def->panics[i]->model) { - case VIR_DOMAIN_PANIC_MODEL_S390: - /* For s390 guests, the hardware provides the same - * functionality as the pvpanic device. The address - * cannot be configured by the user */ - if (!ARCH_IS_S390(def->os.arch)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("only S390 guests support " - "panic device of model 's390'")); - return -1; - } - if (def->panics[i]->info.type !=3D - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("setting the panic device address is not " - "supported for model 's390'")); - return -1; - } - break; - - case VIR_DOMAIN_PANIC_MODEL_HYPERV: - /* Panic with model 'hyperv' is not a device, it should - * be configured in cpu commandline. The address - * cannot be configured by the user */ - if (!ARCH_IS_X86(def->os.arch)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("only i686 and x86_64 guests support " - "panic device of model 'hyperv'")); - return -1; - } - if (def->panics[i]->info.type !=3D - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("setting the panic device address is not " - "supported for model 'hyperv'")); - return -1; - } - break; - - case VIR_DOMAIN_PANIC_MODEL_PSERIES: - /* For pSeries guests, the firmware provides the same - * functionality as the pvpanic device. The address - * cannot be configured by the user */ - if (!qemuDomainIsPSeries(def)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("only pSeries guests support panic device= " - "of model 'pseries'")); - return -1; - } - if (def->panics[i]->info.type !=3D - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("setting the panic device address is not " - "supported for model 'pseries'")); - return -1; - } - break; - case VIR_DOMAIN_PANIC_MODEL_ISA: - if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PANIC)) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("the QEMU binary does not support the " - "ISA panic device")); - return -1; - } - switch (def->panics[i]->info.type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_ISA: virCommandAddArg(cmd, "-device"); @@ -9407,14 +9342,11 @@ qemuBuildPanicCommandLine(virCommandPtr cmd, case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE: virCommandAddArgList(cmd, "-device", "pvpanic", NULL); break; - - default: - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", - _("panic is supported only " - "with ISA address type")); - return -1; } =20 + case VIR_DOMAIN_PANIC_MODEL_S390: + case VIR_DOMAIN_PANIC_MODEL_HYPERV: + case VIR_DOMAIN_PANIC_MODEL_PSERIES: /* default model value was changed before in post parse */ case VIR_DOMAIN_PANIC_MODEL_DEFAULT: case VIR_DOMAIN_PANIC_MODEL_LAST: @@ -10017,7 +9949,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, if (qemuBuildSeccompSandboxCommandLine(cmd, cfg, qemuCaps) < 0) return NULL; =20 - if (qemuBuildPanicCommandLine(cmd, def, qemuCaps) < 0) + if (qemuBuildPanicCommandLine(cmd, def) < 0) return NULL; =20 for (i =3D 0; i < def->nshmems; i++) { diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 7969571b4a..a5e3849ae5 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -878,6 +878,99 @@ qemuValidateDomainDefSysinfo(const virSysinfoDef *def, } =20 =20 +static int +qemuValidateDomainDefPanic(const virDomainDef *def, + virQEMUCapsPtr qemuCaps) +{ + size_t i; + + for (i =3D 0; i < def->npanics; i++) { + switch ((virDomainPanicModel) def->panics[i]->model) { + case VIR_DOMAIN_PANIC_MODEL_S390: + /* For s390 guests, the hardware provides the same + * functionality as the pvpanic device. The address + * cannot be configured by the user */ + if (!ARCH_IS_S390(def->os.arch)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only S390 guests support " + "panic device of model 's390'")); + return -1; + } + if (def->panics[i]->info.type !=3D + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("setting the panic device address is not " + "supported for model 's390'")); + return -1; + } + break; + + case VIR_DOMAIN_PANIC_MODEL_HYPERV: + /* Panic with model 'hyperv' is not a device, it should + * be configured in cpu commandline. The address + * cannot be configured by the user */ + if (!ARCH_IS_X86(def->os.arch)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only i686 and x86_64 guests support " + "panic device of model 'hyperv'")); + return -1; + } + if (def->panics[i]->info.type !=3D + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("setting the panic device address is not " + "supported for model 'hyperv'")); + return -1; + } + break; + + case VIR_DOMAIN_PANIC_MODEL_PSERIES: + /* For pSeries guests, the firmware provides the same + * functionality as the pvpanic device. The address + * cannot be configured by the user */ + if (!qemuDomainIsPSeries(def)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only pSeries guests support panic device= " + "of model 'pseries'")); + return -1; + } + if (def->panics[i]->info.type !=3D + VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("setting the panic device address is not " + "supported for model 'pseries'")); + return -1; + } + break; + + case VIR_DOMAIN_PANIC_MODEL_ISA: + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_PANIC)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("the QEMU binary does not support the " + "ISA panic device")); + return -1; + } + + if (def->panics[i]->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_T= YPE_NONE && + def->panics[i]->info.type !=3D VIR_DOMAIN_DEVICE_ADDRESS_T= YPE_ISA) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("panic is supported only " + "with ISA address type")); + return -1; + } + break; + + /* default model value was changed before in post parse */ + case VIR_DOMAIN_PANIC_MODEL_DEFAULT: + case VIR_DOMAIN_PANIC_MODEL_LAST: + break; + } + } + + return 0; +} + + int qemuValidateDomainDef(const virDomainDef *def, void *opaque) @@ -1112,6 +1205,9 @@ qemuValidateDomainDef(const virDomainDef *def, return -1; } =20 + if (qemuValidateDomainDefPanic(def, qemuCaps) < 0) + return -1; + return 0; } =20 diff --git a/tests/qemuxml2argvdata/pseries-panic-address.err b/tests/qemux= ml2argvdata/pseries-panic-address.err index c7a512c51e..63afb4ff00 100644 --- a/tests/qemuxml2argvdata/pseries-panic-address.err +++ b/tests/qemuxml2argvdata/pseries-panic-address.err @@ -1 +1 @@ -unsupported configuration: 'spapr-vty' is not supported in this QEMU binary +unsupported configuration: setting the panic device address is not support= ed for model 'pseries' diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index fdcfadf4c8..73e3a91282 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2064,8 +2064,8 @@ mymain(void) DO_TEST("pseries-panic-no-address", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, QEMU_CAPS_DEVICE_SPAPR_VTY); - DO_TEST_FAILURE("pseries-panic-address", - QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE); + DO_TEST_PARSE_ERROR("pseries-panic-address", + QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE); =20 DO_TEST("pseries-phb-simple", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE); @@ -2377,9 +2377,9 @@ mymain(void) DO_TEST("s390-panic-no-address", QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390); - DO_TEST_FAILURE("s390-panic-address", - QEMU_CAPS_CCW, - QEMU_CAPS_VIRTIO_S390); + DO_TEST_PARSE_ERROR("s390-panic-address", + QEMU_CAPS_CCW, + QEMU_CAPS_VIRTIO_S390); DO_TEST("s390-panic-missing", QEMU_CAPS_CCW, QEMU_CAPS_VIRTIO_S390); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 7160653471..1cd57c6bc1 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1116,12 +1116,12 @@ mymain(void) QEMU_CAPS_DEVICE_QXL, QEMU_CAPS_Q35_PCI_HOLE64_SIZE); =20 - DO_TEST("panic", NONE); - DO_TEST("panic-isa", NONE); + DO_TEST("panic", QEMU_CAPS_DEVICE_PANIC); + DO_TEST("panic-isa", QEMU_CAPS_DEVICE_PANIC); DO_TEST("panic-pseries", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE); - DO_TEST("panic-double", NONE); - DO_TEST("panic-no-address", NONE); + DO_TEST("panic-double", QEMU_CAPS_DEVICE_PANIC); + DO_TEST("panic-no-address", QEMU_CAPS_DEVICE_PANIC); =20 DO_TEST("disk-backing-chains", NONE); DO_TEST("disk-backing-chains-index", NONE); --=20 2.26.2