|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 04/10] microcode: remove struct ucode_cpu_info
>>> On 27.05.19 at 10:31, <chao.gao@xxxxxxxxx> wrote:
> We can remove the per-cpu cache field in struct ucode_cpu_info since
> it has been replaced by a global cache. It would leads to only one field
> remaining in ucode_cpu_info. Then, this struct is removed and the
> remaining field (cpu signature) is stored in per-cpu area.
>
> Also remove 'microcode_resume_match' from microcode_ops because the
> check is done in find_patch(). The cpu status notifier is also
> removed. It was used to free the "mc" field to avoid memory leak.
There's no find_patch() function anymore afaics. And I also think this
should be a separate patch. The above isn't enough imo to justify ...
> int microcode_resume_cpu(unsigned int cpu)
> {
> int err;
> - struct ucode_cpu_info *uci = &per_cpu(ucode_cpu_info, cpu);
> - struct cpu_signature nsig;
> - unsigned int cpu2;
> + struct cpu_signature *sig = &per_cpu(cpu_sig, cpu);
>
> if ( !microcode_ops )
> return 0;
>
> spin_lock(µcode_mutex);
>
> - err = microcode_ops->collect_cpu_info(cpu, &uci->cpu_sig);
> - if ( err )
> - {
> - __microcode_fini_cpu(cpu);
> - spin_unlock(µcode_mutex);
> - return err;
> - }
> -
> - if ( uci->mc.mc_valid )
> - {
> - err = microcode_ops->microcode_resume_match(cpu, uci->mc.mc_valid);
> - if ( err >= 0 )
> - {
> - if ( err )
> - err = microcode_ops->apply_microcode(cpu);
> - spin_unlock(µcode_mutex);
> - return err;
> - }
> - }
> -
> - nsig = uci->cpu_sig;
> - __microcode_fini_cpu(cpu);
> - uci->cpu_sig = nsig;
> -
> - err = -EIO;
> - for_each_online_cpu ( cpu2 )
> - {
> - uci = &per_cpu(ucode_cpu_info, cpu2);
> - if ( uci->mc.mc_valid &&
> - microcode_ops->microcode_resume_match(cpu, uci->mc.mc_valid) >
> 0 )
> - {
> - err = microcode_ops->apply_microcode(cpu);
> - break;
> - }
> - }
... in particular the removal of this loop, the more that both the
loop and the code ahead of it also call ->apply_microcode().
> @@ -281,7 +281,6 @@ static enum microcode_match_result compare_patch(
> */
> static int get_matching_microcode(const void *mc, unsigned int cpu)
> {
> - struct ucode_cpu_info *uci = &per_cpu(ucode_cpu_info, cpu);
Note how this was using "cpu".
> @@ -308,17 +307,7 @@ static int get_matching_microcode(const void *mc,
> unsigned int cpu)
>
> pr_debug("microcode: CPU%d found a matching microcode update with"
> " version %#x (current=%#x)\n",
> - cpu, mc_header->rev, uci->cpu_sig.rev);
> - new_mc = xmalloc_bytes(total_size);
> - if ( new_mc == NULL )
> - {
> - printk(KERN_ERR "microcode: error! Can not allocate memory\n");
> - return -ENOMEM;
> - }
> -
> - memcpy(new_mc, mc, total_size);
> - xfree(uci->mc.mc_intel);
> - uci->mc.mc_intel = new_mc;
> + cpu, mc_header->rev, this_cpu(cpu_sig).rev);
Why "this_cpu()" here?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |