|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC] x86/EFI: take care of fully eager FPU around runtime calls
Just like in the HVM emulation case we must not set CR0.TS here in
fully eager mode. Note that idle vCPU-s never have
->arch.fully_eager_fpu set (for their initialization not going through
vcpu_init_fpu()), so we won't hit the respective ASSERT() in
vcpu_restore_fpu_eager().
Introduce a "curr" local variable and replace other uses of "current"
at the same time.
Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
---
RFC: Not even compile tested, as I'm writing this from home. Also please
excuse the formatting (hence the attachment) - our mail web frontend
doesn't allow anything better.
--- a/xen/common/efi/runtime.c
+++ b/xen/common/efi/runtime.c
@@ -118,14 +118,16 @@ struct efi_rs_state efi_rs_enter(void)
void efi_rs_leave(struct efi_rs_state *state)
{
+ struct vcpu *curr = current;
+
if ( !state->cr3 )
return;
write_cr3(state->cr3);
- if ( is_pv_vcpu(current) && !is_idle_vcpu(current) )
+ if ( is_pv_vcpu(curr) && !is_idle_vcpu(curr) )
{
struct desc_ptr gdt_desc = {
.limit = LAST_RESERVED_GDT_BYTE,
- .base = GDT_VIRT_START(current)
+ .base = GDT_VIRT_START(curr)
};
asm volatile ( "lgdt %0" : : "m" (gdt_desc) );
@@ -133,7 +135,10 @@ void efi_rs_leave(struct efi_rs_state *state)
irq_exit();
efi_rs_on_cpu = NR_CPUS;
spin_unlock(&efi_rs_lock);
- stts();
+ if ( curr->arch.fully_eager_fpu )
+ vcpu_restore_fpu_eager(curr);
+ else
+ stts();
}
bool efi_rs_using_pgtables(void)
Attachment:
x86-EFI-eager-FPU.patch _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |