[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 07/10] x86/ucode: Move the CPIO path string into microcode_ops
On 28.10.2024 15:38, Andrew Cooper wrote: > On 28/10/2024 2:25 pm, Jan Beulich wrote: >> On 28.10.2024 10:18, Andrew Cooper wrote: >>> We've got a perfectly good vendor abstraction already for microcode. No >>> need >>> for a second ad-hoc one in microcode_scan_module(). >>> >>> This is in preparation to use ucode_ops.cpio_path in multiple places. >>> >>> These paths are only used during __init, so take the opportunity to move >>> them >>> into __initconst. >> As an alternative to this, how about ... >> >>> --- a/xen/arch/x86/cpu/microcode/private.h >>> +++ b/xen/arch/x86/cpu/microcode/private.h >>> @@ -59,6 +59,13 @@ struct microcode_ops { >>> */ >>> enum microcode_match_result (*compare_patch)( >>> const struct microcode_patch *new, const struct microcode_patch >>> *old); >>> + >>> + /* >>> + * For Linux inird microcode compatibliity. >>> + * >>> + * The path where this vendor's microcode can be found in CPIO. >>> + */ >>> + const char *cpio_path; >> const char cpio_path[]; >> >> inheriting the __initconst from the struct instances? >> Acked-by: Jan Beulich <jbeulich@xxxxxxxx> >> with a slight preference to the form without the extra pointer. > > I'm slightly surprised at this request, given that the form with the > pointer results in less data held at runtime. No, it doesn't. Yet I only now realize that ... >> Except that: >> gcc14 looks to be buggy when it comes to the copying of such a struct. The >> example below yields an internal compiler error. And the direct structure >> assignment also doesn't quite do what I would expect it to do (visible when >> commenting out the "else" branch. Bottom line - leave the code as is. > > It's unfortunate to hit an ICE, but the copy cannot possibly work in the > first place. > > ucode_ops is in a separate translation unit and has no space allocated > after the flexible member. Any copy into it is memory corruption of > whatever object happens to be sequentially after ucode_ops. ... my expectation of how the copy ought to work (and how the C standard, at least in close enough an example, specifies it) would specifically _not_ suit our needs. The copy ought to only cover sizeof(struct ...), i.e. not the string. Yet we'd need that string to be copied to be usable for our purposes. > The only way it would work is having `const char cpio_path[40];` which > is long enough for anything we'd expect to find. > > But again, that involves holding init-only data post init. This, indeed, would increase post-init size. Yet with the compiler issue no question arises anyway as to how this needs doing. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |