x86/ucode: Drop MIS_UCODE and microcode_match_result

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 standard
ordering primitives in C.

Swap the order or parameters to compare_patch(), to reduce cognitive
complexity; all other logic operates the other way around.  Rename the hook to
simply compare().

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2024-11-15 18:54:47 +00:00
1 parent 91afda4a34
commit b1b657afa9
4 files changed
+22 -27

No files matched your search

+5 -7
View File
@@ -170,8 +170,7 @@ static bool check_final_patch_levels(const struct cpu_signature *sig)
return false;
}
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_patch *patch)
return equiv.id == patch->processor_rev_id;
}
static enum microcode_match_result cf_check compare_patch(
const struct microcode_patch *new, const struct microcode_patch *old)
static int cf_check amd_compare(
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_patch(
static int cf_check apply_microcode(const struct microcode_patch *patch,
unsigned int flags)
{
int hw_err;
int hw_err, result;
unsigned int cpu = smp_processor_id();
struct cpu_signature *sig = &per_cpu(cpu_sig, cpu);
uint32_t rev, old_rev = sig->rev;
enum microcode_match_result result;
bool ucode_force = flags & XENPF_UCODE_FORCE;
if ( !microcode_fits_cpu(patch) )
@@ -449,7 +447,7 @@ static const struct microcode_ops __initconst_cf_clobber amd_ucode_ops = {
.cpu_request_microcode = cpu_request_microcode,
.collect_cpu_info = collect_cpu_info,
.apply_microcode = apply_microcode,
.compare_patch = compare_patch,
.compare = amd_compare,
.cpio_path = amd_cpio_path,
};
+2 -3
View File
@@ -470,8 +470,7 @@ struct ucode_buf {
static long cf_check microcode_update_helper(void *data)
{
struct microcode_patch *patch = NULL;
enum microcode_match_result result;
int ret;
int ret, result;
struct ucode_buf *buffer = 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(&microcode_mutex);
if ( microcode_cache )
{
result = alternative_call(ucode_ops.compare_patch, patch, microcode_cache);
result = alternative_call(ucode_ops.compare, microcode_cache, patch);
if ( result != NEW_UCODE &&
!(ucode_force && (result == OLD_UCODE || result == SAME_UCODE)) )
+5 -6
View File
@@ -229,8 +229,7 @@ static int microcode_sanity_check(const struct microcode_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_patch *mc)
return false;
}
static enum microcode_match_result cf_check compare_patch(
const struct microcode_patch *new, const struct microcode_patch *old)
static int cf_check intel_compare(
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 microcode_patch *patch,
unsigned int cpu = smp_processor_id();
struct cpu_signature *sig = &this_cpu(cpu_sig);
uint32_t rev, old_rev = sig->rev;
enum microcode_match_result result;
int result;
bool ucode_force = flags & XENPF_UCODE_FORCE;
if ( !microcode_fits_cpu(patch) )
@@ -408,7 +407,7 @@ static const struct microcode_ops __initconst_cf_clobber intel_ucode_ops = {
.cpu_request_microcode = cpu_request_microcode,
.collect_cpu_info = collect_cpu_info,
.apply_microcode = apply_microcode,
.compare_patch = compare_patch,
.compare = intel_compare,
.cpio_path = intel_cpio_path,
};
+10 -11
View File
@@ -5,13 +5,6 @@
#include <asm/microcode.h>
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;
@@ -54,11 +47,17 @@ struct microcode_ops {
unsigned int flags);
/*
* 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 on revision.
*
* This operation is not necessarily symmetrical. In some cases, a debug
* "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 *old);
#define OLD_UCODE (-1)
#define SAME_UCODE (0)
#define NEW_UCODE (1)
int (*compare)(const struct microcode_patch *old,
const struct microcode_patch *new);
/*
* For Linux inird microcode compatibliity.
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.