Re: [PATCH v3 3/5] sched_ext: Implement scx_bpf_clock_get_ns()
From: Tejun Heo
Date: Tue Dec 03 2024 - 18:37:13 EST
Hello,
On Tue, Dec 03, 2024 at 11:28:00PM +0900, Changwoo Min wrote:
> +__bpf_kfunc u64 scx_bpf_clock_get_ns(void)
> +{
> + static DEFINE_PER_CPU(u64, prev_clk);
> + struct rq *rq = this_rq();
this_rq() is this_cpu_ptr(). Shouldn't this be below preempt_disable() if
this function is allowed to be called from sleepable ops?
> + u64 pr_clk, cr_clk;
> +
> + preempt_disable();
> + pr_clk = __this_cpu_read(prev_clk);
Would it make sense to make the above rq->scx.prev_clk?
> + /*
> + * If the rq clock is invalid, start a new rq clock period
> + * with a fresh sched_clock().
> + */
> + if (!(rq->scx.flags & SCX_RQ_CLK_VALID)) {
> + cr_clk = sched_clock();
> + scx_rq_clock_update(rq, cr_clk);
> + }
> + /*
> + * If the rq clock is valid, use the cached rq clock
> + * whenever the clock does not go backward.
> + */
Can you move the comments inside the if/else bodies so that "} else {" can
stay on the same line?
> + else {
> + cr_clk = rq->scx.clock;
> + /*
> + * If the clock goes backward, start a new rq clock period
> + * with a fresh sched_clock().
> + */
Can you please add comment explaining how this can happen?
Thanks.
--
tejun