414 request->state = EC_INT_REQUEST_FAILURE; |
414 request->state = EC_INT_REQUEST_FAILURE; |
415 kref_put(&request->refcount,ec_master_reg_request_release); |
415 kref_put(&request->refcount,ec_master_reg_request_release); |
416 wake_up(&master->reg_queue); |
416 wake_up(&master->reg_queue); |
417 } |
417 } |
418 |
418 |
419 // we must lock the fsm_queue here because the slave's fsm_datagram will be unqueued |
419 // we must lock the io_mutex here because the slave's fsm_datagram will be unqueued |
420 if (master->fsm_queue_lock_cb) |
420 ec_mutex_lock(&master->io_mutex); |
421 master->fsm_queue_lock_cb(master->fsm_queue_locking_data); |
|
422 ec_mutex_lock(&master->fsm_queue_mutex); |
|
423 for (slave = master->slaves; |
421 for (slave = master->slaves; |
424 slave < master->slaves + master->slave_count; |
422 slave < master->slaves + master->slave_count; |
425 slave++) { |
423 slave++) { |
426 ec_slave_clear(slave); |
424 ec_slave_clear(slave); |
427 } |
425 } |
428 ec_mutex_unlock(&master->fsm_queue_mutex); |
426 ec_mutex_unlock(&master->io_mutex); |
429 if (master->fsm_queue_unlock_cb) |
|
430 master->fsm_queue_unlock_cb(master->fsm_queue_locking_data); |
|
431 |
427 |
432 if (master->slaves) { |
428 if (master->slaves) { |
433 kfree(master->slaves); |
429 kfree(master->slaves); |
434 master->slaves = NULL; |
430 master->slaves = NULL; |
435 } |
431 } |
443 */ |
439 */ |
444 void ec_master_clear_domains(ec_master_t *master) |
440 void ec_master_clear_domains(ec_master_t *master) |
445 { |
441 { |
446 ec_domain_t *domain, *next; |
442 ec_domain_t *domain, *next; |
447 |
443 |
|
444 // we must lock the io_mutex here because the domains's datagram will be unqueued |
|
445 ec_mutex_lock(&master->io_mutex); |
448 list_for_each_entry_safe(domain, next, &master->domains, list) { |
446 list_for_each_entry_safe(domain, next, &master->domains, list) { |
449 list_del(&domain->list); |
447 list_del(&domain->list); |
450 ec_domain_clear(domain); |
448 ec_domain_clear(domain); |
451 kfree(domain); |
449 kfree(domain); |
452 } |
450 } |
|
451 ec_mutex_unlock(&master->io_mutex); |
453 } |
452 } |
454 |
453 |
455 /*****************************************************************************/ |
454 /*****************************************************************************/ |
456 |
455 |
457 /** Clear the configuration applied by the application. |
456 /** Clear the configuration applied by the application. |