xref: /xnu-12377.61.12/tests/sched/sched_test_harness/sched_harness_impl.h (revision 4d495c6e23c53686cf65f45067f79024cf5dcee8)
1 // Copyright (c) 2024 Apple Inc.  All rights reserved.
2 
3 #pragma once
4 
5 #include <stdint.h>
6 #include <stdbool.h>
7 
8 #include "sched_runqueue_harness.h"
9 #include "sched_migration_harness.h"
10 
11 extern void                  impl_init_runqueue(void);
12 extern struct thread_group  *impl_create_tg(int interactivity_score);
13 extern test_thread_t         impl_create_thread(int th_sched_bucket, struct thread_group *tg, int pri);
14 extern void                  impl_set_thread_sched_mode(test_thread_t thread, int mode);
15 extern bool                  impl_get_thread_is_realtime(test_thread_t thread);
16 extern void                  impl_set_thread_processor_bound(test_thread_t thread, int cpu_id);
17 extern void                  impl_cpu_set_thread_current(int cpu_id, test_thread_t thread);
18 extern test_thread_t         impl_cpu_clear_thread_current(int cpu_id);
19 extern void                  impl_cpu_enqueue_thread(int cpu_id, test_thread_t thread);
20 extern test_thread_t         impl_cpu_dequeue_thread(int cpu_id);
21 extern test_thread_t         impl_cpu_dequeue_thread_compare_current(int cpu_id);
22 extern bool                  impl_processor_csw_check(int cpu_id);
23 extern void                  impl_pop_tracepoint(uint64_t *trace_code, uint64_t *arg1, uint64_t *arg2, uint64_t *arg3, uint64_t *arg4);
24 extern bool                  impl_thread_should_yield(int cpu_id);
25 extern void                  impl_pop_ipi(int *cpu_id, test_ipi_type_t *ipi_type);
26 extern void                  impl_send_ipi(int cpu_id, test_thread_t thread, test_ipi_event_t event);
27 
28 /* Migration-specific functions */
29 extern void                  impl_init_migration_harness(test_hw_topology_t hw_topology);
30 extern void                  impl_set_tg_sched_bucket_preferred_pset(struct thread_group *tg, int sched_bucket, int cluster_id);
31 extern void                  impl_set_thread_cluster_bound(test_thread_t thread, int cluster_id);
32 extern int                   impl_choose_pset_for_thread(test_thread_t thread);
33 extern bool                  impl_thread_avoid_processor(test_thread_t thread, int cpu_id, bool quantum_expiry);
34 extern void                  impl_cpu_expire_quantum(int cpu_id);
35 extern test_thread_t         impl_steal_thread(int cpu_id);
36 extern bool                  impl_processor_balance(int cpu_id);
37 extern void                  impl_set_current_processor(int cpu_id);
38 extern void                  impl_set_pset_load_avg(int cluster_id, int QoS, uint64_t load_avg);
39 extern void                  impl_set_pset_derecommended(int cluster_id);
40 extern int                   impl_iterate_pset_search_order_rt(int src_pset_id, int offset);
41 extern void                  impl_set_pset_recommended(int cluster_id);
42 extern uint32_t              impl_qos_max_parallelism(int qos, uint64_t options);
43 extern int                  *impl_iterate_pset_search_order(int src_pset_id, uint64_t candidate_map, int sched_bucket);
44 
45 /* Realtime */
46 extern void                  impl_set_thread_realtime(test_thread_t thread, uint32_t period, uint32_t computation, uint32_t constraint, bool preemptible, uint8_t priority_offset, uint64_t deadline);
47 extern test_thread_t         impl_rt_choose_thread(int cpu_id);
48