aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobbie King <robking@cisco.com>2015-01-14 23:48:22 +0100
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-01-16 17:32:59 +0300
commitb9c94bc29cd96898308f1a8f5273d69c70270e7f (patch)
tree1449517ce2e1b296898a5c6c175027a330b1bb0d
parentc8906ca2935a10344c256d930fbd90907295b804 (diff)
api: cpumask: add odp_cpumask_first
To get the first element in order to be able to traverse a mask. Signed-off-by: Robbie King <robking@cisco.com> Signed-off-by: Anders Roxell <anders.roxell@linaro.org> Reviewed-by: Petri Savolainen <petri.savolainen@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--platform/linux-generic/include/api/odp_cpumask.h7
-rw-r--r--platform/linux-generic/odp_cpumask.c10
2 files changed, 17 insertions, 0 deletions
diff --git a/platform/linux-generic/include/api/odp_cpumask.h b/platform/linux-generic/include/api/odp_cpumask.h
index 0090f9abe..cccbb6215 100644
--- a/platform/linux-generic/include/api/odp_cpumask.h
+++ b/platform/linux-generic/include/api/odp_cpumask.h
@@ -132,6 +132,13 @@ int odp_cpumask_equal(const odp_cpumask_t *mask1,
void odp_cpumask_copy(odp_cpumask_t *dest, const odp_cpumask_t *src);
/**
+ * Find first bit set in mask
+ *
+ * @return cpu else -1 if no bits set in cpumask
+ */
+int odp_cpumask_first(const odp_cpumask_t *mask);
+
+/**
* @}
*/
diff --git a/platform/linux-generic/odp_cpumask.c b/platform/linux-generic/odp_cpumask.c
index 6be7f1e8e..a3bb1767a 100644
--- a/platform/linux-generic/odp_cpumask.c
+++ b/platform/linux-generic/odp_cpumask.c
@@ -175,3 +175,13 @@ void odp_cpumask_copy(odp_cpumask_t *dest, const odp_cpumask_t *src)
{
memcpy(&dest->set, &src->set, sizeof(src->set));
}
+
+int odp_cpumask_first(const odp_cpumask_t *mask)
+{
+ int cpu;
+
+ for (cpu = 0; cpu < CPU_SETSIZE; cpu++)
+ if (odp_cpumask_isset(mask, cpu))
+ return cpu;
+ return -1;
+}