More cleanups and g/c of unused code.
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Thu, 25 Aug 2005 14:40:15 +0000 (14:40 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Thu, 25 Aug 2005 14:40:15 +0000 (14:40 +0000)
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
linux-2.6-xen-sparse/drivers/xen/netback/common.h
linux-2.6-xen-sparse/drivers/xen/netback/interface.c
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
linux-2.6-xen-sparse/drivers/xen/netback/xenbus.c

index f98a526ddbbb88e711537430a94c0be54465d6d9..29306ec77f247edfaa1114d73c55cd34575af4f0 100644 (file)
@@ -83,12 +83,6 @@ typedef struct netif_st {
     /* Miscellaneous private stuff. */
     enum { DISCONNECTED, DISCONNECTING, CONNECTED } status;
     int active;
-    /*
-     * DISCONNECT response is deferred until pending requests are ack'ed.
-     * We therefore need to store the id from the original request.
-     */
-    u8               disconnect_rspid;
-    struct netif_st *hash_next;
     struct list_head list;  /* scheduling list */
     atomic_t         refcnt;
     struct net_device *dev;
@@ -97,12 +91,8 @@ typedef struct netif_st {
     struct work_struct free_work;
 } netif_t;
 
-int netif_create(netif_t *netif);
-void netif_destroy(netif_be_destroy_t *destroy);
-void netif_creditlimit(netif_be_creditlimit_t *creditlimit);
-int  netif_disconnect(netif_be_disconnect_t *disconnect, u8 rsp_id);
-void netif_disconnect_complete(netif_t *netif);
-netif_t *netif_find_by_handle(domid_t domid, unsigned int handle);
+void netif_creditlimit(netif_t *netif);
+int  netif_disconnect(netif_t *netif);
 
 netif_t *alloc_netif(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN]);
 void free_netif_callback(netif_t *netif);
@@ -116,8 +106,7 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref,
             free_netif_callback(_b);              \
     } while (0)
 
-void netif_interface_init(void);
-void netif_ctrlif_init(void);
+void netif_xenbus_init(void);
 
 void netif_schedule_work(netif_t *netif);
 void netif_deschedule_work(netif_t *netif);
index e34662b786631b40eaa6846359a4207b4caab67d..eddb04d36f480ca1092367c9a4c1c92a82d66920 100644 (file)
@@ -9,20 +9,6 @@
 #include "common.h"
 #include <linux/rtnetlink.h>
 
