blob: d637e78a5dae52c6d4b6cd310ac07b4476edfd75 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#ifndef __ASM_DOMAIN_H__
#define __ASM_DOMAIN_H__
#include <xen/config.h>
#include <xen/mm.h>
#include <asm/vmx_vmcs.h>
struct trap_bounce {
unsigned long error_code;
unsigned long cr2;
unsigned short flags; /* TBF_ */
unsigned short cs;
unsigned long eip;
};
struct arch_domain
{
l1_pgentry_t *mm_perdomain_pt;
#ifdef CONFIG_X86_64
l2_pgentry_t *mm_perdomain_l2;
l3_pgentry_t *mm_perdomain_l3;
#endif
/* Writable pagetables. */
struct ptwr_info ptwr[2];
/* I/O-port access bitmap mask. */
u8 *iobmp_mask; /* Address of IO bitmap mask, or NULL. */
/* Shadow mode status and controls. */
unsigned int shadow_mode; /* flags to control shadow table operation */
unsigned int shadow_nest; /* Recursive depth of shadow_lock() nesting */
/* Shadow mode has tainted page reference counts? */
unsigned int shadow_tainted_refcnts;
/* shadow hashtable */
struct shadow_status *shadow_ht;
struct shadow_status *shadow_ht_free;
struct shadow_status *shadow_ht_extras; /* extra allocation units */
unsigned int shadow_extras_count;
/* shadow dirty bitmap */
unsigned long *shadow_dirty_bitmap;
unsigned int shadow_dirty_bitmap_size; /* in pages, bit per page */
/* shadow mode stats */
unsigned int shadow_page_count;
unsigned int hl2_page_count;
unsigned int snapshot_page_count;
unsigned int shadow_fault_count;
unsigned int shadow_dirty_count;
unsigned int shadow_dirty_net_count;
unsigned int shadow_dirty_block_count;
/* full shadow mode */
struct out_of_sync_entry *out_of_sync; /* list of out-of-sync pages */
struct out_of_sync_entry *out_of_sync_free;
struct out_of_sync_entry *out_of_sync_extras;
unsigned int out_of_sync_extras_count;
struct list_head free_shadow_frames;
pagetable_t phys_table; /* guest 1:1 pagetable */
struct virtual_platform_def vmx_platform;
} __cacheline_aligned;
struct arch_vcpu
{
struct vcpu_guest_context guest_context;
unsigned long flags; /* TF_ */
void (*schedule_tail) (struct vcpu *);
/* Bounce information for propagating an exception to guest OS. */
struct trap_bounce trap_bounce;
/* I/O-port access bitmap. */
u8 *iobmp; /* Guest kernel virtual address of the bitmap. */
int iobmp_limit; /* Number of ports represented in the bitmap. */
int iopl; /* Current IOPL for this VCPU. */
#ifdef CONFIG_X86_32
struct desc_struct int80_desc;
#endif
/* Virtual Machine Extensions */
struct arch_vmx_struct arch_vmx;
/*
* Every domain has a L1 pagetable of its own. Per-domain mappings
* are put in this table (eg. the current GDT is mapped here).
*/
l1_pgentry_t *perdomain_ptes;
pagetable_t guest_table_user; /* x86/64: user-space pagetable. */
pagetable_t guest_table; /* (MA) guest notion of cr3 */
pagetable_t shadow_table; /* (MA) shadow of guest */
pagetable_t monitor_table; /* (MA) used in hypervisor */
l2_pgentry_t *guest_vtable; /* virtual address of pagetable */
l2_pgentry_t *shadow_vtable; /* virtual address of shadow_table */
l2_pgentry_t *monitor_vtable; /* virtual address of monitor_table */
l1_pgentry_t *hl2_vtable; /* virtual address of hl2_table */
#ifdef CONFIG_X86_64
l3_pgentry_t *guest_vl3table;
l4_pgentry_t *guest_vl4table;
#endif
unsigned long monitor_shadow_ref;
/* Current LDT details. */
unsigned long shadow_ldt_mapcnt;
} __cacheline_aligned;
#endif /* __ASM_DOMAIN_H__ */
/*
* Local variables:
* mode: C
* c-set-style: "BSD"
* c-basic-offset: 4
* tab-width: 4
* indent-tabs-mode: nil
* End:
*/
|