--- 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);