# HG changeset patch
# User cl349@xxxxxxxxxxxxxxxxxxxx
# Node ID 4f73a7bde7b1737d8f4941576460df33396727a6
# Parent bf16d2ca9cc533bd610bfd8a16c48bd5983e94c2
Cleanup unused code.
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
diff -r bf16d2ca9cc5 -r 4f73a7bde7b1
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
--- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c Thu Aug 25
15:46:23 2005
+++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c Thu Aug 25
16:24:51 2005
@@ -115,6 +115,11 @@
#define GRANT_INVALID_REF (0xFFFF)
#endif
+#define NETIF_STATE_DISCONNECTED 0
+#define NETIF_STATE_CONNECTED 1
+
+static unsigned int netif_state = NETIF_STATE_DISCONNECTED;
+
static void network_tx_buf_gc(struct net_device *dev);
static void network_alloc_rx_buffers(struct net_device *dev);
@@ -132,8 +137,6 @@
#define xennet_proc_delif(d) ((void)0)
#endif
-static struct list_head dev_list;
-
#define netfront_info net_private
struct net_private
{
@@ -195,11 +198,13 @@
(_list)[0] = (_list)[_id]; \
(unsigned short)_id; })
+#ifdef DEBUG
static char *be_state_name[] = {
[BEST_CLOSED] = "closed",
[BEST_DISCONNECTED] = "disconnected",
[BEST_CONNECTED] = "connected",
};
+#endif
#ifdef DEBUG
#define DPRINTK(fmt, args...) \
@@ -211,89 +216,6 @@
printk(KERN_INFO "xen_net: " fmt, ##args)
#define WPRINTK(fmt, args...) \
printk(KERN_WARNING "xen_net: " fmt, ##args)
-
-static struct net_device *find_dev_by_handle(unsigned int handle)
-{
- struct list_head *ent;
- struct net_private *np;
- list_for_each (ent, &dev_list) {
- np = list_entry(ent, struct net_private, list);
- if (np->handle == handle)
- return np->netdev;
- }
- return NULL;
-}
-
-/** Network interface info. */
-struct netif_ctrl {
- /** Number of interfaces. */
- int interface_n;
- /** Number of connected interfaces. */
- int connected_n;
- /** Error code. */
- int err;
- int up;
-};
-
-static struct netif_ctrl netctrl;
-
-static void netctrl_init(void)
-{
- memset(&netctrl, 0, sizeof(netctrl));
- netctrl.up = NETIF_DRIVER_STATUS_DOWN;
-}
-
-/** Get or set a network interface error.
- */
-static int netctrl_err(int err)
-{
- if ((err < 0) && !netctrl.err)
- netctrl.err = err;
- return netctrl.err;
-}
-
-/** Test if all network interfaces are connected.
- *
- * @return 1 if all connected, 0 if not, negative error code otherwise
- */
-static int netctrl_connected(void)
-{
- int ok;
-
- if (netctrl.err)
- ok = netctrl.err;
- else if (netctrl.up == NETIF_DRIVER_STATUS_UP)
- ok = (netctrl.connected_n == netctrl.interface_n);
- else
- ok = 0;
-
- return ok;
-}
-
-/** Count the connected network interfaces.
- *
- * @return connected count
- */
-static int netctrl_connected_count(void)
-{
-
- struct list_head *ent;
- struct net_private *np;
- unsigned int connected;
-
- connected = 0;
-
- list_for_each(ent, &dev_list) {
- np = list_entry(ent, struct net_private, list);
- if (np->backend_state == BEST_CONNECTED)
- connected++;
- }
-
- netctrl.connected_n = connected;
- DPRINTK("> connected_n=%d interface_n=%d\n",
- netctrl.connected_n, netctrl.interface_n);
- return connected;
-}
/** Send a packet on a net device to encourage switches to learn the
* MAC. We send a fake ARP request.
@@ -916,84 +838,6 @@
#endif
}
-/* Stop network device and free tx/rx queues and irq.
- */
-static void shutdown_device(struct net_private *np)
-{
- /* Stop old i/f to prevent errors whilst we rebuild the state. */
- spin_lock_irq(&np->tx_lock);
- spin_lock(&np->rx_lock);
- netif_stop_queue(np->netdev);
- /* np->backend_state = BEST_DISCONNECTED; */
- spin_unlock(&np->rx_lock);
- spin_unlock_irq(&np->tx_lock);
-
- /* Free resources. */
- if (np->tx) {
- unbind_evtchn_from_irqhandler(np->evtchn, np->netdev);
- np->evtchn = 0;
- free_page((unsigned long)np->tx);
- free_page((unsigned long)np->rx);
- np->tx = NULL;
- np->rx = NULL;
- }
-}
-
-/* Release vif resources and close it down completely.
- */
-static void vif_close(struct net_private *np)
-{
- BUG();
- WPRINTK("Unexpected netif-CLOSED message in state %s\n",
- be_state_name[np->backend_state]);
- shutdown_device(np);
- np->backend_state = BEST_CLOSED;
- /* todo: take dev down and free. */
- show_device(np);
-}
-
-/* Move the vif into disconnected state.
- * Allocates tx/rx pages.
- * Sends connect message to xend.
- */
-static void vif_disconnect(struct net_private *np)
-{
- BUG();
- if(np->tx) free_page((unsigned long)np->tx);
- if(np->rx) free_page((unsigned long)np->rx);
- // Before this np->tx and np->rx had better be null.
- np->tx = (netif_tx_interface_t *)__get_free_page(GFP_KERNEL);
- np->rx = (netif_rx_interface_t *)__get_free_page(GFP_KERNEL);
- memset(np->tx, 0, PAGE_SIZE);
- memset(np->rx, 0, PAGE_SIZE);
- np->backend_state = BEST_DISCONNECTED;
- // send_interface_connect(np);
- show_device(np);
-}
-
-/* Begin interface recovery.
- *
- * NB. Whilst we're recovering, we turn the carrier state off. We
- * take measures to ensure that this device isn't used for
- * anything. We also stop the queue for this device. Various
- * different approaches (e.g. continuing to buffer packets) have
- * been tested but don't appear to improve the overall impact on
- * TCP connections.
- *
- * TODO: (MAW) Change the Xend<->Guest protocol so that a recovery
- * is initiated by a special "RESET" message - disconnect could
- * just mean we're not allowed to use this interface any more.
- */
-static void vif_reset(struct net_private *np)
-{
- BUG();
- IPRINTK("Attempting to reconnect network interface: handle=%u\n",
- np->handle);
- shutdown_device(np);
- vif_disconnect(np);
- show_device(np);
-}
-
/* Move the vif into connected state.
* Sets the mac and event channel from the message.
* Binds the irq to the event channel.
@@ -1001,21 +845,20 @@
static void
connect_device(struct net_private *np, unsigned int evtchn)
{
- struct net_device *dev = np->netdev;
- memcpy(dev->dev_addr, np->mac, ETH_ALEN);
- np->evtchn = evtchn;
- network_connect(dev);
- (void)bind_evtchn_to_irqhandler(
- np->evtchn, netif_int, SA_SAMPLE_RANDOM, dev->name, dev);
- netctrl_connected_count();
- (void)send_fake_arp(dev);
- show_device(np);
+ struct net_device *dev = np->netdev;
+ memcpy(dev->dev_addr, np->mac, ETH_ALEN);
+ np->evtchn = evtchn;
+ network_connect(dev);
+ (void)bind_evtchn_to_irqhandler(
+ np->evtchn, netif_int, SA_SAMPLE_RANDOM, dev->name, dev);
+ (void)send_fake_arp(dev);
+ show_device(np);
}
static struct ethtool_ops network_ethtool_ops =
{
- .get_tx_csum = ethtool_op_get_tx_csum,
- .set_tx_csum = ethtool_op_set_tx_csum,
+ .get_tx_csum = ethtool_op_get_tx_csum,
+ .set_tx_csum = ethtool_op_set_tx_csum,
};
/** Create a network device.
@@ -1085,7 +928,6 @@
}
np->netdev = netdev;
- list_add(&np->list, &dev_list);
exit:
if ((err != 0) && (netdev != NULL))
@@ -1114,15 +956,6 @@
}
/*
- * Initialize the network control interface.
- */
-static void netif_driver_status(netif_fe_driver_status_t *status)
-{
- netctrl.up = status->status;
- netctrl_connected_count();
-}
-
-/*
* We use this notifier to send out a fake ARP reply to reset switches and
* router ARP caches when an IP interface is brought up on a VIF.
*/
@@ -1131,19 +964,11 @@
{
struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
struct net_device *dev = ifa->ifa_dev->dev;
- struct list_head *ent;
- struct net_private *np;
-
- if (event != NETDEV_UP)
- goto out;
-
- list_for_each (ent, &dev_list) {
- np = list_entry(ent, struct net_private, list);
- if (np->netdev == dev)
- (void)send_fake_arp(dev);
- }
+
+ /* UP event and is it one of our devices? */
+ if (event == NETDEV_UP && dev->open == network_open)
+ (void)send_fake_arp(dev);
- out:
return NOTIFY_DONE;
}
@@ -1160,41 +985,6 @@
static void watch_for_status(struct xenbus_watch *watch, const char *node)
{
-#if 0
- struct netfront_info *info;
- unsigned int binfo;
- unsigned long sectors, sector_size;
- int err;
-
- info = container_of(watch, struct netfront_info, watch);
- node += strlen(watch->node);
-
- /* FIXME: clean up when error on the other end. */
- if (info->connected == BLKIF_STATE_CONNECTED)
- return;
-
- err = xenbus_gather(watch->node,
- "sectors", "%lu", §ors,
- "info", "%u", &binfo,
- "sector-size", "%lu", §or_size,
- NULL);
- if (err) {
- xenbus_dev_error(info->xbdev, err, "reading backend fields");
- return;
- }
-
- xlvbd_add(sectors, info->vdevice, binfo, sector_size, info);
- info->connected = BLKIF_STATE_CONNECTED;
-
- blkif_state = BLKIF_STATE_CONNECTED;
-
- xenbus_dev_ok(info->xbdev);
-
- /* Kick pending requests. */
- spin_lock_irq(&blkif_io_lock);
- kick_pending_request_queues(info);
- spin_unlock_irq(&blkif_io_lock);
-#endif
}
static int setup_device(struct xenbus_device *dev, struct netfront_info *info)
@@ -1278,6 +1068,44 @@
return err;
}
+static void netif_free(struct netfront_info *info)
+{
+ if (info->tx)
+ free_page((unsigned long)info->tx);
+ info->tx = 0;
+ if (info->rx)
+ free_page((unsigned long)info->rx);
+ info->rx = 0;
+#ifdef CONFIG_XEN_NETDEV_GRANT_TX
+ if (info->tx_ring_ref != GRANT_INVALID_REF)
+ gnttab_end_foreign_access(info->tx_ring_ref, 0);
+ info->tx_ring_ref = GRANT_INVALID_REF;
+#endif
+#ifdef CONFIG_XEN_NETDEV_GRANT_RX
+ if (info->rx_ring_ref != GRANT_INVALID_REF)
+ gnttab_end_foreign_access(info->rx_ring_ref, 0);
+ info->rx_ring_ref = GRANT_INVALID_REF;
+#endif
+ unbind_evtchn_from_irqhandler(info->evtchn, info->netdev);
+ info->evtchn = 0;
+}
+
+/* Stop network device and free tx/rx queues and irq.
+ */
+static void shutdown_device(struct net_private *np)
+{
+ /* Stop old i/f to prevent errors whilst we rebuild the state. */
+ spin_lock_irq(&np->tx_lock);
+ spin_lock(&np->rx_lock);
+ netif_stop_queue(np->netdev);
+ /* np->backend_state = BEST_DISCONNECTED; */
+ spin_unlock(&np->rx_lock);
+ spin_unlock_irq(&np->tx_lock);
+
+ /* Free resources. */
+ netif_free(np);
+}
+
/* Common code used when first setting up, and when resuming. */
static int talk_to_backend(struct xenbus_device *dev,
struct netfront_info *info)
@@ -1373,6 +1201,8 @@
goto destroy_ring;
}
+ netif_state = NETIF_STATE_CONNECTED;
+
out:
if (backend)
kfree(backend);
@@ -1396,9 +1226,9 @@
{
int err;
struct net_device *netdev;
+ struct netfront_info *info;
unsigned int handle;
- printk("netfront_probe %p\n", dev);
err = xenbus_scanf(dev->nodename, "handle", "%u", &handle);
if (XENBUS_EXIST_ERR(err))
return err;
@@ -1407,29 +1237,22 @@
return err;
}
- printk("netfront_probe handle %d\n", handle);
- netdev = find_dev_by_handle(handle);
- printk("netfront_probe found netdev %p\n", netdev);
- if (netdev)
- return 0;
-
err = create_netdev(handle, dev, &netdev);
if (err) {
xenbus_dev_error(dev, err, "creating netdev");
return err;
}
- printk("netfront_probe netdev %p\n", netdev);
- err = talk_to_backend(dev, netdev_priv(netdev));
+ info = netdev_priv(netdev);
+ err = talk_to_backend(dev, info);
if (err) {
destroy_netdev(netdev);
return err;
}
-#if 0
/* Call once in case entries already there. */
watch_for_status(&info->watch, info->watch.node);
-#endif
+
return 0;
}
@@ -1437,17 +1260,12 @@
{
struct netfront_info *info = dev->data;
-#if 0
if (info->backend)
unregister_xenbus_watch(&info->watch);
- if (info->mi)
- xlvbd_del(info);
-
- blkif_free(info);
+ netif_free(info);
kfree(info->backend);
-#endif
kfree(info);
return 0;
@@ -1493,7 +1311,7 @@
static int wait_for_netif(void)
{
- int err = 0, conn = 0;
+ int err = 0;
int i;
/*
@@ -1501,18 +1319,15 @@
* proceed and only wait for those. For now, continue once the
* first device is around.
*/
- for ( i=0; i < 10*HZ; i++ )
+ for ( i=0; netif_state != NETIF_STATE_CONNECTED && (i < 10*HZ); i++ )
{
- conn = netctrl_connected();
- if (conn)
- break;
set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(1);
}
- if (conn <= 0) {
- err = netctrl_err(-ENETDOWN);
+ if (netif_state != NETIF_STATE_CONNECTED) {
WPRINTK("Timeout connecting to device!\n");
+ err = -ENOSYS;
}
return err;
}
@@ -1548,9 +1363,7 @@
IPRINTK("Initialising virtual ethernet driver.\n");
- INIT_LIST_HEAD(&dev_list);
(void)register_inetaddr_notifier(¬ifier_inetdev);
- netctrl_init();
init_net_xenbus();
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|