/** * Worker function for RTThreadCtxHooks(Deregister|Release)(). * * @param pThis Pointer to the internal thread-context object. */ DECLINLINE(void) rtThreadCtxHooksDeregister(PRTTHREADCTXINT pThis) { preempt_notifier_unregister(&pThis->hPreemptNotifier); pThis->hPreemptOps.sched_out = NULL; pThis->hPreemptOps.sched_in = NULL; pThis->fRegistered = false; }
/** * Worker function for RTThreadCtxHooks(Deregister|Release)(). * * @param pThis Pointer to the internal thread-context object. */ DECLINLINE(void) rtThreadCtxHookDisable(PRTTHREADCTXHOOKINT pThis) { Assert(pThis->PreemptOps.sched_out == rtThreadCtxHooksLnxSchedOut); Assert(pThis->PreemptOps.sched_in == rtThreadCtxHooksLnxSchedIn); preempt_disable(); preempt_notifier_unregister(&pThis->LnxPreemptNotifier); pThis->fEnabled = false; preempt_enable(); }
//Ä£¿éŒÓÔغ¯Êý¶šÒå static int __init preempt_notifer_unregister_init(void) { int result; printk("<0>into preempt_notifer_unregister_init.\n"); result=kernel_thread(my_function,NULL,CLONE_KERNEL); //ŽŽœšÐÂœø³Ì ops.sched_in=sched_in; //³õÊŒ»¯œø³ÌÇÀÕŒ²Ù×÷±äÁ¿ ops.sched_out=sched_out; preempt_notifier_init(¬ifier,&ops); //³õÊŒ»¯œø³ÌÇÀՌ͚֪Æ÷ preempt_notifier_register(¬ifier); //×¢²áœø³ÌÇÀՌ͚֪Æ÷ preempt_notifier_unregister(¬ifier); //ÊŸÀý1£¬×¢Ïúœø³ÌÇÀՌ͚֪Æ÷ printk("<0>the result of the kernel_thread is :%d\n",result); //ÏÔÊŸº¯Êýkernel_thread()º¯ÊýµÄ·µ»Øœá¹û printk("<0>the current pid is:%d\n",current->pid); //ÏÔÊŸµ±Ç°œø³ÌPIDÖµ printk("<0>out preempt_notifer_unregister_init.\n"); return 0; }