KVM: selftests: Add and use a helper function for x86's LIDT

Implement a function for setting the IDT descriptor from the guest
code. Replace the existing lidt occurrences with calls to this function
as `lidt` is used in multiple places.

Signed-off-by: Ivan Orlov <iorlov@amazon.com>
Link: https://lore.kernel.org/r/20241217181458.68690-7-iorlov@amazon.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
Ivan Orlov 2024-12-17 18:14:57 +00:00 committed by Sean Christopherson
parent 7bd7ff9911
commit 4e9427aeb9
3 changed files with 7 additions and 2 deletions

View File

@ -569,6 +569,11 @@ static inline void set_cr4(uint64_t val)
__asm__ __volatile__("mov %0, %%cr4" : : "r" (val) : "memory"); __asm__ __volatile__("mov %0, %%cr4" : : "r" (val) : "memory");
} }
static inline void set_idt(const struct desc_ptr *idt_desc)
{
__asm__ __volatile__("lidt %0"::"m"(*idt_desc));
}
static inline u64 xgetbv(u32 index) static inline u64 xgetbv(u32 index)
{ {
u32 eax, edx; u32 eax, edx;

View File

@ -235,7 +235,7 @@ static void guest_code_delete_memory_region(void)
* in the guest will never succeed, and so isn't an option. * in the guest will never succeed, and so isn't an option.
*/ */
memset(&idt, 0, sizeof(idt)); memset(&idt, 0, sizeof(idt));
__asm__ __volatile__("lidt %0" :: "m"(idt)); set_idt(&idt);
GUEST_SYNC(0); GUEST_SYNC(0);

View File

@ -155,7 +155,7 @@ static void guest_shutdown_code(void)
/* Clobber the IDT so that #UD is guaranteed to trigger SHUTDOWN. */ /* Clobber the IDT so that #UD is guaranteed to trigger SHUTDOWN. */
memset(&idt, 0, sizeof(idt)); memset(&idt, 0, sizeof(idt));
__asm__ __volatile__("lidt %0" :: "m"(idt)); set_idt(&idt);
__asm__ __volatile__("ud2"); __asm__ __volatile__("ud2");
} }