Home | History | Annotate | Download | only in rumpkern
History log of /src/sys/rump/librump/rumpkern/sleepq.c
RevisionDateAuthorComments
 1.28  13-Oct-2023  ad Rump: sleepq_remove(): don't unlock the sleepq. Spotted by hannken@.
 1.27  08-Oct-2023  ad Ensure that an LWP that has taken a legitimate wakeup never produces an
error code from sleepq_block(). Then, it's possible to make cv_signal()
work as expected and only ever wake a singular LWP.
 1.26  05-Oct-2023  ad Resolve !MULTIPROCESSOR build problem with the nasty kernel lock macros.
 1.25  04-Oct-2023  ad Eliminate l->l_biglocks. Originally I think it had a use but these days a
local variable will do.
 1.24  23-Sep-2023  ad - Simplify how priority boost for blocking in kernel is handled. Rather
than setting it up at each site where we block, make it a property of
syncobj_t. Then, do not hang onto the priority boost until userret(),
drop it as soon as the LWP is out of the run queue and onto a CPU.
Holding onto it longer is of questionable benefit.

- This allows two members of lwp_t to be deleted, and mi_userret() to be
simplified a lot (next step: trim it down to a single conditional).

- While here, constify syncobj_t and de-inline a bunch of small functions
like lwp_lock() which turn out not to be small after all (I don't know
why, but atomic_*_relaxed() seem to provoke a compiler shitfit above and
beyond what volatile does).
 1.23  30-Jun-2022  knakahara Fix rump build failure after sleepq.h:r1.35.
 1.22  09-Apr-2022  riastradh rumpkern/sleepq: Convert membar_exit/store to atomic_store_release.
 1.21  01-Nov-2020  christos PR/55664: Ruslan Nikolaev: Fix:

1. A race condition (bug) in sys/rump/librump/rumpkern/intr.c since
rumpuser_cv_signal() is called without holding a mutex
2. sleepq is implemented using a single (global) conditional
variable; that should be done per each sleepq separately
 1.20  25-Apr-2020  bouyer branches: 1.20.2;
Merge the bouyer-xenpvh branch, bringing in Xen PV drivers support under HVM
guests in GENERIC.
Xen support can be disabled at runtime with
boot -c
disable hypervisor
 1.19  19-Apr-2020  ad good grief..
 1.18  26-Mar-2020  ad branches: 1.18.2;
sleepq_t is now a LIST. Forgot to commit earlier.
 1.17  26-Jan-2016  pooka branches: 1.17.18;
Put the kernelside rump kernel headers into <rump-sys> instead of
sprinkling them around the faction directories. Avoids having
to add a CPPFLAGS (or several) to pretty much every component
Makefile.

Leave compat headers around in the old locations.

The commit changes some autogenerated files, but I'll fix the
generators shortly and regen.
 1.16  24-Apr-2014  pooka branches: 1.16.4;
Make sleepq_wake() type void. The return value hasn't been used in
almost 6 years. Even if it were, returning an arbitrary lwp is a bit
of a wonky interface and can really work only when expected == 1.
 1.15  24-Apr-2014  pooka in sleepq_wake(), honor the "expected" parameter
 1.14  10-Mar-2013  pooka branches: 1.14.6; 1.14.10;
Make RUN_ONCE actually run only once. Also, remove a "slightly"
outdated comment.
 1.13  28-Jan-2011  pooka branches: 1.13.4; 1.13.14;
these days make sure we have an lwp lock (for lwp walker smiths)
 1.12  27-Jan-2011  pooka Fill in l_wmesg since some proc-walkers assume it.
 1.11  12-Jan-2011  pooka branches: 1.11.2; 1.11.4;
When the client and the rump kernel are the same host process, all
threads blocking in the kernel automatically exit when the process
exists. However, for the sysproxy case this does not hold.
Typically it's ~harmless, but e.g. in the case of socket binding
following by poll it gets annoying.

Introduce sysproxy procexit, which wakes up all threads blocking
on a condition when a process's communication socket is closed.
The code is a little different from the regular kernel simply
because in a rump kernel l_mutex is not available at all times
(this is because scheduling happens on every kernel entry and exit,
and that path must be kept lockless for any reasonable performance).
Instead, use gating which makes sure all threads are either out of
the cv code or suspended in a well-known state. Then, wake up the
threads and tell them to get the hell out of our galaxy.
 1.10  18-Dec-2010  skrll Pull in sys/atomic.h so that hp700 can build - needed for membar_exit.
 1.9  18-Dec-2010  rmind - Fix a few possible locking issues in execve1() and exit1(). Add a note
