From nobody Mon Nov 3 12:18:52 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1731446391; cv=none; d=zohomail.com; s=zohoarc; b=f9opJnJe9ygiw0xj3Tt/hfmIk3XsJWHpl/SZgOQfQGjSqUys1HGN2LAFcZdizxYbpmXZACaEIG17R3H3dj1IUOGHtusF0KotXnZsSr5ACFJHD7M8jKp81XzxEOtM/NtW2kQJcrCyZpZ9zamgU2fsRMPHVINzQrJDBpGFfgygWkw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1731446391; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=eAYyhUk3NiNBRpvH7yor3qXtJxAbrlhbvjZAvpbioVA=; b=UV9R+cOF/Uj3nyQV3XbCz1kj6SFhD2/9RSd9PI1G8ouwmtxLPXK5ngjeVfBCM6Ky0sRF2gGHigFLQ0gz7hp+jaFvveBF/JTH/yQL8i+NQHrIKWu1mwvJvgW+1vnyXb/12suZBDnrebbjbuXu5taDnCSsaFfwZ79kMaPc4AiYLhY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 173144639161969.47039735234262; Tue, 12 Nov 2024 13:19:51 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.834938.1250748 (Exim 4.92) (envelope-from ) id 1tAyIK-0002Og-P8; Tue, 12 Nov 2024 21:19:28 +0000 Received: by outflank-mailman (output) from mailman id 834938.1250748; Tue, 12 Nov 2024 21:19:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tAyIK-0002OC-Jx; Tue, 12 Nov 2024 21:19:28 +0000 Received: by outflank-mailman (input) for mailman id 834938; Tue, 12 Nov 2024 21:19:27 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1tAyIJ-0002GG-9a for xen-devel@lists.xenproject.org; Tue, 12 Nov 2024 21:19:27 +0000 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [2a00:1450:4864:20::52d]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id c9e406e4-a13b-11ef-a0c7-8be0dac302b0; Tue, 12 Nov 2024 22:19:23 +0100 (CET) Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-5cedea84d77so8066428a12.1 for ; Tue, 12 Nov 2024 13:19:23 -0800 (PST) Received: from andrewcoop.eng.citrite.net ([185.25.67.249]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a9ee0defaefsm762049066b.164.2024.11.12.13.19.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Nov 2024 13:19:21 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: c9e406e4-a13b-11ef-a0c7-8be0dac302b0 X-Custom-Connection: eyJyZW1vdGVpcCI6IjJhMDA6MTQ1MDo0ODY0OjIwOjo1MmQiLCJoZWxvIjoibWFpbC1lZDEteDUyZC5nb29nbGUuY29tIn0= X-Custom-Transaction: eyJpZCI6ImM5ZTQwNmU0LWExM2ItMTFlZi1hMGM3LThiZTBkYWMzMDJiMCIsInRzIjoxNzMxNDQ2MzYzLjYzNzQwOSwic2VuZGVyIjoiYW5kcmV3LmNvb3BlckBjbG91ZC5jb20iLCJyZWNpcGllbnQiOiJ4ZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcifQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1731446362; x=1732051162; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eAYyhUk3NiNBRpvH7yor3qXtJxAbrlhbvjZAvpbioVA=; b=gNtcUJaes2Hvh6MPO+Ge8IqrX7nXE0lO/X3RNjH7gAHJp60TfTuEnwHJfHA6r/uv0/ aAHXag6UlxcGn5MbZyneXfSIBWa79tfY5uzhgROizesTFnGe/f1vpUwFB8j0s2kkYlp4 p3GVCpwdY8TZJMMnh+TFhzXhA6vzEp/F3aZ1s= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731446362; x=1732051162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eAYyhUk3NiNBRpvH7yor3qXtJxAbrlhbvjZAvpbioVA=; b=OMHY1uhbI1z6U665eI4hEyFYJ30+tMGmu4UFL8wmWFxImnsb9PdsTIHavuXDtRlRsl rp4SyCX/UwOyme2G3mgYw4DLQbsew7w8KCTkCpsmRuRdycuXs+kOQsmuHCPeHOMZCaNy RGDzaXrZQYcTZFrBRA/sQnPdHF73FIfFFc65qZ/cQ9fJ/elTmlA1HL+fwl2IjMEGmFpp yv6CMdvGLqGoEytaBtndqxkg+LeEbCY0bdXQu+RKdXqm/mH6qsswU6MjOk9InSj1y8PP Z0v9Oe8Q7jIBHOjYOn1SEM8RKcxGCGMPe2+AFd0O0DRpCAbCGksETU4GyZN46AvSS5ko bORQ== X-Gm-Message-State: AOJu0YxRDRwUGK7//CKeuBUFRnT2xNSqa/9z0J6MrSbQdqY8fApOH87r lGOv7KGE9Qom76Zdr9AXF4SDdtOfZBXj0mxX78whRvg7fsVFEhm32QXIDAGKzXUI/gHuhRmfOgk Q X-Google-Smtp-Source: AGHT+IH1SJMQqG4ZDRMaVvXg/u4VtZfUdJ5zz7Ex1zwQLqVw/ITZH7FI+RC1MgIh6+bk2m9pwjGAww== X-Received: by 2002:a17:907:31c2:b0:a99:fb56:39cc with SMTP id a640c23a62f3a-aa1f810644amr37088166b.38.1731446362440; Tue, 12 Nov 2024 13:19:22 -0800 (PST) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH v2 3/3] x86/ucode: Drop MIS_UCODE and microcode_match_result Date: Tue, 12 Nov 2024 21:19:15 +0000 Message-Id: <20241112211915.1473121-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20241112211915.1473121-1-andrew.cooper3@citrix.com> References: <20241112211915.1473121-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1731446393136116600 All uses of MIS_UCODE, have been removed, leaving only a simple ordering relation, and microcode_match_result being a stale name. Drop the enum entirely, and use a simple int -1/0/1 scheme like other stand= ard ordering primitives in C. Swap the order or parameters to compare_patch(), to reduce cognitive complexity; all other logic operates the other way around. No functional change. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 I don't particular like keeping "result" as a variable name, but nothing better comes to mind. --- xen/arch/x86/cpu/microcode/amd.c | 10 ++++------ xen/arch/x86/cpu/microcode/core.c | 5 ++--- xen/arch/x86/cpu/microcode/intel.c | 9 ++++----- xen/arch/x86/cpu/microcode/private.h | 21 ++++++++++----------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/xen/arch/x86/cpu/microcode/amd.c b/xen/arch/x86/cpu/microcode/= amd.c index 3861fec6565a..366c8c59e93a 100644 --- a/xen/arch/x86/cpu/microcode/amd.c +++ b/xen/arch/x86/cpu/microcode/amd.c @@ -170,8 +170,7 @@ static bool check_final_patch_levels(const struct cpu_s= ignature *sig) return false; } =20 -static enum microcode_match_result compare_revisions( - uint32_t old_rev, uint32_t new_rev) +static int compare_revisions(uint32_t old_rev, uint32_t new_rev) { if ( new_rev > old_rev ) return NEW_UCODE; @@ -199,8 +198,8 @@ static bool microcode_fits_cpu(const struct microcode_p= atch *patch) return equiv.id =3D=3D patch->processor_rev_id; } =20 -static enum microcode_match_result cf_check compare_patch( - const struct microcode_patch *new, const struct microcode_patch *old) +static int cf_check compare_patch( + const struct microcode_patch *old, const struct microcode_patch *new) { /* Both patches to compare are supposed to be applicable to local CPU.= */ ASSERT(microcode_fits_cpu(new)); @@ -212,11 +211,10 @@ static enum microcode_match_result cf_check compare_p= atch( static int cf_check apply_microcode(const struct microcode_patch *patch, unsigned int flags) { - int hw_err; + int hw_err, result; unsigned int cpu =3D smp_processor_id(); struct cpu_signature *sig =3D &per_cpu(cpu_sig, cpu); uint32_t rev, old_rev =3D sig->rev; - enum microcode_match_result result; bool ucode_force =3D flags & XENPF_UCODE_FORCE; =20 if ( !microcode_fits_cpu(patch) ) diff --git a/xen/arch/x86/cpu/microcode/core.c b/xen/arch/x86/cpu/microcode= /core.c index 0cc5daa251e2..05d0d68d8158 100644 --- a/xen/arch/x86/cpu/microcode/core.c +++ b/xen/arch/x86/cpu/microcode/core.c @@ -470,8 +470,7 @@ struct ucode_buf { static long cf_check microcode_update_helper(void *data) { struct microcode_patch *patch =3D NULL; - enum microcode_match_result result; - int ret; + int ret, result; struct ucode_buf *buffer =3D data; unsigned int cpu, updated; struct patch_with_flags patch_with_flags; @@ -527,7 +526,7 @@ static long cf_check microcode_update_helper(void *data) spin_lock(µcode_mutex); if ( microcode_cache ) { - result =3D alternative_call(ucode_ops.compare_patch, patch, microc= ode_cache); + result =3D alternative_call(ucode_ops.compare_patch, microcode_cac= he, patch); =20 if ( result !=3D NEW_UCODE && !(ucode_force && (result =3D=3D OLD_UCODE || result =3D=3D SA= ME_UCODE)) ) diff --git a/xen/arch/x86/cpu/microcode/intel.c b/xen/arch/x86/cpu/microcod= e/intel.c index 3f37792ab4b5..9616a5e9db4b 100644 --- a/xen/arch/x86/cpu/microcode/intel.c +++ b/xen/arch/x86/cpu/microcode/intel.c @@ -229,8 +229,7 @@ static int microcode_sanity_check(const struct microcod= e_patch *patch) * Production microcode has a positive revision. Pre-production microcode= has * a negative revision. */ -static enum microcode_match_result compare_revisions( - int32_t old_rev, int32_t new_rev) +static int compare_revisions(int32_t old_rev, int32_t new_rev) { if ( new_rev > old_rev ) return NEW_UCODE; @@ -270,8 +269,8 @@ static bool microcode_fits_cpu(const struct microcode_p= atch *mc) return false; } =20 -static enum microcode_match_result cf_check compare_patch( - const struct microcode_patch *new, const struct microcode_patch *old) +static int cf_check compare_patch( + const struct microcode_patch *old, const struct microcode_patch *new) { /* * Both patches to compare are supposed to be applicable to local CPU. @@ -290,7 +289,7 @@ static int cf_check apply_microcode(const struct microc= ode_patch *patch, unsigned int cpu =3D smp_processor_id(); struct cpu_signature *sig =3D &this_cpu(cpu_sig); uint32_t rev, old_rev =3D sig->rev; - enum microcode_match_result result; + int result; bool ucode_force =3D flags & XENPF_UCODE_FORCE; =20 if ( !microcode_fits_cpu(patch) ) diff --git a/xen/arch/x86/cpu/microcode/private.h b/xen/arch/x86/cpu/microc= ode/private.h index c9dd8ba066f9..957d4d4293d0 100644 --- a/xen/arch/x86/cpu/microcode/private.h +++ b/xen/arch/x86/cpu/microcode/private.h @@ -5,13 +5,6 @@ =20 #include =20 -enum microcode_match_result { - OLD_UCODE, /* signature matched, but revision id is older */ - SAME_UCODE, /* signature matched, but revision id is the same */ - NEW_UCODE, /* signature matched, but revision id is newer */ - MIS_UCODE, /* signature mismatched */ -}; - /* Opaque. Internals are vendor-specific. */ struct microcode_patch; =20 @@ -54,11 +47,17 @@ struct microcode_ops { unsigned int flags); =20 /* - * Given two patches, are they both applicable to the current CPU, and= is - * new a higher revision than old? + * Given a current patch, and a proposed new patch, order them based o= n revision. + * + * This operation is not necessarily symmetrical. In some cases, a de= bug + * "new" patch will always considered to be newer, on the expectation = that + * whomever is using debug patches knows exactly what they're doing. */ - enum microcode_match_result (*compare_patch)( - const struct microcode_patch *new, const struct microcode_patch *o= ld); +#define OLD_UCODE -1 +#define SAME_UCODE 0 +#define NEW_UCODE 1 + int (*compare_patch)(const struct microcode_patch *old, + const struct microcode_patch *new); =20 /* * For Linux inird microcode compatibliity. --=20 2.39.5