This call allows to get the list of unprivileged processor ports
belonging to a processor set.
---
include/mach/mach_host.defs | 7 +++++++
kern/host.c | 33 +++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+)
diff --git a/include/mach/mach_host.defs b/include/mach/mach_host.defs
index 936e2bde..70a2e866 100644
--- a/include/mach/mach_host.defs
+++ b/include/mach/mach_host.defs
@@ -393,3 +393,10 @@ routine host_get_kernel_version(
routine host_get_uptime64(
host : host_t;
out uptime : time_value64_t);
+
+/*
+ * Get list of processors in processor set
+ */
+routine processor_set_processors(
+ set_name : processor_set_name_t;
+ out processors_list : processor_name_array_t);
diff --git a/kern/host.c b/kern/host.c
index e7219e1c..035ef05f 100644
--- a/kern/host.c
+++ b/kern/host.c
@@ -387,3 +387,36 @@ host_processor_set_priv(
pset_reference(*pset);
return KERN_SUCCESS;
}
+
+kern_return_t processor_set_processors(
+ const processor_set_t pset,
+ processor_name_array_t *processor_list,
+ natural_t *countp)
+{
+ unsigned int count, i = 0;
+ processor_t p;
+ ipc_port_t *tp;
+
+ if (pset == PROCESSOR_SET_NULL)
+ return KERN_INVALID_ARGUMENT;
+
+ simple_lock(&pset->lock);
+
+ count = pset->processor_count;
+
+ tp = (ipc_port_t *)kalloc(count * sizeof(ipc_port_t));
+ if (tp == NULL) {
+ simple_unlock(&pset->lock);
+ return KERN_RESOURCE_SHORTAGE;
+ }
+
+ queue_iterate(&pset->processors, p, processor_t, processors) {
+ tp[i++] = convert_processor_name_to_port(p);
+ }
+
+ *countp = count;
+ *processor_list = (mach_port_t *)tp;
+
+ simple_unlock(&pset->lock);
+ return KERN_SUCCESS;
+}
--
2.53.0