patch-2.4.0-test3 linux/drivers/atm/eni.c

Next file: linux/drivers/atm/eni.h
Previous file: linux/drivers/atm/ambassador.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test2/linux/drivers/atm/eni.c linux/drivers/atm/eni.c
@@ -1187,14 +1187,12 @@
 		if (tx->send)
 			while ((skb = skb_dequeue(&tx->backlog))) {
 				res = do_tx(skb);
-				if (res == enq_ok) atomic_dec(&tx->backlog_len);
-				else {
-					DPRINTK("re-queuing TX PDU\n");
-					skb_queue_head(&tx->backlog,skb);
+				if (res == enq_ok) continue;
+				DPRINTK("re-queuing TX PDU\n");
+				skb_queue_head(&tx->backlog,skb);
 requeued++;
-					if (res == enq_jam) return;
-					else break;
-				}
+				if (res == enq_jam) return;
+				break;
 			}
 	}
 }
@@ -1326,7 +1324,6 @@
 		tx->send = mem;
 		tx->words = size >> 2;
 		skb_queue_head_init(&tx->backlog);
-		atomic_set(&tx->backlog_len,0);
 		for (order = 0; size > (1 << (order+10)); order++);
 		eni_out((order << MID_SIZE_SHIFT) |
 		    ((tx->send-eni_dev->ram) >> (MID_LOC_SKIP+2)),
@@ -2064,6 +2061,8 @@
 
 static int eni_send(struct atm_vcc *vcc,struct sk_buff *skb)
 {
+	enum enq_res res;
+
 	DPRINTK(">eni_send\n");
 	if (!ENI_VCC(vcc)->tx) {
 		if (vcc->pop) vcc->pop(vcc,skb);
@@ -2085,8 +2084,11 @@
 	}
 submitted++;
 	ATM_SKB(skb)->vcc = vcc;
+	tasklet_disable(&ENI_DEV(vcc->dev)->task);
+	res = do_tx(skb);
+	tasklet_enable(&ENI_DEV(vcc->dev)->task);
+	if (res == enq_ok) return 0;
 	skb_queue_tail(&ENI_VCC(vcc)->tx->backlog,skb);
-	atomic_inc(&ENI_VCC(vcc)->tx->backlog_len);
 backlogged++;
 	tasklet_schedule(&ENI_DEV(vcc->dev)->task);
 	return 0;
@@ -2186,8 +2188,8 @@
 			    tx == eni_dev->ubr ? " (UBR)" : "");
 		}
 		if (--left) continue;
-		return sprintf(page,"%10sbacklog %d bytes\n","",
-		    atomic_read(&tx->backlog_len));
+		return sprintf(page,"%10sbacklog %u packets\n","",
+		    skb_queue_len(&tx->backlog));
 	}
 	for (vcc = dev->vccs; vcc; vcc = vcc->next) {
 		struct eni_vcc *eni_vcc = ENI_VCC(vcc);

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)