summaryrefslogtreecommitdiffstats
path: root/sys/i386/xen/xen_machdep.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/xen/xen_machdep.c')
-rw-r--r--sys/i386/xen/xen_machdep.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/sys/i386/xen/xen_machdep.c b/sys/i386/xen/xen_machdep.c
index 9b5edd3..7049be6 100644
--- a/sys/i386/xen/xen_machdep.c
+++ b/sys/i386/xen/xen_machdep.c
@@ -47,7 +47,7 @@ __FBSDID("$FreeBSD$");
#include <sys/rwlock.h>
#include <sys/sysproto.h>
-#include <machine/xen/xen-os.h>
+#include <xen/xen-os.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -96,6 +96,8 @@ xen_pfn_t *xen_pfn_to_mfn_frame_list[16];
xen_pfn_t *xen_pfn_to_mfn_frame_list_list;
int preemptable, init_first;
extern unsigned int avail_space;
+int xen_vector_callback_enabled = 0;
+enum xen_domain_type xen_domain_type = XEN_PV_DOMAIN;
void ni_cli(void);
void ni_sti(void);
@@ -129,6 +131,12 @@ ni_sti(void)
);
}
+void
+force_evtchn_callback(void)
+{
+ (void)HYPERVISOR_xen_version(0, NULL);
+}
+
/*
* Modify the cmd_line by converting ',' to NULLs so that it is in a format
* suitable for the static env vars.
@@ -141,7 +149,7 @@ xen_setbootenv(char *cmd_line)
/* Skip leading spaces */
for (; *cmd_line == ' '; cmd_line++);
- printk("xen_setbootenv(): cmd_line='%s'\n", cmd_line);
+ xc_printf("xen_setbootenv(): cmd_line='%s'\n", cmd_line);
for (cmd_line_next = cmd_line; strsep(&cmd_line_next, ",") != NULL;);
return cmd_line;
@@ -177,16 +185,16 @@ xen_boothowto(char *envp)
return howto;
}
-#define PRINTK_BUFSIZE 1024
+#define XC_PRINTF_BUFSIZE 1024
void
-printk(const char *fmt, ...)
+xc_printf(const char *fmt, ...)
{
__va_list ap;
int retval;
- static char buf[PRINTK_BUFSIZE];
+ static char buf[XC_PRINTF_BUFSIZE];
va_start(ap, fmt);
- retval = vsnprintf(buf, PRINTK_BUFSIZE - 1, fmt, ap);
+ retval = vsnprintf(buf, XC_PRINTF_BUFSIZE - 1, fmt, ap);
va_end(ap);
buf[retval] = 0;
(void)HYPERVISOR_console_write(buf, retval);
@@ -239,9 +247,10 @@ xen_dump_queue(void)
if (_xpq_idx <= 1)
return;
- printk("xen_dump_queue(): %u entries\n", _xpq_idx);
+ xc_printf("xen_dump_queue(): %u entries\n", _xpq_idx);
for (i = 0; i < _xpq_idx; i++) {
- printk(" val: %llx ptr: %llx\n", XPQ_QUEUE[i].val, XPQ_QUEUE[i].ptr);
+ xc_printf(" val: %llx ptr: %llx\n", XPQ_QUEUE[i].val,
+ XPQ_QUEUE[i].ptr);
}
}
#endif
@@ -955,9 +964,10 @@ initvalues(start_info_t *startinfo)
cur_space = xen_start_info->pt_base +
(l3_pages + l2_pages + l1_pages + 1)*PAGE_SIZE;
- printk("initvalues(): wooh - availmem=%x,%x\n", avail_space, cur_space);
+ xc_printf("initvalues(): wooh - availmem=%x,%x\n", avail_space,
+ cur_space);
- printk("KERNBASE=%x,pt_base=%x, VTOPFN(base)=%x, nr_pt_frames=%x\n",
+ xc_printf("KERNBASE=%x,pt_base=%x, VTOPFN(base)=%x, nr_pt_frames=%x\n",
KERNBASE,xen_start_info->pt_base, VTOPFN(xen_start_info->pt_base),
xen_start_info->nr_pt_frames);
xendebug_flags = 0; /* 0xffffffff; */
@@ -1007,7 +1017,7 @@ initvalues(start_info_t *startinfo)
/* Map proc0's KSTACK */
proc0kstack = cur_space; cur_space += (KSTACK_PAGES * PAGE_SIZE);
- printk("proc0kstack=%u\n", proc0kstack);
+ xc_printf("proc0kstack=%u\n", proc0kstack);
/* vm86/bios stack */
cur_space += PAGE_SIZE;
@@ -1106,18 +1116,18 @@ initvalues(start_info_t *startinfo)
shinfo = xen_start_info->shared_info;
PT_SET_MA(HYPERVISOR_shared_info, shinfo | PG_KERNEL);
- printk("#4\n");
+ xc_printf("#4\n");
xen_store_ma = (((vm_paddr_t)xen_start_info->store_mfn) << PAGE_SHIFT);
PT_SET_MA(xen_store, xen_store_ma | PG_KERNEL);
console_page_ma = (((vm_paddr_t)xen_start_info->console.domU.mfn) << PAGE_SHIFT);
PT_SET_MA(console_page, console_page_ma | PG_KERNEL);
- printk("#5\n");
+ xc_printf("#5\n");
set_iopl.iopl = 1;
PANIC_IF(HYPERVISOR_physdev_op(PHYSDEVOP_SET_IOPL, &set_iopl));
- printk("#6\n");
+ xc_printf("#6\n");
#if 0
/* add page table for KERNBASE */
xen_queue_pt_update(IdlePTDma + KPTDI*sizeof(vm_paddr_t),
@@ -1132,7 +1142,7 @@ initvalues(start_info_t *startinfo)
#endif
xen_flush_queue();
cur_space += PAGE_SIZE;
- printk("#6\n");
+ xc_printf("#6\n");
#endif /* 0 */
#ifdef notyet
if (xen_start_info->flags & SIF_INITDOMAIN) {
@@ -1150,13 +1160,13 @@ initvalues(start_info_t *startinfo)
i < (((vm_offset_t)&etext) & ~PAGE_MASK); i += PAGE_SIZE)
PT_SET_MA(i, VTOM(i) | PG_V | PG_A);
- printk("#7\n");
+ xc_printf("#7\n");
physfree = VTOP(cur_space);
init_first = physfree >> PAGE_SHIFT;
IdlePTD = (pd_entry_t *)VTOP(IdlePTD);
IdlePDPT = (pd_entry_t *)VTOP(IdlePDPT);
setup_xen_features();
- printk("#8, proc0kstack=%u\n", proc0kstack);
+ xc_printf("#8, proc0kstack=%u\n", proc0kstack);
}
@@ -1200,9 +1210,9 @@ HYPERVISOR_multicall(struct multicall_entry * call_list, int nr_calls)
/* Check the results of individual hypercalls. */
for (i = 0; i < nr_calls; i++)
- if (unlikely(call_list[i].result < 0))
+ if (__predict_false(call_list[i].result < 0))
ret++;
- if (unlikely(ret > 0))
+ if (__predict_false(ret > 0))
panic("%d multicall(s) failed: cpu %d\n",
ret, smp_processor_id());
OpenPOWER on IntegriCloud