static void __exit rtnetproxy_cleanup_module(void) { /* Unregister the fallback at rtnet */ rt_ip_register_fallback(0); /* free the rtai srq */ rtdm_nrtsig_destroy(&rtnetproxy_signal); rtdm_task_destroy(&rtnetproxy_thread); rtdm_sem_destroy(&rtnetproxy_sem); /* Free the ringbuffers... */ { struct sk_buff *del_skb; /* standard skb */ while ((del_skb = read_from_ringbuffer(&ring_skb_rtnet_kernel)) != 0) { dev_kfree_skb(del_skb); } while ((del_skb = read_from_ringbuffer(&ring_skb_kernel_rtnet)) != 0) { dev_kfree_skb(del_skb); } } { struct rtskb *del; /* rtnet skb */ while ((del=read_from_ringbuffer(&ring_rtskb_kernel_rtnet))!=0) { kfree_rtskb(del); // Although this is kernel mode, freeing should work... } while ((del=read_from_ringbuffer(&ring_rtskb_rtnet_kernel))!=0) { kfree_rtskb(del); // Although this is kernel mode, freeing should work... } } /* Unregister the net device: */ unregister_netdev(&dev_rtnetproxy); kfree(dev_rtnetproxy.priv); memset(&dev_rtnetproxy, 0, sizeof(dev_rtnetproxy)); dev_rtnetproxy.init = rtnetproxy_init; rtskb_pool_release(&rtskb_pool); }
int __init rtpc_init(void) { int ret; unsigned char name[16]; ret = rtos_nrt_signal_init(&rtpc_nrt_signal, rtpc_signal_handler); if(ret < 0) return ret; sprintf(name, "rtfw_rtpc"); rtpc_dispatcher = rt_serv_init(name, 1, rtpc_dispatch_handler, -1); if(!rtpc_dispatcher){ rtdm_nrtsig_destroy(&rtpc_nrt_signal); return -ENOMEM; } return 0; }
static int rtswitch_close(struct rtdm_dev_context *context, rtdm_user_info_t *user_info) { rtswitch_context_t *ctx = (rtswitch_context_t *) context->dev_private; unsigned i; if (ctx->tasks) { set_cpus_allowed(current, cpumask_of_cpu(ctx->cpu)); for (i = 0; i < ctx->next_index; i++) { rtswitch_task_t *task = &ctx->tasks[i]; if (task->base.flags & RTSWITCH_KERNEL) xnpod_delete_thread(&task->ktask); rtdm_event_destroy(&task->rt_synch); } kfree(ctx->tasks); } rtdm_timer_destroy(&ctx->wake_up_delay); rtdm_nrtsig_destroy(&ctx->wake_utask); return 0; }
void __switchtest_exit(void) { rtdm_dev_unregister(&device, 1000); rtdm_nrtsig_destroy(&rtswitch_wake_utask); }