Commit | Line | Data |
---|---|---|
dac7244b SW |
1 | #define FIO_MAX_CPUS MAXIMUM_PROCESSORS |
2 | ||
3 | typedef DWORD_PTR os_cpu_mask_t; | |
4 | ||
5 | static inline int fio_setaffinity(int pid, os_cpu_mask_t cpumask) | |
6 | { | |
7 | HANDLE h; | |
8 | BOOL bSuccess = FALSE; | |
9 | ||
10 | h = OpenThread(THREAD_QUERY_INFORMATION | THREAD_SET_INFORMATION, TRUE, pid); | |
11 | if (h != NULL) { | |
12 | bSuccess = SetThreadAffinityMask(h, cpumask); | |
13 | if (!bSuccess) | |
14 | log_err("fio_setaffinity failed: failed to set thread affinity (pid %d, mask %.16llx)\n", pid, cpumask); | |
15 | ||
16 | CloseHandle(h); | |
17 | } else { | |
18 | log_err("fio_setaffinity failed: failed to get handle for pid %d\n", pid); | |
19 | } | |
20 | ||
21 | return (bSuccess)? 0 : -1; | |
22 | } | |
23 | ||
24 | static inline int fio_getaffinity(int pid, os_cpu_mask_t *mask) | |
25 | { | |
26 | os_cpu_mask_t systemMask; | |
27 | ||
28 | HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid); | |
29 | ||
30 | if (h != NULL) { | |
31 | GetProcessAffinityMask(h, mask, &systemMask); | |
32 | CloseHandle(h); | |
33 | } else { | |
34 | log_err("fio_getaffinity failed: failed to get handle for pid %d\n", pid); | |
35 | return -1; | |
36 | } | |
37 | ||
38 | return 0; | |
39 | } | |
40 | ||
41 | static inline void fio_cpu_clear(os_cpu_mask_t *mask, int cpu) | |
42 | { | |
43 | *mask &= ~(1ULL << cpu); | |
44 | } | |
45 | ||
46 | static inline void fio_cpu_set(os_cpu_mask_t *mask, int cpu) | |
47 | { | |
48 | *mask |= 1ULL << cpu; | |
49 | } | |
50 | ||
51 | static inline int fio_cpu_isset(os_cpu_mask_t *mask, int cpu) | |
52 | { | |
53 | return (*mask & (1ULL << cpu)) != 0; | |
54 | } | |
55 | ||
56 | static inline int fio_cpu_count(os_cpu_mask_t *mask) | |
57 | { | |
58 | return hweight64(*mask); | |
59 | } | |
60 | ||
61 | static inline int fio_cpuset_init(os_cpu_mask_t *mask) | |
62 | { | |
63 | *mask = 0; | |
64 | return 0; | |
65 | } | |
66 | ||
67 | static inline int fio_cpuset_exit(os_cpu_mask_t *mask) | |
68 | { | |
69 | return 0; | |
70 | } |