]> git.saurik.com Git - apple/xnu.git/blame_incremental - tools/tests/testkext/testthreadcall.cpp
xnu-1699.22.73.tar.gz
[apple/xnu.git] / tools / tests / testkext / testthreadcall.cpp
... / ...
CommitLineData
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
14OSDefineMetaClassAndStructors(testthreadcall, super);
15
16extern "C" {
17
18static void thread_call_test_func(thread_call_param_t param0,
19 thread_call_param_t param1);
20
21}
22
23bool
24testthreadcall::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
50static 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}