From nobody Thu Sep 18 15:13:35 2025 X-Original-To: dev-commits-src-main@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 4cSK0H2d7Rz67XlH; Thu, 18 Sep 2025 15:13:35 +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 4cSK0H1r7Fz3vDK; Thu, 18 Sep 2025 15:13:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758208415; 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=M80XppdJu3BB6TYqw1AKcfJl5MK1GI3JQn/69vjpWIo=; b=iuYVlrf+AYP+5/41IIgAmIJHb2jNnAFIbdaMTDAebit6sYswoPATN77BBJ8ds5EDj/hGFf EXc6niK+W9h5Eg69RsMvLWe3N4RG4Nj+PyWJshX+mz46rUwhv2YatSk13zv5WTtrSedHbx UHtP03l4CHZnMgFzzf9oigjPszESJUrLpDnfDwbsdqs7YLpgO+M/RE2LdJhdpSchJwFbFw qkno031IYGyw7QzRxlJ/yW/hSzkwQS1htPNGwlgG8ZLfatUE2YzkSCfzal31TBLPIiIBN3 wQEkbz4TZ09n/BS6xsNyVKgwf/zDxc/kej27b1uqN1v2LKrTqCaeHUkF3fa1NQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758208415; 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=M80XppdJu3BB6TYqw1AKcfJl5MK1GI3JQn/69vjpWIo=; b=wDW14fPSIv8q21FksNu+HWx4g3DYf/j7KowCsCpfc7/b8tkfj96VJQviz55UgVJss7ZaTM oTJlvztV+JfjWwqBDKOqQFFzaVbNgJv73J087yrXc3/dIrodwUwwSJ7yeBTwQYynGyHA3S VaGQYhlG9eJmqbdkxKRjqooChDyJ8Gea069Hca2gNPktEXxSVLu/a7faxIU5FbzCxI3xn5 1C56wsG1Pi4nqUIOYw7rBL6LQj09u96ytdLV2bYXrtV0gulFcZUVz6DEK5R5PAY7vClypx jUy4mGyB2i6qASIau8n4KdMk/RzW6hvyTGoNDVOOCiGwIPbz6zB3y6TTTjkezQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758208415; a=rsa-sha256; cv=none; b=UgyJ9RLjh6nRsAJ/OIfcBy79pAztKteG79ePzMdxRrO/KNis3CDl07t0PAcFobKuzAvrKV 5qNng+ffF4Xat5FNErtCMvL9JLfM1glVhG+ZCxvvTKwOG7l7D3skBU6ewR8r6vUWiIPGnZ gNKSMgAsdIkzNL4ZAEASqOO2+yDw1khwb/n73GUNasYNoeTNfpfTdPegOImz4R0TR6GLX8 yfRcJmUiM8na/NfSUVfyQyJHOUwzcUEkSXgDK4ojRjNSm3RyGkDIZTnUwOGmn7uZf7SE8r pRLNquOO1kzXxJlTjA+JWqCKBX+nZEgZkZvaPrwq1SrI45jx3oM3iz7SyCGmpA== 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 4cSK0H19tqz29Z; Thu, 18 Sep 2025 15:13:35 +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 58IFDZLv036155; Thu, 18 Sep 2025 15:13:35 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58IFDZt1036152; Thu, 18 Sep 2025 15:13:35 GMT (envelope-from git) Date: Thu, 18 Sep 2025 15:13:35 GMT Message-Id: <202509181513.58IFDZt1036152@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 6683dcf61b3d - main - cpuctl: run amd_ucode_wrmsr only on one CPU and report if it failed List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@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/main X-Git-Reftype: branch X-Git-Commit: 6683dcf61b3d0dfa8639c9e501eefb7709922ddf Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=6683dcf61b3d0dfa8639c9e501eefb7709922ddf commit 6683dcf61b3d0dfa8639c9e501eefb7709922ddf Author: Gleb Smirnoff AuthorDate: 2025-09-18 15:10:59 +0000 Commit: Gleb Smirnoff CommitDate: 2025-09-18 15:10:59 +0000 cpuctl: run amd_ucode_wrmsr only on one CPU and report if it failed The CPUCTL_UPDATE is supposed to be applied only to the CPU the ioctl(2) was performed on. This is true for Intel CPUs, but for AMD the SMP rendezvouz of amd_ucode_wrmsr() effectively executed it on all CPUs. Also, the update failure was not reported. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D52466 --- sys/dev/cpuctl/cpuctl.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/sys/dev/cpuctl/cpuctl.c b/sys/dev/cpuctl/cpuctl.c index 9253b17a259d..b0ab3467df69 100644 --- a/sys/dev/cpuctl/cpuctl.c +++ b/sys/dev/cpuctl/cpuctl.c @@ -402,19 +402,20 @@ out: * its workings. */ static void -amd_ucode_wrmsr(void *ucode_ptr) +amd_ucode_wrmsr(void *arg) { + struct ucode_update_data *d = arg; uint32_t tmp[4]; - wrmsr_safe(MSR_K8_UCODE_UPDATE, (uintptr_t)ucode_ptr); + if (PCPU_GET(cpuid) == d->cpu) + d->ret = wrmsr_safe(MSR_K8_UCODE_UPDATE, (uintptr_t)d->ptr); do_cpuid(0, tmp); } static int update_amd(int cpu, cpuctl_update_args_t *args, struct thread *td) { - void *ptr; - int ret; + struct ucode_update_data d = { .cpu = cpu }; if (args->size == 0 || args->data == NULL) { DPRINTF("[cpuctl,%d]: zero-sized firmware image", __LINE__); @@ -430,18 +431,17 @@ update_amd(int cpu, cpuctl_update_args_t *args, struct thread *td) * malloc(9) always returns the pointer aligned at least on * the size of the allocation. */ - ptr = malloc(args->size + 16, M_CPUCTL, M_ZERO | M_WAITOK); - if (copyin(args->data, ptr, args->size) != 0) { + d.ptr = malloc(args->size + 16, M_CPUCTL, M_ZERO | M_WAITOK); + if (copyin(args->data, d.ptr, args->size) != 0) { DPRINTF("[cpuctl,%d]: copyin %p->%p of %zd bytes failed", __LINE__, args->data, ptr, args->size); - ret = EFAULT; + d.ret = EFAULT; goto fail; } - smp_rendezvous(NULL, amd_ucode_wrmsr, NULL, ptr); - ret = 0; + smp_rendezvous(NULL, amd_ucode_wrmsr, NULL, &d); fail: - free(ptr, M_CPUCTL); - return (ret); + free(d.ptr, M_CPUCTL); + return (d.ret); } static int