Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.18 51 lines 1.3 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2#ifndef SELFTEST_KVM_UTIL_ARCH_H 3#define SELFTEST_KVM_UTIL_ARCH_H 4 5#include <stdbool.h> 6#include <stdint.h> 7 8#include "kvm_util_types.h" 9#include "test_util.h" 10 11extern bool is_forced_emulation_enabled; 12 13struct kvm_vm_arch { 14 vm_vaddr_t gdt; 15 vm_vaddr_t tss; 16 vm_vaddr_t idt; 17 18 uint64_t c_bit; 19 uint64_t s_bit; 20 int sev_fd; 21 bool is_pt_protected; 22}; 23 24static inline bool __vm_arch_has_protected_memory(struct kvm_vm_arch *arch) 25{ 26 return arch->c_bit || arch->s_bit; 27} 28 29#define vm_arch_has_protected_memory(vm) \ 30 __vm_arch_has_protected_memory(&(vm)->arch) 31 32#define vcpu_arch_put_guest(mem, __val) \ 33do { \ 34 const typeof(mem) val = (__val); \ 35 \ 36 if (!is_forced_emulation_enabled || guest_random_bool(&guest_rng)) { \ 37 (mem) = val; \ 38 } else if (guest_random_bool(&guest_rng)) { \ 39 __asm__ __volatile__(KVM_FEP "mov %1, %0" \ 40 : "+m" (mem) \ 41 : "r" (val) : "memory"); \ 42 } else { \ 43 uint64_t __old = READ_ONCE(mem); \ 44 \ 45 __asm__ __volatile__(KVM_FEP LOCK_PREFIX "cmpxchg %[new], %[ptr]" \ 46 : [ptr] "+m" (mem), [old] "+a" (__old) \ 47 : [new]"r" (val) : "memory", "cc"); \ 48 } \ 49} while (0) 50 51#endif // SELFTEST_KVM_UTIL_ARCH_H