-#define NETIF_HASHSZ 1024
-#define NETIF_HASH(_d,_h) (((int)(_d)^(int)(_h))&(NETIF_HASHSZ-1))
-
-static netif_t *netif_hash[NETIF_HASHSZ];
-
-netif_t *netif_find_by_handle(domid_t domid, unsigned int handle)
-{
-    netif_t *netif = netif_hash[NETIF_HASH(domid, handle)];
-    while ( (netif != NULL) && 
-            ((netif->domid != domid) || (netif->handle != handle)) )
-        netif = netif->hash_next;
-    return netif;
-}
-
 static void __netif_up(netif_t *netif)
 {
     struct net_device *dev = netif->dev;
@@ -47,7 +33,7 @@ static void __netif_down(netif_t *netif)
 static int net_open(struct net_device *dev)
 {
     netif_t *netif = netdev_priv(dev);
-    if ( netif->status == CONNECTED )
+    if (netif->status == CONNECTED)
         __netif_up(netif);
     netif_start_queue(dev);
     return 0;
@@ -57,7 +43,7 @@ static int net_close(struct net_device *dev)
 {
     netif_t *netif = netdev_priv(dev);
     netif_stop_queue(dev);
-    if ( netif->status == CONNECTED )
+    if (netif->status == CONNECTED)
         __netif_down(netif);
     return 0;
 }
@@ -66,15 +52,13 @@ netif_t *alloc_netif(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
 {
     int err = 0, i;
     struct net_device *dev;
-    netif_t **pnetif, *netif;
+    netif_t *netif;
     char name[IFNAMSIZ] = {};
 
     snprintf(name, IFNAMSIZ - 1, "vif%u.%u", domid, handle);
     dev = alloc_netdev(sizeof(netif_t), name, ether_setup);
-    if ( dev == NULL )
-    {
+    if (dev == NULL) {
         DPRINTK("Could not create netif: out of memory\n");
-        // create->status = NETIF_BE_STATUS_OUT_OF_MEMORY;
         return NULL;
     }
 
@@ -90,19 +74,6 @@ netif_t *alloc_netif(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
     netif->credit_usec  = 0UL;
     init_timer(&netif->credit_timeout);
 
-    pnetif = &netif_hash[NETIF_HASH(domid, handle)];
-    while ( *pnetif != NULL )
-    {
-        if ( ((*pnetif)->domid == domid) && ((*pnetif)->handle == handle) )
-        {
-            DPRINTK("Could not create netif: already exists\n");
-            // create->status = NETIF_BE_STATUS_INTERFACE_EXISTS;
-            free_netdev(dev);
-            return NULL;
-        }
-        pnetif = &(*pnetif)->hash_next;
-    }
-
     dev->hard_start_xmit = netif_be_start_xmit;
     dev->get_stats       = netif_be_get_stats;
     dev->open            = net_open;
@@ -115,8 +86,7 @@ netif_t *alloc_netif(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
     for (i = 0; i < ETH_ALEN; i++)
        if (be_mac[i] != 0)
            break;
-    if (i == ETH_ALEN)
-    {
+    if (i == ETH_ALEN) {
         /*
          * Initialise a dummy MAC address. We choose the numerically largest
          * non-broadcast address to prevent the address getting stolen by an
@@ -124,30 +94,20 @@ netif_t *alloc_netif(domid_t domid, unsigned int handle, u8 be_mac[ETH_ALEN])
          */ 
         memset(dev->dev_addr, 0xFF, ETH_ALEN);
         dev->dev_addr[0] &= ~0x01;
-    }
-    else
-    {
+    } else
         memcpy(dev->dev_addr, be_mac, ETH_ALEN);
-    }
 
     rtnl_lock();
     err = register_netdevice(dev);
     rtnl_unlock();
-
-    if ( err != 0 )
-    {
+    if (err) {
         DPRINTK("Could not register new net device %s: err=%d\n",
                 dev->name, err);
-        // create->status = NETIF_BE_STATUS_OUT_OF_MEMORY;
         free_netdev(dev);
         return NULL;
     }
 
-    netif->hash_next = *pnetif;
-    *pnetif = netif;
-
     DPRINTK("Successfully created netif\n");
-    // create->status = NETIF_BE_STATUS_OKAY;
     return netif;
 }
 
@@ -245,17 +205,9 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref,
     evtchn_op_t op = { .cmd = EVTCHNOP_bind_interdomain };
     int err;
 
-#if 0
-    if ( netif->status != DISCONNECTED ) {
-        connect->status = NETIF_BE_STATUS_INTERFACE_CONNECTED;
-        return;
-    }
-#endif
-
-    if ( (vma = get_vm_area(2*PAGE_SIZE, VM_IOREMAP)) == NULL ) {
-        // connect->status = NETIF_BE_STATUS_OUT_OF_MEMORY;
+    vma = get_vm_area(2*PAGE_SIZE, VM_IOREMAP);
+    if (vma == NULL)
         return -ENOMEM;
-    }
 
     err = map_frontend_page(netif, (unsigned long)vma->addr, tx_ring_ref,
                            rx_ring_ref);
@@ -278,12 +230,8 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref,
     netif->evtchn = op.u.bind_interdomain.port1;
     netif->remote_evtchn = evtchn;
 
-    netif->tx_shmem_frame = tx_ring_ref;
-    netif->rx_shmem_frame = rx_ring_ref;
-    netif->tx             = 
-        (netif_tx_interface_t *)vma->addr;
-    netif->rx             = 
-        (netif_rx_interface_t *)((char *)vma->addr + PAGE_SIZE);
+    netif->tx = (netif_tx_interface_t *)vma->addr;
+    netif->rx = (netif_rx_interface_t *)((char *)vma->addr + PAGE_SIZE);
     netif->tx->resp_prod = netif->rx->resp_prod = 0;
     netif_get(netif);
     wmb(); /* Other CPUs see new state before interface is started. */
@@ -291,17 +239,17 @@ int netif_map(netif_t *netif, unsigned long tx_ring_ref,
     rtnl_lock();
     netif->status = CONNECTED;
     wmb();
-    if ( netif_running(netif->dev) )
+    if (netif_running(netif->dev))
         __netif_up(netif);
     rtnl_unlock();
 
-    // connect->status = NETIF_BE_STATUS_OKAY;
     return 0;
 }
 
 static void free_netif(void *arg)
 {
-    netif_t              *netif = (netif_t *)arg;
+    evtchn_op_t op = { .cmd = EVTCHNOP_close };
+    netif_t *netif = (netif_t *)arg;
 
     /*
      * These can't be done in netif_disconnect() because at that point there
@@ -309,10 +257,21 @@ static void free_netif(void *arg)
      * responses must still be notified to the remote driver.
      */
 
-    unmap_frontend_page(netif);
-    vfree(netif->tx); /* Frees netif->rx as well. */
+    op.u.close.port = netif->evtchn;
+    op.u.close.dom = DOMID_SELF;
+    HYPERVISOR_event_channel_op(&op);
+    op.u.close.port = netif->remote_evtchn;
+    op.u.close.dom = netif->domid;
+    HYPERVISOR_event_channel_op(&op);
 
-    netif->status = DISCONNECTED;
+    unregister_netdev(netif->dev);
+
+    if (netif->tx) {
+       unmap_frontend_page(netif);
+       vfree(netif->tx); /* Frees netif->rx as well. */
+    }
+
+    free_netdev(netif->dev);
 }
 
 void free_netif_callback(netif_t *netif)
@@ -321,59 +280,14 @@ void free_netif_callback(netif_t *netif)
     schedule_work(&netif->free_work);
 }
 
-void netif_destroy(netif_be_destroy_t *destroy)
-{
-    domid_t       domid  = destroy->domid;
-    unsigned int  handle = destroy->netif_handle;
-    netif_t     **pnetif, *netif;
-
-    pnetif = &netif_hash[NETIF_HASH(domid, handle)];
-    while ( (netif = *pnetif) != NULL )
-    {
-        if ( (netif->domid == domid) && (netif->handle == handle) )
-        {
-            if ( netif->status != DISCONNECTED )
-                goto still_connected;
-            goto destroy;
-        }
-        pnetif = &netif->hash_next;
-    }
-
-    destroy->status = NETIF_BE_STATUS_INTERFACE_NOT_FOUND;
-    return;
-
- still_connected:
-    destroy->status = NETIF_BE_STATUS_INTERFACE_CONNECTED;
-    return;
-
- destroy:
-    *pnetif = netif->hash_next;
-    unregister_netdev(netif->dev);
-    free_netdev(netif->dev);
-    destroy->status = NETIF_BE_STATUS_OKAY;
-}
-
-void netif_creditlimit(netif_be_creditlimit_t *creditlimit)
+void netif_creditlimit(netif_t *netif)
 {
-    domid_t       domid  = creditlimit->domid;
-    unsigned int  handle = creditlimit->netif_handle;
-    netif_t      *netif;
-
-    netif = netif_find_by_handle(domid, handle);
-    if ( unlikely(netif == NULL) )
-    {
-        DPRINTK("netif_creditlimit attempted for non-existent netif"
-                " (%u,%u)\n", creditlimit->domid, creditlimit->netif_handle); 
-        creditlimit->status = NETIF_BE_STATUS_INTERFACE_NOT_FOUND;
-        return; 
-    }
-
+#if 0
     /* Set the credit limit (reset remaining credit to new limit). */
     netif->credit_bytes = netif->remaining_credit = creditlimit->credit_bytes;
     netif->credit_usec = creditlimit->period_usec;
 
-    if ( netif->status == CONNECTED )
-    {
+    if (netif->status == CONNECTED) {
         /*
          * Schedule work so that any packets waiting under previous credit 
          * limit are dealt with (acts like a replenishment point).
@@ -381,43 +295,22 @@ void netif_creditlimit(netif_be_creditlimit_t *creditlimit)
         netif->credit_timeout.expires = jiffies;
         netif_schedule_work(netif);
     }
-    
-    creditlimit->status = NETIF_BE_STATUS_OKAY;
+#endif
 }
 
-int netif_disconnect(netif_be_disconnect_t *disconnect, u8 rsp_id)
+int netif_disconnect(netif_t *netif)
 {
-    domid_t       domid  = disconnect->domid;
-    unsigned int  handle = disconnect->netif_handle;
-    netif_t      *netif;
 
-    netif = netif_find_by_handle(domid, handle);
-    if ( unlikely(netif == NULL) )
-    {
-        DPRINTK("netif_disconnect attempted for non-existent netif"
-                " (%u,%u)\n", disconnect->domid, disconnect->netif_handle); 
-        disconnect->status = NETIF_BE_STATUS_INTERFACE_NOT_FOUND;
-        return 1; /* Caller will send response error message. */
-    }
-
-    if ( netif->status == CONNECTED )
-    {
+    if (netif->status == CONNECTED) {
         rtnl_lock();
         netif->status = DISCONNECTING;
-        netif->disconnect_rspid = rsp_id;
         wmb();
-        if ( netif_running(netif->dev) )
+        if (netif_running(netif->dev))
             __netif_down(netif);
         rtnl_unlock();
         netif_put(netif);
         return 0; /* Caller should not send response message. */
     }
 
-    disconnect->status = NETIF_BE_STATUS_OKAY;
     return 1;
 }
-
-void netif_interface_init(void)
-{
-    memset(netif_hash, 0, sizeof(netif_hash));
-}
index 94b5df09d78fa5b8521086c0788bfc195dc4f696..778438ed4905df982aaa94986facaceac91184ef 100644 (file)
@@ -966,8 +966,6 @@ static int __init netback_init(void)
     net_timer.data = 0;
     net_timer.function = net_alarm;
     
-    netif_interface_init();
-
     page = balloon_alloc_empty_page_range(MAX_PENDING_REQS);
     BUG_ON(page == NULL);
     mmap_vstart = (unsigned long)pfn_to_kaddr(page_to_pfn(page));
index e0302afda3e484e6f3a66d839c1e2d194289d557..c11384d7a8f2d98a4670e5ca1187b638b82365be 100644 (file)
@@ -109,58 +109,18 @@ static void frontend_changed(struct xenbus_watch *watch, const char *node)
                return;
        }
 
-#if 0
-       /* Supply the information about the device the frontend needs */
-       err = xenbus_transaction_start(be->dev->nodename);
-       if (err) {
-               xenbus_dev_error(be->dev, err, "starting transaction");
-               return;
-       }
-
-       err = xenbus_printf(be->dev->nodename, "sectors", "%lu",
-                           vbd_size(&be->blkif->vbd));
-       if (err) {
-               xenbus_dev_error(be->dev, err, "writing %s/sectors",
-                                be->dev->nodename);
-               goto abort;
-       }
-
-       /* FIXME: use a typename instead */
-       err = xenbus_printf(be->dev->nodename, "info", "%u",
-                           vbd_info(&be->blkif->vbd));
-       if (err) {
-               xenbus_dev_error(be->dev, err, "writing %s/info",
-                                be->dev->nodename);
-               goto abort;
-       }
-       err = xenbus_printf(be->dev->nodename, "sector-size", "%lu",
-                           vbd_secsize(&be->blkif->vbd));
-       if (err) {
-               xenbus_dev_error(be->dev, err, "writing %s/sector-size",
-                                be->dev->nodename);
-               goto abort;
-       }
-#endif
-
        /* Map the shared frame, irq etc. */
        err = netif_map(be->netif, tx_ring_ref, rx_ring_ref, evtchn);
        if (err) {
                xenbus_dev_error(be->dev, err,
                                 "mapping shared-frames %lu/%lu port %u",
                                 tx_ring_ref, rx_ring_ref, evtchn);
-               goto abort;
+               return;
        }
 
-#if 0
-       xenbus_transaction_end(0);
-#endif
        xenbus_dev_ok(be->dev);
 
        return;
-
-abort:
-       // xenbus_transaction_end(1);
-       ;
 }
 
 /*