void __rtai_shm_exit (void) { extern int max_slots; int slot; struct rt_registry_entry entry; #ifdef CONFIG_RTAI_MALLOC_VMALLOC rt_drg_on_name_cnt(GLOBAL_HEAP_ID); #endif for (slot = 1; slot <= max_slots; slot++) { if (rt_get_registry_slot(slot, &entry)) { if (abs(entry.type) >= PAGE_SIZE) { char name[8]; while (_rt_shm_free(entry.name, entry.type)); num2nam(entry.name, name); rt_printk("\nSHM_CLEANUP_MODULE releases: '%s':0x%lx:%lu (%d).\n", name, entry.name, entry.name, entry.type); } } } reset_rt_fun_entries(rt_shm_entries); misc_deregister(&rtai_shm_dev); #if USE_UDEV_CLASS class_device_destroy(shm_class, MKDEV(MISC_MAJOR, RTAI_SHM_MISC_MINOR)); class_destroy(shm_class); #endif return; }
void __rtai_mbx_exit (void) { rt_poll_ofstfun[RT_POLL_MBX_RECV].topoll = NULL; rt_poll_ofstfun[RT_POLL_MBX_SEND].topoll = NULL; reset_rt_fun_entries(rt_mbx_entries); }
void __rtai_bits_exit(void) { reset_rt_fun_entries(rt_bits_entries); }
void __rtai_msg_queue_exit(void) { reset_rt_fun_entries(rt_msg_queue_entries); printk(KERN_INFO "RTAI[rtai_msgq]: unloaded.\n"); }