From 563f5ebfcc413f153e9cb99d997ce2dabd920eb5 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 7 Feb 2008 09:15:59 +0000 Subject: minios: Support net/block backend in domU Signed-off-by: Samuel Thibault --- extras/mini-os/blkfront.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'extras/mini-os/blkfront.c') diff --git a/extras/mini-os/blkfront.c b/extras/mini-os/blkfront.c index 0c77d6d1e4..f07900580b 100644 --- a/extras/mini-os/blkfront.c +++ b/extras/mini-os/blkfront.c @@ -35,6 +35,8 @@ struct blk_buffer { }; struct blkfront_dev { + domid_t dom; + struct blkif_front_ring ring; grant_ref_t ring_ref; evtchn_port_t evtchn, local_port; @@ -81,24 +83,24 @@ struct blkfront_dev *init_blkfront(char *nodename, uint64_t *sectors, unsigned * dev = malloc(sizeof(*dev)); dev->nodename = strdup(nodename); - s = (struct blkif_sring*) alloc_page(); - memset(s,0,PAGE_SIZE); - - - SHARED_RING_INIT(s); - FRONT_RING_INIT(&dev->ring, s, PAGE_SIZE); - - dev->ring_ref = gnttab_grant_access(0,virt_to_mfn(s),0); - evtchn_alloc_unbound_t op; op.dom = DOMID_SELF; snprintf(path, sizeof(path), "%s/backend-id", nodename); - op.remote_dom = xenbus_read_integer(path); + dev->dom = op.remote_dom = xenbus_read_integer(path); HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op); clear_evtchn(op.port); /* Without, handler gets invoked now! */ dev->local_port = bind_evtchn(op.port, blkfront_handler, dev); dev->evtchn=op.port; + s = (struct blkif_sring*) alloc_page(); + memset(s,0,PAGE_SIZE); + + + SHARED_RING_INIT(s); + FRONT_RING_INIT(&dev->ring, s, PAGE_SIZE); + + dev->ring_ref = gnttab_grant_access(dev->dom,virt_to_mfn(s),0); + // FIXME: proper frees on failures again: err = xenbus_transaction_start(&xbt); @@ -280,7 +282,7 @@ void blkfront_aio(struct blkfront_aiocb *aiocbp, int write) barrier(); } aiocbp->gref[j] = req->seg[j].gref = - gnttab_grant_access(0, virtual_to_mfn(data), write); + gnttab_grant_access(dev->dom, virtual_to_mfn(data), write); req->seg[j].first_sect = 0; req->seg[j].last_sect = PAGE_SIZE / dev->sector_size - 1; } -- cgit v1.2.3