Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 202576
b: refs/heads/master
c: 15e83ed
h: refs/heads/master
v: v3
  • Loading branch information
Eric Dumazet authored and David S. Miller committed May 31, 2010
1 parent a5fc299 commit f5decb1
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 33 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 27f39c73e63833b4c081a0d681d88b4184a0491d
refs/heads/master: 15e83ed78864d0625e87a85f09b297c0919a4797
4 changes: 3 additions & 1 deletion trunk/net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -1577,7 +1577,9 @@ EXPORT_SYMBOL(__netif_schedule);

void dev_kfree_skb_irq(struct sk_buff *skb)
{
if (atomic_dec_and_test(&skb->users)) {
if (!skb->destructor)
dev_kfree_skb(skb);
else if (atomic_dec_and_test(&skb->users)) {
struct softnet_data *sd;
unsigned long flags;

Expand Down
31 changes: 0 additions & 31 deletions trunk/net/core/netpoll.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ static atomic_t trapped;
(MAX_UDP_CHUNK + sizeof(struct udphdr) + \
sizeof(struct iphdr) + sizeof(struct ethhdr))

static void zap_completion_queue(void);
static void arp_reply(struct sk_buff *skb);

static unsigned int carrier_timeout = 4;
Expand Down Expand Up @@ -197,7 +196,6 @@ void netpoll_poll_dev(struct net_device *dev)

service_arp_queue(dev->npinfo);

zap_completion_queue();
}

void netpoll_poll(struct netpoll *np)
Expand All @@ -221,40 +219,11 @@ static void refill_skbs(void)
spin_unlock_irqrestore(&skb_pool.lock, flags);
}

static void zap_completion_queue(void)
{
unsigned long flags;
struct softnet_data *sd = &get_cpu_var(softnet_data);

if (sd->completion_queue) {
struct sk_buff *clist;

local_irq_save(flags);
clist = sd->completion_queue;
sd->completion_queue = NULL;
local_irq_restore(flags);

while (clist != NULL) {
struct sk_buff *skb = clist;
clist = clist->next;
if (skb->destructor) {
atomic_inc(&skb->users);
dev_kfree_skb_any(skb); /* put this one back */
} else {
__kfree_skb(skb);
}
}
}

put_cpu_var(softnet_data);
}

static struct sk_buff *find_skb(struct netpoll *np, int len, int reserve)
{
int count = 0;
struct sk_buff *skb;

zap_completion_queue();
refill_skbs();
repeat:

Expand Down

0 comments on commit f5decb1

Please sign in to comment.