From 0b0805302e28409760465c285dd1551e160a2d09 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Fri, 16 Dec 2005 15:25:13 +0000 Subject: [PATCH] EtherCAT_release() im Fehlerfall beim Laden von Modulen mini und rt. --HG-- branch : kernel2.6 --- mini/ec_mini.c | 70 +++++++++++++++++--------------- rt/msr_module.c | 104 ++++++++++++++++++++---------------------------- 2 files changed, 81 insertions(+), 93 deletions(-) diff --git a/mini/ec_mini.c b/mini/ec_mini.c index 378e6935..f462c202 100644 --- a/mini/ec_mini.c +++ b/mini/ec_mini.c @@ -228,47 +228,51 @@ static void run(unsigned long data) int __init init_module() { - printk(KERN_INFO "=== Starting Minimal EtherCAT environment... ===\n"); + printk(KERN_INFO "=== Starting Minimal EtherCAT environment... ===\n"); - if ((ecat_master = EtherCAT_request(0)) == NULL) - { - printk(KERN_ERR "EtherCAT master 0 not available!\n"); - return -1; - } + if ((ecat_master = EtherCAT_request(0)) == NULL) { + printk(KERN_ERR "EtherCAT master 0 not available!\n"); + goto out_return; + } - printk("Checking EtherCAT slaves.\n"); + printk("Checking EtherCAT slaves.\n"); - if (EtherCAT_check_slaves(ecat_master, ecat_slaves, ECAT_SLAVES_COUNT) != 0) - { - printk(KERN_ERR "EtherCAT: Could not init slaves!\n"); - return -1; - } + if (EtherCAT_check_slaves(ecat_master, ecat_slaves, ECAT_SLAVES_COUNT) != 0) { + printk(KERN_ERR "EtherCAT: Could not init slaves!\n"); + goto out_release_master; + } - printk("Activating all EtherCAT slaves.\n"); + printk("Activating all EtherCAT slaves.\n"); - if (EtherCAT_activate_all_slaves(ecat_master) != 0) - { - printk(KERN_ERR "EtherCAT: Could not activate slaves!\n"); - return -1; - } + if (EtherCAT_activate_all_slaves(ecat_master) != 0) + { + printk(KERN_ERR "EtherCAT: Could not activate slaves!\n"); + goto out_release_master; + } #ifdef ECAT_CYCLIC_DATA - printk("Starting cyclic sample thread.\n"); + printk("Starting cyclic sample thread.\n"); - init_timer(&timer); + init_timer(&timer); - timer.function = run; - timer.data = 0; - timer.expires = jiffies+10; // Das erste Mal sofort feuern - last_start_jiffies = timer.expires; - add_timer(&timer); + timer.function = run; + timer.data = 0; + timer.expires = jiffies+10; // Das erste Mal sofort feuern + last_start_jiffies = timer.expires; + add_timer(&timer); - printk("Initialised sample thread.\n"); + printk("Initialised sample thread.\n"); #endif - printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n"); + printk(KERN_INFO "=== Minimal EtherCAT environment started. ===\n"); + + return 0; + + out_release_master: + EtherCAT_release(ecat_master); - return 0; + out_return: + return -1; } /****************************************************************************** @@ -284,14 +288,14 @@ void __exit cleanup_module() if (ecat_master) { #ifdef ECAT_CYCLIC_DATA - del_timer_sync(&timer); - EtherCAT_clear_process_data(ecat_master); + del_timer_sync(&timer); + EtherCAT_clear_process_data(ecat_master); #endif // ECAT_CYCLIC_DATA - printk(KERN_INFO "Deactivating slaves.\n"); - EtherCAT_deactivate_all_slaves(ecat_master); + printk(KERN_INFO "Deactivating slaves.\n"); + EtherCAT_deactivate_all_slaves(ecat_master); - EtherCAT_release(ecat_master); + EtherCAT_release(ecat_master); } printk(KERN_INFO "=== Minimal EtherCAT environment stopped. ===\n"); diff --git a/rt/msr_module.c b/rt/msr_module.c index f71bf328..5ab28856 100755 --- a/rt/msr_module.c +++ b/rt/msr_module.c @@ -31,7 +31,7 @@ * *** empty log message *** * * -* +* Hello Emacs: -*- c-basic-offset: 2; -*- * **************************************************************************************************/ @@ -163,7 +163,8 @@ static EtherCAT_slave_t ecat_slaves[] = ECAT_INIT_SLAVE(Beckhoff_EL4102), ECAT_INIT_SLAVE(Beckhoff_EL4102), ECAT_INIT_SLAVE(Beckhoff_EL4102), - ECAT_INIT_SLAVE(Beckhoff_EL4102) + ECAT_INIT_SLAVE(Beckhoff_EL4102), + ECAT_INIT_SLAVE(Beckhoff_EL4132) #endif @@ -294,8 +295,8 @@ static void msr_controller_run(void) * * Parameter: Zeiger auf msr_data * -* R◯ckgabe: -* +* R◯ckgabe: +* * Status: exp * *************************************************************************************************** @@ -305,10 +306,10 @@ static void msr_controller_run(void) void msr_run(unsigned irq) { - static int counter = 0; + static int counter = 0; #ifdef USE_MSR_LIB - timeval_add(&process_time,&process_time,&msr_time_increment); + timeval_add(&process_time,&process_time,&msr_time_increment); MSR_ADEOS_INTERRUPT_CODE( msr_controller_run(); @@ -318,7 +319,7 @@ void msr_run(unsigned irq) msr_controller_run(); #endif /* und wieder in die Timerliste eintragen */ - /* und neu in die Taskqueue eintragen */ + /* und neu in die Taskqueue eintragen */ // timer.expires += 1; // add_timer(&timer); @@ -382,52 +383,42 @@ int msr_globals_register(void) int __init init_module() { - int result = 0; - struct ipipe_domain_attr attr; //ipipe - //als allererstes die RT-lib initialisieren + // Als allererstes die RT-lib initialisieren #ifdef USE_MSR_LIB - result = msr_rtlib_init(1,MSR_ABTASTFREQUENZ,10,&msr_globals_register); - - if (result < 0) { + if (msr_rtlib_init(1,MSR_ABTASTFREQUENZ,10,&msr_globals_register) < 0) { msr_print_warn("msr_modul: can't initialize rtlib!"); - return result; + goto out_return; } #endif msr_jitter_init(); - printk(KERN_INFO "=== Starting EtherCAT environment... ===\n"); - if ((ecat_master = EtherCAT_request(0)) == NULL) - { - printk(KERN_ERR "EtherCAT master 0 not available!\n"); - msr_rtlib_cleanup(); - return -1; - } + printk(KERN_INFO "=== Starting EtherCAT environment... ===\n"); - printk("Checking EtherCAT slaves.\n"); + if ((ecat_master = EtherCAT_request(0)) == NULL) { + printk(KERN_ERR "EtherCAT master 0 not available!\n"); + goto out_msr_cleanup; + } - if (EtherCAT_check_slaves(ecat_master, ecat_slaves, ECAT_SLAVES_COUNT) != 0) - { - printk(KERN_ERR "EtherCAT: Could not init slaves!\n"); - msr_rtlib_cleanup(); - return -1; - } + printk("Checking EtherCAT slaves.\n"); - printk("Activating all EtherCAT slaves.\n"); + if (EtherCAT_check_slaves(ecat_master, ecat_slaves, ECAT_SLAVES_COUNT) != 0) { + printk(KERN_ERR "EtherCAT: Could not init slaves!\n"); + goto out_release_master; + } - if (EtherCAT_activate_all_slaves(ecat_master) != 0) - { - printk(KERN_ERR "EtherCAT: Could not activate slaves!\n"); - msr_rtlib_cleanup(); - return -1; - } + printk("Activating all EtherCAT slaves.\n"); + if (EtherCAT_activate_all_slaves(ecat_master) != 0) { + printk(KERN_ERR "EtherCAT: Could not activate slaves!\n"); + goto out_release_master; + } - do_gettimeofday(&process_time); - msr_time_increment.tv_sec=0; - msr_time_increment.tv_usec=(unsigned int)(1000000/MSR_ABTASTFREQUENZ); + do_gettimeofday(&process_time); + msr_time_increment.tv_sec=0; + msr_time_increment.tv_usec=(unsigned int)(1000000/MSR_ABTASTFREQUENZ); ipipe_init_attr (&attr); attr.name = "IPIPE-MSR-MODULE"; @@ -435,16 +426,16 @@ int __init init_module() attr.entry = &domain_entry; ipipe_register_domain(&this_domain,&attr); - //den Timertakt -/* - init_timer(&timer); + return 0; - timer.function = msr_run; - timer.data = 0; - timer.expires = jiffies+10; // Das erste Mal sofort feuern - add_timer(&timer); -*/ - return 0; /* succeed */ + out_release_master: + EtherCAT_release(ecat_master); + + out_msr_cleanup: + msr_rtlib_cleanup(); + + out_return: + return -1; } @@ -454,30 +445,23 @@ void __exit cleanup_module() { msr_print_info("msk_modul: unloading..."); - -// del_timer_sync(&timer); ipipe_tune_timer(1000000000UL/HZ,0); //alten Timertakt wieder herstellen - ipipe_unregister_domain(&this_domain); - - printk(KERN_INFO "=== Stopping EtherCAT environment... ===\n"); if (ecat_master) { - EtherCAT_clear_process_data(ecat_master); - printk(KERN_INFO "Deactivating slaves.\n"); - EtherCAT_deactivate_all_slaves(ecat_master); - - EtherCAT_release(ecat_master); + EtherCAT_clear_process_data(ecat_master); + printk(KERN_INFO "Deactivating slaves.\n"); + EtherCAT_deactivate_all_slaves(ecat_master); + EtherCAT_release(ecat_master); } printk(KERN_INFO "=== EtherCAT environment stopped. ===\n"); -// msr_controller_cleanup(); #ifdef USE_MSR_LIB - msr_rtlib_cleanup(); + msr_rtlib_cleanup(); #endif } @@ -487,7 +471,7 @@ MODULE_DESCRIPTION ("EtherCAT test environment"); module_init(init_module); module_exit(cleanup_module); - + -- GitLab