Jan Beulich
2011-Dec-12 15:27 UTC
[PATCH] x86/microcode: Allow "ucode=" argument to be negative
... to indicate counting from the end of the modules list. Suggested by Tim Deegan. Signed-off-by: Jan Beulich <jbeulich@suse.com> --- 2011-11-23.orig/xen/arch/x86/microcode.c 2011-11-30 16:52:28.000000000 +0100 +++ 2011-11-23/xen/arch/x86/microcode.c 2011-12-06 08:41:13.000000000 +0100 @@ -41,7 +41,7 @@ static module_t __initdata ucode_mod; static void *(*__initdata ucode_mod_map)(const module_t *); -static unsigned int __initdata ucode_mod_idx; +static signed int __initdata ucode_mod_idx; static bool_t __initdata ucode_mod_forced; static cpumask_t __initdata init_mask; @@ -54,7 +54,7 @@ void __init microcode_set_module(unsigne static void __init parse_ucode(char *s) { if ( !ucode_mod_forced ) - ucode_mod_idx = simple_strtoul(s, NULL, 0); + ucode_mod_idx = simple_strtol(s, NULL, 0); } custom_param("ucode", parse_ucode); @@ -65,7 +65,9 @@ void __init microcode_grab_module( { module_t *mod = (module_t *)__va(mbi->mods_addr); - if ( !ucode_mod_idx || ucode_mod_idx >= mbi->mods_count || + if ( ucode_mod_idx < 0 ) + ucode_mod_idx += mbi->mods_count; + if ( ucode_mod_idx <= 0 || ucode_mod_idx >= mbi->mods_count || !__test_and_clear_bit(ucode_mod_idx, module_map) ) return; ucode_mod = mod[ucode_mod_idx]; _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2011-Dec-12 17:45 UTC
Re: [PATCH] x86/microcode: Allow "ucode=" argument to be negative
On 12/12/2011 15:27, "Jan Beulich" <JBeulich@suse.com> wrote:> ... to indicate counting from the end of the modules list. > > Suggested by Tim Deegan. > > Signed-off-by: Jan Beulich <jbeulich@suse.com>Acked-by: Keir Fraser <keir@xen.org>> --- 2011-11-23.orig/xen/arch/x86/microcode.c 2011-11-30 16:52:28.000000000 > +0100 > +++ 2011-11-23/xen/arch/x86/microcode.c 2011-12-06 08:41:13.000000000 +0100 > @@ -41,7 +41,7 @@ > > static module_t __initdata ucode_mod; > static void *(*__initdata ucode_mod_map)(const module_t *); > -static unsigned int __initdata ucode_mod_idx; > +static signed int __initdata ucode_mod_idx; > static bool_t __initdata ucode_mod_forced; > static cpumask_t __initdata init_mask; > > @@ -54,7 +54,7 @@ void __init microcode_set_module(unsigne > static void __init parse_ucode(char *s) > { > if ( !ucode_mod_forced ) > - ucode_mod_idx = simple_strtoul(s, NULL, 0); > + ucode_mod_idx = simple_strtol(s, NULL, 0); > } > custom_param("ucode", parse_ucode); > > @@ -65,7 +65,9 @@ void __init microcode_grab_module( > { > module_t *mod = (module_t *)__va(mbi->mods_addr); > > - if ( !ucode_mod_idx || ucode_mod_idx >= mbi->mods_count || > + if ( ucode_mod_idx < 0 ) > + ucode_mod_idx += mbi->mods_count; > + if ( ucode_mod_idx <= 0 || ucode_mod_idx >= mbi->mods_count || > !__test_and_clear_bit(ucode_mod_idx, module_map) ) > return; > ucode_mod = mod[ucode_mod_idx]; > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel