xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Joe Epstein <jepstein98@gmail.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH 2 of 3] mem_access changes: interface changes
Date: Sun, 2 Jan 2011 14:13:55 -0800	[thread overview]
Message-ID: <AANLkTimOXMxL1KsCovcXg-B8LZ6NSXu9eTtu2Vmbj7gP@mail.gmail.com> (raw)

* 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@gmail.com>

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);

                 reply	other threads:[~2011-01-02 22:13 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AANLkTimOXMxL1KsCovcXg-B8LZ6NSXu9eTtu2Vmbj7gP@mail.gmail.com \
    --to=jepstein98@gmail.com \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).