VirtualBox

source: vbox/trunk/src/VBox/VMM/VMMAll/HWACCMAll.cpp@ 11370

Last change on this file since 11370 was 11370, checked in by vboxsync, 17 years ago

Deal with flushing of pgm pool pages when an injected event triggers faults on the stack

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1/* $Id: HWACCMAll.cpp 11370 2008-08-12 17:50:18Z vboxsync $ */
2/** @file
3 * HWACCM - All contexts.
4 */
5
6/*
7 * Copyright (C) 2006-2007 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18 * Clara, CA 95054 USA or visit http://www.sun.com if you need
19 * additional information or have any questions.
20 */
21
22
23/*******************************************************************************
24* Header Files *
25*******************************************************************************/
26#define LOG_GROUP LOG_GROUP_HWACCM
27#include <VBox/hwaccm.h>
28#include "HWACCMInternal.h"
29#include <VBox/vm.h>
30#include <VBox/x86.h>
31#include <VBox/hwacc_vmx.h>
32#include <VBox/hwacc_svm.h>
33#include <VBox/pgm.h>
34#include <VBox/pdm.h>
35#include <VBox/err.h>
36#include <VBox/log.h>
37#include <VBox/selm.h>
38#include <VBox/iom.h>
39#include <iprt/param.h>
40#include <iprt/assert.h>
41#include <iprt/asm.h>
42#include <iprt/string.h>
43#include <iprt/memobj.h>
44#include <iprt/cpuset.h>
45
46/**
47 * Invalidates a guest page
48 *
49 * @returns VBox status code.
50 * @param pVM The VM to operate on.
51 * @param GCVirt Page to invalidate
52 */
53HWACCMDECL(int) HWACCMInvalidatePage(PVM pVM, RTGCPTR GCVirt)
54{
55 /* @todo Intel for nested paging */
56#ifdef IN_RING0
57 if (pVM->hwaccm.s.svm.fSupported)
58 return SVMR0InvalidatePage(pVM, GCVirt);
59#endif
60
61 return VINF_SUCCESS;
62}
63
64/**
65 * Flushes the guest TLB
66 *
67 * @returns VBox status code.
68 * @param pVM The VM to operate on.
69 */
70HWACCMDECL(int) HWACCMFlushTLB(PVM pVM)
71{
72 /* @todo Intel for nested paging */
73 if (pVM->hwaccm.s.svm.fSupported)
74 {
75 Log(("HWACCMFlushTLB\n"));
76 pVM->hwaccm.s.svm.fForceTLBFlush = true;
77 STAM_COUNTER_INC(&pVM->hwaccm.s.StatFlushTLBManual);
78 }
79 return VINF_SUCCESS;
80}
81
82/**
83 * Checks if nested paging is enabled
84 *
85 * @returns boolean
86 * @param pVM The VM to operate on.
87 */
88HWACCMDECL(bool) HWACCMIsNestedPagingActive(PVM pVM)
89{
90 return HWACCMIsEnabled(pVM) && pVM->hwaccm.s.fNestedPaging;
91}
92
93/**
94 * Return the shadow paging mode for nested paging/ept
95 *
96 * @returns shadow paging mode
97 * @param pVM The VM to operate on.
98 */
99HWACCMDECL(PGMMODE) HWACCMGetPagingMode(PVM pVM)
100{
101 Assert(HWACCMIsNestedPagingActive(pVM));
102 if (pVM->hwaccm.s.svm.fSupported)
103 return PGMMODE_NESTED;
104 Assert(pVM->hwaccm.s.vmx.fSupported);
105 return PGMMODE_EPT;
106}
107
108/**
109 * Invalidates a guest page by physical address
110 *
111 * NOTE: Assumes the current instruction references this physical page though a virtual address!!
112 *
113 * @returns VBox status code.
114 * @param pVM The VM to operate on.
115 * @param GCPhys Page to invalidate
116 */
117HWACCMDECL(int) HWACCMInvalidatePhysPage(PVM pVM, RTGCPHYS GCPhys)
118{
119 if (!HWACCMIsNestedPagingActive(pVM))
120 return VINF_SUCCESS;
121
122#ifdef IN_RING0
123 /* @todo Intel for nested paging */
124 if (pVM->hwaccm.s.svm.fSupported)
125 {
126 SVMR0InvalidatePhysPage(pVM, GCPhys);
127 }
128#else
129 HWACCMFlushTLB(pVM);
130#endif
131 return VINF_SUCCESS;
132}
133
134/**
135 * Checks if an interrupt event is currently pending.
136 *
137 * @returns Interrupt event pending state.
138 * @param pVM The VM to operate on.
139 */
140HWACCMDECL(bool) HWACCMHasPendingIrq(PVM pVM)
141{
142 return pVM->hwaccm.s.Event.fPending;
143}
144
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette