1414#include "test_util.h"
1515
1616#include "kvm_util.h"
17+ #include "smm.h"
1718
1819#include "vmx.h"
1920#include "svm_util.h"
2021
21- #define SMRAM_SIZE 65536
22- #define SMRAM_MEMSLOT ((1 << 16) | 1)
23- #define SMRAM_PAGES (SMRAM_SIZE / PAGE_SIZE)
2422#define SMRAM_GPA 0x1000000
2523#define SMRAM_STAGE 0xfe
2624
@@ -113,18 +111,6 @@ static void guest_code(void *arg)
113111 sync_with_host (DONE );
114112}
115113
116- void inject_smi (struct kvm_vcpu * vcpu )
117- {
118- struct kvm_vcpu_events events ;
119-
120- vcpu_events_get (vcpu , & events );
121-
122- events .smi .pending = 1 ;
123- events .flags |= KVM_VCPUEVENT_VALID_SMM ;
124-
125- vcpu_events_set (vcpu , & events );
126- }
127-
128114int main (int argc , char * argv [])
129115{
130116 vm_vaddr_t nested_gva = 0 ;
@@ -140,16 +126,7 @@ int main(int argc, char *argv[])
140126 /* Create VM */
141127 vm = vm_create_with_one_vcpu (& vcpu , guest_code );
142128
143- vm_userspace_mem_region_add (vm , VM_MEM_SRC_ANONYMOUS , SMRAM_GPA ,
144- SMRAM_MEMSLOT , SMRAM_PAGES , 0 );
145- TEST_ASSERT (vm_phy_pages_alloc (vm , SMRAM_PAGES , SMRAM_GPA , SMRAM_MEMSLOT )
146- == SMRAM_GPA , "could not allocate guest physical addresses?" );
147-
148- memset (addr_gpa2hva (vm , SMRAM_GPA ), 0x0 , SMRAM_SIZE );
149- memcpy (addr_gpa2hva (vm , SMRAM_GPA ) + 0x8000 , smi_handler ,
150- sizeof (smi_handler ));
151-
152- vcpu_set_msr (vcpu , MSR_IA32_SMBASE , SMRAM_GPA );
129+ setup_smram (vm , vcpu , SMRAM_GPA , smi_handler , sizeof (smi_handler ));
153130
154131 if (kvm_has_cap (KVM_CAP_NESTED_STATE )) {
155132 if (kvm_cpu_has (X86_FEATURE_SVM ))
0 commit comments