WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 2 of 3] mem_access changes: interface changes

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 2 of 3] mem_access changes: interface changes
From: Joe Epstein <jepstein98@xxxxxxxxx>
Date: Sun, 2 Jan 2011 14:13:55 -0800
Delivery-date: Sun, 02 Jan 2011 14:21:10 -0800
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:from:date :message-id:subject:to:content-type; bh=acbbxDA5vMTyGeJ7c2Uql9+LJvEu16JC2Xyqm6+RXxk=; b=xsNvbGXsKDwpfPY5KOqCx/dwkZiSet8Ef9zqX+17josXQYjlOTWh1LLcEbKKh00OHb dud6eRmqfbWqefbi/NZrYLjFU9FN36tW1W6WsG7+Tgu8veldqTsPuADbX6zyB2JH0wOh lHu9qXVOw5qT7zkDVVJm40zdAJazmHmJe0euo=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; b=OEoyqTnJtwMJyvGUR43FR4Yxnml7dQEah0Pak9oMR4VGyALkP+Hjqs75UtFiz0aYKw +nBSkKNkyiBvwl7PD56LrQMR55Cd8ww4SCGip5aHhoYK3HjMJRX1NrH5jfntuvJFi1Xi sW/hZBuNPI4XJ6fjknY1cQQaVrvaom874sM+E=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
* Holds the corresponding function changes to produce memory events on
  CR0, CR3, and CR4 changes, as well as on non-debugger INT3s.

* Modified mem_event to add a reason

NOTE: the included patches are based on a previous patch series from
me on Dec 28th,
purely for readability.
To apply the patches to the repository, see the attached patch on the
PATCH 0 of 3 email.

Signed-off-by: Joe Epstein <jepstein98@xxxxxxxxx>

diff -r 1535fee95f47 xen/include/asm-x86/hvm/hvm.h
--- a/xen/include/asm-x86/hvm/hvm.h     Sun Jan 02 13:19:51 2011 -0800
+++ b/xen/include/asm-x86/hvm/hvm.h     Sun Jan 02 13:20:06 2011 -0800
@@ -370,4 +370,12 @@
 int hvm_x2apic_msr_read(struct vcpu *v, unsigned int msr, uint64_t
*msr_content);
 int hvm_x2apic_msr_write(struct vcpu *v, unsigned int msr, uint64_t
msr_content);

+/* Called for current VCPU on crX changes by guest */
+int hvm_memory_event_cr0(unsigned long value, unsigned long old);
+int hvm_memory_event_cr3(unsigned long value, unsigned long old);
+int hvm_memory_event_cr4(unsigned long value, unsigned long old);
+
+/* Called for current VCPU on int3 */
+int hvm_memory_event_int3(unsigned long gla);
+
 #endif /* __ASM_X86_HVM_HVM_H__ */
diff -r 1535fee95f47 xen/include/asm-x86/hvm/vcpu.h
--- a/xen/include/asm-x86/hvm/vcpu.h    Sun Jan 02 13:19:51 2011 -0800
+++ b/xen/include/asm-x86/hvm/vcpu.h    Sun Jan 02 13:20:06 2011 -0800
@@ -114,6 +114,11 @@
     /* We may write up to m128 as a number of device-model transactions. */
     paddr_t mmio_large_write_pa;
     unsigned int mmio_large_write_bytes;
+
+    /* Pending hw/sw interrupt */
+    int           inject_trap;       /* -1 for nothing to inject */
+    int           inject_error_code;
+    unsigned long inject_cr2;
 };

 #endif /* __ASM_X86_HVM_VCPU_H__ */
diff -r 1535fee95f47 xen/include/public/hvm/hvm_op.h
--- a/xen/include/public/hvm/hvm_op.h   Sun Jan 02 13:19:51 2011 -0800
+++ b/xen/include/public/hvm/hvm_op.h   Sun Jan 02 13:20:06 2011 -0800
@@ -187,7 +187,7 @@
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_set_mem_access_t);

 #define HVMOP_get_mem_access        13
