On 26.02.2025 20:00, Andrew Cooper wrote:
> On 26/02/2025 2:46 pm, Jan Beulich wrote:
>> On 25.02.2025 23:29, Andrew Cooper wrote:
>>> This option is active by default, and despite what the documentation 
>>> suggests
>>> about choosing ucode=no-nmi, it only controls whether the primary threads 
>>> move
>>> into NMI context.
>>>
>>> Sibling threads unconditionally move into NMI context, which is confirmed by
>>> an in-code comment.
>>>
>>> Not discussed is the fact that the BSP never enters NMI context, which works
>>> only by luck (AMD CPUs, where we reload on sibling threads too, has working
>>> in-core rendezvous and doesn't require NMI cover on the primary thread for
>>> safety).  This does want addressing, but requires more untangling first.
>>>
>>> Overall, `ucode=no-nmi` is a misleading and pretty useless option.  Drop it,
>>> and simplify the two users.
>>>
>>> Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com>
>>> ---
>>> CC: Jan Beulich <jbeul...@suse.com>
>>> CC: Roger Pau Monné <roger....@citrix.com>
>>>
>>> Despite the reasonably large diff in primary_thread_fn(), it's mostly just
>>> unindenting the block, and dropping the final call to primary_thread_work()
>>> which is made dead by this change.
>>> ---
>>>  docs/misc/xen-command-line.pandoc |  8 ++-----
>>>  xen/arch/x86/cpu/microcode/core.c | 38 +++++++++++--------------------
>>>  2 files changed, 15 insertions(+), 31 deletions(-)
>>>
>>> diff --git a/docs/misc/xen-command-line.pandoc 
>>> b/docs/misc/xen-command-line.pandoc
>>> index 47674025249a..9702c36b8c39 100644
>>> --- a/docs/misc/xen-command-line.pandoc
>>> +++ b/docs/misc/xen-command-line.pandoc
>>> @@ -2721,10 +2721,10 @@ performance.
>>>     Alternatively, selecting `tsx=1` will re-enable TSX at the users own 
>>> risk.
>>>  
>>>  ### ucode
>>> -> `= List of [ <integer>, scan=<bool>, nmi=<bool> ]`
>>> +> `= List of [ <integer>, scan=<bool ]`
>> With this (taking my comment on patch 1 into account as well) I think ...
>>
>>> @@ -123,9 +120,7 @@ static int __init cf_check parse_ucode(const char *s)
>>>          if ( !ss )
>>>              ss = strchr(s, '\0');
>>>  
>>> -        if ( (val = parse_boolean("nmi", s, ss)) >= 0 )
>>> -            ucode_in_nmi = val;
>>> -        else if ( (val = parse_boolean("scan", s, ss)) >= 0 )
>>> +        if ( (val = parse_boolean("scan", s, ss)) >= 0 )
>>>          {
>>>              if ( ucode_mod_forced )
>>>                  printk(XENLOG_WARNING
>> ... this function will want to transition back to what it was prior to
>> the addition of the sub-option, preferably adjusted to account for the
>> possibility of multiple "ucode=" on the command line, i.e. along the
>> lines of
>>
>>     if ( !strncmp(s, "scan", 4) )
>>     {
>>         ucode_scan = 1;
>>         ucode_mod_idx = 0;
>>     }
>>     else
>>     {
>>         ucode_scan = 0;
>>         ucode_mod_idx = simple_strtol(s, &q, 0);
>>     }
>>
>> That would then make patch 1 kind of unnecessary.
> 
> As said, I need to introduce a new option for the AMD fix, so it needs
> to stay comma-separated.

Right, and hence for the patch here
Reviewed-by: Jan Beulich <jbeul...@suse.com>

Patch 1 may still need a little bit of tweaking, though.

Jan

Reply via email to