# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID b40cb6db44e444e164fd8758452066347b1c28ee
# Parent 4782114d07137c28b4eb524e9fd8834691760c2b
[NET] back: Replace netif->active with netif_carrier_ok
The connection status to the frontend can be represented using
netif_carrier_ok instead of netif->active. As a result, we delay
the construction of the dev qdisc until the carrier comes on. This
is a prerequisite for adding a tx queue.
Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
---
linux-2.6-xen-sparse/drivers/xen/netback/common.h | 2 +-
linux-2.6-xen-sparse/drivers/xen/netback/interface.c | 8 ++++----
linux-2.6-xen-sparse/drivers/xen/netback/netback.c | 5 +++--
3 files changed, 8 insertions(+), 7 deletions(-)
diff -r 4782114d0713 -r b40cb6db44e4
linux-2.6-xen-sparse/drivers/xen/netback/common.h
--- a/linux-2.6-xen-sparse/drivers/xen/netback/common.h Thu Jul 27 13:34:09
2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/common.h Thu Jul 27 13:52:02
2006 +0100
@@ -87,7 +87,7 @@ typedef struct netif_st {
/* Miscellaneous private stuff. */
enum { DISCONNECTED, DISCONNECTING, CONNECTED } status;
- int active;
+
struct list_head list; /* scheduling list */
atomic_t refcnt;
struct net_device *dev;
diff -r 4782114d0713 -r b40cb6db44e4
linux-2.6-xen-sparse/drivers/xen/netback/interface.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Thu Jul 27
13:34:09 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/interface.c Thu Jul 27
13:52:02 2006 +0100
@@ -37,9 +37,7 @@ static void __netif_up(netif_t *netif)
static void __netif_up(netif_t *netif)
{
struct net_device *dev = netif->dev;
- netif_tx_lock_bh(dev);
- netif->active = 1;
- netif_tx_unlock_bh(dev);
+ netif_carrier_on(dev);
enable_irq(netif->irq);
netif_schedule_work(netif);
}
@@ -49,7 +47,7 @@ static void __netif_down(netif_t *netif)
struct net_device *dev = netif->dev;
disable_irq(netif->irq);
netif_tx_lock_bh(dev);
- netif->active = 0;
+ netif_carrier_off(dev);
netif_tx_unlock_bh(dev);
netif_deschedule_work(netif);
}
@@ -92,6 +90,8 @@ netif_t *netif_alloc(domid_t domid, unsi
DPRINTK("Could not create netif: out of memory\n");
return ERR_PTR(-ENOMEM);
}
+
+ netif_carrier_off(dev);
netif = netdev_priv(dev);
memset(netif, 0, sizeof(*netif));
diff -r 4782114d0713 -r b40cb6db44e4
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
--- a/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Thu Jul 27
13:34:09 2006 +0100
+++ b/linux-2.6-xen-sparse/drivers/xen/netback/netback.c Thu Jul 27
13:52:02 2006 +0100
@@ -143,7 +143,7 @@ int netif_be_start_xmit(struct sk_buff *
BUG_ON(skb->dev != dev);
/* Drop the packet if the target domain has no receive buffers. */
- if (!netif->active ||
+ if (unlikely(!netif_carrier_ok(dev)) ||
(netif->rx_req_cons_peek == netif->rx.sring->req_prod) ||
((netif->rx_req_cons_peek - netif->rx.rsp_prod_pvt) ==
NET_RX_RING_SIZE))
@@ -404,7 +404,8 @@ static void add_to_net_schedule_list_tai
return;
spin_lock_irq(&net_schedule_list_lock);
- if (!__on_net_schedule_list(netif) && netif->active) {
+ if (!__on_net_schedule_list(netif) &&
+ likely(netif_carrier_ok(netif->dev))) {
list_add_tail(&netif->list, &net_schedule_list);
netif_get(netif);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|