1 /* 2 * testthreadcall.cpp 3 * testkext 4 * 5 */ 6 7 #define ABSOLUTETIME_SCALAR_TYPE 8 9 #include "testthreadcall.h" 10 11 #include <kern/thread_call.h> 12 13 #define super IOService 14 OSDefineMetaClassAndStructors(testthreadcall, super); 15 16 extern "C" { 17 18 static void thread_call_test_func(thread_call_param_t param0, 19 thread_call_param_t param1); 20 21 } 22 23 bool 24 testthreadcall::start( IOService * provider ) 25 { 26 boolean_t ret; 27 uint64_t deadline; 28 29 IOLog("%s\n", __PRETTY_FUNCTION__); 30 31 if (!super::start(provider)) { 32 return false; 33 } 34 35 IOLog("Attempting thread_call_allocate\n"); 36 tcall = thread_call_allocate(thread_call_test_func, this); 37 IOLog("thread_call_t %p\n", tcall); 38 39 tlock = IOSimpleLockAlloc(); 40 IOLog("tlock %p\n", tlock); 41 42 clock_interval_to_deadline(5, NSEC_PER_SEC, &deadline); 43 IOLog("%d sec deadline is %llu\n", 5, deadline); 44 45 ret = thread_call_enter_delayed(tcall, deadline); 46 47 return true; 48 } 49 50 static void thread_call_test_func(thread_call_param_t param0, 51 thread_call_param_t param1) 52 { 53 testthreadcall *self = (testthreadcall *)param0; 54 55 IOLog("thread_call_test_func %p %p\n", param0, param1); 56 57 IOSimpleLockLock(self->tlock); 58 IOSimpleLockUnlock(self->tlock); 59 60 #if 1 61 IOSimpleLockLock(self->tlock); 62 #else 63 IOSimpleLockUnlock(self->tlock); 64 #endif 65 } 66