|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 08 of 12] xenalyze: Add option to skip vga range in MMIO enumeration
Emulations to the VGA range during boot can be extremely numerous,
sometimes causing out-of-memory errors. Add an option to
skip the VGA range (0xa0000-0xbffff) during enumeration, and
enable it by default.
Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
diff -r c9f583c65e07 -r 3c6da152c844 xenalyze.c
--- a/xenalyze.c Mon Nov 28 16:16:23 2011 +0000
+++ b/xenalyze.c Mon Nov 28 16:16:23 2011 +0000
@@ -48,6 +48,15 @@ struct array_struct {
int count;
};
+#define warn_once(_x...) \
+ do { \
+ static int _w=1; \
+ if ( _w ) { \
+ _w=0; \
+ fprintf(warn, ##_x); \
+ } \
+ } while(0) \
+
/* -- Global variables -- */
struct {
int fd;
@@ -160,6 +169,7 @@ struct {
with_mmio_enumeration:1,
with_interrupt_eip_enumeration:1,
show_default_domain_summary:1,
+ mmio_enumeration_skip_vga:1,
progress:1,
svm_mode:1,
summary:1,
@@ -234,6 +244,7 @@ struct {
.with_mmio_enumeration = 0,
.with_interrupt_eip_enumeration = 0,
.show_default_domain_summary = 0,
+ .mmio_enumeration_skip_vga = 1,
.progress = 0,
.svm_mode = 0,
.summary = 0,
@@ -3692,10 +3703,21 @@ void hvm_vlapic_handler(struct hvm_data
}
/* Also called by shadow_mmio_postprocess */
+#define MMIO_VGA_START (0xa0000)
+#define MMIO_VGA_END (0xbffff)
void enumerate_mmio(struct hvm_data *h)
{
struct mmio_info *m = &h->inflight.mmio;
+ /* Skip vga area */
+ if ( opt.mmio_enumeration_skip_vga
+ && m->gpa >= MMIO_VGA_START
+ && m->gpa < MMIO_VGA_END)
+ {
+ warn_once("WARNING: Not enumerationg MMIO in VGA range. Use
--mmio-enumeration-skip-vga=0 to override.\n");
+ return;
+ }
+
if ( m->data_valid )
update_io_address(&h->summary.io.mmio, m->gpa, m->is_write,
h->arc_cycles, m->va);
}
@@ -9464,6 +9486,7 @@ enum {
OPT_INTERVAL_DOMAIN_GRANT_MAPS,
/* Summary info */
OPT_SHOW_DEFAULT_DOMAIN_SUMMARY,
+ OPT_MMIO_ENUMERATION_SKIP_VGA,
OPT_SAMPLE_SIZE,
OPT_REPORT_PCPU,
/* Guest info */
@@ -9649,6 +9672,14 @@ error_t cmd_parser(int key, char *arg, s
argp_usage(state);
break;
}
+ case OPT_MMIO_ENUMERATION_SKIP_VGA:
+ {
+ char * inval;
+ opt.mmio_enumeration_skip_vga = (int)strtol(arg, &inval, 0);
+ if( inval == arg )
+ argp_usage(state);
+ break;
+ }
case OPT_SCATTERPLOT_INTERRUPT_EIP:
{
char * inval;
@@ -10182,6 +10213,12 @@ const struct argp_option cmd_opts[] = {
.group = OPT_GROUP_SUMMARY,
.doc = "Show default domain information on summary", },
+ { .name = "mmio-enumeration-skip-vga",
+ .key = OPT_MMIO_ENUMERATION_SKIP_VGA,
+ .arg = "[0|1]",
+ .group = OPT_GROUP_SUMMARY,
+ .doc = "Control whether we enumerate MMIO accesses to the VGA area,
which can be extremly high during boot. Default: 0", },
+
{ .name = "sample-size",
.key = OPT_SAMPLE_SIZE,
.arg = "size",
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |