Loading drivers/atm/idt77252.c +9 −23 Original line number Diff line number Diff line Loading @@ -1114,11 +1114,8 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) rpp = &vc->rcv.rx_pool; __skb_queue_tail(&rpp->queue, skb); rpp->len += skb->len; if (!rpp->count++) rpp->first = skb; *rpp->last = skb; rpp->last = &skb->next; if (stat & SAR_RSQE_EPDU) { unsigned char *l1l2; Loading @@ -1145,7 +1142,7 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) atomic_inc(&vcc->stats->rx_err); return; } if (rpp->count > 1) { if (skb_queue_len(&rpp->queue) > 1) { struct sk_buff *sb; skb = dev_alloc_skb(rpp->len); Loading @@ -1161,12 +1158,9 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) dev_kfree_skb(skb); return; } sb = rpp->first; for (i = 0; i < rpp->count; i++) { skb_queue_walk(&rpp->queue, sb) memcpy(skb_put(skb, sb->len), sb->data, sb->len); sb = sb->next; } recycle_rx_pool_skb(card, rpp); Loading @@ -1180,7 +1174,6 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) return; } skb->next = NULL; flush_rx_pool(card, rpp); if (!atm_charge(vcc, skb->truesize)) { Loading Loading @@ -1918,25 +1911,18 @@ recycle_rx_skb(struct idt77252_dev *card, struct sk_buff *skb) static void flush_rx_pool(struct idt77252_dev *card, struct rx_pool *rpp) { skb_queue_head_init(&rpp->queue); rpp->len = 0; rpp->count = 0; rpp->first = NULL; rpp->last = &rpp->first; } static void recycle_rx_pool_skb(struct idt77252_dev *card, struct rx_pool *rpp) { struct sk_buff *skb, *next; int i; struct sk_buff *skb, *tmp; skb = rpp->first; for (i = 0; i < rpp->count; i++) { next = skb->next; skb->next = NULL; skb_queue_walk_safe(&rpp->queue, skb, tmp) recycle_rx_skb(card, skb); skb = next; } flush_rx_pool(card, rpp); } Loading Loading @@ -2537,7 +2523,7 @@ idt77252_close(struct atm_vcc *vcc) waitfor_idle(card); spin_unlock_irqrestore(&card->cmd_lock, flags); if (vc->rcv.rx_pool.count) { if (skb_queue_len(&vc->rcv.rx_pool.queue) != 0) { DPRINTK("%s: closing a VC with pending rx buffers.\n", card->name); Loading Loading @@ -2970,7 +2956,7 @@ close_card_oam(struct idt77252_dev *card) waitfor_idle(card); spin_unlock_irqrestore(&card->cmd_lock, flags); if (vc->rcv.rx_pool.count) { if (skb_queue_len(&vc->rcv.rx_pool.queue) != 0) { DPRINTK("%s: closing a VC " "with pending rx buffers.\n", card->name); Loading drivers/atm/idt77252.h +1 −3 Original line number Diff line number Diff line Loading @@ -173,10 +173,8 @@ struct scq_info }; struct rx_pool { struct sk_buff *first; struct sk_buff **last; struct sk_buff_head queue; unsigned int len; unsigned int count; }; struct aal1 { Loading Loading
drivers/atm/idt77252.c +9 −23 Original line number Diff line number Diff line Loading @@ -1114,11 +1114,8 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) rpp = &vc->rcv.rx_pool; __skb_queue_tail(&rpp->queue, skb); rpp->len += skb->len; if (!rpp->count++) rpp->first = skb; *rpp->last = skb; rpp->last = &skb->next; if (stat & SAR_RSQE_EPDU) { unsigned char *l1l2; Loading @@ -1145,7 +1142,7 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) atomic_inc(&vcc->stats->rx_err); return; } if (rpp->count > 1) { if (skb_queue_len(&rpp->queue) > 1) { struct sk_buff *sb; skb = dev_alloc_skb(rpp->len); Loading @@ -1161,12 +1158,9 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) dev_kfree_skb(skb); return; } sb = rpp->first; for (i = 0; i < rpp->count; i++) { skb_queue_walk(&rpp->queue, sb) memcpy(skb_put(skb, sb->len), sb->data, sb->len); sb = sb->next; } recycle_rx_pool_skb(card, rpp); Loading @@ -1180,7 +1174,6 @@ dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe) return; } skb->next = NULL; flush_rx_pool(card, rpp); if (!atm_charge(vcc, skb->truesize)) { Loading Loading @@ -1918,25 +1911,18 @@ recycle_rx_skb(struct idt77252_dev *card, struct sk_buff *skb) static void flush_rx_pool(struct idt77252_dev *card, struct rx_pool *rpp) { skb_queue_head_init(&rpp->queue); rpp->len = 0; rpp->count = 0; rpp->first = NULL; rpp->last = &rpp->first; } static void recycle_rx_pool_skb(struct idt77252_dev *card, struct rx_pool *rpp) { struct sk_buff *skb, *next; int i; struct sk_buff *skb, *tmp; skb = rpp->first; for (i = 0; i < rpp->count; i++) { next = skb->next; skb->next = NULL; skb_queue_walk_safe(&rpp->queue, skb, tmp) recycle_rx_skb(card, skb); skb = next; } flush_rx_pool(card, rpp); } Loading Loading @@ -2537,7 +2523,7 @@ idt77252_close(struct atm_vcc *vcc) waitfor_idle(card); spin_unlock_irqrestore(&card->cmd_lock, flags); if (vc->rcv.rx_pool.count) { if (skb_queue_len(&vc->rcv.rx_pool.queue) != 0) { DPRINTK("%s: closing a VC with pending rx buffers.\n", card->name); Loading Loading @@ -2970,7 +2956,7 @@ close_card_oam(struct idt77252_dev *card) waitfor_idle(card); spin_unlock_irqrestore(&card->cmd_lock, flags); if (vc->rcv.rx_pool.count) { if (skb_queue_len(&vc->rcv.rx_pool.queue) != 0) { DPRINTK("%s: closing a VC " "with pending rx buffers.\n", card->name); Loading
drivers/atm/idt77252.h +1 −3 Original line number Diff line number Diff line Loading @@ -173,10 +173,8 @@ struct scq_info }; struct rx_pool { struct sk_buff *first; struct sk_buff **last; struct sk_buff_head queue; unsigned int len; unsigned int count; }; struct aal1 { Loading