[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] minios: Support net/block backend in domU



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1202375759 0
# Node ID c9844192c9651aab174d365648acc035897c193b
# Parent  b280ee89dcdcccd85c81c7c678f835de3ea65c33
minios: Support net/block backend in domU

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
---
 extras/mini-os/blkfront.c |   24 +++++++++++++-----------
 extras/mini-os/netfront.c |   30 ++++++++++++++++--------------
 2 files changed, 29 insertions(+), 25 deletions(-)

diff -r b280ee89dcdc -r c9844192c965 extras/mini-os/blkfront.c
--- a/extras/mini-os/blkfront.c Wed Feb 06 18:31:02 2008 +0000
+++ b/extras/mini-os/blkfront.c Thu Feb 07 09:15:59 2008 +0000
@@ -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,23 +83,23 @@ struct blkfront_dev *init_blkfront(char 
     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:
@@ -280,7 +282,7 @@ void blkfront_aio(struct blkfront_aiocb 
             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;
     }
diff -r b280ee89dcdc -r c9844192c965 extras/mini-os/netfront.c
--- a/extras/mini-os/netfront.c Wed Feb 06 18:31:02 2008 +0000
+++ b/extras/mini-os/netfront.c Thu Feb 07 09:15:59 2008 +0000
@@ -33,6 +33,8 @@ struct net_buffer {
 };
 
 struct netfront_dev {
+    domid_t dom;
+
     unsigned short tx_freelist[NET_TX_RING_SIZE];
     struct semaphore tx_sem;
 
@@ -141,7 +143,7 @@ moretodo:
 
         /* We are sure to have free gnttab entries since they got released 
above */
         buf->gref = req->gref = 
-            gnttab_grant_access(0,virt_to_mfn(page),0);
+            gnttab_grant_access(dev->dom,virt_to_mfn(page),0);
 
         req->id = id;
     }
@@ -258,6 +260,15 @@ struct netfront_dev *init_netfront(char 
         dev->rx_buffers[i].page = (char*)alloc_page();
     }
 
+    evtchn_alloc_unbound_t op;
+    op.dom = DOMID_SELF;
+    snprintf(path, sizeof(path), "%s/backend-id", nodename);
+    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, netfront_handler, dev);
+    dev->evtchn=op.port;
+
     txs = (struct netif_tx_sring*) alloc_page();
     rxs = (struct netif_rx_sring *) alloc_page();
     memset(txs,0,PAGE_SIZE);
@@ -269,17 +280,8 @@ struct netfront_dev *init_netfront(char 
     FRONT_RING_INIT(&dev->tx, txs, PAGE_SIZE);
     FRONT_RING_INIT(&dev->rx, rxs, PAGE_SIZE);
 
-    dev->tx_ring_ref = gnttab_grant_access(0,virt_to_mfn(txs),0);
-    dev->rx_ring_ref = gnttab_grant_access(0,virt_to_mfn(rxs),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);
-    HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound, &op);
-    clear_evtchn(op.port);        /* Without, handler gets invoked now! */
-    dev->local_port = bind_evtchn(op.port, netfront_handler, dev);
-    dev->evtchn=op.port;
+    dev->tx_ring_ref = gnttab_grant_access(dev->dom,virt_to_mfn(txs),0);
+    dev->rx_ring_ref = gnttab_grant_access(dev->dom,virt_to_mfn(rxs),0);
 
     dev->netif_rx = thenetif_rx;
 
@@ -416,7 +418,7 @@ void init_rx_buffers(struct netfront_dev
         req = RING_GET_REQUEST(&dev->rx, requeue_idx);
 
         buf->gref = req->gref = 
-            gnttab_grant_access(0,virt_to_mfn(buf->page),0);
+            gnttab_grant_access(dev->dom,virt_to_mfn(buf->page),0);
 
         req->id = requeue_idx;
 
@@ -461,7 +463,7 @@ void netfront_xmit(struct netfront_dev *
     memcpy(page,data,len);
 
     buf->gref = 
-        tx->gref = gnttab_grant_access(0,virt_to_mfn(page),0);
+        tx->gref = gnttab_grant_access(dev->dom,virt_to_mfn(page),1);
 
     tx->offset=0;
     tx->size = len;

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.