From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from relay8-d.mail.gandi.net ([217.70.183.201]) by ewsd; Sat Nov 16 07:53:20 EST 2019 X-Originating-IP: 185.198.110.254 Received: from coeus.antares-labs.eu (unknown [185.198.110.254]) (Authenticated sender: rgl@antares-labs.eu) by relay8-d.mail.gandi.net (Postfix) with ESMTPSA id C46CB1BF206 for <9front@9front.org>; Sat, 16 Nov 2019 12:53:14 +0000 (UTC) Message-ID: <41531996F786029F0007A6ED57284E8C@antares-labs.eu> Date: Sat, 16 Nov 2019 13:53:10 +0100 From: rgl@antares-labs.eu To: 9front@9front.org Subject: Re: [9front] man: new section 9 In-Reply-To: 4EBBAA2AFB3EA490574FB941BCD5F0FE@antares-labs.eu MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="upas-myulutilklizkbwphuwjbdrsik" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: proxy-aware ORM over TOR singleton proxy-oriented general-purpose-oriented solution This is a multi-part message in MIME format. --upas-myulutilklizkbwphuwjbdrsik Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit ok, another two pages. --upas-myulutilklizkbwphuwjbdrsik Content-Disposition: inline Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit diff -r 159c7e7ca171 sys/man/9/delay --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys/man/9/delay Sat Nov 16 13:13:43 2019 +0100 @@ -0,0 +1,46 @@ +.TH DELAY 9 +.SH NAME +delay, microdelay, addclock0link \- small delays, clock interrupts +.SH SYNOPSIS +.ta \w'\fLTimer* 'u +.B +void delay(int ms) +.PP +.B +void microdelay(int µs) +.PP +.B +Timer* addclock0link(void(*clockf)(void), int ms) +.SH DESCRIPTION +.I Delay +busy waits for +.I ms +milliseconds, forced to be at least one millisecond on some architectures. +.PP +.I Microdelay +works exactly the same as +.I delay +but using microseconds instead. +.PP +For delays on the order of clock ticks, +.I tsleep +(see +.IR sleep (9)) +provides a better alternative to the busy waiting of these routines. +.PP +.I Addclock0link +adds a new periodic timer to the current processor's timer list, with +.I clockf +executing every +.I ms +milliseconds. If +.I ms +is zero a default clock is used, it will panic otherwise (i.e. +.I ms +< 0). +.SH SOURCE +.B /sys/src/9/port/portclock.c +.br +.B /sys/src/9/*/clock.c +.SH SEE ALSO +.IR sleep (9) --upas-myulutilklizkbwphuwjbdrsik Content-Disposition: inline Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit diff -r 159c7e7ca171 sys/man/9/sleep --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sys/man/9/sleep Sat Nov 16 13:49:26 2019 +0100 @@ -0,0 +1,125 @@ +.TH SLEEP 9 +.SH NAME +sleep, wakeup, tsleep, return0 \- process synchronisation +.SH SYNOPSIS +.ta \w'\fLvoid 'u +.B +void sleep(Rendez *r, int (*f)(void*), void *arg) +.PP +.B +void wakeup(Rendez *r) +.PP +.B +void tsleep(Rendez *r, int (*f)(void*), void *arg, ulong ms) +.PP +.B +int return0(void *arg) +.PP +.SH DESCRIPTION +A process running in the kernel can use these functions to +synchronise with an interrupt handler or another kernel process. +In particular, they are used by device drivers to wait for an event to be signalled on +receipt of an interrupt. +(In practice, they are most often used indirectly, through +.IR qio (9) +for instance.) +.PP +The caller of +.I sleep +and a caller of +.I wakeup +share a +.B Rendez +structure, to provide a rendezvous point between them +to synchronise on an event. +.I Sleep +uses a condition function +.I f +that returns true if the event has occurred. +.PP +.I Sleep +evaluates +.IB f ( arg ). +If true, the event has happened and +.I sleep +returns immediately. +Otherwise, +.I sleep +blocks on the event variable +.IR r , +awaiting +.IR wakeup . +.PP +.I Wakeup +is called by either a process or an interrupt handler to wake any process +sleeping at +.IR r , +signifying that the corresponding condition is true (the event has occurred). +It has no effect if there is no sleeping process. +.PP +.I Tsleep +is similar to +.IR sleep , +except that if the condition +.IB f ( arg ) +is false and the caller does sleep, +and nothing else wakes it within +.I ms +millliseconds, +the system will wake it. +.IR Tsleep 's +caller must check its environment to decide whether timeout or the event +occurred. +The timing provided by +.I tsleep +is imprecise, but adequate in practice for the normal use of protecting against +lost interrupts and otherwise unresponsive devices or software. +.PP +.I Return0 +ignores its arguments and returns zero. It is commonly used as +the predicate +.I f +in a call to +.I tsleep +to obtain a time delay, using the +.B Rendez +variable +.B sleep +in the +.B Proc +structure, for example: +.IP +.B tsleep(&up->sleep, return0, nil, 10); +.PP +Both +.I sleep +and +.I tsleep +can be interrupted by +.IR swiproc +(see +.IR kproc (9)), +causing a non-local goto through a call to +.IR error (9). +.SH SOURCE +.B /sys/src/9/port/proc.c +.br +.B /sys/src/9/port/sysproc.c +.SH DIAGNOSTICS +There can be at most one process waiting on a +.BR Rendez , +and if two processes collide, the system will +.IR panic (9) +.RB (`` "double sleep" ''). +Access to a +.B Rendez +must therefore be serialised by some other mechanism, usually +.IR qlock (9). +.SH SEE ALSO +.IR lock (9), +.IR qlock (9), +.IR delay (9) +.br +``Process Sleep and Wakeup on a Shared-memory Multiprocessor'', +in +.I "Plan 9 Programmer's Manual: Volume 2". --upas-myulutilklizkbwphuwjbdrsik--