Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}
Esempio n. 3
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;
}
Esempio n. 4
0
void __switchtest_exit(void)
{
	rtdm_dev_unregister(&device, 1000);
	rtdm_nrtsig_destroy(&rtswitch_wake_utask);
}