xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] xenalyze: Handle all MMIO events
@ 2010-11-22 12:40 George Dunlap
  0 siblings, 0 replies; only message in thread
From: George Dunlap @ 2010-11-22 12:40 UTC (permalink / raw)
  To: xen-devel; +Cc: george.dunlap

Use a generic mmio-assist post processor if no other post-process functions are
present.

This will make sure we catch not only APIC_ACCESS vmexits, but also NPF vmexits
(and any future hardware innovations).

Signed-off-by: George Dunlap <george.dunlap@eu.citrix.com>

diff -r 2a404c7a4fa2 -r 4e88187c91ba xenalyze.c
--- a/xenalyze.c	Mon Nov 22 12:38:56 2010 +0000
+++ b/xenalyze.c	Mon Nov 22 12:39:38 2010 +0000
@@ -1829,11 +1829,14 @@
     } interval;
 } P = { 0 };
 
+/* Function prototypes */
 char * pcpu_string(int pcpu);
 void process_generic(struct record_info *ri);
 void dump_generic(FILE *f, struct record_info *ri);
 ssize_t __read_record(int fd, struct trace_record *rec, loff_t offset);
 void error(enum error_level l, struct record_info *ri);
+void update_io_address(struct io_address ** list, unsigned int pa, int dir,
+                       tsc_t arc_cycles, unsigned int va);
 
 void cpumask_init(cpu_mask_t *c) {
     *c = 0UL;
@@ -3542,6 +3545,20 @@
 
 }
 
+/* Also called by shadow_mmio_postprocess */
+void enumerate_mmio(struct hvm_data *h)
+{
+    struct pf_xen_extra *e = &h->inflight.pf_xen;
+
+    if ( e->mmio_data_valid )
+        update_io_address(&h->summary.mmio, e->gpa, e->mmio_is_write, h->arc_cycles, e->va);
+}
+
+void hvm_mmio_assist_postprocess(struct hvm_data *h)
+{
+    if ( opt.with_mmio_enumeration )
+        enumerate_mmio(h);
+}
 
 #define HVM_IO_ASSIST_WRITE 0x200
 void hvm_mmio_assist_process(struct record_info *ri, struct hvm_data *h)
@@ -3594,6 +3611,11 @@
 
     if((e->gpa & 0xfffff000) == 0xfee00000)
         hvm_vlapic_handler(h);
+
+    /* Catch MMIOs that don't go through the shadow code */
+    if ( h->post_process == NULL )
+        h->post_process = hvm_mmio_assist_postprocess;
+        
 }
 
 void hvm_inj_virq_process(struct record_info *ri, struct hvm_data *h) {
@@ -4520,21 +4542,6 @@
     }
 }
 
-/* Also called by shadow_mmio_postprocess */
-void enumerate_mmio(struct hvm_data *h)
-{
-    struct pf_xen_extra *e = &h->inflight.pf_xen;
-
-    if ( e->mmio_data_valid )
-        update_io_address(&h->summary.mmio, e->gpa, e->mmio_is_write, h->arc_cycles, e->va);
-}
-
-void hvm_apic_access_postprocess(struct hvm_data *h)
-{
-    if ( opt.with_mmio_enumeration )
-        enumerate_mmio(h);
-}
-
 void hvm_npf_process(struct record_info *ri, struct hvm_data *h)
 {
     struct {
@@ -5040,8 +5047,6 @@
         case EXIT_REASON_EXCEPTION_NMI:
             h->post_process = hvm_exception_nmi_generic_postprocess;
             break;
-        case EXIT_REASON_APIC_ACCESS:
-            h->post_process = hvm_apic_access_postprocess;
         default:
             ;
         }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2010-11-22 12:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-22 12:40 [PATCH] xenalyze: Handle all MMIO events George Dunlap

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