Re: [PATCH v3] ipc: Update semtimedop() to use hrtimer

From: Davidlohr Bueso
Date: Thu Apr 28 2022 - 17:01:34 EST


On Thu, 28 Apr 2022, Prakash Sangappa wrote:

semtimedop() should be converted to use hrtimer like it has been done
for most of the system calls with timeouts. This system call already
takes a struct timespec as an argument and can therefore provide finer
granularity timed wait.

Signed-off-by: Prakash Sangappa <prakash.sangappa@xxxxxxxxxx>
Reviewed-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
---
v1->v2:
- Use timespec64_valid() to validate timeout
and other changes as suggested by Thomas Gleixner
v2-v3 Added Reviewed by tag
---

The second '---' is not necesary, it's the first one that counts.

@@ -2166,10 +2167,8 @@ long __do_semtimedop(int semid, struct sembuf *sops,
sem_unlock(sma, locknum);
rcu_read_unlock();

- if (timeout)
- jiffies_left = schedule_timeout(jiffies_left);
- else
- schedule();
+ timed_out = !schedule_hrtimeout_range(exp,
+ current->timer_slack_ns, HRTIMER_MODE_ABS);

I'm wondering if the slack parameter instead of passing the timer_slack_ns
value immediately, we should do a rt_task() check and pass zero if so.
And the opposite for the posix mqueue case: bit a little more lenient when
!rt_task() and pass current->timer_slack_ns instead of zero. Of course mq
is a lot more rt aware than sysv semaphores, but that doesn't mean both forms
of ipc are not seen used with or without RT constraints.

Thanks,
Davidlohr