-/* Notify that a region of memory is to have specific access types */
+/* Get the specific access type for that region of memory */
 struct xen_hvm_get_mem_access {
     /* Domain to be queried. */
     domid_t domid;
@@ -199,4 +199,22 @@
 typedef struct xen_hvm_get_mem_access xen_hvm_get_mem_access_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_mem_access_t);

+#define HVMOP_inject_trap            14
+/* Inject a trap into a VCPU, which will get taken up on the next
+ * scheduling of it */
+struct xen_hvm_inject_trap {
+    /* Domain to be queried. */
+    domid_t domid;
+    /* VCPU */
+    uint32_t vcpuid;
+    /* Trap number */
+    uint32_t trap;
+    /* Error code, or -1 to skip */
+    uint32_t error_code;
+    /* CR2 for page faults */
+    uint64_t cr2;
+};
+typedef struct xen_hvm_inject_trap xen_hvm_inject_trap_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_inject_trap_t);
+
 #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */
diff -r 1535fee95f47 xen/include/public/hvm/params.h
--- a/xen/include/public/hvm/params.h   Sun Jan 02 13:19:51 2011 -0800
+++ b/xen/include/public/hvm/params.h   Sun Jan 02 13:20:06 2011 -0800
@@ -124,6 +124,19 @@
  */
 #define HVM_PARAM_ACPI_IOPORTS_LOCATION 19

-#define HVM_NR_PARAMS          20
+/* Enable blocking memory events, async or sync (pause vcpu until response)
+ * onchangeonly indicates messages only on a change of value */
+#define HVM_PARAM_MEMORY_EVENT_CR0   20
+#define HVM_PARAM_MEMORY_EVENT_CR3   21
+#define HVM_PARAM_MEMORY_EVENT_CR4   22
+#define HVM_PARAM_MEMORY_EVENT_INT3  23
+
+#define HVMPME_MODE_MASK       (3 << 0)
+#define HVMPME_mode_disabled   0
+#define HVMPME_mode_async      1
+#define HVMPME_mode_sync       2
+#define HVMPME_onchangeonly    (1 << 2)
+
+#define HVM_NR_PARAMS          24

 #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
diff -r 1535fee95f47 xen/include/public/mem_event.h
--- a/xen/include/public/mem_event.h    Sun Jan 02 13:19:51 2011 -0800
+++ b/xen/include/public/mem_event.h    Sun Jan 02 13:20:06 2011 -0800
@@ -34,6 +34,14 @@
 /* Memory event flags */
 #define MEM_EVENT_FLAG_VCPU_PAUSED  (1 << 0)

+/* Reasons for the memory event request */
+#define MEM_EVENT_REASON_UNKNOWN     0    /* typical reason */
+#define MEM_EVENT_REASON_VIOLATION   1    /* access violation, GFN is
address */
+#define MEM_EVENT_REASON_CR0         2    /* CR0 was hit: gfn is CR0 value */
+#define MEM_EVENT_REASON_CR3         3    /* CR3 was hit: gfn is CR3 value */
+#define MEM_EVENT_REASON_CR4         4    /* CR4 was hit: gfn is CR4 value */
+#define MEM_EVENT_REASON_INT3        5    /* int3 was hit: gla/gfn are RIP */
+
 typedef struct mem_event_shared_page {
     uint32_t port;
 } mem_event_shared_page_t;
@@ -49,11 +57,13 @@

     uint32_t p2mt;

-    uint32_t access_r:1;
-    uint32_t access_w:1;
-    uint32_t access_x:1;
-    uint32_t gla_valid:1;
-    uint32_t available:28;
+    uint16_t access_r:1;
+    uint16_t access_w:1;
+    uint16_t access_x:1;
+    uint16_t gla_valid:1;
+    uint16_t available:12;
+
+    uint16_t reason;
 } mem_event_request_t, mem_event_response_t;

 DEFINE_RING_TYPES(mem_event, mem_event_request_t, mem_event_response_t);

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH 2 of 3] mem_access changes: interface changes, Joe Epstein <=