bitkeeper revision 1.22.1.14 (3e4cfb9e8kov7wBkpF_IkW4uJSFJYw)

Extraneous interrupt removal.
This commit is contained in:
akw27@boulderdash.cl.cam.ac.uk committed 2003-02-14 14:22:22 +00:00
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
View File
@@ -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);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.