ok

Am Donnerstag, den 23.02.2012, 09:22 +0100 schrieb Florian Pose:
> Am 10.02.2012 16:21, schrieb sergej.stepa...@ids.de:
> > Hallo Florian, thanks your tips we could fix a problem on our
> > slave.
> 
> Glad I could help.
> 
> > Could you please take a look at the diff?This patch fixed the oops
> > problem 1. I described you.It is from 1.5-stable branch and should
> > be the same as 1.5.1
> 
> The patch was scrambled, could you please attach it as a file?
> 
> _______________________________________________
> etherlab-users mailing list
> etherlab-users@etherlab.org
> http://lists.etherlab.org/mailman/listinfo/etherlab-users
Index: master/ethernet.h
===================================================================
--- master/ethernet.h   (Revision 70081)
+++ master/ethernet.h   (Revision 70114)
@@ -92,7 +97,7 @@
     unsigned int tx_queue_size; /**< Transmit queue size. */
     unsigned int tx_queue_active; /**< kernel netif queue started */
     unsigned int tx_queued_frames; /**< number of frames in the queue */
-    struct semaphore tx_queue_sem; /**< Semaphore for the send queue. */
+    spinlock_t tx_queue_sem; /**< Spinlock for the send queue. */
     ec_eoe_frame_t *tx_frame; /**< current TX frame */
     uint8_t tx_frame_number; /**< number of the transmitted frame */
     uint8_t tx_fragment_number; /**< number of the fragment */

Index: master/ethernet.c
===================================================================
--- master/ethernet.c   (Revision 70081)
+++ master/ethernet.c   (Revision 70114)
@@ -122,7 +122,7 @@
     eoe->tx_queue_size = EC_EOE_TX_QUEUE_SIZE;
     eoe->tx_queued_frames = 0;
 
-    sema_init(&eoe->tx_queue_sem, 1);
+    spin_lock_init(&eoe->tx_queue_sem);
     eoe->tx_frame_number = 0xFF;
     memset(&eoe->stats, 0, sizeof(struct net_device_stats));
 
@@ -231,7 +231,7 @@
 {
     ec_eoe_frame_t *frame, *next;
 
-    down(&eoe->tx_queue_sem);
+    spin_lock_bh(&eoe->tx_queue_sem);
 
     list_for_each_entry_safe(frame, next, &eoe->tx_queue, queue) {
         list_del(&frame->queue);
@@ -240,7 +240,7 @@
     }
     eoe->tx_queued_frames = 0;
 
-    up(&eoe->tx_queue_sem);
+    spin_unlock_bh(&eoe->tx_queue_sem);
 }
 
 /*****************************************************************************/
@@ -620,10 +625,10 @@
         return;
     }
 
-    down(&eoe->tx_queue_sem);
+    spin_lock_bh(&eoe->tx_queue_sem);
 
     if (!eoe->tx_queued_frames || list_empty(&eoe->tx_queue)) {
-        up(&eoe->tx_queue_sem);
+        spin_unlock_bh(&eoe->tx_queue_sem);
         eoe->tx_idle = 1;
         // no data available.
         // start a new receive immediately.
@@ -644,7 +649,7 @@
     }
 
     eoe->tx_queued_frames--;
-    up(&eoe->tx_queue_sem);
+    spin_unlock_bh(&eoe->tx_queue_sem);
 
     eoe->tx_idle = 0;
 
@@ -812,14 +817,14 @@
 
     frame->skb = skb;
 
-    down(&eoe->tx_queue_sem);
+    spin_lock(&eoe->tx_queue_sem);
     list_add_tail(&frame->queue, &eoe->tx_queue);
     eoe->tx_queued_frames++;
     if (eoe->tx_queued_frames == eoe->tx_queue_size) {
         netif_stop_queue(dev);
         eoe->tx_queue_active = 0;
     }
-    up(&eoe->tx_queue_sem);
+    spin_unlock(&eoe->tx_queue_sem);
 
 #if EOE_DEBUG_LEVEL >= 2
     EC_SLAVE_DBG(eoe->slave, 0, "EoE %s TX queued frame"
_______________________________________________
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users

Reply via email to