From nobody Mon Sep 22 16:11:57 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 4cVp5p0PqMz6862j; Mon, 22 Sep 2025 16:11:58 +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 "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cVp5n4Yqzz3fjc; Mon, 22 Sep 2025 16:11:57 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758557517; 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=zyHNA6YWPCgj0XRU/mbAnDdmPfvZL8C5RzHn/4IF/7Q=; b=Mq6HfNRo15i5zve0DKqa77c4g7C0Bl8dv+GTwHJ1/f8RHe8VhIRG/6C2bWB1Yvg9KYGmEp 19s2f1pE0MpH5D7vltvVgsbHKhO2pJdWFN506Q2sUG1yxbKa2uFBqSp99lAf7Nd/oFcAPB DfGUQs0a7yWwUJg/mQaqpsflGXPmhsbLK2FI0L2pD5cUQNeSFjpF/5WOjgqCp2MqlYLatx vNAZ6WfrMiw9NtAZA9JzOFvO74CXZyMYDR1ZL5mPTA2ro113HjMtYtbiHWfnl5oFsiFcKg BA8ipb3D2qdDy2VO6YnSJlm64HKiQk4y+at4r1MSJ9VG38kIydmTaXzoUvrkiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758557517; 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=zyHNA6YWPCgj0XRU/mbAnDdmPfvZL8C5RzHn/4IF/7Q=; b=VEmEBpqADG88P4KlaSaIm1u7RB0W4q2dLgIeBWH4P0vx5oBs015tcf+gLnYSGVleMElYU3 9ay8dmjGQqEN9WM9J6y2WjsckugwNd06JY4QRNE6oMjwypN4v9TYKU0DfSsCLYIPhWFgp+ U2VvfP++rD9cS5Ps9gn/yMgmOx7gTclnL0POWC8wjdqeq9tYZTh4X4k/BUce+l876ltalu hZw9rZGh4Dnk1FI3KofsG984BvV27tA5l8RvBIuurWMoFs25UpOuH7l+xBUWGxCBsrMhum GKYjOqs8u9FOueZjuRAZUTsdj43ueUUkbDw2yzVVbfiAqkI24Wx0eP6AiujaAQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758557517; a=rsa-sha256; cv=none; b=tnOX7EPEVVxRo/XeBTfRc1rF87PSdTEI/KiRtEy6lw5eDX5jaqZzdpbSBQoMOMB3nHx7oI xfpJ3hu7pVQwdlWSpAJRAmEYUcuINv01UwSw5kqqGSA0gISAy5kR+fCvdTThRdi+ICskM5 WI10C1WyQbFOTvcWpLaVWkZxtoLQW3e08IiOHpMKMeB4obnKuTGMpBCaZAHaLFkcLXpzro mke2LrdfPqteoD7maqGfFUDpqLCbWXvWOcTUe2ht+8URh8OjhZvn8jilzE0CbTyz0aET70 WzJpokebJ2AfYP0du70HpdL/4vPom3a4/isrs/iBmtKdVes7lWh+KKc1oUiXSw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4cVp5n42ZLz16Qf; Mon, 22 Sep 2025 16:11:57 +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 58MGBvxL070370; Mon, 22 Sep 2025 16:11:57 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58MGBvjE070367; Mon, 22 Sep 2025 16:11:57 GMT (envelope-from git) Date: Mon, 22 Sep 2025 16:11:57 GMT Message-Id: <202509221611.58MGBvjE070367@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Gleb Smirnoff Subject: git: dbff73873577 - stable/15 - cpucontrol: return selected revision from ucode_amd_find() 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: glebius X-Git-Repository: src X-Git-Refname: refs/heads/stable/15 X-Git-Reftype: branch X-Git-Commit: dbff738735777dd16490e0fdebd743a48a7ca222 Auto-Submitted: auto-generated The branch stable/15 has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=dbff738735777dd16490e0fdebd743a48a7ca222 commit dbff738735777dd16490e0fdebd743a48a7ca222 Author: Gleb Smirnoff AuthorDate: 2025-09-18 15:11:03 +0000 Commit: Gleb Smirnoff CommitDate: 2025-09-22 16:11:33 +0000 cpucontrol: return selected revision from ucode_amd_find() This fixes two printing bugs in cpucontrol(1). First, the utility will now print "updating from rev X to rev Y", instead of incorrect "updating to revision X", where X is actually the old revision. This also matches what Intel updater prints. Second, the utility won't incorrectly warn that the update failed after reading the new revision post update. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D52506 (cherry picked from commit 83804499b72405475027e670690d4cdbada46090) --- sys/x86/include/ucode.h | 2 +- sys/x86/x86/ucode.c | 3 ++- sys/x86/x86/ucode_subr.c | 10 +++++----- usr.sbin/cpucontrol/amd10h.c | 11 ++++++----- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/sys/x86/include/ucode.h b/sys/x86/include/ucode.h index 0338d48a0832..75b9ff3afbd0 100644 --- a/sys/x86/include/ucode.h +++ b/sys/x86/include/ucode.h @@ -63,7 +63,7 @@ struct ucode_intel_extsig_table { }; const void *ucode_amd_find(const char *path, uint32_t signature, - uint32_t revision, const uint8_t *fw_data, size_t fw_size, + uint32_t *revision, const uint8_t *fw_data, size_t fw_size, size_t *selected_sizep); int ucode_intel_load(const void *data, bool unsafe, uint64_t *nrevp, uint64_t *orevp); diff --git a/sys/x86/x86/ucode.c b/sys/x86/x86/ucode.c index 0c153c0b656c..1973047fafd1 100644 --- a/sys/x86/x86/ucode.c +++ b/sys/x86/x86/ucode.c @@ -277,7 +277,8 @@ ucode_amd_match(const uint8_t *data, size_t *len) signature = regs[0]; revision = rdmsr(MSR_BIOS_SIGN); - return (ucode_amd_find("loader blob", signature, revision, data, *len, len)); + return (ucode_amd_find("loader blob", signature, &revision, data, *len, + len)); } /* diff --git a/sys/x86/x86/ucode_subr.c b/sys/x86/x86/ucode_subr.c index 9e128ad2bf04..53d7cfc06769 100644 --- a/sys/x86/x86/ucode_subr.c +++ b/sys/x86/x86/ucode_subr.c @@ -94,7 +94,7 @@ typedef struct container_header { * source code. */ const void * -ucode_amd_find(const char *path, uint32_t signature, uint32_t revision, +ucode_amd_find(const char *path, uint32_t signature, uint32_t *revision, const uint8_t *fw_data, size_t fw_size, size_t *selected_sizep) { const amd_10h_fw_header_t *fw_header; @@ -112,7 +112,7 @@ ucode_amd_find(const char *path, uint32_t signature, uint32_t revision, (signature >> 4) & 0x0f, (signature >> 0) & 0x0f, (signature >> 20) & 0xff, (signature >> 16) & 0x0f); - WARNX(1, "microcode revision %#x", revision); + WARNX(1, "microcode revision %#x", *revision); nextfile: WARNX(1, "checking %s for update.", path); @@ -212,9 +212,9 @@ nextfile: fw_header->processor_rev_id, equiv_id); continue; /* different cpu */ } - if (fw_header->patch_id <= revision) { + if (fw_header->patch_id <= *revision) { WARNX(1, "patch_id %x, revision %x", - fw_header->patch_id, revision); + fw_header->patch_id, *revision); continue; /* not newer revision */ } if (fw_header->nb_dev_id != 0 || fw_header->sb_dev_id != 0) { @@ -222,7 +222,7 @@ nextfile: } WARNX(3, "selecting revision: %x", fw_header->patch_id); - revision = fw_header->patch_id; + *revision = fw_header->patch_id; selected_fw = fw_header; selected_size = section_header->size; } diff --git a/usr.sbin/cpucontrol/amd10h.c b/usr.sbin/cpucontrol/amd10h.c index 4fda44f0b797..9fc861fe5914 100644 --- a/usr.sbin/cpucontrol/amd10h.c +++ b/usr.sbin/cpucontrol/amd10h.c @@ -93,7 +93,7 @@ amd10h_update(const struct ucode_update_params *params) size_t fw_size; size_t selected_size; uint32_t revision; - uint32_t new_rev; + uint32_t new_rev, old_rev; uint32_t signature; int devfd; int error; @@ -121,15 +121,16 @@ amd10h_update(const struct ucode_update_params *params) WARN(0, "ioctl(%s)", dev); goto done; } - revision = (uint32_t)msrargs.data; + old_rev = revision = (uint32_t)msrargs.data; - selected_fw = ucode_amd_find(path, signature, revision, fw_image, + selected_fw = ucode_amd_find(path, signature, &revision, fw_image, fw_size, &selected_size); if (selected_fw != NULL) { WARNX(1, "selected ucode size is %zu", selected_size); - fprintf(stderr, "%s: updating cpu %s to revision %#x... ", - path, dev, revision); + fprintf(stderr, + "%s: updating cpu %s from rev %#x to rev %#x... ", + path, dev, old_rev, revision); args.data = __DECONST(void *, selected_fw); args.size = selected_size;