]> git.saurik.com Git - apple/xnu.git/blob - tools/tests/testkext/testthreadcall.cpp
b879b71b2534ce2d3357a2a89af86f64e4b070a0
[apple/xnu.git] / tools / tests / testkext / testthreadcall.cpp
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 }