that scheduler locks are special in this regard - adaptive locks cannot
be in the path due to turnstiles. Randomly spotted/reported by uebayasi@.
- Remove unused lwp_relock() and replace lwp_lock_retry() by simplifying
lwp_lock() and sleepq_enter() a little.
- Give alllwp its own cache-line and mark lwp_cache pointer as read-mostly.

OK ad@
 1.8  23-Jul-2010  pooka If a thread wake up spuriously, re-set l_mutex to make sure it's
still at the original value and not the schedstate one. This makes
select not miss wakeups in cases where there was a lot of selecting
going on (which is not all that common in a rump kernel).
 1.7  22-Jul-2010  pooka Reset l_mutex when waking up a thread. select uses it to determine
if a thread is still selecting, and would get a KASSERT panic if
the thread had been woken up but not run yet when selnotify() was
called.
 1.6  17-Nov-2009  pooka branches: 1.6.2; 1.6.4;
init global cv only once
 1.5  21-Oct-2009  rmind Sync rump with kernel changes.
 1.4  16-Oct-2009  pooka In case of timeout, remember to remove ourselves from the sleep staleq.
 1.3  16-Oct-2009  pooka Include sys_select.c for proper select()/poll() support.
 1.2  18-Dec-2008  pooka branches: 1.2.2; 1.2.6;
__KERNEL_RCSID
 1.1  10-Oct-2008  pooka branches: 1.1.2; 1.1.4; 1.1.6;
Support callouts and call callout_hardclock() from the timer
interrupt thread.

The sleepq implementation required for callouts is horrible, kludged
only for callouts, and generally unacceptable. It needs revisiting,
but I'm not sure yet should rump or kern_timeout be improved. It's
almost untested as of now, but committing this will give me some
maneuvering space while letting application compile.
 1.1.6.1  19-Jan-2009  skrll Sync with HEAD.
 1.1.4.2  19-Oct-2008  haad Sync with HEAD.
 1.1.4.1  10-Oct-2008  haad file sleepq.c was added on branch haad-dm on 2008-10-19 22:18:07 +0000
 1.1.2.2  10-Oct-2008  skrll Sync with HEAD.
 1.1.2.1  10-Oct-2008  skrll file sleepq.c was added on branch wrstuden-revivesa on 2008-10-10 22:36:16 +0000
 1.2.6.4  11-Aug-2010  yamt sync with head.
 1.2.6.3  11-Mar-2010  yamt sync with head
 1.2.6.2  04-May-2009  yamt sync with head.
 1.2.6.1  18-Dec-2008  yamt file sleepq.c was added on branch yamt-nfs-mp on 2009-05-04 08:14:30 +0000
 1.2.2.2  17-Jan-2009  mjf Sync with HEAD.
 1.2.2.1  18-Dec-2008  mjf file sleepq.c was added on branch mjf-devfs2 on 2009-01-17 13:29:36 +0000
 1.6.4.1  05-Mar-2011  rmind sync with head
 1.6.2.1  17-Aug-2010  uebayasi Sync with HEAD.
 1.11.4.1  08-Feb-2011  bouyer Sync with HEAD
 1.11.2.1  06-Jun-2011  jruoho Sync with HEAD.
 1.13.14.3  03-Dec-2017  jdolecek update from HEAD
 1.13.14.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.13.14.1  23-Jun-2013  tls resync from head
 1.13.4.1  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.14.10.1  10-Aug-2014  tls Rebase.
 1.14.6.1  18-May-2014  rmind sync with head
 1.16.4.1  19-Mar-2016  skrll Sync with HEAD
 1.17.18.2  21-Apr-2020  martin Sync with HEAD
 1.17.18.1  08-Apr-2020  martin Merge changes from current as of 20200406
 1.18.2.1  20-Apr-2020  bouyer Sync with HEAD
 1.20.2.1  14-Dec-2020  thorpej Sync w/ HEAD.

RSS XML Feed