@@ -219,6 +219,7 @@ static int con_initialise(struct XenDevice *xendev)
{
struct XenConsole *con = container_of(xendev, struct XenConsole, xendev);
int limit;
+ int err;
if (xenstore_read_int(con->console, "ring-ref", &con->ring_ref) == -1)
return -1;
@@ -228,10 +229,10 @@ static int con_initialise(struct XenDevice *xendev)
con->buffer.max_capacity = limit;
if (!xendev->dev) {
- con->sring = xc_map_foreign_range(xen_xc, con->xendev.dom,
- XC_PAGE_SIZE,
- PROT_READ|PROT_WRITE,
- con->ring_ref);
+ xen_pfn_t mfn = con->ring_ref;
+ con->sring = xc_map_foreign_bulk(xen_xc, con->xendev.dom,
+ PROT_READ|PROT_WRITE,
+ &mfn, &err, 1);
} else {
con->sring = xengnttab_map_grant_ref(xendev->gnttabdev, con->xendev.dom,
con->ring_ref,
@@ -96,6 +96,7 @@ struct XenFB {
static int common_bind(struct common *c)
{
uint64_t mfn;
+ int err;
if (xenstore_read_fe_uint64(&c->xendev, "page-ref", &mfn) == -1)
return -1;
@@ -104,9 +105,8 @@ static int common_bind(struct common *c)
if (xenstore_read_fe_int(&c->xendev, "event-channel", &c->xendev.remote_port) == -1)
return -1;
- c->page = xc_map_foreign_range(xen_xc, c->xendev.dom,
- XC_PAGE_SIZE,
- PROT_READ | PROT_WRITE, mfn);
+ c->page = xc_map_foreign_bulk(xen_xc, c->xendev.dom,
+ PROT_READ | PROT_WRITE, &mfn, &err, 1);
if (c->page == NULL)
return -1;
@@ -1193,7 +1193,7 @@ static void xen_wakeup_notifier(Notifier *notifier, void *data)
int xen_hvm_init(PCMachineState *pcms,
MemoryRegion **ram_memory)
{
- int i, rc;
+ int i, rc, map_err;
xen_pfn_t ioreq_pfn;
xen_pfn_t bufioreq_pfn;
evtchn_port_t bufioreq_evtchn;
@@ -1240,33 +1240,35 @@ int xen_hvm_init(PCMachineState *pcms,
DPRINTF("buffered io page at pfn %lx\n", bufioreq_pfn);
DPRINTF("buffered io evtchn is %x\n", bufioreq_evtchn);
- state->shared_page = xc_map_foreign_range(xen_xc, xen_domid, XC_PAGE_SIZE,
- PROT_READ|PROT_WRITE, ioreq_pfn);
+ state->shared_page = xc_map_foreign_bulk(xen_xc, xen_domid,
+ PROT_READ|PROT_WRITE,
+ &ioreq_pfn, &map_err, 1);
if (state->shared_page == NULL) {
- hw_error("map shared IO page returned error %d handle=" XC_INTERFACE_FMT,
- errno, xen_xc);
+ hw_error(
+ "map shared IO page returned error %d(%d) handle=" XC_INTERFACE_FMT,
+ errno, map_err, xen_xc);
}
rc = xen_get_vmport_regs_pfn(xen_xc, xen_domid, &ioreq_pfn);
if (!rc) {
DPRINTF("shared vmport page at pfn %lx\n", ioreq_pfn);
state->shared_vmport_page =
- xc_map_foreign_range(xen_xc, xen_domid, XC_PAGE_SIZE,
- PROT_READ|PROT_WRITE, ioreq_pfn);
+ xc_map_foreign_bulk(xen_xc, xen_domid, PROT_READ|PROT_WRITE,
+ &ioreq_pfn, &map_err, 1);
if (state->shared_vmport_page == NULL) {
- hw_error("map shared vmport IO page returned error %d handle="
- XC_INTERFACE_FMT, errno, xen_xc);
+ hw_error("map shared vmport IO page returned error %d (%d) handle="
+ XC_INTERFACE_FMT, errno, map_err, xen_xc);
}
} else if (rc != -ENOSYS) {
hw_error("get vmport regs pfn returned error %d, rc=%d", errno, rc);
}
- state->buffered_io_page = xc_map_foreign_range(xen_xc, xen_domid,
- XC_PAGE_SIZE,
- PROT_READ|PROT_WRITE,
- bufioreq_pfn);
+ state->buffered_io_page = xc_map_foreign_bulk(xen_xc, xen_domid,
+ PROT_READ|PROT_WRITE,
+ &bufioreq_pfn,
+ &map_err, 1);
if (state->buffered_io_page == NULL) {
- hw_error("map buffered IO page returned error %d", errno);
+ hw_error("map buffered IO page returned error %d (%d)", errno, map_err);
}
/* Note: cpus is empty at this point in init */