| #define FIO_MAX_CPUS MAXIMUM_PROCESSORS |
| |
| typedef DWORD_PTR os_cpu_mask_t; |
| |
| static inline int fio_setaffinity(int pid, os_cpu_mask_t cpumask) |
| { |
| HANDLE h; |
| BOOL bSuccess = FALSE; |
| |
| h = OpenThread(THREAD_QUERY_INFORMATION | THREAD_SET_INFORMATION, TRUE, pid); |
| if (h != NULL) { |
| bSuccess = SetThreadAffinityMask(h, cpumask); |
| if (!bSuccess) |
| log_err("fio_setaffinity failed: failed to set thread affinity (pid %d, mask %.16llx)\n", pid, cpumask); |
| |
| CloseHandle(h); |
| } else { |
| log_err("fio_setaffinity failed: failed to get handle for pid %d\n", pid); |
| } |
| |
| return (bSuccess)? 0 : -1; |
| } |
| |
| static inline int fio_getaffinity(int pid, os_cpu_mask_t *mask) |
| { |
| os_cpu_mask_t systemMask; |
| |
| HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid); |
| |
| if (h != NULL) { |
| GetProcessAffinityMask(h, mask, &systemMask); |
| CloseHandle(h); |
| } else { |
| log_err("fio_getaffinity failed: failed to get handle for pid %d\n", pid); |
| return -1; |
| } |
| |
| return 0; |
| } |
| |
| static inline void fio_cpu_clear(os_cpu_mask_t *mask, int cpu) |
| { |
| *mask &= ~(1ULL << cpu); |
| } |
| |
| static inline void fio_cpu_set(os_cpu_mask_t *mask, int cpu) |
| { |
| *mask |= 1ULL << cpu; |
| } |
| |
| static inline int fio_cpu_isset(os_cpu_mask_t *mask, int cpu) |
| { |
| return (*mask & (1ULL << cpu)) != 0; |
| } |
| |
| static inline int fio_cpu_count(os_cpu_mask_t *mask) |
| { |
| return hweight64(*mask); |
| } |
| |
| static inline int fio_cpuset_init(os_cpu_mask_t *mask) |
| { |
| *mask = 0; |
| return 0; |
| } |
| |
| static inline int fio_cpuset_exit(os_cpu_mask_t *mask) |
| { |
| return 0; |
| } |