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

[Xen-changelog] Allocate separate vm areas for rx and tx rings in netback



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 2cc09c21cdba90a7541031d200f590935b9fed58
# Parent  6f62ad959f6b6d7fd98b2adfb3f07a9a15613e07
Allocate separate vm areas for rx and tx rings in netback
driver as part of preparation for ia64 support.

Signed-off-by: Dan Magenheimer <dan.magenheimer@xxxxxx>

diff -r 6f62ad959f6b -r 2cc09c21cdba 
linux-2.6-xen-sparse/drivers/xen/netback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/netback/common.h Thu Dec  8 15:53:53 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/common.h Thu Dec  8 15:58:41 2005
@@ -55,7 +55,8 @@
        /* The shared rings and indexes. */
        netif_tx_back_ring_t tx;
        netif_rx_back_ring_t rx;
-       struct vm_struct *comms_area;
+       struct vm_struct *tx_comms_area;
+       struct vm_struct *rx_comms_area;
 
        /* Allow netif_be_start_xmit() to peek ahead in the rx request ring. */
        RING_IDX rx_req_cons_peek;
diff -r 6f62ad959f6b -r 2cc09c21cdba 
linux-2.6-xen-sparse/drivers/xen/netback/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c      Thu Dec  8 
15:53:53 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c      Thu Dec  8 
15:58:41 2005
@@ -117,14 +117,14 @@
        struct gnttab_map_grant_ref op;
        int ret;
 
-       op.host_addr = (unsigned long)netif->comms_area->addr;
+       op.host_addr = (unsigned long)netif->tx_comms_area->addr;
        op.flags     = GNTMAP_host_map;
        op.ref       = tx_ring_ref;
        op.dom       = netif->domid;
     
-       lock_vm_area(netif->comms_area);
+       lock_vm_area(netif->tx_comms_area);
        ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &op, 1);
-       unlock_vm_area(netif->comms_area);
+       unlock_vm_area(netif->tx_comms_area);
        BUG_ON(ret);
 
        if (op.status) { 
@@ -135,14 +135,14 @@
        netif->tx_shmem_ref    = tx_ring_ref;
        netif->tx_shmem_handle = op.handle;
 
-       op.host_addr = (unsigned long)netif->comms_area->addr + PAGE_SIZE;
+       op.host_addr = (unsigned long)netif->rx_comms_area->addr;
        op.flags     = GNTMAP_host_map;
        op.ref       = rx_ring_ref;
        op.dom       = netif->domid;
 
-       lock_vm_area(netif->comms_area);
+       lock_vm_area(netif->rx_comms_area);
        ret = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref, &op, 1);
-       unlock_vm_area(netif->comms_area);
+       unlock_vm_area(netif->rx_comms_area);
        BUG_ON(ret);
 
        if (op.status) {
@@ -161,22 +161,22 @@
        struct gnttab_unmap_grant_ref op;
        int ret;
 
-       op.host_addr    = (unsigned long)netif->comms_area->addr;
+       op.host_addr    = (unsigned long)netif->tx_comms_area->addr;
        op.handle       = netif->tx_shmem_handle;
        op.dev_bus_addr = 0;
 
-       lock_vm_area(netif->comms_area);
+       lock_vm_area(netif->tx_comms_area);
        ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1);
-       unlock_vm_area(netif->comms_area);
+       unlock_vm_area(netif->tx_comms_area);
        BUG_ON(ret);
 
-       op.host_addr    = (unsigned long)netif->comms_area->addr + PAGE_SIZE;
+       op.host_addr    = (unsigned long)netif->rx_comms_area->addr;
        op.handle       = netif->rx_shmem_handle;
        op.dev_bus_addr = 0;
 
-       lock_vm_area(netif->comms_area);
+       lock_vm_area(netif->rx_comms_area);
        ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref, &op, 1);
-       unlock_vm_area(netif->comms_area);
+       unlock_vm_area(netif->rx_comms_area);
        BUG_ON(ret);
 }
 
@@ -195,20 +195,23 @@
        if (netif->irq)
                return 0;
 
-       netif->comms_area = alloc_vm_area(2*PAGE_SIZE);
-       if (netif->comms_area == NULL)
+       netif->tx_comms_area = alloc_vm_area(PAGE_SIZE);
+       netif->rx_comms_area = alloc_vm_area(PAGE_SIZE);
+       if (netif->tx_comms_area == NULL || netif->rx_comms_area == NULL)
                return -ENOMEM;
 
        err = map_frontend_pages(netif, tx_ring_ref, rx_ring_ref);
        if (err) {
-               free_vm_area(netif->comms_area);
+               free_vm_area(netif->tx_comms_area);
+               free_vm_area(netif->rx_comms_area);
                return err;
        }
 
        err = HYPERVISOR_event_channel_op(&op);
        if (err) {
                unmap_frontend_pages(netif);
-               free_vm_area(netif->comms_area);
+               free_vm_area(netif->tx_comms_area);
+               free_vm_area(netif->rx_comms_area);
                return err;
        }
 
@@ -218,11 +221,11 @@
                netif->evtchn, netif_be_int, 0, netif->dev->name, netif);
        disable_irq(netif->irq);
 
-       txs = (netif_tx_sring_t *)netif->comms_area->addr;
+       txs = (netif_tx_sring_t *)netif->tx_comms_area->addr;
        BACK_RING_INIT(&netif->tx, txs, PAGE_SIZE);
 
        rxs = (netif_rx_sring_t *)
-               ((char *)netif->comms_area->addr + PAGE_SIZE);
+               ((char *)netif->rx_comms_area->addr);
        BACK_RING_INIT(&netif->rx, rxs, PAGE_SIZE);
 
        netif->rx_req_cons_peek = 0;
@@ -255,7 +258,8 @@
 
        if (netif->tx.sring) {
                unmap_frontend_pages(netif);
-               free_vm_area(netif->comms_area);
+               free_vm_area(netif->tx_comms_area);
+               free_vm_area(netif->rx_comms_area);
        }
 
        free_netdev(netif->dev);

_______________________________________________
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®.