From nobody Wed Mar 05 12:28:38 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Z7Bft4jPLz5pqGX; Wed, 05 Mar 2025 12:28:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z7Bft3c77z3Gwj; Wed, 05 Mar 2025 12:28:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741177718; 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; bh=NtqB0xbyza9nZli0JyffMYqxb0RO9t7b01xwPYpIaak=; b=UO/+Hb/9t6km+FeSFkXH56c8E3+rOZ/su1bDuo+IPxumFZZDn7w8p+Ck5HMe3eSVBeKXmX NkxQhslJGQlD26ub8ET1pAWJvx5RKS6vSvtP2+t0U6a2pL6GOi7FTf9/ck+r41c0vHTFaq P2MkftMAf/Lat0aVdS1NIUkf5BRSnqJiJUhaKsZaQ5R4sNufBo0uMAu02IB7pdsMLxi3qV MDq+hi+1imgy4ra4sy17Pp/iJLrcIakG3ZPPwQuoLV6UNzXV/DDvjM6TVWwKFy2uXrGWGA jsvnDSF9LgyIG+yu/PyOG248Zt3dQKXV87sVYUcGcRng5QUpW0ZZ1zHcHDvBzQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741177718; a=rsa-sha256; cv=none; b=AxBJrlqCk29ji5JoXTeEFQ4YfH1qr2qtHxWWUCC+9Je+SfhfyOy14Ns3HaWpTf+WJiYrp3 mCyIaHE/CWFO7oonOzVTtX9VKqIL5sA8GczDorGdjgPSWxhpPr/HfPaLgdH0+Ul/Kj4JbN xybvuQwtKaZUjArmryvoLUg0gaWg6Hch+jf0qd3CWPCU7YZbgMGIt0gdR8/T94cB4w3Ejp ATmqEMjZ6AEZ0u5fZ3WbdDEAjl39VvXSaFStJWxpey5KQmlhuasxXtUIumrIfLtHL5VXZm CzIQC9sa4ri7ZCK3x1+MqK8uAviTC560ZFhGutiG2fEGXUpvrv1axFuU8D7tOg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741177718; 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; bh=NtqB0xbyza9nZli0JyffMYqxb0RO9t7b01xwPYpIaak=; b=KjP9kAyuQI80+XIkRVO2SSFGyGqWO0IhjNADi504xld3UCQRagAuI/8rMDNoS1F1zeh6Ce 8nI6qREqYn5yGRKAft2hhCC2r3K4DDP8ORy6AcU/hjqjOyx09NpLXdCa/S7fznOm8B0ecW S2SbSlwA4nHuAN86zdTV+OkZ4DjdT7G6Gm1+WY9FP2YHwz3Ufsi/n4oOAQRvcnYptLdmCQ Pb9IMXraxONZ2CBKcmoNnZP36tziFNdq69sFnL/GS/cr+CPoOLLKkf05mLN4yajZZ/WXc2 jIR5nZvxYI7T47aLQur6wXJ0h9Ixi7+YQmXRLqv9sS0U96wEy8LgC885EZ/9sQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Z7Bft2mSKz13SB; Wed, 05 Mar 2025 12:28:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 525CSc2c071736; Wed, 5 Mar 2025 12:28:38 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 525CScvI071733; Wed, 5 Mar 2025 12:28:38 GMT (envelope-from git) Date: Wed, 5 Mar 2025 12:28:38 GMT Message-Id: <202503051228.525CScvI071733@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 0698ce429f78 - main - bhyve: fix CPUID L3 Cache Size reporting for AMD/SVM List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0698ce429f78f548f7eb3e54476fb312109ddd8b Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=0698ce429f78f548f7eb3e54476fb312109ddd8b commit 0698ce429f78f548f7eb3e54476fb312109ddd8b Author: Konstantin Belousov AuthorDate: 2024-12-17 21:09:33 +0000 Commit: Konstantin Belousov CommitDate: 2025-03-05 12:27:58 +0000 bhyve: fix CPUID L3 Cache Size reporting for AMD/SVM Adjust leaf 0x8000_001D %ecx 3 on AMD (L3 cache params). - Report cache as 1-way associative. Glibc does not believe that there are fully associative L3 caches, ignoring the leaf and falling back to legacy way of reading cache params. - Do not report 4095 logical CPUs per L3 cache, report the true total number of emulated CPUs. The insanely large value tricked some version of glibc to overflow 32bit calculation of the L3 cache size, as reported in the PR. Also, for leaf 0x8000_0008, do not clip ApicIdSize to zero if less than 4. This effectively falls back to legacy. PR: 279901 With the help from: Florian Weimer Reviewed by: kevans, meta, mp Tested by: meta, mp Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D48187 --- sys/amd64/vmm/x86.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/sys/amd64/vmm/x86.c b/sys/amd64/vmm/x86.c index a833b61786e7..366f1da9f850 100644 --- a/sys/amd64/vmm/x86.c +++ b/sys/amd64/vmm/x86.c @@ -150,8 +150,6 @@ x86_emulate_cpuid(struct vcpu *vcpu, uint64_t *rax, uint64_t *rbx, * pkg_id_shift and other OSes may rely on it. */ width = MIN(0xF, log2(threads * cores)); - if (width < 0x4) - width = 0; logical_cpus = MIN(0xFF, threads * cores - 1); regs[2] = (width << AMDID_COREID_SIZE_SHIFT) | logical_cpus; } @@ -256,7 +254,7 @@ x86_emulate_cpuid(struct vcpu *vcpu, uint64_t *rax, uint64_t *rbx, func = 3; /* unified cache */ break; default: - logical_cpus = 0; + logical_cpus = sockets * threads * cores; level = 0; func = 0; break; @@ -266,7 +264,14 @@ x86_emulate_cpuid(struct vcpu *vcpu, uint64_t *rax, uint64_t *rbx, regs[0] = (logical_cpus << 14) | (1 << 8) | (level << 5) | func; regs[1] = (func > 0) ? (CACHE_LINE_SIZE - 1) : 0; + + /* + * ecx: Number of cache ways for non-fully + * associative cache, minus 1. Reported value + * of zero means there is one way. + */ regs[2] = 0; + regs[3] = 0; break;