Re: [PATCH v0.9.1 3/6] sched/umcg: implement UMCG syscalls
flat view
From: Thomas Gleixner <hidden>
Date: 2021-11-26 21:16:29
Also in:
linux-mm, lkml
On Fri, Nov 26 2021 at 18:09, Peter Zijlstra wrote:
quoted hunk ↗ jump to hunk
+ + if (timo) { + hrtimer_init_sleeper_on_stack(&timeout, tsk->umcg_clock, + HRTIMER_MODE_ABS); + hrtimer_set_expires_range_ns(&timeout.timer, (s64)timo, + tsk->timer_slack_ns); + } + + for (;;) { + set_current_state(TASK_INTERRUPTIBLE); + + ret = -EINTR; + if (signal_pending(current)) + break; + + /* + * Faults can block and scribble our wait state. + */ + pagefault_disable(); + if (get_user(state, &self->state)) { + pagefault_enable(); + + ret = -EFAULT; + if (page) { + unpin_user_page(page); + page = NULL; + break; + } + + if (pin_user_pages_fast((unsigned long)self, 1, 0, &page) != 1) { + page = NULL; + break; + } + + continue; + } + + if (page) { + unpin_user_page(page); + page = NULL; + } + pagefault_enable(); + + state &= UMCG_TASK_MASK; + if (state != UMCG_TASK_RUNNABLE) { + ret = 0; + if (state == UMCG_TASK_RUNNING) + break; + + ret = -EINVAL; + break; + } + + if (timo) + hrtimer_sleeper_start_expires(&timeout, HRTIMER_MODE_ABS); + + freezable_schedule();
You can replace the whole hrtimer foo with
if (!schedule_hrtimeout_range_clock(timo ? &timo : NULL,
tsk->timer_slack_ns,
HRTIMER_MODE_ABS,
tsk->umcg_clock)) {
ret = -ETIMEOUT;
break;
}
Thanks,
tglx