uint16_t id;
} equiv __read_mostly;
-/* See comment in start_update() for cases when this routine fails */
-static int collect_cpu_info(struct cpu_signature *csig)
+static void collect_cpu_info(void)
{
+ struct cpu_signature *csig = &this_cpu(cpu_sig);
+
memset(csig, 0, sizeof(*csig));
csig->sig = cpuid_eax(1);
pr_debug("microcode: CPU%d collect_cpu_info: patch_id=%#x\n",
smp_processor_id(), csig->rev);
-
- return 0;
}
static bool_t verify_patch_size(uint32_t patch_size)
*/
static struct microcode_patch *parse_blob(const char *buf, size_t len)
{
- if ( likely(!microcode_ops->collect_cpu_info(&this_cpu(cpu_sig))) )
- return microcode_ops->cpu_request_microcode(buf, len);
+ microcode_ops->collect_cpu_info();
- return NULL;
+ return microcode_ops->cpu_request_microcode(buf, len);
}
static void microcode_free_patch(struct microcode_patch *patch)
*/
static int microcode_update_cpu(const struct microcode_patch *patch)
{
- int err = microcode_ops->collect_cpu_info(&this_cpu(cpu_sig));
+ int err;
- if ( unlikely(err) )
- return err;
+ microcode_ops->collect_cpu_info();
spin_lock(µcode_mutex);
if ( patch )
if ( !microcode_ops )
return -EOPNOTSUPP;
- microcode_ops->collect_cpu_info(&this_cpu(cpu_sig));
+ microcode_ops->collect_cpu_info();
if ( start_update && microcode_ops->start_update )
{
return -ENODEV;
}
- microcode_ops->collect_cpu_info(&this_cpu(cpu_sig));
+ microcode_ops->collect_cpu_info();
if ( ucode_mod.mod_end || ucode_blob.size )
rc = early_microcode_update_cpu();
return cpu_sig->pf & ucode_pf;
}
-static int collect_cpu_info(struct cpu_signature *csig)
+static void collect_cpu_info(void)
{
+ struct cpu_signature *csig = &this_cpu(cpu_sig);
uint64_t msr_content;
memset(csig, 0, sizeof(*csig));
csig->rev = (uint32_t)(msr_content >> 32);
pr_debug("microcode: collect_cpu_info : sig=%#x, pf=%#x, rev=%#x\n",
csig->sig, csig->pf, csig->rev);
-
- return 0;
}
/*
struct microcode_patch *(*cpu_request_microcode)(const void *buf,
size_t size);
- /* Obtain microcode-relevant details for the current CPU. */
- int (*collect_cpu_info)(struct cpu_signature *csig);
+ /*
+ * Obtain microcode-relevant details for the current CPU. Results in
+ * per_cpu(cpu_sig).
+ */
+ void (*collect_cpu_info)(void);
/*
* Attempt to load the provided patch into the CPU. Returns an error if