|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 6/7] microcode: rendezvous CPUs in NMI handler and load ucode
On 27.09.2019 15:53, Chao Gao wrote:
> On Fri, Sep 27, 2019 at 12:19:22PM +0200, Jan Beulich wrote:
>> On 26.09.2019 15:53, Chao Gao wrote:
>>> @@ -420,14 +498,23 @@ static int control_thread_fn(const struct
>>> microcode_patch *patch)
>>> return ret;
>>> }
>>>
>>> - /* Let primary threads load the given ucode update */
>>> - set_state(LOADING_ENTER);
>>> -
>>> + /* Control thread loads ucode first while others are in NMI handler. */
>>> ret = microcode_ops->apply_microcode(patch);
>>> if ( !ret )
>>> atomic_inc(&cpu_updated);
>>> atomic_inc(&cpu_out);
>>>
>>> + if ( ret == -EIO )
>>> + {
>>> + printk(XENLOG_ERR
>>> + "Late loading aborted: CPU%u failed to update ucode\n",
>>> cpu);
>>> + set_state(LOADING_EXIT);
>>> + return ret;
>>> + }
>>> +
>>> + /* Let primary threads load the given ucode update */
>>> + set_state(LOADING_ENTER);
>>
>> While the description goes to some lengths to explain this ordering of
>> updates, I still don't really see the point: How is it better for the
>> control CPU to have updated its ucode early and then hit an NMI before
>> the other CPUs have even started updating, than the other way around
>> in the opposite case?
>
> We want to be conservative here. If an ucode is to update something
> shared by a whole socket, for the latter case, control thread may
> be accessing things that are being updating by the ucode loading on
> other cores. It is not safe, just like sibling thread isn't expected
> to access features exposed by the old ucode when primary thread is
> loading ucode.
Ah yes, considering a socket-wide effect didn't occur to me (although
it should have). So if you mention this aspect in the description, I
think I'm going to be fine with the change in this regard. Yet (as so
often) this raises another question: What about "secondary" sockets?
Shouldn't we entertain a similar two-step approach there then?
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 |