mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
setusercontext(): Fix gap when setting a realtime-class priority
The login.conf's "priority" capability allows to set priorities in the idle or realtime classes in addition to the classical nice values (-20 to 20), through a natural extension where values greater than 20 put the processes in the idle class (with priority adjusted within RTP_PRIO_MIN and RTP_PRIO_MAX, 21 being converted to 0, 22 to 1, etc.) and values lower than -20 put the process in the realtime class (with priority adjusted within RTP_PRIO_MIN and RTP_PRIO_MAX, -21 being converted to RTP_PRIO_MAX (31), -22 to 30, etc.). Before this fix, in the latter case (realtime class), -21 was converted to 30, and RTP_PRIO_MAX (31) could never be specified. While here, change the priority computation for the idle-class case to be symmetrical and use RTP_PRIO_MIN (in practice, this changes nothing at all, since RTP_PRIO_MIN is 0; but this is the correct theoretical formula, which would work as well with other values of RTP_PRIO_MIN). PR: 271727 Reviewed by: imp, kib MFC after: 2 weeks Sponsored by: Kumacom SAS Differential Revision: https://reviews.freebsd.org/D40339 (cherry picked from commit bd572be78436473a2ad4c1b78728b739c74ef238)
This commit is contained in:
parent
7309978590
commit
af632cc56b
1 changed files with 2 additions and 2 deletions
|
|
@ -452,7 +452,7 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in
|
|||
|
||||
if (p > PRIO_MAX) {
|
||||
rtp.type = RTP_PRIO_IDLE;
|
||||
p -= PRIO_MAX + 1;
|
||||
p += RTP_PRIO_MIN - (PRIO_MAX + 1);
|
||||
rtp.prio = p > RTP_PRIO_MAX ? RTP_PRIO_MAX : p;
|
||||
if (rtprio(RTP_SET, 0, &rtp))
|
||||
syslog(LOG_WARNING, "rtprio '%s' (%s): %m",
|
||||
|
|
@ -460,7 +460,7 @@ setusercontext(login_cap_t *lc, const struct passwd *pwd, uid_t uid, unsigned in
|
|||
lc ? lc->lc_class : LOGIN_DEFCLASS);
|
||||
} else if (p < PRIO_MIN) {
|
||||
rtp.type = RTP_PRIO_REALTIME;
|
||||
p -= PRIO_MIN - RTP_PRIO_MAX;
|
||||
p += RTP_PRIO_MAX - (PRIO_MIN - 1);
|
||||
rtp.prio = p < RTP_PRIO_MIN ? RTP_PRIO_MIN : p;
|
||||
if (rtprio(RTP_SET, 0, &rtp))
|
||||
syslog(LOG_WARNING, "rtprio '%s' (%s): %m",
|
||||
|
|
|
|||
Loading…
Reference in a new issue