/root/src/xen/xen/include/asm/paging.h
Line | Count | Source (jump to first uncovered line) |
1 | | /****************************************************************************** |
2 | | * include/asm-x86/paging.h |
3 | | * |
4 | | * Common interface for paging support |
5 | | * Copyright (c) 2007 Advanced Micro Devices (Wei Huang) |
6 | | * Parts of this code are Copyright (c) 2006 by XenSource Inc. |
7 | | * Parts of this code are Copyright (c) 2006 by Michael A Fetterman |
8 | | * Parts based on earlier work by Michael A Fetterman, Ian Pratt et al. |
9 | | * |
10 | | * This program is free software; you can redistribute it and/or modify |
11 | | * it under the terms of the GNU General Public License as published by |
12 | | * the Free Software Foundation; either version 2 of the License, or |
13 | | * (at your option) any later version. |
14 | | * |
15 | | * This program is distributed in the hope that it will be useful, |
16 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
18 | | * GNU General Public License for more details. |
19 | | * |
20 | | * You should have received a copy of the GNU General Public License |
21 | | * along with this program; If not, see <http://www.gnu.org/licenses/>. |
22 | | */ |
23 | | |
24 | | #ifndef _XEN_PAGING_H |
25 | | #define _XEN_PAGING_H |
26 | | |
27 | | #include <xen/mm.h> |
28 | | #include <public/domctl.h> |
29 | | #include <xen/sched.h> |
30 | | #include <xen/perfc.h> |
31 | | #include <xen/domain_page.h> |
32 | | #include <asm/flushtlb.h> |
33 | | #include <asm/domain.h> |
34 | | |
35 | | /***************************************************************************** |
36 | | * Macros to tell which paging mode a domain is in */ |
37 | | |
38 | 7.70k | #define PG_SH_shift 20 |
39 | 11.2M | #define PG_HAP_shift 21 |
40 | | /* We're in one of the shadow modes */ |
41 | | #ifdef CONFIG_SHADOW_PAGING |
42 | 7.70k | #define PG_SH_enable (1U << PG_SH_shift) |
43 | | #else |
44 | | #define PG_SH_enable 0 |
45 | | #endif |
46 | 11.2M | #define PG_HAP_enable (1U << PG_HAP_shift) |
47 | | |
48 | | /* common paging mode bits */ |
49 | 6.89M | #define PG_mode_shift 10 |
50 | | /* Refcounts based on shadow tables instead of guest tables */ |
51 | 18.4E | #define PG_refcounts (XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT << PG_mode_shift) |
52 | | /* Enable log dirty mode */ |
53 | 9.13k | #define PG_log_dirty (XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY << PG_mode_shift) |
54 | | /* Xen does p2m translation, not guest */ |
55 | 6.90M | #define PG_translate (XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE << PG_mode_shift) |
56 | | /* Xen does not steal address space from the domain for its own booking; |
57 | | * requires VT or similar mechanisms */ |
58 | 16 | #define PG_external (XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL << PG_mode_shift) |
59 | | |
60 | | /* All paging modes. */ |
61 | 1 | #define PG_MASK (PG_refcounts | PG_log_dirty | PG_translate | PG_external) |
62 | | |
63 | 0 | #define paging_mode_enabled(_d) (!!(_d)->arch.paging.mode) |
64 | 7.70k | #define paging_mode_shadow(_d) (!!((_d)->arch.paging.mode & PG_SH_enable)) |
65 | 11.2M | #define paging_mode_hap(_d) (!!((_d)->arch.paging.mode & PG_HAP_enable)) |
66 | | |
67 | 18.4E | #define paging_mode_refcounts(_d) (!!((_d)->arch.paging.mode & PG_refcounts)) |
68 | 9.13k | #define paging_mode_log_dirty(_d) (!!((_d)->arch.paging.mode & PG_log_dirty)) |
69 | 6.90M | #define paging_mode_translate(_d) (!!((_d)->arch.paging.mode & PG_translate)) |
70 | 24 | #define paging_mode_external(_d) (!!((_d)->arch.paging.mode & PG_external)) |
71 | | |
72 | | #define paging_mode_only_log_dirty(_d) \ |
73 | | (((_d)->arch.paging.mode & PG_MASK) == PG_log_dirty) |
74 | | |
75 | | /* flags used for paging debug */ |
76 | 0 | #define PAGING_DEBUG_LOGDIRTY 0 |
77 | | |
78 | | /***************************************************************************** |
79 | | * Mode-specific entry points into the shadow code. |
80 | | * |
81 | | * These shouldn't be used directly by callers; rather use the functions |
82 | | * below which will indirect through this table as appropriate. */ |
83 | | |
84 | | struct sh_emulate_ctxt; |
85 | | struct shadow_paging_mode { |
86 | | #ifdef CONFIG_SHADOW_PAGING |
87 | | void (*detach_old_tables )(struct vcpu *v); |
88 | | int (*x86_emulate_write )(struct vcpu *v, unsigned long va, |
89 | | void *src, u32 bytes, |
90 | | struct sh_emulate_ctxt *sh_ctxt); |
91 | | int (*x86_emulate_cmpxchg )(struct vcpu *v, unsigned long va, |
92 | | unsigned long old, |
93 | | unsigned long new, |
94 | | unsigned int bytes, |
95 | | struct sh_emulate_ctxt *sh_ctxt); |
96 | | bool (*write_guest_entry )(struct vcpu *v, intpte_t *p, |
97 | | intpte_t new, mfn_t gmfn); |
98 | | bool (*cmpxchg_guest_entry )(struct vcpu *v, intpte_t *p, |
99 | | intpte_t *old, intpte_t new, |
100 | | mfn_t gmfn); |
101 | | mfn_t (*make_monitor_table )(struct vcpu *v); |
102 | | void (*destroy_monitor_table )(struct vcpu *v, mfn_t mmfn); |
103 | | int (*guess_wrmap )(struct vcpu *v, |
104 | | unsigned long vaddr, mfn_t gmfn); |
105 | | void (*pagetable_dying )(struct vcpu *v, paddr_t gpa); |
106 | | #endif |
107 | | /* For outsiders to tell what mode we're in */ |
108 | | unsigned int shadow_levels; |
109 | | }; |
110 | | |
111 | | |
112 | | /************************************************/ |
113 | | /* common paging interface */ |
114 | | /************************************************/ |
115 | | struct paging_mode { |
116 | | int (*page_fault )(struct vcpu *v, unsigned long va, |
117 | | struct cpu_user_regs *regs); |
118 | | bool (*invlpg )(struct vcpu *v, unsigned long va); |
119 | | unsigned long (*gva_to_gfn )(struct vcpu *v, |
120 | | struct p2m_domain *p2m, |
121 | | unsigned long va, |
122 | | uint32_t *pfec); |
123 | | unsigned long (*p2m_ga_to_gfn )(struct vcpu *v, |
124 | | struct p2m_domain *p2m, |
125 | | unsigned long cr3, |
126 | | paddr_t ga, uint32_t *pfec, |
127 | | unsigned int *page_order); |
128 | | void (*update_cr3 )(struct vcpu *v, int do_locking); |
129 | | void (*update_paging_modes )(struct vcpu *v); |
130 | | void (*write_p2m_entry )(struct domain *d, unsigned long gfn, |
131 | | l1_pgentry_t *p, l1_pgentry_t new, |
132 | | unsigned int level); |
133 | | |
134 | | unsigned int guest_levels; |
135 | | |
136 | | /* paging support extension */ |
137 | | struct shadow_paging_mode shadow; |
138 | | }; |
139 | | |
140 | | /***************************************************************************** |
141 | | * Log dirty code */ |
142 | | |
143 | | /* get the dirty bitmap for a specific range of pfns */ |
144 | | void paging_log_dirty_range(struct domain *d, |
145 | | unsigned long begin_pfn, |
146 | | unsigned long nr, |
147 | | uint8_t *dirty_bitmap); |
148 | | |
149 | | /* enable log dirty */ |
150 | | int paging_log_dirty_enable(struct domain *d, bool_t log_global); |
151 | | |
152 | | /* log dirty initialization */ |
153 | | void paging_log_dirty_init(struct domain *d, const struct log_dirty_ops *ops); |
154 | | |
155 | | /* mark a page as dirty */ |
156 | | void paging_mark_dirty(struct domain *d, mfn_t gmfn); |
157 | | /* mark a page as dirty with taking guest pfn as parameter */ |
158 | | void paging_mark_pfn_dirty(struct domain *d, pfn_t pfn); |
159 | | |
160 | | /* is this guest page dirty? |
161 | | * This is called from inside paging code, with the paging lock held. */ |
162 | | int paging_mfn_is_dirty(struct domain *d, mfn_t gmfn); |
163 | | |
164 | | /* |
165 | | * Log-dirty radix tree indexing: |
166 | | * All tree nodes are PAGE_SIZE bytes, mapped on-demand. |
167 | | * Leaf nodes are simple bitmaps; 1 bit per guest pfn. |
168 | | * Interior nodes are arrays of LOGDIRTY_NODE_ENTRIES mfns. |
169 | | * TODO: Dynamic radix tree height. Most guests will only need 2 levels. |
170 | | * The fourth level is basically unusable on 32-bit Xen. |
171 | | * TODO2: Abstract out the radix-tree mechanics? |
172 | | */ |
173 | 0 | #define LOGDIRTY_NODE_ENTRIES (1 << PAGETABLE_ORDER) |
174 | 0 | #define L1_LOGDIRTY_IDX(pfn) (pfn_x(pfn) & ((1 << (PAGE_SHIFT + 3)) - 1)) |
175 | 0 | #define L2_LOGDIRTY_IDX(pfn) ((pfn_x(pfn) >> (PAGE_SHIFT + 3)) & \ |
176 | 0 | (LOGDIRTY_NODE_ENTRIES-1)) |
177 | 0 | #define L3_LOGDIRTY_IDX(pfn) ((pfn_x(pfn) >> (PAGE_SHIFT + 3 + PAGETABLE_ORDER)) & \ |
178 | 0 | (LOGDIRTY_NODE_ENTRIES-1)) |
179 | 0 | #define L4_LOGDIRTY_IDX(pfn) ((pfn_x(pfn) >> (PAGE_SHIFT + 3 + PAGETABLE_ORDER * 2)) & \ |
180 | 0 | (LOGDIRTY_NODE_ENTRIES-1)) |
181 | | |
182 | | /* VRAM dirty tracking support */ |
183 | | struct sh_dirty_vram { |
184 | | unsigned long begin_pfn; |
185 | | unsigned long end_pfn; |
186 | | paddr_t *sl1ma; |
187 | | uint8_t *dirty_bitmap; |
188 | | s_time_t last_dirty; |
189 | | }; |
190 | | |
191 | | /***************************************************************************** |
192 | | * Entry points into the paging-assistance code */ |
193 | | |
194 | | /* Initialize the paging resource for vcpu struct. It is called by |
195 | | * vcpu_initialise() in domain.c */ |
196 | | void paging_vcpu_init(struct vcpu *v); |
197 | | |
198 | | /* Set up the paging-assistance-specific parts of a domain struct at |
199 | | * start of day. Called for every domain from arch_domain_create() */ |
200 | | int paging_domain_init(struct domain *d, unsigned int domcr_flags); |
201 | | |
202 | | /* Handler for paging-control ops: operations from user-space to enable |
203 | | * and disable ephemeral shadow modes (test mode and log-dirty mode) and |
204 | | * manipulate the log-dirty bitmap. */ |
205 | | int paging_domctl(struct domain *d, struct xen_domctl_shadow_op *sc, |
206 | | XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl, |
207 | | bool_t resuming); |
208 | | |
209 | | /* Helper hypercall for dealing with continuations. */ |
210 | | long paging_domctl_continuation(XEN_GUEST_HANDLE_PARAM(xen_domctl_t)); |
211 | | |
212 | | /* Call when destroying a domain */ |
213 | | int paging_teardown(struct domain *d); |
214 | | |
215 | | /* Call once all of the references to the domain have gone away */ |
216 | | void paging_final_teardown(struct domain *d); |
217 | | |
218 | | /* Enable an arbitrary paging-assistance mode. Call once at domain |
219 | | * creation. */ |
220 | | int paging_enable(struct domain *d, u32 mode); |
221 | | |
222 | 364k | #define paging_get_hostmode(v) ((v)->arch.paging.mode) |
223 | 0 | #define paging_get_nestedmode(v) ((v)->arch.paging.nestedmode) |
224 | | const struct paging_mode *paging_get_mode(struct vcpu *v); |
225 | | void paging_update_nestedmode(struct vcpu *v); |
226 | | |
227 | | /* Page fault handler |
228 | | * Called from pagefault handler in Xen, and from the HVM trap handlers |
229 | | * for pagefaults. Returns 1 if this fault was an artefact of the |
230 | | * paging code (and the guest should retry) or 0 if it is not (and the |
231 | | * fault should be handled elsewhere or passed to the guest). |
232 | | * |
233 | | * Note: under shadow paging, this function handles all page faults; |
234 | | * however, for hardware-assisted paging, this function handles only |
235 | | * host page faults (i.e. nested page faults). */ |
236 | | static inline int |
237 | | paging_fault(unsigned long va, struct cpu_user_regs *regs) |
238 | 0 | { |
239 | 0 | struct vcpu *v = current; |
240 | 0 | return paging_get_hostmode(v)->page_fault(v, va, regs); |
241 | 0 | } Unexecuted instantiation: domctl.c:paging_fault Unexecuted instantiation: misc-hypercalls.c:paging_fault Unexecuted instantiation: iret.c:paging_fault Unexecuted instantiation: emul-priv-op.c:paging_fault Unexecuted instantiation: emul-inv-op.c:paging_fault Unexecuted instantiation: emul-gate-op.c:paging_fault Unexecuted instantiation: descriptor-tables.c:paging_fault Unexecuted instantiation: callback.c:paging_fault Unexecuted instantiation: backtrace.c:paging_fault Unexecuted instantiation: op_model_athlon.c:paging_fault Unexecuted instantiation: nested_ept.c:paging_fault Unexecuted instantiation: nested_hap.c:paging_fault Unexecuted instantiation: hap.c:paging_fault Unexecuted instantiation: multi.c:paging_fault Unexecuted instantiation: common.c:paging_fault Unexecuted instantiation: mem_sharing.c:paging_fault Unexecuted instantiation: mem_paging.c:paging_fault Unexecuted instantiation: guest_walk.c:paging_fault Unexecuted instantiation: altp2m.c:paging_fault Unexecuted instantiation: p2m-pod.c:paging_fault Unexecuted instantiation: p2m-ept.c:paging_fault Unexecuted instantiation: p2m-pt.c:paging_fault Unexecuted instantiation: p2m.c:paging_fault Unexecuted instantiation: paging.c:paging_fault Unexecuted instantiation: vvmx.c:paging_fault Unexecuted instantiation: vmx.c:paging_fault Unexecuted instantiation: vmcs.c:paging_fault Unexecuted instantiation: realmode.c:paging_fault Unexecuted instantiation: vmcb.c:paging_fault Unexecuted instantiation: svm.c:paging_fault Unexecuted instantiation: nestedsvm.c:paging_fault Unexecuted instantiation: intr.c:paging_fault Unexecuted instantiation: vpt.c:paging_fault Unexecuted instantiation: vpic.c:paging_fault Unexecuted instantiation: vmsi.c:paging_fault Unexecuted instantiation: vlapic.c:paging_fault Unexecuted instantiation: viridian.c:paging_fault Unexecuted instantiation: vioapic.c:paging_fault Unexecuted instantiation: stdvga.c:paging_fault Unexecuted instantiation: save.c:paging_fault Unexecuted instantiation: rtc.c:paging_fault Unexecuted instantiation: quirks.c:paging_fault Unexecuted instantiation: pmtimer.c:paging_fault Unexecuted instantiation: nestedhvm.c:paging_fault Unexecuted instantiation: mtrr.c:paging_fault Unexecuted instantiation: monitor.c:paging_fault Unexecuted instantiation: irq.c:paging_fault Unexecuted instantiation: ioreq.c:paging_fault Unexecuted instantiation: intercept.c:paging_fault Unexecuted instantiation: i8254.c:paging_fault Unexecuted instantiation: hvm.c:paging_fault Unexecuted instantiation: hpet.c:paging_fault Unexecuted instantiation: emulate.c:paging_fault Unexecuted instantiation: dm.c:paging_fault Unexecuted instantiation: vmce.c:paging_fault Unexecuted instantiation: mce_intel.c:paging_fault Unexecuted instantiation: mce.c:paging_fault Unexecuted instantiation: vpmu_intel.c:paging_fault Unexecuted instantiation: vpmu.c:paging_fault Unexecuted instantiation: intel.c:paging_fault Unexecuted instantiation: amd.c:paging_fault Unexecuted instantiation: cpu_idle.c:paging_fault Unexecuted instantiation: suspend.c:paging_fault Unexecuted instantiation: xstate.c:paging_fault Unexecuted instantiation: traps.c:paging_fault Unexecuted instantiation: time.c:paging_fault Unexecuted instantiation: smp.c:paging_fault Unexecuted instantiation: setup.c:paging_fault Unexecuted instantiation: platform_hypercall.c:paging_fault Unexecuted instantiation: physdev.c:paging_fault Unexecuted instantiation: mm.c:paging_fault Unexecuted instantiation: microcode.c:paging_fault Unexecuted instantiation: machine_kexec.c:paging_fault Unexecuted instantiation: msi.c:paging_fault Unexecuted instantiation: i387.c:paging_fault Unexecuted instantiation: hypercall.c:paging_fault Unexecuted instantiation: debug.c:paging_fault Unexecuted instantiation: crash.c:paging_fault Unexecuted instantiation: compat.c:paging_fault Unexecuted instantiation: cpuid.c:paging_fault Unexecuted instantiation: xsm_core.c:paging_fault Unexecuted instantiation: pmstat.c:paging_fault Unexecuted instantiation: iommu_guest.c:paging_fault Unexecuted instantiation: pci_amd_iommu.c:paging_fault Unexecuted instantiation: iommu_map.c:paging_fault Unexecuted instantiation: vtd.c:paging_fault Unexecuted instantiation: pci.c:paging_fault Unexecuted instantiation: io.c:paging_fault Unexecuted instantiation: iommu.c:paging_fault Unexecuted instantiation: cpufreq.c:paging_fault Unexecuted instantiation: console.c:paging_fault Unexecuted instantiation: libelf-loader.c:paging_fault Unexecuted instantiation: llvm.c:paging_fault Unexecuted instantiation: tmem_control.c:paging_fault Unexecuted instantiation: tmem_xen.c:paging_fault Unexecuted instantiation: tmem.c:paging_fault Unexecuted instantiation: xenoprof.c:paging_fault Unexecuted instantiation: vm_event.c:paging_fault Unexecuted instantiation: sysctl.c:paging_fault Unexecuted instantiation: symbols.c:paging_fault Unexecuted instantiation: spinlock.c:paging_fault Unexecuted instantiation: schedule.c:paging_fault Unexecuted instantiation: sched_rt.c:paging_fault Unexecuted instantiation: sched_arinc653.c:paging_fault Unexecuted instantiation: page_alloc.c:paging_fault Unexecuted instantiation: multicall.c:paging_fault Unexecuted instantiation: memory.c:paging_fault Unexecuted instantiation: mem_access.c:paging_fault Unexecuted instantiation: kimage.c:paging_fault Unexecuted instantiation: kexec.c:paging_fault Unexecuted instantiation: kernel.c:paging_fault Unexecuted instantiation: guestcopy.c:paging_fault Unexecuted instantiation: grant_table.c:paging_fault Unexecuted instantiation: event_fifo.c:paging_fault Unexecuted instantiation: event_channel.c:paging_fault Unexecuted instantiation: domain.c:paging_fault Unexecuted instantiation: ro-page-fault.c:paging_fault |
242 | | |
243 | | /* Handle invlpg requests on vcpus. */ |
244 | | void paging_invlpg(struct vcpu *v, unsigned long va); |
245 | | |
246 | | /* |
247 | | * Translate a guest virtual address to the frame number that the |
248 | | * *guest* pagetables would map it to. Returns INVALID_GFN if the guest |
249 | | * tables don't map this address for this kind of access. |
250 | | * *pfec is used to determine which kind of access this is when |
251 | | * walking the tables. The caller should set the PFEC_page_present bit |
252 | | * in *pfec; in the failure case, that bit will be cleared if appropriate. |
253 | | * |
254 | | * SDM Intel 64 Volume 3, Chapter Paging, PAGE-FAULT EXCEPTIONS: |
255 | | * The PFEC_insn_fetch flag is set only when NX or SMEP are enabled. |
256 | | */ |
257 | | unsigned long paging_gva_to_gfn(struct vcpu *v, |
258 | | unsigned long va, |
259 | | uint32_t *pfec); |
260 | | |
261 | | /* Translate a guest address using a particular CR3 value. This is used |
262 | | * to by nested HAP code, to walk the guest-supplied NPT tables as if |
263 | | * they were pagetables. |
264 | | * Use 'paddr_t' for the guest address so it won't overflow when |
265 | | * l1 or l2 guest is in 32bit PAE mode. |
266 | | * If the GFN returned is not INVALID_GFN, *page_order gives |
267 | | * the size of the superpage (if any) it was found in. */ |
268 | | static inline unsigned long paging_ga_to_gfn_cr3(struct vcpu *v, |
269 | | unsigned long cr3, |
270 | | paddr_t ga, |
271 | | uint32_t *pfec, |
272 | | unsigned int *page_order) |
273 | 0 | { |
274 | 0 | struct p2m_domain *p2m = v->domain->arch.p2m; |
275 | 0 | return paging_get_hostmode(v)->p2m_ga_to_gfn(v, p2m, cr3, ga, pfec, |
276 | 0 | page_order); |
277 | 0 | } Unexecuted instantiation: ro-page-fault.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: misc-hypercalls.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: iret.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: emul-priv-op.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: emul-inv-op.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: emul-gate-op.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: descriptor-tables.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: callback.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: backtrace.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: op_model_athlon.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: nested_ept.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: nested_hap.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: hap.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: multi.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: common.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mem_sharing.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mem_paging.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: guest_walk.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: altp2m.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: p2m-pod.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: p2m-ept.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: p2m-pt.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: p2m.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: paging.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vvmx.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vmx.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vmcs.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: realmode.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vmcb.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: svm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: nestedsvm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: intr.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vpt.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vpic.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vmsi.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vlapic.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: viridian.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vioapic.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: stdvga.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: save.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: rtc.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: quirks.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: pmtimer.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: nestedhvm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mtrr.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: monitor.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: irq.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: ioreq.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: intercept.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: i8254.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: hvm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: hpet.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: emulate.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: dm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vmce.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mce_intel.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mce.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vpmu_intel.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vpmu.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: intel.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: amd.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: cpu_idle.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: suspend.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: xstate.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: traps.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: time.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: smp.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: setup.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: platform_hypercall.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: physdev.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: microcode.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: machine_kexec.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: msi.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: i387.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: hypercall.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: debug.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: crash.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: compat.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: cpuid.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: xsm_core.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: pmstat.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: iommu_guest.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: pci_amd_iommu.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: iommu_map.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vtd.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: pci.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: io.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: iommu.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: cpufreq.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: console.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: libelf-loader.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: llvm.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: tmem_control.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: tmem_xen.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: tmem.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: xenoprof.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: vm_event.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: sysctl.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: symbols.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: spinlock.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: schedule.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: sched_rt.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: sched_arinc653.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: page_alloc.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: multicall.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: memory.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: mem_access.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: kimage.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: kexec.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: kernel.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: guestcopy.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: grant_table.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: event_fifo.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: event_channel.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: domain.c:paging_ga_to_gfn_cr3 Unexecuted instantiation: domctl.c:paging_ga_to_gfn_cr3 |
278 | | |
279 | | /* Update all the things that are derived from the guest's CR3. |
280 | | * Called when the guest changes CR3; the caller can then use v->arch.cr3 |
281 | | * as the value to load into the host CR3 to schedule this vcpu */ |
282 | | static inline void paging_update_cr3(struct vcpu *v) |
283 | 0 | { |
284 | 0 | paging_get_hostmode(v)->update_cr3(v, 1); |
285 | 0 | } Unexecuted instantiation: domctl.c:paging_update_cr3 Unexecuted instantiation: misc-hypercalls.c:paging_update_cr3 Unexecuted instantiation: domain.c:paging_update_cr3 Unexecuted instantiation: event_channel.c:paging_update_cr3 Unexecuted instantiation: event_fifo.c:paging_update_cr3 Unexecuted instantiation: grant_table.c:paging_update_cr3 Unexecuted instantiation: guestcopy.c:paging_update_cr3 Unexecuted instantiation: kernel.c:paging_update_cr3 Unexecuted instantiation: kexec.c:paging_update_cr3 Unexecuted instantiation: kimage.c:paging_update_cr3 Unexecuted instantiation: mem_access.c:paging_update_cr3 Unexecuted instantiation: memory.c:paging_update_cr3 Unexecuted instantiation: multicall.c:paging_update_cr3 Unexecuted instantiation: page_alloc.c:paging_update_cr3 Unexecuted instantiation: sched_arinc653.c:paging_update_cr3 Unexecuted instantiation: sched_rt.c:paging_update_cr3 Unexecuted instantiation: schedule.c:paging_update_cr3 Unexecuted instantiation: spinlock.c:paging_update_cr3 Unexecuted instantiation: symbols.c:paging_update_cr3 Unexecuted instantiation: sysctl.c:paging_update_cr3 Unexecuted instantiation: vm_event.c:paging_update_cr3 Unexecuted instantiation: xenoprof.c:paging_update_cr3 Unexecuted instantiation: tmem.c:paging_update_cr3 Unexecuted instantiation: tmem_xen.c:paging_update_cr3 Unexecuted instantiation: tmem_control.c:paging_update_cr3 Unexecuted instantiation: llvm.c:paging_update_cr3 Unexecuted instantiation: libelf-loader.c:paging_update_cr3 Unexecuted instantiation: console.c:paging_update_cr3 Unexecuted instantiation: cpufreq.c:paging_update_cr3 Unexecuted instantiation: ro-page-fault.c:paging_update_cr3 Unexecuted instantiation: iommu.c:paging_update_cr3 Unexecuted instantiation: io.c:paging_update_cr3 Unexecuted instantiation: pci.c:paging_update_cr3 Unexecuted instantiation: vtd.c:paging_update_cr3 Unexecuted instantiation: iommu_map.c:paging_update_cr3 Unexecuted instantiation: pci_amd_iommu.c:paging_update_cr3 Unexecuted instantiation: iommu_guest.c:paging_update_cr3 Unexecuted instantiation: pmstat.c:paging_update_cr3 Unexecuted instantiation: xsm_core.c:paging_update_cr3 Unexecuted instantiation: cpuid.c:paging_update_cr3 Unexecuted instantiation: compat.c:paging_update_cr3 Unexecuted instantiation: crash.c:paging_update_cr3 Unexecuted instantiation: debug.c:paging_update_cr3 Unexecuted instantiation: hypercall.c:paging_update_cr3 Unexecuted instantiation: i387.c:paging_update_cr3 Unexecuted instantiation: msi.c:paging_update_cr3 Unexecuted instantiation: machine_kexec.c:paging_update_cr3 Unexecuted instantiation: microcode.c:paging_update_cr3 Unexecuted instantiation: mm.c:paging_update_cr3 Unexecuted instantiation: physdev.c:paging_update_cr3 Unexecuted instantiation: platform_hypercall.c:paging_update_cr3 Unexecuted instantiation: setup.c:paging_update_cr3 Unexecuted instantiation: smp.c:paging_update_cr3 Unexecuted instantiation: time.c:paging_update_cr3 Unexecuted instantiation: traps.c:paging_update_cr3 Unexecuted instantiation: xstate.c:paging_update_cr3 Unexecuted instantiation: suspend.c:paging_update_cr3 Unexecuted instantiation: cpu_idle.c:paging_update_cr3 Unexecuted instantiation: amd.c:paging_update_cr3 Unexecuted instantiation: intel.c:paging_update_cr3 Unexecuted instantiation: vpmu.c:paging_update_cr3 Unexecuted instantiation: vpmu_intel.c:paging_update_cr3 Unexecuted instantiation: mce.c:paging_update_cr3 Unexecuted instantiation: mce_intel.c:paging_update_cr3 Unexecuted instantiation: vmce.c:paging_update_cr3 Unexecuted instantiation: dm.c:paging_update_cr3 Unexecuted instantiation: emulate.c:paging_update_cr3 Unexecuted instantiation: hpet.c:paging_update_cr3 Unexecuted instantiation: hvm.c:paging_update_cr3 Unexecuted instantiation: i8254.c:paging_update_cr3 Unexecuted instantiation: intercept.c:paging_update_cr3 Unexecuted instantiation: ioreq.c:paging_update_cr3 Unexecuted instantiation: irq.c:paging_update_cr3 Unexecuted instantiation: monitor.c:paging_update_cr3 Unexecuted instantiation: mtrr.c:paging_update_cr3 Unexecuted instantiation: nestedhvm.c:paging_update_cr3 Unexecuted instantiation: pmtimer.c:paging_update_cr3 Unexecuted instantiation: quirks.c:paging_update_cr3 Unexecuted instantiation: rtc.c:paging_update_cr3 Unexecuted instantiation: save.c:paging_update_cr3 Unexecuted instantiation: stdvga.c:paging_update_cr3 Unexecuted instantiation: vioapic.c:paging_update_cr3 Unexecuted instantiation: viridian.c:paging_update_cr3 Unexecuted instantiation: vlapic.c:paging_update_cr3 Unexecuted instantiation: vmsi.c:paging_update_cr3 Unexecuted instantiation: vpic.c:paging_update_cr3 Unexecuted instantiation: vpt.c:paging_update_cr3 Unexecuted instantiation: intr.c:paging_update_cr3 Unexecuted instantiation: nestedsvm.c:paging_update_cr3 Unexecuted instantiation: svm.c:paging_update_cr3 Unexecuted instantiation: vmcb.c:paging_update_cr3 Unexecuted instantiation: realmode.c:paging_update_cr3 Unexecuted instantiation: vmcs.c:paging_update_cr3 Unexecuted instantiation: vmx.c:paging_update_cr3 Unexecuted instantiation: vvmx.c:paging_update_cr3 Unexecuted instantiation: paging.c:paging_update_cr3 Unexecuted instantiation: p2m.c:paging_update_cr3 Unexecuted instantiation: p2m-pt.c:paging_update_cr3 Unexecuted instantiation: p2m-ept.c:paging_update_cr3 Unexecuted instantiation: p2m-pod.c:paging_update_cr3 Unexecuted instantiation: altp2m.c:paging_update_cr3 Unexecuted instantiation: guest_walk.c:paging_update_cr3 Unexecuted instantiation: mem_paging.c:paging_update_cr3 Unexecuted instantiation: mem_sharing.c:paging_update_cr3 Unexecuted instantiation: common.c:paging_update_cr3 Unexecuted instantiation: multi.c:paging_update_cr3 Unexecuted instantiation: hap.c:paging_update_cr3 Unexecuted instantiation: nested_hap.c:paging_update_cr3 Unexecuted instantiation: nested_ept.c:paging_update_cr3 Unexecuted instantiation: op_model_athlon.c:paging_update_cr3 Unexecuted instantiation: backtrace.c:paging_update_cr3 Unexecuted instantiation: callback.c:paging_update_cr3 Unexecuted instantiation: descriptor-tables.c:paging_update_cr3 Unexecuted instantiation: emul-gate-op.c:paging_update_cr3 Unexecuted instantiation: emul-inv-op.c:paging_update_cr3 Unexecuted instantiation: emul-priv-op.c:paging_update_cr3 Unexecuted instantiation: iret.c:paging_update_cr3 |
286 | | |
287 | | /* Update all the things that are derived from the guest's CR0/CR3/CR4. |
288 | | * Called to initialize paging structures if the paging mode |
289 | | * has changed, and when bringing up a VCPU for the first time. */ |
290 | | static inline void paging_update_paging_modes(struct vcpu *v) |
291 | 96 | { |
292 | 96 | paging_get_hostmode(v)->update_paging_modes(v); |
293 | 96 | } Unexecuted instantiation: intel.c:paging_update_paging_modes Unexecuted instantiation: ro-page-fault.c:paging_update_paging_modes Unexecuted instantiation: misc-hypercalls.c:paging_update_paging_modes Unexecuted instantiation: iret.c:paging_update_paging_modes Unexecuted instantiation: emul-priv-op.c:paging_update_paging_modes Unexecuted instantiation: emul-inv-op.c:paging_update_paging_modes Unexecuted instantiation: emul-gate-op.c:paging_update_paging_modes Unexecuted instantiation: descriptor-tables.c:paging_update_paging_modes Unexecuted instantiation: callback.c:paging_update_paging_modes Unexecuted instantiation: backtrace.c:paging_update_paging_modes Unexecuted instantiation: op_model_athlon.c:paging_update_paging_modes Unexecuted instantiation: nested_ept.c:paging_update_paging_modes Unexecuted instantiation: nested_hap.c:paging_update_paging_modes Unexecuted instantiation: hap.c:paging_update_paging_modes Unexecuted instantiation: multi.c:paging_update_paging_modes Unexecuted instantiation: common.c:paging_update_paging_modes Unexecuted instantiation: mem_sharing.c:paging_update_paging_modes Unexecuted instantiation: mem_paging.c:paging_update_paging_modes Unexecuted instantiation: guest_walk.c:paging_update_paging_modes Unexecuted instantiation: altp2m.c:paging_update_paging_modes Unexecuted instantiation: p2m-pod.c:paging_update_paging_modes Unexecuted instantiation: p2m-ept.c:paging_update_paging_modes Unexecuted instantiation: p2m-pt.c:paging_update_paging_modes Unexecuted instantiation: p2m.c:paging_update_paging_modes Unexecuted instantiation: paging.c:paging_update_paging_modes Unexecuted instantiation: vvmx.c:paging_update_paging_modes Unexecuted instantiation: vmx.c:paging_update_paging_modes vmcs.c:paging_update_paging_modes Line | Count | Source | 291 | 12 | { | 292 | 12 | paging_get_hostmode(v)->update_paging_modes(v); | 293 | 12 | } |
Unexecuted instantiation: realmode.c:paging_update_paging_modes Unexecuted instantiation: vmcb.c:paging_update_paging_modes Unexecuted instantiation: nestedsvm.c:paging_update_paging_modes Unexecuted instantiation: intr.c:paging_update_paging_modes Unexecuted instantiation: vpt.c:paging_update_paging_modes Unexecuted instantiation: vpic.c:paging_update_paging_modes Unexecuted instantiation: vmsi.c:paging_update_paging_modes Unexecuted instantiation: vlapic.c:paging_update_paging_modes Unexecuted instantiation: viridian.c:paging_update_paging_modes Unexecuted instantiation: vioapic.c:paging_update_paging_modes Unexecuted instantiation: stdvga.c:paging_update_paging_modes Unexecuted instantiation: save.c:paging_update_paging_modes Unexecuted instantiation: rtc.c:paging_update_paging_modes Unexecuted instantiation: quirks.c:paging_update_paging_modes Unexecuted instantiation: pmtimer.c:paging_update_paging_modes Unexecuted instantiation: nestedhvm.c:paging_update_paging_modes Unexecuted instantiation: mtrr.c:paging_update_paging_modes Unexecuted instantiation: monitor.c:paging_update_paging_modes Unexecuted instantiation: irq.c:paging_update_paging_modes Unexecuted instantiation: ioreq.c:paging_update_paging_modes Unexecuted instantiation: intercept.c:paging_update_paging_modes Unexecuted instantiation: i8254.c:paging_update_paging_modes hvm.c:paging_update_paging_modes Line | Count | Source | 291 | 83 | { | 292 | 83 | paging_get_hostmode(v)->update_paging_modes(v); | 293 | 83 | } |
Unexecuted instantiation: hpet.c:paging_update_paging_modes Unexecuted instantiation: emulate.c:paging_update_paging_modes Unexecuted instantiation: dm.c:paging_update_paging_modes Unexecuted instantiation: vmce.c:paging_update_paging_modes Unexecuted instantiation: mce_intel.c:paging_update_paging_modes Unexecuted instantiation: mce.c:paging_update_paging_modes Unexecuted instantiation: vpmu_intel.c:paging_update_paging_modes Unexecuted instantiation: vpmu.c:paging_update_paging_modes Unexecuted instantiation: svm.c:paging_update_paging_modes Unexecuted instantiation: amd.c:paging_update_paging_modes Unexecuted instantiation: cpu_idle.c:paging_update_paging_modes Unexecuted instantiation: suspend.c:paging_update_paging_modes Unexecuted instantiation: xstate.c:paging_update_paging_modes Unexecuted instantiation: traps.c:paging_update_paging_modes Unexecuted instantiation: time.c:paging_update_paging_modes Unexecuted instantiation: smp.c:paging_update_paging_modes Unexecuted instantiation: setup.c:paging_update_paging_modes Unexecuted instantiation: platform_hypercall.c:paging_update_paging_modes Unexecuted instantiation: physdev.c:paging_update_paging_modes Unexecuted instantiation: mm.c:paging_update_paging_modes Unexecuted instantiation: microcode.c:paging_update_paging_modes Unexecuted instantiation: machine_kexec.c:paging_update_paging_modes Unexecuted instantiation: msi.c:paging_update_paging_modes Unexecuted instantiation: i387.c:paging_update_paging_modes Unexecuted instantiation: hypercall.c:paging_update_paging_modes Unexecuted instantiation: debug.c:paging_update_paging_modes Unexecuted instantiation: crash.c:paging_update_paging_modes Unexecuted instantiation: compat.c:paging_update_paging_modes Unexecuted instantiation: cpuid.c:paging_update_paging_modes Unexecuted instantiation: xsm_core.c:paging_update_paging_modes Unexecuted instantiation: pmstat.c:paging_update_paging_modes Unexecuted instantiation: iommu_guest.c:paging_update_paging_modes Unexecuted instantiation: pci_amd_iommu.c:paging_update_paging_modes Unexecuted instantiation: iommu_map.c:paging_update_paging_modes Unexecuted instantiation: vtd.c:paging_update_paging_modes Unexecuted instantiation: pci.c:paging_update_paging_modes Unexecuted instantiation: io.c:paging_update_paging_modes Unexecuted instantiation: iommu.c:paging_update_paging_modes Unexecuted instantiation: cpufreq.c:paging_update_paging_modes Unexecuted instantiation: console.c:paging_update_paging_modes Unexecuted instantiation: libelf-loader.c:paging_update_paging_modes Unexecuted instantiation: llvm.c:paging_update_paging_modes Unexecuted instantiation: tmem_control.c:paging_update_paging_modes Unexecuted instantiation: tmem_xen.c:paging_update_paging_modes Unexecuted instantiation: tmem.c:paging_update_paging_modes Unexecuted instantiation: xenoprof.c:paging_update_paging_modes Unexecuted instantiation: vm_event.c:paging_update_paging_modes Unexecuted instantiation: sysctl.c:paging_update_paging_modes Unexecuted instantiation: symbols.c:paging_update_paging_modes Unexecuted instantiation: spinlock.c:paging_update_paging_modes Unexecuted instantiation: schedule.c:paging_update_paging_modes Unexecuted instantiation: sched_rt.c:paging_update_paging_modes Unexecuted instantiation: sched_arinc653.c:paging_update_paging_modes Unexecuted instantiation: page_alloc.c:paging_update_paging_modes Unexecuted instantiation: multicall.c:paging_update_paging_modes Unexecuted instantiation: memory.c:paging_update_paging_modes Unexecuted instantiation: mem_access.c:paging_update_paging_modes Unexecuted instantiation: kimage.c:paging_update_paging_modes Unexecuted instantiation: kexec.c:paging_update_paging_modes Unexecuted instantiation: kernel.c:paging_update_paging_modes Unexecuted instantiation: guestcopy.c:paging_update_paging_modes Unexecuted instantiation: grant_table.c:paging_update_paging_modes Unexecuted instantiation: event_fifo.c:paging_update_paging_modes Unexecuted instantiation: event_channel.c:paging_update_paging_modes domain.c:paging_update_paging_modes Line | Count | Source | 291 | 1 | { | 292 | 1 | paging_get_hostmode(v)->update_paging_modes(v); | 293 | 1 | } |
Unexecuted instantiation: domctl.c:paging_update_paging_modes |
294 | | |
295 | | |
296 | | /* |
297 | | * Write a new value into the guest pagetable, and update the |
298 | | * paging-assistance state appropriately. Returns false if we page-faulted, |
299 | | * true for success. |
300 | | */ |
301 | | static inline bool paging_write_guest_entry( |
302 | | struct vcpu *v, intpte_t *p, intpte_t new, mfn_t gmfn) |
303 | 0 | { |
304 | 0 | #ifdef CONFIG_SHADOW_PAGING |
305 | 0 | if ( unlikely(paging_mode_shadow(v->domain)) && paging_get_hostmode(v) ) |
306 | 0 | return paging_get_hostmode(v)->shadow.write_guest_entry(v, p, new, |
307 | 0 | gmfn); |
308 | 0 | #endif |
309 | 0 | return !__copy_to_user(p, &new, sizeof(new)); |
310 | 0 | } Unexecuted instantiation: misc-hypercalls.c:paging_write_guest_entry Unexecuted instantiation: domctl.c:paging_write_guest_entry Unexecuted instantiation: domain.c:paging_write_guest_entry Unexecuted instantiation: event_channel.c:paging_write_guest_entry Unexecuted instantiation: event_fifo.c:paging_write_guest_entry Unexecuted instantiation: grant_table.c:paging_write_guest_entry Unexecuted instantiation: guestcopy.c:paging_write_guest_entry Unexecuted instantiation: kernel.c:paging_write_guest_entry Unexecuted instantiation: kexec.c:paging_write_guest_entry Unexecuted instantiation: kimage.c:paging_write_guest_entry Unexecuted instantiation: mem_access.c:paging_write_guest_entry Unexecuted instantiation: memory.c:paging_write_guest_entry Unexecuted instantiation: multicall.c:paging_write_guest_entry Unexecuted instantiation: page_alloc.c:paging_write_guest_entry Unexecuted instantiation: sched_arinc653.c:paging_write_guest_entry Unexecuted instantiation: sched_rt.c:paging_write_guest_entry Unexecuted instantiation: schedule.c:paging_write_guest_entry Unexecuted instantiation: spinlock.c:paging_write_guest_entry Unexecuted instantiation: symbols.c:paging_write_guest_entry Unexecuted instantiation: sysctl.c:paging_write_guest_entry Unexecuted instantiation: vm_event.c:paging_write_guest_entry Unexecuted instantiation: xenoprof.c:paging_write_guest_entry Unexecuted instantiation: tmem.c:paging_write_guest_entry Unexecuted instantiation: tmem_xen.c:paging_write_guest_entry Unexecuted instantiation: tmem_control.c:paging_write_guest_entry Unexecuted instantiation: llvm.c:paging_write_guest_entry Unexecuted instantiation: libelf-loader.c:paging_write_guest_entry Unexecuted instantiation: console.c:paging_write_guest_entry Unexecuted instantiation: cpufreq.c:paging_write_guest_entry Unexecuted instantiation: iommu.c:paging_write_guest_entry Unexecuted instantiation: io.c:paging_write_guest_entry Unexecuted instantiation: pci.c:paging_write_guest_entry Unexecuted instantiation: vtd.c:paging_write_guest_entry Unexecuted instantiation: iommu_map.c:paging_write_guest_entry Unexecuted instantiation: pci_amd_iommu.c:paging_write_guest_entry Unexecuted instantiation: iommu_guest.c:paging_write_guest_entry Unexecuted instantiation: pmstat.c:paging_write_guest_entry Unexecuted instantiation: xsm_core.c:paging_write_guest_entry Unexecuted instantiation: cpuid.c:paging_write_guest_entry Unexecuted instantiation: compat.c:paging_write_guest_entry Unexecuted instantiation: crash.c:paging_write_guest_entry Unexecuted instantiation: debug.c:paging_write_guest_entry Unexecuted instantiation: hypercall.c:paging_write_guest_entry Unexecuted instantiation: i387.c:paging_write_guest_entry Unexecuted instantiation: msi.c:paging_write_guest_entry Unexecuted instantiation: machine_kexec.c:paging_write_guest_entry Unexecuted instantiation: microcode.c:paging_write_guest_entry Unexecuted instantiation: mm.c:paging_write_guest_entry Unexecuted instantiation: physdev.c:paging_write_guest_entry Unexecuted instantiation: platform_hypercall.c:paging_write_guest_entry Unexecuted instantiation: setup.c:paging_write_guest_entry Unexecuted instantiation: smp.c:paging_write_guest_entry Unexecuted instantiation: time.c:paging_write_guest_entry Unexecuted instantiation: traps.c:paging_write_guest_entry Unexecuted instantiation: xstate.c:paging_write_guest_entry Unexecuted instantiation: suspend.c:paging_write_guest_entry Unexecuted instantiation: cpu_idle.c:paging_write_guest_entry Unexecuted instantiation: amd.c:paging_write_guest_entry Unexecuted instantiation: intel.c:paging_write_guest_entry Unexecuted instantiation: vpmu.c:paging_write_guest_entry Unexecuted instantiation: ro-page-fault.c:paging_write_guest_entry Unexecuted instantiation: mce.c:paging_write_guest_entry Unexecuted instantiation: mce_intel.c:paging_write_guest_entry Unexecuted instantiation: vmce.c:paging_write_guest_entry Unexecuted instantiation: dm.c:paging_write_guest_entry Unexecuted instantiation: emulate.c:paging_write_guest_entry Unexecuted instantiation: hpet.c:paging_write_guest_entry Unexecuted instantiation: hvm.c:paging_write_guest_entry Unexecuted instantiation: i8254.c:paging_write_guest_entry Unexecuted instantiation: intercept.c:paging_write_guest_entry Unexecuted instantiation: ioreq.c:paging_write_guest_entry Unexecuted instantiation: irq.c:paging_write_guest_entry Unexecuted instantiation: monitor.c:paging_write_guest_entry Unexecuted instantiation: mtrr.c:paging_write_guest_entry Unexecuted instantiation: nestedhvm.c:paging_write_guest_entry Unexecuted instantiation: pmtimer.c:paging_write_guest_entry Unexecuted instantiation: quirks.c:paging_write_guest_entry Unexecuted instantiation: rtc.c:paging_write_guest_entry Unexecuted instantiation: save.c:paging_write_guest_entry Unexecuted instantiation: stdvga.c:paging_write_guest_entry Unexecuted instantiation: vioapic.c:paging_write_guest_entry Unexecuted instantiation: viridian.c:paging_write_guest_entry Unexecuted instantiation: vlapic.c:paging_write_guest_entry Unexecuted instantiation: vmsi.c:paging_write_guest_entry Unexecuted instantiation: vpic.c:paging_write_guest_entry Unexecuted instantiation: vpt.c:paging_write_guest_entry Unexecuted instantiation: intr.c:paging_write_guest_entry Unexecuted instantiation: nestedsvm.c:paging_write_guest_entry Unexecuted instantiation: svm.c:paging_write_guest_entry Unexecuted instantiation: vmcb.c:paging_write_guest_entry Unexecuted instantiation: realmode.c:paging_write_guest_entry Unexecuted instantiation: vmcs.c:paging_write_guest_entry Unexecuted instantiation: vmx.c:paging_write_guest_entry Unexecuted instantiation: vvmx.c:paging_write_guest_entry Unexecuted instantiation: paging.c:paging_write_guest_entry Unexecuted instantiation: p2m.c:paging_write_guest_entry Unexecuted instantiation: p2m-pt.c:paging_write_guest_entry Unexecuted instantiation: p2m-ept.c:paging_write_guest_entry Unexecuted instantiation: p2m-pod.c:paging_write_guest_entry Unexecuted instantiation: altp2m.c:paging_write_guest_entry Unexecuted instantiation: guest_walk.c:paging_write_guest_entry Unexecuted instantiation: mem_paging.c:paging_write_guest_entry Unexecuted instantiation: mem_sharing.c:paging_write_guest_entry Unexecuted instantiation: common.c:paging_write_guest_entry Unexecuted instantiation: multi.c:paging_write_guest_entry Unexecuted instantiation: hap.c:paging_write_guest_entry Unexecuted instantiation: nested_hap.c:paging_write_guest_entry Unexecuted instantiation: nested_ept.c:paging_write_guest_entry Unexecuted instantiation: op_model_athlon.c:paging_write_guest_entry Unexecuted instantiation: backtrace.c:paging_write_guest_entry Unexecuted instantiation: callback.c:paging_write_guest_entry Unexecuted instantiation: descriptor-tables.c:paging_write_guest_entry Unexecuted instantiation: emul-gate-op.c:paging_write_guest_entry Unexecuted instantiation: emul-inv-op.c:paging_write_guest_entry Unexecuted instantiation: emul-priv-op.c:paging_write_guest_entry Unexecuted instantiation: iret.c:paging_write_guest_entry Unexecuted instantiation: vpmu_intel.c:paging_write_guest_entry |
311 | | |
312 | | |
313 | | /* |
314 | | * Cmpxchg a new value into the guest pagetable, and update the |
315 | | * paging-assistance state appropriately. Returns false if we page-faulted, |
316 | | * true if not. N.B. caller should check the value of "old" to see if the |
317 | | * cmpxchg itself was successful. |
318 | | */ |
319 | | static inline bool paging_cmpxchg_guest_entry( |
320 | | struct vcpu *v, intpte_t *p, intpte_t *old, intpte_t new, mfn_t gmfn) |
321 | 0 | { |
322 | 0 | #ifdef CONFIG_SHADOW_PAGING |
323 | 0 | if ( unlikely(paging_mode_shadow(v->domain)) && paging_get_hostmode(v) ) |
324 | 0 | return paging_get_hostmode(v)->shadow.cmpxchg_guest_entry(v, p, old, |
325 | 0 | new, gmfn); |
326 | 0 | #endif |
327 | 0 | return !cmpxchg_user(p, *old, new); |
328 | 0 | } Unexecuted instantiation: ro-page-fault.c:paging_cmpxchg_guest_entry Unexecuted instantiation: misc-hypercalls.c:paging_cmpxchg_guest_entry Unexecuted instantiation: iret.c:paging_cmpxchg_guest_entry Unexecuted instantiation: emul-priv-op.c:paging_cmpxchg_guest_entry Unexecuted instantiation: emul-inv-op.c:paging_cmpxchg_guest_entry Unexecuted instantiation: emul-gate-op.c:paging_cmpxchg_guest_entry Unexecuted instantiation: descriptor-tables.c:paging_cmpxchg_guest_entry Unexecuted instantiation: callback.c:paging_cmpxchg_guest_entry Unexecuted instantiation: backtrace.c:paging_cmpxchg_guest_entry Unexecuted instantiation: op_model_athlon.c:paging_cmpxchg_guest_entry Unexecuted instantiation: nested_ept.c:paging_cmpxchg_guest_entry Unexecuted instantiation: nested_hap.c:paging_cmpxchg_guest_entry Unexecuted instantiation: hap.c:paging_cmpxchg_guest_entry Unexecuted instantiation: multi.c:paging_cmpxchg_guest_entry Unexecuted instantiation: common.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mem_sharing.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mem_paging.c:paging_cmpxchg_guest_entry Unexecuted instantiation: guest_walk.c:paging_cmpxchg_guest_entry Unexecuted instantiation: altp2m.c:paging_cmpxchg_guest_entry Unexecuted instantiation: p2m-pod.c:paging_cmpxchg_guest_entry Unexecuted instantiation: p2m-ept.c:paging_cmpxchg_guest_entry Unexecuted instantiation: p2m-pt.c:paging_cmpxchg_guest_entry Unexecuted instantiation: p2m.c:paging_cmpxchg_guest_entry Unexecuted instantiation: paging.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vvmx.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vmx.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vmcs.c:paging_cmpxchg_guest_entry Unexecuted instantiation: realmode.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vmcb.c:paging_cmpxchg_guest_entry Unexecuted instantiation: svm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: nestedsvm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: intr.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vpt.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vpic.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vmsi.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vlapic.c:paging_cmpxchg_guest_entry Unexecuted instantiation: viridian.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vioapic.c:paging_cmpxchg_guest_entry Unexecuted instantiation: stdvga.c:paging_cmpxchg_guest_entry Unexecuted instantiation: save.c:paging_cmpxchg_guest_entry Unexecuted instantiation: rtc.c:paging_cmpxchg_guest_entry Unexecuted instantiation: quirks.c:paging_cmpxchg_guest_entry Unexecuted instantiation: pmtimer.c:paging_cmpxchg_guest_entry Unexecuted instantiation: nestedhvm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mtrr.c:paging_cmpxchg_guest_entry Unexecuted instantiation: monitor.c:paging_cmpxchg_guest_entry Unexecuted instantiation: irq.c:paging_cmpxchg_guest_entry Unexecuted instantiation: ioreq.c:paging_cmpxchg_guest_entry Unexecuted instantiation: intercept.c:paging_cmpxchg_guest_entry Unexecuted instantiation: i8254.c:paging_cmpxchg_guest_entry Unexecuted instantiation: hvm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: hpet.c:paging_cmpxchg_guest_entry Unexecuted instantiation: emulate.c:paging_cmpxchg_guest_entry Unexecuted instantiation: dm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vmce.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mce_intel.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mce.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vpmu_intel.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vpmu.c:paging_cmpxchg_guest_entry Unexecuted instantiation: intel.c:paging_cmpxchg_guest_entry Unexecuted instantiation: amd.c:paging_cmpxchg_guest_entry Unexecuted instantiation: cpu_idle.c:paging_cmpxchg_guest_entry Unexecuted instantiation: suspend.c:paging_cmpxchg_guest_entry Unexecuted instantiation: xstate.c:paging_cmpxchg_guest_entry Unexecuted instantiation: traps.c:paging_cmpxchg_guest_entry Unexecuted instantiation: time.c:paging_cmpxchg_guest_entry Unexecuted instantiation: smp.c:paging_cmpxchg_guest_entry Unexecuted instantiation: setup.c:paging_cmpxchg_guest_entry Unexecuted instantiation: platform_hypercall.c:paging_cmpxchg_guest_entry Unexecuted instantiation: physdev.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: microcode.c:paging_cmpxchg_guest_entry Unexecuted instantiation: machine_kexec.c:paging_cmpxchg_guest_entry Unexecuted instantiation: msi.c:paging_cmpxchg_guest_entry Unexecuted instantiation: i387.c:paging_cmpxchg_guest_entry Unexecuted instantiation: hypercall.c:paging_cmpxchg_guest_entry Unexecuted instantiation: debug.c:paging_cmpxchg_guest_entry Unexecuted instantiation: crash.c:paging_cmpxchg_guest_entry Unexecuted instantiation: compat.c:paging_cmpxchg_guest_entry Unexecuted instantiation: cpuid.c:paging_cmpxchg_guest_entry Unexecuted instantiation: xsm_core.c:paging_cmpxchg_guest_entry Unexecuted instantiation: pmstat.c:paging_cmpxchg_guest_entry Unexecuted instantiation: iommu_guest.c:paging_cmpxchg_guest_entry Unexecuted instantiation: pci_amd_iommu.c:paging_cmpxchg_guest_entry Unexecuted instantiation: iommu_map.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vtd.c:paging_cmpxchg_guest_entry Unexecuted instantiation: pci.c:paging_cmpxchg_guest_entry Unexecuted instantiation: io.c:paging_cmpxchg_guest_entry Unexecuted instantiation: iommu.c:paging_cmpxchg_guest_entry Unexecuted instantiation: cpufreq.c:paging_cmpxchg_guest_entry Unexecuted instantiation: console.c:paging_cmpxchg_guest_entry Unexecuted instantiation: libelf-loader.c:paging_cmpxchg_guest_entry Unexecuted instantiation: llvm.c:paging_cmpxchg_guest_entry Unexecuted instantiation: tmem_control.c:paging_cmpxchg_guest_entry Unexecuted instantiation: tmem_xen.c:paging_cmpxchg_guest_entry Unexecuted instantiation: tmem.c:paging_cmpxchg_guest_entry Unexecuted instantiation: xenoprof.c:paging_cmpxchg_guest_entry Unexecuted instantiation: vm_event.c:paging_cmpxchg_guest_entry Unexecuted instantiation: sysctl.c:paging_cmpxchg_guest_entry Unexecuted instantiation: symbols.c:paging_cmpxchg_guest_entry Unexecuted instantiation: spinlock.c:paging_cmpxchg_guest_entry Unexecuted instantiation: schedule.c:paging_cmpxchg_guest_entry Unexecuted instantiation: sched_rt.c:paging_cmpxchg_guest_entry Unexecuted instantiation: sched_arinc653.c:paging_cmpxchg_guest_entry Unexecuted instantiation: page_alloc.c:paging_cmpxchg_guest_entry Unexecuted instantiation: multicall.c:paging_cmpxchg_guest_entry Unexecuted instantiation: memory.c:paging_cmpxchg_guest_entry Unexecuted instantiation: mem_access.c:paging_cmpxchg_guest_entry Unexecuted instantiation: kimage.c:paging_cmpxchg_guest_entry Unexecuted instantiation: kexec.c:paging_cmpxchg_guest_entry Unexecuted instantiation: kernel.c:paging_cmpxchg_guest_entry Unexecuted instantiation: guestcopy.c:paging_cmpxchg_guest_entry Unexecuted instantiation: grant_table.c:paging_cmpxchg_guest_entry Unexecuted instantiation: event_fifo.c:paging_cmpxchg_guest_entry Unexecuted instantiation: event_channel.c:paging_cmpxchg_guest_entry Unexecuted instantiation: domain.c:paging_cmpxchg_guest_entry Unexecuted instantiation: domctl.c:paging_cmpxchg_guest_entry |
329 | | |
330 | | /* Helper function that writes a pte in such a way that a concurrent read |
331 | | * never sees a half-written entry that has _PAGE_PRESENT set */ |
332 | | static inline void safe_write_pte(l1_pgentry_t *p, l1_pgentry_t new) |
333 | 0 | { |
334 | 0 | *p = new; |
335 | 0 | } Unexecuted instantiation: misc-hypercalls.c:safe_write_pte Unexecuted instantiation: iret.c:safe_write_pte Unexecuted instantiation: emul-priv-op.c:safe_write_pte Unexecuted instantiation: emul-inv-op.c:safe_write_pte Unexecuted instantiation: emul-gate-op.c:safe_write_pte Unexecuted instantiation: descriptor-tables.c:safe_write_pte Unexecuted instantiation: callback.c:safe_write_pte Unexecuted instantiation: backtrace.c:safe_write_pte Unexecuted instantiation: op_model_athlon.c:safe_write_pte Unexecuted instantiation: nested_ept.c:safe_write_pte Unexecuted instantiation: nested_hap.c:safe_write_pte Unexecuted instantiation: hap.c:safe_write_pte Unexecuted instantiation: multi.c:safe_write_pte Unexecuted instantiation: common.c:safe_write_pte Unexecuted instantiation: mem_sharing.c:safe_write_pte Unexecuted instantiation: mem_paging.c:safe_write_pte Unexecuted instantiation: guest_walk.c:safe_write_pte Unexecuted instantiation: altp2m.c:safe_write_pte Unexecuted instantiation: p2m-pod.c:safe_write_pte Unexecuted instantiation: p2m-ept.c:safe_write_pte Unexecuted instantiation: p2m-pt.c:safe_write_pte Unexecuted instantiation: p2m.c:safe_write_pte Unexecuted instantiation: paging.c:safe_write_pte Unexecuted instantiation: vvmx.c:safe_write_pte Unexecuted instantiation: vmx.c:safe_write_pte Unexecuted instantiation: vmcs.c:safe_write_pte Unexecuted instantiation: realmode.c:safe_write_pte Unexecuted instantiation: vmcb.c:safe_write_pte Unexecuted instantiation: svm.c:safe_write_pte Unexecuted instantiation: nestedsvm.c:safe_write_pte Unexecuted instantiation: intr.c:safe_write_pte Unexecuted instantiation: vpt.c:safe_write_pte Unexecuted instantiation: vpic.c:safe_write_pte Unexecuted instantiation: vmsi.c:safe_write_pte Unexecuted instantiation: vlapic.c:safe_write_pte Unexecuted instantiation: viridian.c:safe_write_pte Unexecuted instantiation: vioapic.c:safe_write_pte Unexecuted instantiation: stdvga.c:safe_write_pte Unexecuted instantiation: save.c:safe_write_pte Unexecuted instantiation: rtc.c:safe_write_pte Unexecuted instantiation: quirks.c:safe_write_pte Unexecuted instantiation: pmtimer.c:safe_write_pte Unexecuted instantiation: nestedhvm.c:safe_write_pte Unexecuted instantiation: mtrr.c:safe_write_pte Unexecuted instantiation: monitor.c:safe_write_pte Unexecuted instantiation: irq.c:safe_write_pte Unexecuted instantiation: ioreq.c:safe_write_pte Unexecuted instantiation: intercept.c:safe_write_pte Unexecuted instantiation: i8254.c:safe_write_pte Unexecuted instantiation: hvm.c:safe_write_pte Unexecuted instantiation: hpet.c:safe_write_pte Unexecuted instantiation: emulate.c:safe_write_pte Unexecuted instantiation: dm.c:safe_write_pte Unexecuted instantiation: vmce.c:safe_write_pte Unexecuted instantiation: mce_intel.c:safe_write_pte Unexecuted instantiation: mce.c:safe_write_pte Unexecuted instantiation: vpmu_intel.c:safe_write_pte Unexecuted instantiation: vpmu.c:safe_write_pte Unexecuted instantiation: intel.c:safe_write_pte Unexecuted instantiation: amd.c:safe_write_pte Unexecuted instantiation: cpu_idle.c:safe_write_pte Unexecuted instantiation: suspend.c:safe_write_pte Unexecuted instantiation: xstate.c:safe_write_pte Unexecuted instantiation: traps.c:safe_write_pte Unexecuted instantiation: time.c:safe_write_pte Unexecuted instantiation: smp.c:safe_write_pte Unexecuted instantiation: setup.c:safe_write_pte Unexecuted instantiation: platform_hypercall.c:safe_write_pte Unexecuted instantiation: physdev.c:safe_write_pte Unexecuted instantiation: mm.c:safe_write_pte Unexecuted instantiation: microcode.c:safe_write_pte Unexecuted instantiation: machine_kexec.c:safe_write_pte Unexecuted instantiation: msi.c:safe_write_pte Unexecuted instantiation: i387.c:safe_write_pte Unexecuted instantiation: hypercall.c:safe_write_pte Unexecuted instantiation: debug.c:safe_write_pte Unexecuted instantiation: crash.c:safe_write_pte Unexecuted instantiation: compat.c:safe_write_pte Unexecuted instantiation: cpuid.c:safe_write_pte Unexecuted instantiation: xsm_core.c:safe_write_pte Unexecuted instantiation: pmstat.c:safe_write_pte Unexecuted instantiation: iommu_guest.c:safe_write_pte Unexecuted instantiation: pci_amd_iommu.c:safe_write_pte Unexecuted instantiation: iommu_map.c:safe_write_pte Unexecuted instantiation: vtd.c:safe_write_pte Unexecuted instantiation: pci.c:safe_write_pte Unexecuted instantiation: io.c:safe_write_pte Unexecuted instantiation: ro-page-fault.c:safe_write_pte Unexecuted instantiation: iommu.c:safe_write_pte Unexecuted instantiation: cpufreq.c:safe_write_pte Unexecuted instantiation: console.c:safe_write_pte Unexecuted instantiation: libelf-loader.c:safe_write_pte Unexecuted instantiation: llvm.c:safe_write_pte Unexecuted instantiation: tmem_control.c:safe_write_pte Unexecuted instantiation: tmem_xen.c:safe_write_pte Unexecuted instantiation: tmem.c:safe_write_pte Unexecuted instantiation: xenoprof.c:safe_write_pte Unexecuted instantiation: vm_event.c:safe_write_pte Unexecuted instantiation: sysctl.c:safe_write_pte Unexecuted instantiation: symbols.c:safe_write_pte Unexecuted instantiation: spinlock.c:safe_write_pte Unexecuted instantiation: schedule.c:safe_write_pte Unexecuted instantiation: sched_rt.c:safe_write_pte Unexecuted instantiation: sched_arinc653.c:safe_write_pte Unexecuted instantiation: page_alloc.c:safe_write_pte Unexecuted instantiation: multicall.c:safe_write_pte Unexecuted instantiation: memory.c:safe_write_pte Unexecuted instantiation: mem_access.c:safe_write_pte Unexecuted instantiation: kimage.c:safe_write_pte Unexecuted instantiation: kexec.c:safe_write_pte Unexecuted instantiation: kernel.c:safe_write_pte Unexecuted instantiation: guestcopy.c:safe_write_pte Unexecuted instantiation: grant_table.c:safe_write_pte Unexecuted instantiation: event_fifo.c:safe_write_pte Unexecuted instantiation: event_channel.c:safe_write_pte Unexecuted instantiation: domain.c:safe_write_pte Unexecuted instantiation: domctl.c:safe_write_pte |
336 | | |
337 | | /* Atomically write a P2M entry and update the paging-assistance state |
338 | | * appropriately. |
339 | | * Arguments: the domain in question, the GFN whose mapping is being updated, |
340 | | * a pointer to the entry to be written, the MFN in which the entry resides, |
341 | | * the new contents of the entry, and the level in the p2m tree at which |
342 | | * we are writing. */ |
343 | | struct p2m_domain; |
344 | | |
345 | | void paging_write_p2m_entry(struct p2m_domain *p2m, unsigned long gfn, |
346 | | l1_pgentry_t *p, l1_pgentry_t new, |
347 | | unsigned int level); |
348 | | |
349 | | /* Called from the guest to indicate that the a process is being |
350 | | * torn down and its pagetables will soon be discarded */ |
351 | | void pagetable_dying(struct domain *d, paddr_t gpa); |
352 | | |
353 | | /* Print paging-assistance info to the console */ |
354 | | void paging_dump_domain_info(struct domain *d); |
355 | | void paging_dump_vcpu_info(struct vcpu *v); |
356 | | |
357 | | /* Set the pool of shadow pages to the required number of pages. |
358 | | * Input might be rounded up to at minimum amount of pages, plus |
359 | | * space for the p2m table. |
360 | | * Returns 0 for success, non-zero for failure. */ |
361 | | int paging_set_allocation(struct domain *d, unsigned int pages, |
362 | | bool *preempted); |
363 | | |
364 | | /* Is gfn within maxphysaddr for the domain? */ |
365 | | static inline bool gfn_valid(const struct domain *d, gfn_t gfn) |
366 | 867k | { |
367 | 867k | return !(gfn_x(gfn) >> (d->arch.cpuid->extd.maxphysaddr - PAGE_SHIFT)); |
368 | 867k | } Unexecuted instantiation: io.c:gfn_valid Unexecuted instantiation: ro-page-fault.c:gfn_valid Unexecuted instantiation: misc-hypercalls.c:gfn_valid Unexecuted instantiation: iret.c:gfn_valid Unexecuted instantiation: emul-priv-op.c:gfn_valid Unexecuted instantiation: emul-inv-op.c:gfn_valid Unexecuted instantiation: emul-gate-op.c:gfn_valid Unexecuted instantiation: descriptor-tables.c:gfn_valid Unexecuted instantiation: callback.c:gfn_valid Unexecuted instantiation: backtrace.c:gfn_valid Unexecuted instantiation: op_model_athlon.c:gfn_valid Unexecuted instantiation: nested_ept.c:gfn_valid Unexecuted instantiation: nested_hap.c:gfn_valid Unexecuted instantiation: hap.c:gfn_valid Unexecuted instantiation: multi.c:gfn_valid Unexecuted instantiation: common.c:gfn_valid Unexecuted instantiation: mem_sharing.c:gfn_valid Unexecuted instantiation: mem_paging.c:gfn_valid Unexecuted instantiation: guest_walk.c:gfn_valid Unexecuted instantiation: altp2m.c:gfn_valid Unexecuted instantiation: p2m-pod.c:gfn_valid Unexecuted instantiation: p2m-ept.c:gfn_valid Unexecuted instantiation: p2m-pt.c:gfn_valid Line | Count | Source | 366 | 867k | { | 367 | 867k | return !(gfn_x(gfn) >> (d->arch.cpuid->extd.maxphysaddr - PAGE_SHIFT)); | 368 | 867k | } |
Unexecuted instantiation: paging.c:gfn_valid Unexecuted instantiation: vvmx.c:gfn_valid Unexecuted instantiation: vmx.c:gfn_valid Unexecuted instantiation: vmcs.c:gfn_valid Unexecuted instantiation: realmode.c:gfn_valid Unexecuted instantiation: vmcb.c:gfn_valid Unexecuted instantiation: svm.c:gfn_valid Unexecuted instantiation: nestedsvm.c:gfn_valid Unexecuted instantiation: intr.c:gfn_valid Unexecuted instantiation: vpt.c:gfn_valid Unexecuted instantiation: vpic.c:gfn_valid Unexecuted instantiation: vmsi.c:gfn_valid Unexecuted instantiation: vlapic.c:gfn_valid Unexecuted instantiation: viridian.c:gfn_valid Unexecuted instantiation: vioapic.c:gfn_valid Unexecuted instantiation: stdvga.c:gfn_valid Unexecuted instantiation: save.c:gfn_valid Unexecuted instantiation: rtc.c:gfn_valid Unexecuted instantiation: quirks.c:gfn_valid Unexecuted instantiation: pmtimer.c:gfn_valid Unexecuted instantiation: nestedhvm.c:gfn_valid Unexecuted instantiation: mtrr.c:gfn_valid Unexecuted instantiation: monitor.c:gfn_valid Unexecuted instantiation: irq.c:gfn_valid Unexecuted instantiation: ioreq.c:gfn_valid Unexecuted instantiation: intercept.c:gfn_valid Unexecuted instantiation: i8254.c:gfn_valid Unexecuted instantiation: hvm.c:gfn_valid Unexecuted instantiation: hpet.c:gfn_valid Unexecuted instantiation: emulate.c:gfn_valid Unexecuted instantiation: dm.c:gfn_valid Unexecuted instantiation: vmce.c:gfn_valid Unexecuted instantiation: mce_intel.c:gfn_valid Unexecuted instantiation: mce.c:gfn_valid Unexecuted instantiation: vpmu_intel.c:gfn_valid Unexecuted instantiation: vpmu.c:gfn_valid Unexecuted instantiation: intel.c:gfn_valid Unexecuted instantiation: amd.c:gfn_valid Unexecuted instantiation: cpu_idle.c:gfn_valid Unexecuted instantiation: suspend.c:gfn_valid Unexecuted instantiation: xstate.c:gfn_valid Unexecuted instantiation: traps.c:gfn_valid Unexecuted instantiation: time.c:gfn_valid Unexecuted instantiation: smp.c:gfn_valid Unexecuted instantiation: setup.c:gfn_valid Unexecuted instantiation: platform_hypercall.c:gfn_valid Unexecuted instantiation: physdev.c:gfn_valid Unexecuted instantiation: mm.c:gfn_valid Unexecuted instantiation: microcode.c:gfn_valid Unexecuted instantiation: machine_kexec.c:gfn_valid Unexecuted instantiation: msi.c:gfn_valid Unexecuted instantiation: i387.c:gfn_valid Unexecuted instantiation: hypercall.c:gfn_valid Unexecuted instantiation: debug.c:gfn_valid Unexecuted instantiation: crash.c:gfn_valid Unexecuted instantiation: compat.c:gfn_valid Unexecuted instantiation: cpuid.c:gfn_valid Unexecuted instantiation: xsm_core.c:gfn_valid Unexecuted instantiation: pmstat.c:gfn_valid Unexecuted instantiation: iommu_guest.c:gfn_valid Unexecuted instantiation: pci_amd_iommu.c:gfn_valid Unexecuted instantiation: iommu_map.c:gfn_valid Unexecuted instantiation: vtd.c:gfn_valid Unexecuted instantiation: pci.c:gfn_valid Unexecuted instantiation: iommu.c:gfn_valid Unexecuted instantiation: cpufreq.c:gfn_valid Unexecuted instantiation: console.c:gfn_valid Unexecuted instantiation: libelf-loader.c:gfn_valid Unexecuted instantiation: llvm.c:gfn_valid Unexecuted instantiation: tmem_control.c:gfn_valid Unexecuted instantiation: tmem_xen.c:gfn_valid Unexecuted instantiation: tmem.c:gfn_valid Unexecuted instantiation: xenoprof.c:gfn_valid Unexecuted instantiation: vm_event.c:gfn_valid Unexecuted instantiation: sysctl.c:gfn_valid Unexecuted instantiation: symbols.c:gfn_valid Unexecuted instantiation: spinlock.c:gfn_valid Unexecuted instantiation: schedule.c:gfn_valid Unexecuted instantiation: sched_rt.c:gfn_valid Unexecuted instantiation: sched_arinc653.c:gfn_valid Unexecuted instantiation: page_alloc.c:gfn_valid Unexecuted instantiation: multicall.c:gfn_valid Unexecuted instantiation: memory.c:gfn_valid Unexecuted instantiation: mem_access.c:gfn_valid Unexecuted instantiation: kimage.c:gfn_valid Unexecuted instantiation: kexec.c:gfn_valid Unexecuted instantiation: kernel.c:gfn_valid Unexecuted instantiation: guestcopy.c:gfn_valid Unexecuted instantiation: grant_table.c:gfn_valid Unexecuted instantiation: event_fifo.c:gfn_valid Unexecuted instantiation: event_channel.c:gfn_valid Unexecuted instantiation: domain.c:gfn_valid Unexecuted instantiation: domctl.c:gfn_valid |
369 | | |
370 | | /* Maxphysaddr supportable by the paging infrastructure. */ |
371 | | static inline unsigned int paging_max_paddr_bits(const struct domain *d) |
372 | 1 | { |
373 | 1 | unsigned int bits = paging_mode_hap(d) ? hap_paddr_bits : paddr_bits; |
374 | 1 | |
375 | 1 | if ( !IS_ENABLED(BIGMEM) && paging_mode_shadow(d) && !is_pv_domain(d) ) |
376 | 0 | { |
377 | 0 | /* Shadowed superpages store GFNs in 32-bit page_info fields. */ |
378 | 0 | bits = min(bits, 32U + PAGE_SHIFT); |
379 | 0 | } |
380 | 1 | |
381 | 1 | return bits; |
382 | 1 | } Unexecuted instantiation: domain.c:paging_max_paddr_bits Unexecuted instantiation: event_channel.c:paging_max_paddr_bits Unexecuted instantiation: event_fifo.c:paging_max_paddr_bits Unexecuted instantiation: grant_table.c:paging_max_paddr_bits Unexecuted instantiation: guestcopy.c:paging_max_paddr_bits Unexecuted instantiation: kernel.c:paging_max_paddr_bits Unexecuted instantiation: kexec.c:paging_max_paddr_bits Unexecuted instantiation: kimage.c:paging_max_paddr_bits Unexecuted instantiation: mem_access.c:paging_max_paddr_bits Unexecuted instantiation: memory.c:paging_max_paddr_bits Unexecuted instantiation: multicall.c:paging_max_paddr_bits Unexecuted instantiation: page_alloc.c:paging_max_paddr_bits Unexecuted instantiation: sched_arinc653.c:paging_max_paddr_bits Unexecuted instantiation: sched_rt.c:paging_max_paddr_bits Unexecuted instantiation: schedule.c:paging_max_paddr_bits Unexecuted instantiation: spinlock.c:paging_max_paddr_bits Unexecuted instantiation: symbols.c:paging_max_paddr_bits Unexecuted instantiation: sysctl.c:paging_max_paddr_bits Unexecuted instantiation: vm_event.c:paging_max_paddr_bits Unexecuted instantiation: xenoprof.c:paging_max_paddr_bits Unexecuted instantiation: tmem.c:paging_max_paddr_bits Unexecuted instantiation: tmem_xen.c:paging_max_paddr_bits Unexecuted instantiation: tmem_control.c:paging_max_paddr_bits Unexecuted instantiation: llvm.c:paging_max_paddr_bits Unexecuted instantiation: libelf-loader.c:paging_max_paddr_bits Unexecuted instantiation: console.c:paging_max_paddr_bits Unexecuted instantiation: cpufreq.c:paging_max_paddr_bits Unexecuted instantiation: iommu.c:paging_max_paddr_bits Unexecuted instantiation: io.c:paging_max_paddr_bits Unexecuted instantiation: pci.c:paging_max_paddr_bits Unexecuted instantiation: vtd.c:paging_max_paddr_bits Unexecuted instantiation: iommu_map.c:paging_max_paddr_bits Unexecuted instantiation: pci_amd_iommu.c:paging_max_paddr_bits Unexecuted instantiation: iommu_guest.c:paging_max_paddr_bits Unexecuted instantiation: pmstat.c:paging_max_paddr_bits Unexecuted instantiation: xsm_core.c:paging_max_paddr_bits cpuid.c:paging_max_paddr_bits Line | Count | Source | 372 | 1 | { | 373 | 1 | unsigned int bits = paging_mode_hap(d) ? hap_paddr_bits : paddr_bits; | 374 | 1 | | 375 | 1 | if ( !IS_ENABLED(BIGMEM) && paging_mode_shadow(d) && !is_pv_domain(d) ) | 376 | 0 | { | 377 | 0 | /* Shadowed superpages store GFNs in 32-bit page_info fields. */ | 378 | 0 | bits = min(bits, 32U + PAGE_SHIFT); | 379 | 0 | } | 380 | 1 | | 381 | 1 | return bits; | 382 | 1 | } |
Unexecuted instantiation: compat.c:paging_max_paddr_bits Unexecuted instantiation: crash.c:paging_max_paddr_bits Unexecuted instantiation: debug.c:paging_max_paddr_bits Unexecuted instantiation: hypercall.c:paging_max_paddr_bits Unexecuted instantiation: i387.c:paging_max_paddr_bits Unexecuted instantiation: msi.c:paging_max_paddr_bits Unexecuted instantiation: machine_kexec.c:paging_max_paddr_bits Unexecuted instantiation: microcode.c:paging_max_paddr_bits Unexecuted instantiation: mm.c:paging_max_paddr_bits Unexecuted instantiation: physdev.c:paging_max_paddr_bits Unexecuted instantiation: platform_hypercall.c:paging_max_paddr_bits Unexecuted instantiation: setup.c:paging_max_paddr_bits Unexecuted instantiation: smp.c:paging_max_paddr_bits Unexecuted instantiation: time.c:paging_max_paddr_bits Unexecuted instantiation: traps.c:paging_max_paddr_bits Unexecuted instantiation: xstate.c:paging_max_paddr_bits Unexecuted instantiation: suspend.c:paging_max_paddr_bits Unexecuted instantiation: cpu_idle.c:paging_max_paddr_bits Unexecuted instantiation: amd.c:paging_max_paddr_bits Unexecuted instantiation: intel.c:paging_max_paddr_bits Unexecuted instantiation: vpmu.c:paging_max_paddr_bits Unexecuted instantiation: vpmu_intel.c:paging_max_paddr_bits Unexecuted instantiation: mce.c:paging_max_paddr_bits Unexecuted instantiation: mce_intel.c:paging_max_paddr_bits Unexecuted instantiation: vmce.c:paging_max_paddr_bits Unexecuted instantiation: dm.c:paging_max_paddr_bits Unexecuted instantiation: emulate.c:paging_max_paddr_bits Unexecuted instantiation: hpet.c:paging_max_paddr_bits Unexecuted instantiation: hvm.c:paging_max_paddr_bits Unexecuted instantiation: i8254.c:paging_max_paddr_bits Unexecuted instantiation: intercept.c:paging_max_paddr_bits Unexecuted instantiation: ioreq.c:paging_max_paddr_bits Unexecuted instantiation: irq.c:paging_max_paddr_bits Unexecuted instantiation: monitor.c:paging_max_paddr_bits Unexecuted instantiation: mtrr.c:paging_max_paddr_bits Unexecuted instantiation: nestedhvm.c:paging_max_paddr_bits Unexecuted instantiation: pmtimer.c:paging_max_paddr_bits Unexecuted instantiation: quirks.c:paging_max_paddr_bits Unexecuted instantiation: rtc.c:paging_max_paddr_bits Unexecuted instantiation: save.c:paging_max_paddr_bits Unexecuted instantiation: stdvga.c:paging_max_paddr_bits Unexecuted instantiation: vioapic.c:paging_max_paddr_bits Unexecuted instantiation: viridian.c:paging_max_paddr_bits Unexecuted instantiation: vlapic.c:paging_max_paddr_bits Unexecuted instantiation: vmsi.c:paging_max_paddr_bits Unexecuted instantiation: vpic.c:paging_max_paddr_bits Unexecuted instantiation: vpt.c:paging_max_paddr_bits Unexecuted instantiation: intr.c:paging_max_paddr_bits Unexecuted instantiation: nestedsvm.c:paging_max_paddr_bits Unexecuted instantiation: svm.c:paging_max_paddr_bits Unexecuted instantiation: vmcb.c:paging_max_paddr_bits Unexecuted instantiation: realmode.c:paging_max_paddr_bits Unexecuted instantiation: vmcs.c:paging_max_paddr_bits Unexecuted instantiation: vmx.c:paging_max_paddr_bits Unexecuted instantiation: vvmx.c:paging_max_paddr_bits Unexecuted instantiation: paging.c:paging_max_paddr_bits Unexecuted instantiation: p2m.c:paging_max_paddr_bits Unexecuted instantiation: p2m-pt.c:paging_max_paddr_bits Unexecuted instantiation: p2m-ept.c:paging_max_paddr_bits Unexecuted instantiation: p2m-pod.c:paging_max_paddr_bits Unexecuted instantiation: altp2m.c:paging_max_paddr_bits Unexecuted instantiation: guest_walk.c:paging_max_paddr_bits Unexecuted instantiation: mem_paging.c:paging_max_paddr_bits Unexecuted instantiation: mem_sharing.c:paging_max_paddr_bits Unexecuted instantiation: common.c:paging_max_paddr_bits Unexecuted instantiation: multi.c:paging_max_paddr_bits Unexecuted instantiation: hap.c:paging_max_paddr_bits Unexecuted instantiation: nested_hap.c:paging_max_paddr_bits Unexecuted instantiation: nested_ept.c:paging_max_paddr_bits Unexecuted instantiation: op_model_athlon.c:paging_max_paddr_bits Unexecuted instantiation: backtrace.c:paging_max_paddr_bits Unexecuted instantiation: callback.c:paging_max_paddr_bits Unexecuted instantiation: descriptor-tables.c:paging_max_paddr_bits Unexecuted instantiation: emul-gate-op.c:paging_max_paddr_bits Unexecuted instantiation: emul-inv-op.c:paging_max_paddr_bits Unexecuted instantiation: emul-priv-op.c:paging_max_paddr_bits Unexecuted instantiation: iret.c:paging_max_paddr_bits Unexecuted instantiation: misc-hypercalls.c:paging_max_paddr_bits Unexecuted instantiation: ro-page-fault.c:paging_max_paddr_bits Unexecuted instantiation: domctl.c:paging_max_paddr_bits |
383 | | |
384 | | #endif /* XEN_PAGING_H */ |
385 | | |
386 | | /* |
387 | | * Local variables: |
388 | | * mode: C |
389 | | * c-file-style: "BSD" |
390 | | * c-basic-offset: 4 |
391 | | * indent-tabs-mode: nil |
392 | | * End: |
393 | | */ |