From nobody Mon Sep 16 19:47:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 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=1679081292; cv=none; d=zohomail.com; s=zohoarc; b=LftKNsojSB6p3OEGH4qRlWxbBBdsf5tiFdt2y1ETurhl+jxfsS8pVMbH/w5ITeVK7PnFK1j/PI4WmJgUc99jPwDqC3uT4lkXnGx9yVIzYb7AUa0SYOHL1ErhDpl1C2ZtmBkLCq3MOQYt1w/3DFF2qzLI0/I5yR/JnCDasMmYEKM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1679081292; 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=3N+S/kQMbC4FEKNfhWo2lIkSEn3cUWgK2qqw26Emlck=; b=f3I5ljwjvgMvPEuw+wFNSKbbeYBSQ2h4Hl/NLF5wAlyM90qSFuVUDQNFm9FX18R/KpSpHmiwlxPL7wX9VnwKh9F71yaNh468SmaLbgqgqH35sl+KnhSXX85l08Gw+LIYBZnRcsT5PGO2blM9t1dl3LGGMIi/moerSADYjxYbmdc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1679081292011175.3067587318809; Fri, 17 Mar 2023 12:28:12 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-473-L9er8cSFM-CFU5M6AYDSGQ-1; Fri, 17 Mar 2023 15:28:05 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 79CA5886466; Fri, 17 Mar 2023 19:27:57 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 65D2E2166B26; Fri, 17 Mar 2023 19:27:57 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 55D331946A49; Fri, 17 Mar 2023 19:27:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E35251946A5A for ; Fri, 17 Mar 2023 19:27:53 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id C7A7940C6E69; Fri, 17 Mar 2023 19:27:53 +0000 (UTC) Received: from harajuku.usersys.redhat.com.homenet.telecomitalia.it (unknown [10.45.226.11]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5C74D40C6E68 for ; Fri, 17 Mar 2023 19:27:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679081291; 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=3N+S/kQMbC4FEKNfhWo2lIkSEn3cUWgK2qqw26Emlck=; b=UPiNll7hBJ5bTMMWQ/CkEzAOeiLYh1bXvoxsGYSkiWnZyfAcQBUJ30k+cQzwNAmD4UOOGi nvmYFvBYaYiSBfLN7zeBc7EBUfQAyPWGpS/hTOwKVS3iuVunS9l7ZYkN7dGQTGHaCxPfFU MF8f0iK/4U3KhT0U1wRMxYY8KFX8uIQ= X-MC-Unique: L9er8cSFM-CFU5M6AYDSGQ-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Andrea Bolognani To: libvir-list@redhat.com Subject: [libvirt PATCH 06/15] qemu: Introduce qemuFirmwareMatchesPaths() Date: Fri, 17 Mar 2023 20:27:38 +0100 Message-Id: <20230317192747.1311223-7-abologna@redhat.com> In-Reply-To: <20230317192747.1311223-1-abologna@redhat.com> References: <20230317192747.1311223-1-abologna@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1679081292675100001 Content-Type: text/plain; charset="utf-8"; x-default="true" Right now we have checks in place that ensure that explicit paths are not provided when firmware autoselection has been enabled, but that's going to change soon. To prepare for that, take into account user-provided paths during firmware autoselection if present, and discard all firmware descriptors that don't contain matching information. Signed-off-by: Andrea Bolognani --- src/qemu/qemu_firmware.c | 64 +++++++++++++++++++++++++++++++++------- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index 9de4166772..172be05d06 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -945,6 +945,55 @@ qemuFirmwareMatchesMachineArch(const qemuFirmware *fw, } =20 =20 +/** + * qemuFirmwareMatchesPaths: + * @fw: firmware definition + * @loader: loader definition + * @kernelPath: path to kernel image + * + * Checks whether @fw is compatible with the information provided as + * part of the domain definition. + * + * Returns: true if @fw is compatible with @loader and @kernelPath, + * false otherwise + */ +static bool +qemuFirmwareMatchesPaths(const qemuFirmware *fw, + const virDomainLoaderDef *loader, + const char *kernelPath) +{ + const qemuFirmwareMappingFlash *flash =3D &fw->mapping.data.flash; + const qemuFirmwareMappingKernel *kernel =3D &fw->mapping.data.kernel; + const qemuFirmwareMappingMemory *memory =3D &fw->mapping.data.memory; + + switch (fw->mapping.device) { + case QEMU_FIRMWARE_DEVICE_FLASH: + if (loader && loader->path && + STRNEQ(loader->path, flash->executable.filename)) + return false; + if (loader && loader->nvramTemplate && + STRNEQ(loader->nvramTemplate, flash->nvram_template.filename)) + return false; + break; + case QEMU_FIRMWARE_DEVICE_MEMORY: + if (loader && loader->path && + STRNEQ(loader->path, memory->filename)) + return false; + break; + case QEMU_FIRMWARE_DEVICE_KERNEL: + if (kernelPath && + STRNEQ(kernelPath, kernel->filename)) + return false; + break; + case QEMU_FIRMWARE_DEVICE_NONE: + case QEMU_FIRMWARE_DEVICE_LAST: + return false; + } + + return true; +} + + static qemuFirmwareOSInterface qemuFirmwareOSInterfaceTypeFromOsDefFirmware(virDomainOsDefFirmware fw) { @@ -1047,16 +1096,6 @@ qemuFirmwareMatchDomain(const virDomainDef *def, =20 if (want =3D=3D QEMU_FIRMWARE_OS_INTERFACE_NONE && loader) { want =3D qemuFirmwareOSInterfaceTypeFromOsDefLoaderType(loader->ty= pe); - - if (fw->mapping.device !=3D QEMU_FIRMWARE_DEVICE_FLASH || - STRNEQ(loader->path, fw->mapping.data.flash.executable.filenam= e)) { - VIR_DEBUG("Not matching FW interface %s or loader " - "path '%s' for user provided path '%s'", - qemuFirmwareDeviceTypeToString(fw->mapping.device), - fw->mapping.data.flash.executable.filename, - loader->path); - return false; - } } =20 for (i =3D 0; i < fw->ninterfaces; i++) { @@ -1069,6 +1108,11 @@ qemuFirmwareMatchDomain(const virDomainDef *def, return false; } =20 + if (!qemuFirmwareMatchesPaths(fw, def->os.loader, def->os.kernel)) { + VIR_DEBUG("No matching path in '%s'", path); + return false; + } + if (!qemuFirmwareMatchesMachineArch(fw, def->os.machine, def->os.arch)= ) { VIR_DEBUG("No matching machine type in '%s'", path); return false; --=20 2.39.2