mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
bitkeeper revision 1.1741 (42ba8952xTiiA50azru9j4tKvXIVDA)
[PATCH] vmx-gdbserver-paging.patch gdbserver should not try to convert guest physical to machine physical if paging is not enabled. Signed-off-by: Arun Sharma <arun.sharma@intel.com>
This commit is contained in:
1 parent
7331904137
commit
5ce68b82c6
3 files changed
+16
-2
No files matched your search
+10
-1
@@ -3,6 +3,8 @@
|
||||
#include "xc_private.h"
|
||||
#include <time.h>
|
||||
|
||||
#define X86_CR0_PE 0x00000001 /* Enable Protected Mode (RW) */
|
||||
#define X86_CR0_PG 0x80000000 /* Paging (RW) */
|
||||
|
||||
#define BSD_PAGE_MASK (PAGE_SIZE-1)
|
||||
#define PG_FRAME (~((unsigned long)BSD_PAGE_MASK)
|
||||
@@ -132,6 +134,13 @@ static int regs_valid[MAX_VIRT_CPUS];
|
||||
static unsigned long cr3[MAX_VIRT_CPUS];
|
||||
static vcpu_guest_context_t ctxt[MAX_VIRT_CPUS];
|
||||
|
||||
static inline int paging_enabled(vcpu_guest_context_t *v)
|
||||
{
|
||||
unsigned long cr0 = v->cr0;
|
||||
|
||||
return (cr0 & X86_CR0_PE) && (cr0 & X86_CR0_PG);
|
||||
}
|
||||
|
||||
/* --------------------- */
|
||||
|
||||
static void *
|
||||
@@ -179,7 +188,7 @@ map_domain_va(unsigned long domid, int cpu, void * guest_va, int perm)
|
||||
}
|
||||
if ((pde = cr3_virt[cpu][vtopdi(va)]) == 0) /* logical address */
|
||||
goto error_out;
|
||||
if (ctxt[cpu].flags & VGCF_VMX_GUEST)
|
||||
if ((ctxt[cpu].flags & VGCF_VMX_GUEST) && paging_enabled(&ctxt[cpu]))
|
||||
pde = page_array[pde >> PAGE_SHIFT] << PAGE_SHIFT;
|
||||
if (pde != pde_phys[cpu])
|
||||
{
|
||||
|
||||
@@ -393,8 +393,11 @@ void arch_getdomaininfo_ctxt(
|
||||
|
||||
#ifdef __i386__
|
||||
#ifdef CONFIG_VMX
|
||||
if ( VMX_DOMAIN(v) )
|
||||
if ( VMX_DOMAIN(v) ) {
|
||||
save_vmx_cpu_user_regs(&c->user_regs);
|
||||
__vmread(CR0_READ_SHADOW, &c->cr0);
|
||||
__vmread(CR4_READ_SHADOW, &c->cr4);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -137,6 +137,8 @@ typedef struct vcpu_guest_context {
|
||||
unsigned long gdt_frames[16], gdt_ents; /* GDT (machine frames, # ents) */
|
||||
unsigned long kernel_ss, kernel_sp; /* Virtual TSS (only SS1/SP1) */
|
||||
unsigned long pt_base; /* CR3 (pagetable base) */
|
||||
unsigned long cr0; /* CR0 */
|
||||
unsigned long cr4; /* CR4 */
|
||||
unsigned long debugreg[8]; /* DB0-DB7 (debug registers) */
|
||||
unsigned long event_callback_cs; /* CS:EIP of event callback */
|
||||
unsigned long event_callback_eip;
|
||||
|
||||