xref: /linux/kernel/trace/rv/monitors/nomiss/nomiss_kunit.c (revision 67f8bc848ee31831336bd478e57d2f993551902e)
18da2a883SGabriele Monaco // SPDX-License-Identifier: GPL-2.0
28da2a883SGabriele Monaco #include <linux/kernel.h>
38da2a883SGabriele Monaco #include <linux/rv.h>
48da2a883SGabriele Monaco #include <rv/kunit.h>
58da2a883SGabriele Monaco #include <trace/events/sched.h>
68da2a883SGabriele Monaco #include "nomiss_kunit.h"
78da2a883SGabriele Monaco 
88da2a883SGabriele Monaco #if IS_REACHABLE(CONFIG_RV_MON_NOMISS)
98da2a883SGabriele Monaco 
108da2a883SGabriele Monaco static void rv_test_nomiss(struct kunit *test)
118da2a883SGabriele Monaco {
128da2a883SGabriele Monaco 	struct task_struct *target = rv_kunit_alloc_mock_task(test);
138da2a883SGabriele Monaco 	struct task_struct *other = rv_kunit_alloc_mock_task(test);
148da2a883SGabriele Monaco 	struct rv_kunit_ctx *ctx = test->priv;
158da2a883SGabriele Monaco 
168da2a883SGabriele Monaco 	prepare_test(test, &rv_nomiss_ops.mon);
178da2a883SGabriele Monaco 
188da2a883SGabriele Monaco 	target->pid = 99;
198da2a883SGabriele Monaco 	target->policy = SCHED_DEADLINE;
208da2a883SGabriele Monaco 	target->dl.runtime = 10000;
218da2a883SGabriele Monaco 	target->dl.dl_deadline = 20000;
228da2a883SGabriele Monaco 
238da2a883SGabriele Monaco 	rv_nomiss_ops.handle_newtask(NULL, target, 0);
248da2a883SGabriele Monaco 
258da2a883SGabriele Monaco 	/* Task gets preempted and can't terminate before deadline */
268da2a883SGabriele Monaco 	rv_nomiss_ops.handle_sched_switch(NULL, 0, other, target, TASK_RUNNING);
278da2a883SGabriele Monaco 	rv_nomiss_ops.handle_dl_replenish(NULL, &target->dl, 0, DL_TASK);
288da2a883SGabriele Monaco 	udelay(10);
298da2a883SGabriele Monaco 	rv_nomiss_ops.handle_sched_switch(NULL, 0, target, other, TASK_RUNNING);
308da2a883SGabriele Monaco 	RV_KUNIT_EXPECT_REACTION_HERE(test, ctx) {
31*78509511SGabriele Monaco 		udelay(15 + div_u64(*rv_nomiss_ops.deadline_thresh, 1000));
328da2a883SGabriele Monaco 		rv_nomiss_ops.handle_sched_switch(NULL, 0, other, target, TASK_RUNNING);
338da2a883SGabriele Monaco 	}
348da2a883SGabriele Monaco }
358da2a883SGabriele Monaco 
368da2a883SGabriele Monaco #else
378da2a883SGabriele Monaco #define rv_test_nomiss rv_test_stub
388da2a883SGabriele Monaco #endif
39