[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/2] x86/ucode: allow cpu_request_microcode() to skip memory allocation
On Thu, Dec 8, 2022 at 3:34 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: > > On 08.12.2022 14:59, Andrew Cooper wrote: > > On 08/12/2022 13:26, Sergey Dyasli wrote: > >> @@ -240,20 +240,20 @@ static const struct microcode_patch *nmi_patch = > >> ZERO_BLOCK_PTR; > >> * patch is found and an error occurs during the parsing process. > >> Otherwise > >> * return NULL. > >> */ > >> -static struct microcode_patch *parse_blob(const char *buf, size_t len) > >> +static const struct microcode_patch *parse_blob(const char *buf, size_t > >> len) > >> { > >> alternative_vcall(ucode_ops.collect_cpu_info); > >> > >> - return alternative_call(ucode_ops.cpu_request_microcode, buf, len); > >> + return alternative_call(ucode_ops.cpu_request_microcode, buf, len, > >> true); > >> } > >> > >> -static void microcode_free_patch(struct microcode_patch *patch) > >> +static void microcode_free_patch(const struct microcode_patch *patch) > >> { > >> - xfree(patch); > >> + xfree((void *)patch); > > > > This hunk demonstrates why the hook wants to return a non-const > > pointer. Keeping it non-const will shrink this patch quite a bit. > > Alternatively it demonstrates why xfree() should take const void *, > just like e.g. unmap_domain_page() or vunmap() already do. We've > talked about this before, and the argument hasn't changed: Neither > unmapping nor freeing really alters the contents of the pointed to > area from the perspective of the caller, as the contents simply > disappears altogether. Despite my love of const, const correctness in C is quite a pain. I've tried to make xfree() take a const pointer but then issues began with add/strip_padding() functions and I couldn't overcome those without further (void *) casts which just takes the problem to a different layer. I think I'll have to go with Andrew's suggestion and continue to return non-const pointers from cpu_request_microcode(). This will include a cast though: patch = (struct microcode_patch *)saved; Sergey
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |