fio: fix aio trim completion latencies
[fio.git] / os / os-windows-xp.h
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 }