[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v9 12/15] microcode: reduce memory allocation and copy when creating a patch



On 19.08.2019 03:25, Chao Gao wrote:
> @@ -542,29 +505,21 @@ static struct microcode_patch 
> *cpu_request_microcode(const void *buf,
>      while ( (error = get_ucode_from_buffer_amd(mc_amd, buf, bufsize,
>                                                 &offset)) == 0 )
>      {
> -        struct microcode_patch *new_patch = alloc_microcode_patch(mc_amd);
> -
> -        if ( IS_ERR(new_patch) )
> -        {
> -            error = PTR_ERR(new_patch);
> -            break;
> -        }
> -
>          /*
> -         * If the new patch covers current CPU, compare patches and store the
> +         * If the new ucode covers current CPU, compare ucodes and store the
>           * one with higher revision.
>           */
> -        if ( (microcode_fits(new_patch->mc_amd) != MIS_UCODE) &&
> -             (!patch || (compare_patch(new_patch, patch) == NEW_UCODE)) )
> +#define REV_ID(mpb) (((struct microcode_header_amd 
> *)(mpb))->processor_rev_id)
> +        if ( (microcode_fits(mc_amd) != MIS_UCODE) &&
> +             (!saved || (REV_ID(mc_amd->mpb) > REV_ID(saved))) )
> +#undef REV_ID

I'm not happy with this helper #define, the more that "saved" already is
of the correct type. compare_patch() in reality only acts on the header,
so I'd suggest having that function forward to a new compare_header()
(or some other suitable name) and use that new function here as well.

> @@ -379,47 +360,47 @@ static struct microcode_patch 
> *cpu_request_microcode(const void *buf,
>  {
>      long offset = 0;
>      int error = 0;
> -    void *mc;
> +    struct microcode_intel *mc, *saved = NULL;
>      struct microcode_patch *patch = NULL;
>  
> -    while ( (offset = get_next_ucode_from_buffer(&mc, buf, size, offset)) > 
> 0 )
> +    while ( (offset = get_next_ucode_from_buffer((void **)&mc, buf,

Casts like this make me rather nervous. Please see about getting rid of
it (by using a union or a 2nd local variable).

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.