diff options
Diffstat (limited to 'cpukit/sapi/src/iounregisterdriver.c')
-rw-r--r-- | cpukit/sapi/src/iounregisterdriver.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/cpukit/sapi/src/iounregisterdriver.c b/cpukit/sapi/src/iounregisterdriver.c index 5761138b09..631ffbfd82 100644 --- a/cpukit/sapi/src/iounregisterdriver.c +++ b/cpukit/sapi/src/iounregisterdriver.c @@ -17,6 +17,8 @@ #include <rtems/system.h> #include <rtems/io.h> +#include <rtems/rtems/intr.h> +#include <rtems/score/thread.h> #include <string.h> /* @@ -36,13 +38,20 @@ rtems_status_code rtems_io_unregister_driver( rtems_device_major_number major ) { + if ( rtems_interrupt_is_in_progress() ) + return RTEMS_CALLED_FROM_ISR; + if ( major < _IO_Number_of_drivers ) { + _Thread_Disable_dispatch(); memset( &_IO_Driver_address_table[major], 0, sizeof( rtems_driver_address_table ) ); + _Thread_Enable_dispatch(); + return RTEMS_SUCCESSFUL; } + return RTEMS_UNSATISFIED; } |