github.com/jlmucb/cloudproxy@v0.0.0-20170830161738-b5aa0b619bc4/cpvmm/vmm/vmexit/vmexit_invlpg.c (about) 1 /* 2 * Copyright (c) 2013 Intel Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * Unless required by applicable law or agreed to in writing, software 9 * distributed under the License is distributed on an "AS IS" BASIS, 10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 * See the License for the specific language governing permissions and 12 * limitations under the License. 13 */ 14 15 #include "vmm_defs.h" 16 //#include "vmcs_object.h" 17 #include "vmx_vmcs.h" 18 #include "vmcs_api.h" 19 #include "vmm_dbg.h" 20 #include "em64t_defs.h" 21 #include "vmm_events_data.h" 22 #include "guest_cpu.h" 23 24 VMEXIT_HANDLING_STATUS vmexit_invlpg(GUEST_CPU_HANDLE gcpu) 25 { 26 EVENT_GCPU_INVALIDATE_PAGE_DATA data; 27 IA32_VMX_EXIT_QUALIFICATION qualification; 28 VMCS_OBJECT* vmcs = gcpu_get_vmcs(gcpu); 29 30 qualification.Uint64 = vmcs_read(vmcs, VMCS_EXIT_INFO_QUALIFICATION); 31 data.invlpg_addr = qualification.InvlpgInstruction.Address; 32 // Return value of raising event is not important 33 event_raise( EVENT_GCPU_INVALIDATE_PAGE, gcpu, &data ); 34 // Instruction will be skipped in upper "bottom-up" handler 35 // gcpu_skip_guest_instruction(gcpu); 36 return VMEXIT_HANDLED; 37 } 38