From nobody Fri Dec 19 17:09:16 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of seabios.org designates 78.46.105.101 as permitted sender) client-ip=78.46.105.101; envelope-from=seabios-bounces@seabios.org; helo=coreboot.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of seabios.org designates 78.46.105.101 as permitted sender) smtp.mailfrom=seabios-bounces@seabios.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from coreboot.org (coreboot.org [78.46.105.101]) by mx.zohomail.com with SMTPS id 1683270703071423.7319741644127; Fri, 5 May 2023 00:11:43 -0700 (PDT) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by coreboot.org (Postfix) with ESMTPA id 2847D22F67; Fri, 5 May 2023 07:11:38 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by coreboot.org (Postfix) with ESMTP id D3BE322A8A for ; Fri, 5 May 2023 07:11:23 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) [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-179-rGMpx1XXMNmUxuFZU7NaWQ-1; Fri, 05 May 2023 03:11:19 -0400 Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 460EE185A79C; Fri, 5 May 2023 07:11:19 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by smtp.corp.redhat.com (Postfix) with ESMTPS id F1EFD1121331; Fri, 5 May 2023 07:11:18 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) id BCF8118003BA; Fri, 5 May 2023 09:11:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1683270682; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ILIkb92YfjNdVPvNemK23NPzdxpIvUqcxZkOvQcuD1w=; b=coQWAQRKtbeH9a9aEjVcadZdDsSB2dGSrBbYKR+0sn9+OZXObJG629O+j6O5DR+kOpGxsg YrauZizXs2cWxK6B+vsaOyPRXZw4aSjOkkTkvGAz+yWcFNKWfsKv3AtYlLBRhztHjvY8Td yyPEePHhcWBcAPLVlEqLT5OszRQKSDA= X-MC-Unique: rGMpx1XXMNmUxuFZU7NaWQ-1 From: Gerd Hoffmann To: seabios@seabios.org Date: Fri, 5 May 2023 09:11:12 +0200 Message-Id: <20230505071117.369471-2-kraxel@redhat.com> In-Reply-To: <20230505071117.369471-1-kraxel@redhat.com> References: <20230505071117.369471-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Spam-Level: ** Message-ID-Hash: YWJLQ43AJOT2EBLU44MYKUHTM4LI5TZL X-Message-ID-Hash: YWJLQ43AJOT2EBLU44MYKUHTM4LI5TZL X-MailFrom: kraxel@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-seabios.seabios.org-0; header-match-seabios.seabios.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: qemu-devel@nongnu.org, Gerd Hoffmann X-Mailman-Version: 3.3.6b1 Precedence: list Subject: [SeaBIOS] [PATCH v3 1/6] better kvm detection List-Id: SeaBIOS mailing list Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable Authentication-Results: coreboot.org; auth=pass smtp.auth=mailman@coreboot.org smtp.mailfrom=seabios-bounces@seabios.org X-Spamd-Bar: - X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1683270703774100001 Content-Type: text/plain; charset="utf-8" In case kvm emulates features of another hypervisor (for example hyperv) two VMM CPUID blocks will be present, one for the emulated hypervisor and one for kvm itself. This patch makes seabios loop over the VMM CPUID blocks to make sure it will properly detect kvm when multiple blocks are present. Signed-off-by: Gerd Hoffmann --- src/fw/paravirt.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c index fba4e52db684..c880cb10a1bc 100644 --- a/src/fw/paravirt.c +++ b/src/fw/paravirt.c @@ -56,20 +56,31 @@ inline int qemu_cfg_dma_enabled(void) =20 static void kvm_detect(void) { + unsigned int i, kvmbase =3D 0, max =3D 0; unsigned int eax, ebx, ecx, edx; char signature[13]; =20 - cpuid(KVM_CPUID_SIGNATURE, &eax, &ebx, &ecx, &edx); - memcpy(signature + 0, &ebx, 4); - memcpy(signature + 4, &ecx, 4); - memcpy(signature + 8, &edx, 4); - signature[12] =3D 0; + for (i =3D KVM_CPUID_SIGNATURE;; i +=3D 0x100) { + eax =3D 0; + cpuid(i, &eax, &ebx, &ecx, &edx); + if (eax < i) + break; + memcpy(signature + 0, &ebx, 4); + memcpy(signature + 4, &ecx, 4); + memcpy(signature + 8, &edx, 4); + signature[12] =3D 0; + dprintf(1, "cpuid 0x%x: eax %x, signature '%s'\n", i, eax, signatu= re); + if (strcmp(signature, "KVMKVMKVM") =3D=3D 0) { + kvmbase =3D i; + max =3D eax; + } + } =20 - if (strcmp(signature, "KVMKVMKVM") =3D=3D 0) { + if (kvmbase) { dprintf(1, "Running on KVM\n"); PlatformRunningOn |=3D PF_KVM; - if (eax >=3D KVM_CPUID_SIGNATURE + 0x10) { - cpuid(KVM_CPUID_SIGNATURE + 0x10, &eax, &ebx, &ecx, &edx); + if (max >=3D kvmbase + 0x10) { + cpuid(kvmbase + 0x10, &eax, &ebx, &ecx, &edx); dprintf(1, "kvm: have invtsc, freq %u kHz\n", eax); tsctimer_setfreq(eax, "invtsc"); } --=20 2.40.1 _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org