If bootstrap_map() has provided a mapping, we must free it when done. Failing
to do so may cause a spurious failure for unrelated logic later.
Inserting a bootstrap_unmap() here does not break the use of ucode_{blob,mod}
any more than they already are.
Add a printk noting when we didn't find a microcode patch. It's at debug
level, because this is the expected case on AMD Client systems, and SDPs, but
for people trying to figure out why microcode loading isn't work, it might be
helpful.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Daniel P. Smith <dpsmith@apertussolutions.com>
size_t size;
struct microcode_patch *patch;
int idx = opt_mod_idx;
+ int rc;
/*
* Cmdline parsing ensures this invariant holds, so that we don't end up
patch = ucode_ops.cpu_request_microcode(data, size, false);
if ( IS_ERR(patch) )
{
- printk(XENLOG_WARNING "Parsing microcode blob error %ld\n",
- PTR_ERR(patch));
- return PTR_ERR(patch);
+ rc = PTR_ERR(patch);
+ printk(XENLOG_WARNING "Microcode: Parse error %d\n", rc);
+ goto unmap;
}
if ( !patch )
- return -ENOENT;
+ {
+ printk(XENLOG_DEBUG "Microcode: No suitable patch found\n");
+ rc = -ENOENT;
+ goto unmap;
+ }
+
+ rc = microcode_update_cpu(patch, 0);
- return microcode_update_cpu(patch, 0);
+ unmap:
+ bootstrap_unmap();
+
+ return rc;
}
int __init early_microcode_init(struct boot_info *bi)