From nobody Mon Sep 22 16:11:56 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 4cVp5n4gfzz686Mj; Mon, 22 Sep 2025 16:11:57 +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 4cVp5m4LVQz3fwc; Mon, 22 Sep 2025 16:11:56 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758557516; 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=3rDjgEIM9/Noyso3BF7CumhyLXa+wiT6KiP1DKVq3EM=; b=fFy5lO8RlDfewqyBUDMIXRslKSvJ/U0CATInHsDB8HcVibwLBvi7owhBw7swtTqurzh4nP BJMByd5hBPk1gDd9TT09qszJHLp1HE12mD1I0Nf3UdwI5fn/grSEeT6rJHGk6Hp/qt8jY6 sW0OdL/7jffPj2mkG0aZMEGFAqOLZPFFbFJ9kasX+fzJ77JO+E0+VSM9f6ZlMhjcxCIbMD n1COEw53xtN/V3w8GXoywGD/CIsiSDUcFfw32r4Y4PNKxJLUYJMvNS5pSOxiS4vkbw5j/Q TohaoixfsRDQ9WMRxTn1f09/WrgXl08jjYi7XV6vK0CUV/p81LQIQDZifO7Obg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1758557516; 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=3rDjgEIM9/Noyso3BF7CumhyLXa+wiT6KiP1DKVq3EM=; b=QQEAlMlxfuVG3zXMgXL2n2iFN5aJ9zX41nEmprejjq18YtupWIU/iku5qEvHXnPfEOizYt tengwHdkZlsRG1GQOzERS4Vnu88pBKxmXIAJqtPEArFtV1+dYkdRfjSGiRz15hCpfzTibm xo8e7M74DjO+rGx9YSy7puTgbfRq1XbIb0Okfxb3AFu18+zbzc6mr6oZDJFE2efkMaMTcD EnIBCyn1HRNuOfPc340tfxsfyBT6bl08GopNgnwqPHrAhQUm40bAfMSauBlAxsip3ielvE IAi+jFCw03UUm4mCXmHO6c/UOvdis3O1iKhMftp0yNBGXeE3hwSh/xT8MAd1Og== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1758557516; a=rsa-sha256; cv=none; b=kEF/9E7NCmhBQ4BPXz3bu8bx3fEc7pmx4pmHCr/VFutB4ovOy2qhZ/t/EKzgaENWJ809/z Q7LJ1D/1pbl9M2qelPnTPmUzAS1M2eaU689p36JmvG0cmr384AHPM4+3viOI5TqHfxo7vn ZDXOd2G5+YlB47/FCEbD39ZHyDRR3831qdfpkBER9D7B7+Xa63mqkkLTD/uFZZv+sCM2pn Iwc3poHsuRuP7ILEO65JN3ZoYsC32UR+b9+tewRu/qQDhclqMCNqfSUt4+E00IxoZEHLGX Lcy0xzYrdUi2/FBEb8U0/nedi7FKWX4A1Lnaeiur+M2X/z2r5iMlv4DKrendxA== 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 4cVp5m2nw7z15xd; Mon, 22 Sep 2025 16:11:56 +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 58MGBupV070335; Mon, 22 Sep 2025 16:11:56 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 58MGBuoR070332; Mon, 22 Sep 2025 16:11:56 GMT (envelope-from git) Date: Mon, 22 Sep 2025 16:11:56 GMT Message-Id: <202509221611.58MGBuoR070332@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: 797e92944d11 - stable/15 - cpuctl: run amd_ucode_wrmsr only on one CPU and report if it failed 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: 797e92944d118c0fe7de20ae92a18066eaf9a194 Auto-Submitted: auto-generated The branch stable/15 has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=797e92944d118c0fe7de20ae92a18066eaf9a194 commit 797e92944d118c0fe7de20ae92a18066eaf9a194 Author: Gleb Smirnoff AuthorDate: 2025-09-18 15:10:59 +0000 Commit: Gleb Smirnoff CommitDate: 2025-09-22 16:11:33 +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 (cherry picked from commit 6683dcf61b3d0dfa8639c9e501eefb7709922ddf) --- 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