master/master.c
changeset 1596 ea8d2b4ee742
parent 1585 1f640e321ee4
child 1597 491dea6f4fd7
--- a/master/master.c	Mon Nov 30 12:26:56 2009 +0100
+++ b/master/master.c	Tue Dec 01 14:24:57 2009 +0100
@@ -184,9 +184,6 @@
     INIT_LIST_HEAD(&master->sii_requests);
     init_waitqueue_head(&master->sii_queue);
 
-    INIT_LIST_HEAD(&master->slave_sdo_requests);
-    init_waitqueue_head(&master->sdo_queue);
-
     INIT_LIST_HEAD(&master->reg_requests);
     init_waitqueue_head(&master->reg_queue);
 
@@ -405,21 +402,6 @@
 		wake_up(&master->reg_queue);
 	}
 
-	// SDO requests
-	while (1) {
-		ec_master_sdo_request_t *request;
-		if (list_empty(&master->slave_sdo_requests))
-			break;
-		// get first request
-		request = list_entry(master->slave_sdo_requests.next,
-				ec_master_sdo_request_t, list);
-		list_del_init(&request->list); // dequeue
-		EC_INFO("Discarding SDO request, slave %u does not exist anymore.\n",
-				request->slave->ring_position);
-		request->req.state = EC_INT_REQUEST_FAILURE;
-		wake_up(&master->sdo_queue);
-	}
-
 	// FoE requests
 	while (1) {
 		ec_master_foe_request_t *request;
@@ -438,6 +420,20 @@
     for (slave = master->slaves;
             slave < master->slaves + master->slave_count;
             slave++) {
+        // SDO requests
+        while (1) {
+            ec_master_sdo_request_t *request;
+            if (list_empty(&slave->slave_sdo_requests))
+                break;
+            // get first request
+            request = list_entry(slave->slave_sdo_requests.next,
+                    ec_master_sdo_request_t, list);
+            list_del_init(&request->list); // dequeue
+            EC_INFO("Discarding SDO request, slave %u does not exist anymore.\n",
+                    request->slave->ring_position);
+            request->req.state = EC_INT_REQUEST_FAILURE;
+            wake_up(&slave->sdo_queue);
+        }
         ec_slave_clear(slave);
     }
 
@@ -770,6 +766,8 @@
 #endif
     datagram->jiffies_sent = jiffies;
 
+    master->fsm.idle = 0;
+
     down(&master->io_sem);
     list_add_tail(&datagram->queue, &master->sdo_datagram_queue);
     up(&master->io_sem);