|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 3/4] x86/spec-ctrl: Fix up the RSBA/RRSBA bits as appropriate
On 13/06/2023 10:30 am, Jan Beulich wrote:
> On 12.06.2023 18:13, Andrew Cooper wrote:
>> @@ -593,15 +596,93 @@ static bool __init retpoline_calculations(void)
>> return false;
>>
>> /*
>> - * RSBA may be set by a hypervisor to indicate that we may move to a
>> - * processor which isn't retpoline-safe.
>> + * The meaning of the RSBA and RRSBA bits have evolved over time. The
>> + * agreed upon meaning at the time of writing (May 2023) is thus:
>> + *
>> + * - RSBA (RSB Alternative) means that an RSB may fall back to an
>> + * alternative predictor on underflow. Skylake uarch and later all
>> have
>> + * this property. Broadwell too, when running microcode versions
>> prior
>> + * to Jan 2018.
>> + *
>> + * - All eIBRS-capable processors suffer RSBA, but eIBRS also introduces
>> + * tagging of predictions with the mode in which they were learned.
>> So
>> + * when eIBRS is active, RSBA becomes RRSBA (Restricted RSBA).
>> + *
>> + * - CPUs are not expected to enumerate both RSBA and RRSBA.
>> + *
>> + * Some parts (Broadwell) are not expected to ever enumerate this
>> + * behaviour directly. Other parts have differing enumeration with
>> + * microcode version. Fix up Xen's idea, so we can advertise them
>> safely
>> + * to guests, and so toolstacks can level a VM safety for migration.
>> + *
>> + * The following states exist:
>> + *
>> + * | | RSBA | EIBRS | RRSBA | Notes | Action |
>> + * |---+------+-------+-------+--------------------+---------------|
>> + * | 1 | 0 | 0 | 0 | OK (older parts) | Maybe +RSBA |
>> + * | 2 | 0 | 0 | 1 | Broken | +RSBA, -RRSBA |
>> + * | 3 | 0 | 1 | 0 | OK (pre-Aug ucode) | +RRSBA |
>> + * | 4 | 0 | 1 | 1 | OK | |
>> + * | 5 | 1 | 0 | 0 | OK | |
>> + * | 6 | 1 | 0 | 1 | Broken | -RRSBA |
>> + * | 7 | 1 | 1 | 0 | Broken | -RSBA, +RRSBA |
>> + * | 8 | 1 | 1 | 1 | Broken | -RSBA |
> You've kept the Action column as you had it originally, despite no longer
> applying all the fixups. Wouldn't it make sense to mark those we don't do,
> e.g. by enclosing in parentheses?
Hmm, yes. How does this look?
| | RSBA | EIBRS | RRSBA | Notes | Action (in principle) |
|---+------+-------+-------+--------------------+-----------------------|
| 1 | 0 | 0 | 0 | OK (older parts) | Maybe +RSBA |
| 2 | 0 | 0 | 1 | Broken | (+RSBA, -RRSBA) |
| 3 | 0 | 1 | 0 | OK (pre-Aug ucode) | +RRSBA |
| 4 | 0 | 1 | 1 | OK | |
| 5 | 1 | 0 | 0 | OK | |
| 6 | 1 | 0 | 1 | Broken | (-RRSBA) |
| 7 | 1 | 1 | 0 | Broken | (-RSBA, +RRSBA) |
| 8 | 1 | 1 | 1 | Broken | (-RSBA) |
>> + * further investigation.
>> + */
>> + if ( cpu_has_eibrs ? cpu_has_rsba /* Rows 7, 8 */
>> + : cpu_has_rrsba /* Rows 2, 6 */ )
>> + {
>> + printk(XENLOG_ERR
>> + "FIRMWARE BUG: CPU %02x-%02x-%02x, ucode 0x%08x: RSBA %u,
>> EIBRS %u, RRSBA %u\n",
>> + boot_cpu_data.x86, boot_cpu_data.x86_model,
>> + boot_cpu_data.x86_mask, ucode_rev,
>> + cpu_has_rsba, cpu_has_eibrs, cpu_has_rrsba);
> Perhaps with adjustments (as you deem them sensible)
> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Thanks.
~Andrew
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |