PERFORCE change 90948 for review
Kip Macy
kmacy at FreeBSD.org
Thu Feb 2 18:33:32 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=90948
Change 90948 by kmacy at kmacy:freebsd7_xen3 on 2006/02/03 02:32:36
bump PHYSMAP_SIZE
fix formatting in memory map code
enable IOPL for OS
improve panic output when console isn't up
Affected files ...
.. //depot/projects/xen3/src/sys/i386-xen/i386-xen/machdep.c#10 edit
.. //depot/projects/xen3/src/sys/i386-xen/i386-xen/xen_machdep.c#11 edit
.. //depot/projects/xen3/src/sys/i386-xen/include/xen-os.h#3 edit
Differences ...
==== //depot/projects/xen3/src/sys/i386-xen/i386-xen/machdep.c#10 (text+ko) ====
@@ -1640,7 +1640,7 @@
ssd->ssd_gran = sd->sd_gran;
}
-#define PHYSMAP_SIZE (2 * 8)
+#define PHYSMAP_SIZE (2 * 12)
/*
* Populate the (physmap) array with base/bound pairs describing the
@@ -1696,55 +1696,58 @@
* figure out how little I can get away with there
*/
if (xen_start_info->flags & SIF_INITDOMAIN) {
- map = bootmem_alloc(PAGE_SIZE);
- op.cmd = DOM0_PHYSICAL_MEMORY_MAP;
- op.u.physical_memory_map.memory_map = map;
- op.u.physical_memory_map.max_map_entries =
- PAGE_SIZE / sizeof(struct dom0_memory_map_entry);
- PANIC_IF(HYPERVISOR_dom0_op(&op));
-
- last = 0x100000000ULL;
- gapstart = 0x10000000;
- gapsize = 0x400000;
-
- for (i = op.u.physical_memory_map.nr_map_entries - 1; i >= 0; i--) {
+ map = bootmem_alloc(PAGE_SIZE);
+ op.cmd = DOM0_PHYSICAL_MEMORY_MAP;
+ op.u.physical_memory_map.memory_map = map;
+ op.u.physical_memory_map.max_map_entries =
+ PAGE_SIZE / sizeof(struct dom0_memory_map_entry);
+ /*
+ * if this fails - check for a header versioning mismatch
+ */
+ PANIC_IF(HYPERVISOR_dom0_op(&op));
+
+ last = 0x100000000ULL;
+ gapstart = 0x10000000;
+ gapsize = 0x400000;
+
+ for (i = op.u.physical_memory_map.nr_map_entries - 1; i >= 0; i--) {
#if 0
- struct resource *res;
+ struct resource *res;
#endif
- if ((last > map[i].end) && ((last - map[i].end) > gapsize)) {
- gapsize = last - map[i].end;
- gapstart = map[i].end;
- }
- if (map[i].start < last)
- last = map[i].start;
-
- if (map[i].end > 0x100000000ULL)
- continue;
- /* XXXEN need to handle reserved */
- phys_avail[2*i] = map[i].start;
- phys_avail[2*i + 1] = map[i].end;
- PANIC_IF(i*2 >= PHYSMAP_SIZE);
+ if ((last > map[i].end) && ((last - map[i].end) > gapsize)) {
+ gapsize = last - map[i].end;
+ gapstart = map[i].end;
+ }
+ if (map[i].start < last)
+ last = map[i].start;
+
+ if (map[i].end > 0x100000000ULL)
+ continue;
+ /* XXXEN need to handle reserved */
+ phys_avail[2*i] = map[i].start;
+ phys_avail[2*i + 1] = map[i].end;
+ PANIC_IF(i*2 >= PHYSMAP_SIZE);
#if 0
- res = bootmem_alloc(sizeof(struct resource));
- res->name = map[i].is_ram ? "System RAM" : "reserved";
- res->start = map[i].start;
- res->end = map[i].end - 1;
- res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
- request_resource(&iomem_resource, res);
+ res = bootmem_alloc(sizeof(struct resource));
+ res->name = map[i].is_ram ? "System RAM" : "reserved";
+ res->start = map[i].start;
+ res->end = map[i].end - 1;
+ res->flags = IORESOURCE_MEM | IORESOURCE_BUSY;
+ request_resource(&iomem_resource, res);
#endif
- }
-
- bootmem_free(map, PAGE_SIZE);
-
- /*
- * Start allocating dynamic PCI memory a bit into the gap,
- * aligned up to the nearest megabyte.
- *
- * Question: should we try to pad it up a bit (do something
- * like " + (gapsize >> 3)" in there too?). We now have the
- * technology.
- */
+ }
+
+ bootmem_free(map, PAGE_SIZE);
+
+ /*
+ * Start allocating dynamic PCI memory a bit into the gap,
+ * aligned up to the nearest megabyte.
+ *
+ * Question: should we try to pad it up a bit (do something
+ * like " + (gapsize >> 3)" in there too?). We now have the
+ * technology.
+ */
#ifdef notyet
pci_mem_start = (gapstart + 0xfffff) & ~0xfffff;
@@ -1753,6 +1756,7 @@
#endif
}
+#endif
#if defined(XEN)
Maxmem = xen_start_info->nr_pages - init_first;
pmap_bootstrap((init_first << PAGE_SHIFT), 0);
@@ -1765,7 +1769,6 @@
phys_avail[1] = avail_end;
return;
#endif
-#endif
hasbrokenint12 = 0;
TUNABLE_INT_FETCH("hw.hasbrokenint12", &hasbrokenint12);
bzero(&vmf, sizeof(vmf));
@@ -2384,12 +2387,14 @@
/*
* Initialize the console before we print anything out.
*/
+ XENPRINTF("cninit\n");
cninit();
if (metadata_missing)
printf("WARNING: loader(8) metadata is missing!\n");
#ifdef DEV_ISA
+ XENPRINTF("ISA probing\n");
if (xen_start_info->flags & SIF_PRIVILEGED) {
elcr_probe();
atpic_startup();
==== //depot/projects/xen3/src/sys/i386-xen/i386-xen/xen_machdep.c#11 (text+ko) ====
@@ -596,6 +596,7 @@
{
int i, round_tmpindex;
vm_paddr_t pdir_shadow_ma, KPTphys, *IdlePTDma;
+ physdev_op_t op;
#ifdef SMP
int j;
@@ -745,7 +746,23 @@
}
xen_flush_queue();
#endif
-
+
+ op.cmd = PHYSDEVOP_SET_IOPL;
+ op.u.set_iopl.iopl = 1;
+ PANIC_IF(HYPERVISOR_physdev_op(&op));
+
+ if (xen_start_info->flags & SIF_INITDOMAIN) {
+ /* add page table for KERNBASE */
+ xen_queue_pt_update((vm_paddr_t)(IdlePTDma + KPTDI),
+ xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_KERNEL));
+ xen_queue_pt_update(pdir_shadow_ma + KPTDI*sizeof(vm_paddr_t),
+ xpmap_ptom((tmpindex << PAGE_SHIFT)| PG_V | PG_A));
+ xen_flush_queue();
+ /* Map first megabyte */
+ for (i = 0; i < (256 << PAGE_SHIFT); i += PAGE_SIZE)
+ PT_SET_MA(KERNBASE + i, i | PG_KERNEL | PG_NC_PCD);
+ xen_flush_queue();
+ }
init_first = tmpindex;
}
==== //depot/projects/xen3/src/sys/i386-xen/include/xen-os.h#3 (text+ko) ====
@@ -14,7 +14,7 @@
#define strchr index
#define strrchr rindex
-#define PANIC_IF(exp) if (unlikely(exp)) {printk("%s failed\n",#exp); panic("%s: %s:%d", #exp, __FILE__, __LINE__);}
+#define PANIC_IF(exp) if (unlikely(exp)) {printk("panic - %s: %s:%d\n",#exp, __FILE__, __LINE__); panic("%s: %s:%d", #exp, __FILE__, __LINE__);}
/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
a mechanism by which the user can annotate likely branch directions and
More information about the p4-projects
mailing list