From: Claudio Jeker Subject: Re: Remove last callers of the lbolt sleep channel To: Vitaliy Makkoveev Cc: Tim Leslie , "tech@openbsd.org" Date: Wed, 24 Sep 2025 20:26:12 +0200 On Wed, Sep 24, 2025 at 08:07:29PM +0300, Vitaliy Makkoveev wrote: > On Wed, Sep 24, 2025 at 04:20:08PM +0000, Tim Leslie wrote: > > > > So I prefer to use `nowake', because this 100% exclude the fallout from > > > > current or hypothetical newly introduced wakeup(pr->ps_pgrp). > > > > > > > > > I agree with this. Replacing this with 'nowake' is the right way since > > > only the 1sec timer should wake up these ttysleeps. > > > > Updated diff below. > > > > Tim > > > > Since you added ttysleep_nsec() declaration to sys/tty.h, you don't need > this declaration in kern/tty.c. With this fix this diff is ok by mvs. > > I will commit it by myself unless someone has objections or commit it by > himself. OK claudio@ with your removal of the extra ttysleep_nsec() prototype. > > -- > > > > > > > > diff --git a/sys/kern/sched_bsd.c b/sys/kern/sched_bsd.c > > --- a/sys/kern/sched_bsd.c > > +++ b/sys/kern/sched_bsd.c > > @@ -55,7 +55,6 @@ > > #endif > > > > uint64_t roundrobin_period; /* [I] roundrobin period (ns) */ > > -int lbolt; /* once a second sleep address */ > > > > struct mutex sched_lock; > > > > @@ -282,7 +281,6 @@ schedcpu(void *unused) > > } > > SCHED_UNLOCK(); > > } > > - wakeup(&lbolt); > > timeout_add_sec(&to, 1); > > } > > > > diff --git a/sys/kern/tty.c b/sys/kern/tty.c > > --- a/sys/kern/tty.c > > +++ b/sys/kern/tty.c > > @@ -747,8 +747,8 @@ ttioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct proc *p) > > if (pr->ps_pgrp->pg_jobc == 0) > > return (EIO); > > pgsignal(pr->ps_pgrp, SIGTTOU, 1); > > - error = ttysleep(tp, &lbolt, TTOPRI | PCATCH, > > - ttybg); > > + error = ttysleep_nsec(tp, &nowake, TTOPRI | PCATCH, > > + ttybg, SEC_TO_NSEC(1)); > > if (error) > > return (error); > > } > > @@ -1515,7 +1515,8 @@ loop: lflag = tp->t_lflag; > > goto out; > > } > > pgsignal(pr->ps_pgrp, SIGTTIN, 1); > > - error = ttysleep(tp, &lbolt, TTIPRI | PCATCH, ttybg); > > + error = ttysleep_nsec(tp, &nowake, TTIPRI | PCATCH, ttybg, > > + SEC_TO_NSEC(1)); > > if (error) > > goto out; > > goto loop; > > @@ -1613,8 +1614,8 @@ read: > > ISSET(lflag, IEXTEN | ISIG) == (IEXTEN | ISIG)) { > > pgsignal(tp->t_pgrp, SIGTSTP, 1); > > if (first) { > > - error = ttysleep(tp, &lbolt, TTIPRI | PCATCH, > > - ttybg); > > + error = ttysleep_nsec(tp, &nowake, TTIPRI | PCATCH, > > + ttybg, SEC_TO_NSEC(1)); > > if (error) > > break; > > goto loop; > > @@ -1765,7 +1766,8 @@ loop: > > goto out; > > } > > pgsignal(pr->ps_pgrp, SIGTTOU, 1); > > - error = ttysleep(tp, &lbolt, TTIPRI | PCATCH, ttybg); > > + error = ttysleep_nsec(tp, &nowake, TTIPRI | PCATCH, ttybg, > > + SEC_TO_NSEC(1)); > > if (error) > > goto out; > > goto loop; > > diff --git a/sys/kern/tty_pty.c b/sys/kern/tty_pty.c > > --- a/sys/kern/tty_pty.c > > +++ b/sys/kern/tty_pty.c > > @@ -294,7 +294,8 @@ again: > > pr->ps_flags & PS_PPWAIT) > > return (EIO); > > pgsignal(pr->ps_pgrp, SIGTTIN, 1); > > - error = ttysleep(tp, &lbolt, TTIPRI | PCATCH, ttybg); > > + error = ttysleep_nsec(tp, &nowake, TTIPRI | PCATCH, > > + ttybg, SEC_TO_NSEC(1)); > > if (error) > > return (error); > > } > > diff --git a/sys/sys/kernel.h b/sys/sys/kernel.h > > --- a/sys/sys/kernel.h > > +++ b/sys/sys/kernel.h > > @@ -55,7 +55,6 @@ extern int ticks; /* # of hardclock ticks */ > > extern int hz; /* system clock's frequency */ > > extern int stathz; /* statistics clock's frequency */ > > extern int profhz; /* profiling clock's frequency */ > > -extern int lbolt; /* once a second sleep address */ > > > > #ifndef HZ > > #define HZ 100 > > diff --git a/sys/sys/tty.h b/sys/sys/tty.h > > --- a/sys/sys/tty.h > > +++ b/sys/sys/tty.h > > @@ -290,6 +290,7 @@ void ttypend(struct tty *tp); > > int ttyretype(struct tty *tp); > > int ttyrub(int c, struct tty *tp); > > int ttysleep(struct tty *tp, void *chan, int pri, char *wmesg); > > +int ttysleep_nsec(struct tty *, void *, int, char *, uint64_t); > > int ttywait(struct tty *tp); > > int ttywflush(struct tty *tp); > > void ttytstamp(struct tty *tp, int octs, int ncts, int odcd, int ndcd); > > > -- :wq Claudio