From: Paul Durrant Date: Mon, 4 Feb 2019 16:44:35 +0000 (+0000) Subject: Use new resource mapping API X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;p=people%2Fpauldu%2Fdemu.git Use new resource mapping API Also rename 'iopage' to 'shared_iopage'. Signed-off-by: Paul Durrant --- diff --git a/demu.c b/demu.c index 3f0ca16..f785b39 100644 --- a/demu.c +++ b/demu.c @@ -117,8 +117,7 @@ typedef enum { DEMU_SEQ_XENFOREIGNMEMORY_OPEN, DEMU_SEQ_XENDEVICEMODEL_OPEN, DEMU_SEQ_SERVER_REGISTERED, - DEMU_SEQ_SHARED_IOPAGE_MAPPED, - DEMU_SEQ_BUFFERED_IOPAGE_MAPPED, + DEMU_SEQ_RESOURCE_MAPPED, DEMU_SEQ_SERVER_ENABLED, DEMU_SEQ_PORT_ARRAY_ALLOCATED, DEMU_SEQ_PORTS_BOUND, @@ -137,7 +136,8 @@ typedef struct demu_state { domid_t domid; unsigned int vcpus; ioservid_t ioservid; - shared_iopage_t *iopage; + xenforeignmemory_resource_handle *resource; + shared_iopage_t *shared_iopage; evtchn_port_t *ioreq_local_port; buffered_iopage_t *buffered_iopage; evtchn_port_t buf_ioreq_port; @@ -261,13 +261,9 @@ demu_seq_next(void) DBG("ioservid = %u\n", demu_state.ioservid); break; - case DEMU_SEQ_SHARED_IOPAGE_MAPPED: - DBG(">SHARED_IOPAGE_MAPPED\n"); - DBG("iopage = %p\n", demu_state.iopage); - break; - - case DEMU_SEQ_BUFFERED_IOPAGE_MAPPED: - DBG(">BUFFERED_IOPAGE_MAPPED\n"); + case DEMU_SEQ_RESOURCE_MAPPED: + DBG(">RESOURCE_MAPPED\n"); + DBG("shared iopage = %p\n", demu_state.shared_iopage); DBG("buffered_iopage = %p\n", demu_state.buffered_iopage); break; @@ -286,7 +282,7 @@ demu_seq_next(void) for (i = 0; i < demu_state.vcpus; i++) DBG("VCPU%d: %u -> %u\n", i, - demu_state.iopage->vcpu_ioreq[i].vp_eport, + demu_state.shared_iopage->vcpu_ioreq[i].vp_eport, demu_state.ioreq_local_port[i]); break; @@ -376,21 +372,14 @@ demu_teardown(void) demu_state.ioservid, 0); - demu_state.seq = DEMU_SEQ_BUFFERED_IOPAGE_MAPPED; - } - - if (demu_state.seq >= DEMU_SEQ_BUFFERED_IOPAGE_MAPPED) { - DBG("= DEMU_SEQ_SHARED_IOPAGE_MAPPED) { - DBG("= DEMU_SEQ_RESOURCE_MAPPED) { + DBG("vcpu_ioreq[i].vp_eport; + port = demu_state.shared_iopage->vcpu_ioreq[i].vp_eport; rc = xenevtchn_bind_interdomain(demu_state.xeh, demu_state.domid, port); if (rc < 0) - goto fail12; + goto fail11; demu_state.ioreq_local_port[i] = rc; } @@ -575,7 +559,7 @@ demu_initialize(domid_t domid, unsigned int device, unsigned int function) rc = xenevtchn_bind_interdomain(demu_state.xeh, demu_state.domid, buf_port); if (rc < 0) - goto fail13; + goto fail12; demu_state.buf_ioreq_local_port = rc; @@ -584,7 +568,7 @@ demu_initialize(domid_t domid, unsigned int device, unsigned int function) rc = device_initialize(demu_state.xdh, demu_state.domid, demu_state.ioservid, 0, device, function); if (rc < 0) - goto fail14; + goto fail13; demu_seq_next(); @@ -593,9 +577,6 @@ demu_initialize(domid_t domid, unsigned int device, unsigned int function) assert(demu_state.seq == DEMU_SEQ_INITIALIZED); return 0; -fail14: - DBG("fail14\n"); - fail13: DBG("fail13\n"); @@ -695,14 +676,14 @@ demu_poll_buffered_iopage(void) } static void -demu_poll_iopage(unsigned int i) +demu_poll_shared_iopage(unsigned int i) { ioreq_t *ioreq; if (demu_state.seq != DEMU_SEQ_INITIALIZED) return; - ioreq = &demu_state.iopage->vcpu_ioreq[i]; + ioreq = &demu_state.shared_iopage->vcpu_ioreq[i]; if (ioreq->state != STATE_IOREQ_READY) { fprintf(stderr, "IO request not ready\n"); return; @@ -740,7 +721,7 @@ demu_poll_iopages(void) for (i = 0; i < demu_state.vcpus; i++) { if (port == demu_state.ioreq_local_port[i]) { xenevtchn_unmask(demu_state.xeh, port); - demu_poll_iopage(i); + demu_poll_shared_iopage(i); } } }