blob: 1ce9ab318ee2951bd1b4c1ca15ec38e9f44948f5 [file] [log] [blame]
#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;
}