]>
Commit | Line | Data |
---|---|---|
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 | } |