mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
bitkeeper revision 1.22.1.14 (3e4cfb9e8kov7wBkpF_IkW4uJSFJYw)
Extraneous interrupt removal.
This commit is contained in:
1 parent
26ebb5b27f
commit
77cf55f0b8
3 files changed
+27
-35
No files matched your search
@@ -108,13 +108,6 @@ typedef struct
|
||||
#define EVENT_DIE 0x08 /* OS is about to be killed. Clean up please! */
|
||||
#define EVENT_NET_TX 0x10 /* packets for transmission. */
|
||||
#define EVENT_NET_RX 0x20 /* empty buffers for receive. */
|
||||
#define EVENT_NET2_TX 0x40 /* packets for transmission. */
|
||||
#define EVENT_NET2_RX 0x80 /* empty buffers for receive. */
|
||||
|
||||
/* should these macros and the ones below test for range violation? */
|
||||
#define EVENT_NET_TX_FOR_VIF(x) (EVENT_NET_TX << (2 * x))
|
||||
#define EVENT_NET_RX_FOR_VIF(x) (EVENT_NET_RX << (2 * x))
|
||||
|
||||
|
||||
/* Bit offsets, as opposed to the above masks. */
|
||||
#define _EVENT_BLK_TX 0
|
||||
@@ -123,11 +116,7 @@ typedef struct
|
||||
#define _EVENT_DIE 3
|
||||
#define _EVENT_NET_TX 4
|
||||
#define _EVENT_NET_RX 5
|
||||
#define _EVENT_NET2_TX 6
|
||||
#define _EVENT_NET2_RX 7
|
||||
|
||||
#define _EVENT_NET_TX_FOR_VIF(x) (_EVENT_NET_TX + (2 * x))
|
||||
#define _EVENT_NET_RX_FOR_VIF(x) (_EVENT_NET_RX + (2 * x))
|
||||
|
||||
/*
|
||||
* NB. We expect that this struct is smaller than a page.
|
||||
|
||||
+10
-4
@@ -40,6 +40,12 @@
|
||||
#define rtnl_unlock() ((void)0)
|
||||
#define dst_init() ((void)0)
|
||||
|
||||
#if 1
|
||||
#define DPRINTK(_f, _a...) printk(_f , ## _a)
|
||||
#else
|
||||
#define DPRINTK(_f, _a...) ((void)0)
|
||||
#endif
|
||||
|
||||
// Ring defines:
|
||||
#define TX_RING_INC(_i) (((_i)+1) & (TX_RING_SIZE-1))
|
||||
#define RX_RING_INC(_i) (((_i)+1) & (RX_RING_SIZE-1))
|
||||
@@ -1005,7 +1011,7 @@ void update_shared_ring(void)
|
||||
__flush_tlb();
|
||||
|
||||
if ( net_ring->rx_cons == net_ring->rx_event )
|
||||
set_bit(_EVENT_NET_RX_FOR_VIF(nvif), &s->events);
|
||||
set_bit(_EVENT_NET_RX, &s->events);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1153,7 +1159,7 @@ void flush_rx_queue(void)
|
||||
}
|
||||
net_ring->rx_cons = (i+1) & (RX_RING_SIZE-1);
|
||||
if ( net_ring->rx_cons == net_ring->rx_event )
|
||||
set_bit(_EVENT_NET_RX_FOR_VIF(nvif), &s->events);
|
||||
set_bit(_EVENT_NET_RX, &s->events);
|
||||
}
|
||||
kfree_skb(skb);
|
||||
}
|
||||
@@ -2222,14 +2228,14 @@ long do_net_update(void)
|
||||
|
||||
if ( ((tx.addr & ~PAGE_MASK) + tx.size) >= PAGE_SIZE )
|
||||
{
|
||||
printk("tx.addr: %lx, size: %lu, end: %lu\n", tx.addr, tx.size,
|
||||
DPRINTK("tx.addr: %lx, size: %lu, end: %lu\n", tx.addr, tx.size,
|
||||
(tx.addr &~PAGE_MASK) + tx.size);
|
||||
continue;
|
||||
//BUG();
|
||||
}
|
||||
|
||||
if ( TX_RING_INC(i) == net_ring->tx_event )
|
||||
set_bit(_EVENT_NET_TX_FOR_VIF(j), &shared->events);
|
||||
set_bit(_EVENT_NET_TX, &shared->events);
|
||||
|
||||
/* Map the skb in from the guest, and get it's delivery target.
|
||||
* We need this to know whether the packet is to be sent locally
|
||||
|
||||
@@ -27,9 +27,6 @@
|
||||
#define NET_TX_IRQ _EVENT_NET_TX
|
||||
#define NET_RX_IRQ _EVENT_NET_RX
|
||||
|
||||
#define NET_TX_IRQ_FOR_VIF(x) _EVENT_NET_TX_FOR_VIF(x)
|
||||
#define NET_RX_IRQ_FOR_VIF(x) _EVENT_NET_RX_FOR_VIF(x)
|
||||
|
||||
#define TX_MAX_ENTRIES (TX_RING_SIZE - 2)
|
||||
#define RX_MAX_ENTRIES (RX_RING_SIZE - 2)
|
||||
|
||||
@@ -76,15 +73,7 @@ static int network_open(struct net_device *dev)
|
||||
{
|
||||
struct net_private *np = dev->priv;
|
||||
int error = 0;
|
||||
char *rxlabel, *txlabel;
|
||||
|
||||
// This is inevitably not the right way to allocate a couple of static strings.
|
||||
rxlabel = kmalloc(sizeof("net-rx- "), GFP_KERNEL);
|
||||
txlabel = kmalloc(sizeof("net-tx- "), GFP_KERNEL);
|
||||
if ((rxlabel == NULL) || (txlabel == NULL)) goto fail;
|
||||
sprintf(rxlabel, "net-rx-%d", np->id);
|
||||
sprintf(txlabel, "net-tx-%d", np->id);
|
||||
|
||||
np->rx_idx = np->tx_idx = np->tx_full = 0;
|
||||
|
||||
memset(&np->stats, 0, sizeof(np->stats));
|
||||
@@ -116,8 +105,8 @@ static int network_open(struct net_device *dev)
|
||||
|
||||
network_alloc_rx_buffers(dev);
|
||||
|
||||
error = request_irq(NET_RX_IRQ_FOR_VIF(np->id), network_rx_int, 0,
|
||||
rxlabel, dev);
|
||||
error = request_irq(NET_RX_IRQ, network_rx_int, 0,
|
||||
"net-rx", dev);
|
||||
if ( error )
|
||||
{
|
||||
printk(KERN_WARNING "%s: Could not allocate receive interrupt\n",
|
||||
@@ -125,13 +114,13 @@ static int network_open(struct net_device *dev)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
error = request_irq(NET_TX_IRQ_FOR_VIF(np->id), network_tx_int, 0,
|
||||
txlabel, dev);
|
||||
error = request_irq(NET_TX_IRQ, network_tx_int, 0,
|
||||
"net-tx", dev);
|
||||
if ( error )
|
||||
{
|
||||
printk(KERN_WARNING "%s: Could not allocate transmit interrupt\n",
|
||||
dev->name);
|
||||
free_irq(NET_RX_IRQ_FOR_VIF(np->id), dev);
|
||||
free_irq(NET_RX_IRQ, dev);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
@@ -144,8 +133,6 @@ static int network_open(struct net_device *dev)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
if ( rxlabel ) kfree(rxlabel);
|
||||
if ( txlabel ) kfree(txlabel);
|
||||
if ( np->net_ring->rx_ring ) kfree(np->net_ring->rx_ring);
|
||||
if ( np->net_ring->tx_ring ) kfree(np->net_ring->tx_ring);
|
||||
if ( np->rx_skb_ring ) kfree(np->rx_skb_ring);
|
||||
@@ -293,6 +280,16 @@ static int network_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
//print_range(skb->data + ETH_HLEN + 8, 20);
|
||||
//printk("skb->len is %u in guestOS (expected fraglen: %u).\n", skb->len, skb->len - (ETH_HLEN + 8));
|
||||
i = np->net_ring->tx_prod;
|
||||
|
||||
if ( (((unsigned long)skb->data & ~PAGE_MASK) + skb->len) >= PAGE_SIZE )
|
||||
{
|
||||
struct sk_buff *new_skb = alloc_skb(RX_BUF_SIZE, GFP_KERNEL);
|
||||
skb_put(new_skb, skb->len);
|
||||
memcpy(new_skb->data, skb->data, skb->len);
|
||||
kfree_skb(skb);
|
||||
skb = new_skb;
|
||||
}
|
||||
|
||||
np->tx_skb_ring[i] = skb;
|
||||
np->net_ring->tx_ring[i].addr
|
||||
= (unsigned long)phys_to_machine(virt_to_phys(skb->data));
|
||||
@@ -387,8 +384,8 @@ int network_close(struct net_device *dev)
|
||||
struct net_private *np = dev->priv;
|
||||
|
||||
netif_stop_queue(dev);
|
||||
free_irq(NET_RX_IRQ_FOR_VIF(np->id), dev);
|
||||
free_irq(NET_TX_IRQ_FOR_VIF(np->id), dev);
|
||||
free_irq(NET_RX_IRQ, dev);
|
||||
free_irq(NET_TX_IRQ, dev);
|
||||
network_free_rx_buffers(dev);
|
||||
kfree(np->net_ring->rx_ring);
|
||||
kfree(np->net_ring->tx_ring);
|
||||
|
||||