blob: d421a7ad936aa37fbcbf2b56055b0fb029039c0b [file] [log] [blame]
/* Copyright (c) 2015 Google Inc
* Davide Libenzi <dlibenzi@google.com>
* See LICENSE for details.
*/
#pragma once
#include <ros/arch/arch.h>
#include <ros/common.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdio.h>
#include <limits.h>
#include <parlib/parlib.h>
#include <parlib/bitmask.h>
#define CORE_SET_SIZE BYTES_FOR_BITMASK(MAX_NUM_CORES)
/* Not using sched.h CPU set because that file has definitions for a large
* number of APIs Akaros does not support.
* Making Akaros core_set.h visible in userslace might be a cleaner approach.
*/
struct core_set {
DECL_BITMASK(core_set, MAX_NUM_CORES);
};
void ros_get_low_latency_core_set(struct core_set *cores);
size_t ros_get_low_latency_core_count(void);
size_t ros_total_cores(void);
void ros_parse_cores(const char *str, struct core_set *cores);
void ros_get_all_cores_set(struct core_set *cores);
void ros_get_no_cores_set(struct core_set *cores);
void ros_not_core_set(struct core_set *dcs);
void ros_and_core_sets(struct core_set *dcs, const struct core_set *scs);
void ros_or_core_sets(struct core_set *dcs, const struct core_set *scs);
static inline void ros_set_bit(void *addr, size_t nbit)
{
SET_BITMASK_BIT(addr, nbit);
}
static inline void ros_clear_bit(void *addr, size_t nbit)
{
CLR_BITMASK_BIT(addr, nbit);
}
static inline bool ros_get_bit(const void *addr, size_t nbit)
{
return GET_BITMASK_BIT(addr, nbit);
}