distclean: clean
daemon/main.o: daemon/_paths.h
-daemon/io.o: CFLAGS += $(CFLAGS_libxenevtchn) $(CFLAGS_libxengnttab) $(CONSOLE_CFLAGS-y)
+daemon/io.o: CFLAGS += $(CFLAGS_libxenevtchn) $(CFLAGS_libxengnttab) $(CFLAGS_libxenforeignmemory) $(CONSOLE_CFLAGS-y)
xenconsoled: $(patsubst %.c,%.o,$(wildcard daemon/*.c))
- $(CC) $(LDFLAGS) $^ -o $@ $(LDLIBS) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_xenconsoled) $(APPEND_LDFLAGS)
+ $(CC) $(LDFLAGS) $^ -o $@ $(LDLIBS) $(LDLIBS_libxenevtchn) $(LDLIBS_libxengnttab) $(LDLIBS_libxenforeignmemory) $(LDLIBS_xenconsoled) $(APPEND_LDFLAGS)
client/main.o: client/_paths.h
xenconsole: $(patsubst %.c,%.o,$(wildcard client/*.c))
#include "utils.h"
#include "io.h"
#include <xenevtchn.h>
+#include <xenforeignmemory.h>
#include <xengnttab.h>
#include <xenstore.h>
#include <xen/io/console.h>
static int log_hv_fd = -1;
static xengnttab_handle *xgt_handle = NULL;
+static xenforeignmemory_handle *xfm_handle;
static struct pollfd *fds;
static unsigned int current_array_size;
if (xgt_handle && con->ring_ref == -1)
xengnttab_unmap(xgt_handle, con->interface, 1);
else
- munmap(con->interface, XC_PAGE_SIZE);
+ xenforeignmemory_unmap(xfm_handle, con->interface, 1);
con->interface = NULL;
con->ring_ref = -1;
}
con->ring_ref = -1;
}
if (!con->interface) {
+ xen_pfn_t pfn = ring_ref;
+
/* Fall back to xc_map_foreign_range */
- con->interface = xc_map_foreign_range(
- xc, dom->domid, XC_PAGE_SIZE,
- PROT_READ|PROT_WRITE,
- (unsigned long)ring_ref);
+ con->interface = xenforeignmemory_map(
+ xfm_handle, dom->domid, PROT_READ|PROT_WRITE, 1,
+ &pfn, NULL);
if (con->interface == NULL) {
err = EINVAL;
goto out;
errno, strerror(errno));
}
+ xfm_handle = xenforeignmemory_open(NULL, 0);
+ if (xfm_handle == NULL) {
+ dolog(LOG_ERR,
+ "Failed to open xen foreign memory handle: %d (%s)",
+ errno, strerror(errno));
+ goto out;
+ }
+
enum_domains();
for (;;) {
xengnttab_close(xgt_handle);
xgt_handle = NULL;
}
+ if (xfm_handle != NULL) {
+ xenforeignmemory_close(xfm_handle);
+ xfm_handle = NULL;
+ }
log_hv_evtchn = -1;
}