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