mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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:
1 parent
91afda4a34
commit
b1b657afa9
4 files changed
+22
-27
No files matched your search
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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(µcode_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)) )
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||