Home | History | Annotate | only in /src/tests/rump
History log of /src/tests/rump
RevisionDateAuthorComments
 1.6 13-Jul-2010  jmmv Get rid of static Atffiles and let bsd.test.mk generate them on the fly.
 1.5 17-Jun-2010  pooka tp_glob -> tp-glob (i.e. better use correct keywords ..)
 1.4 16-Jun-2010  pooka Add simple etfs test which almost tests for bug fixed yesterday
(the yesterday bug was against an emulated block device, so slighlty
different). But at least this test uncovered a few bugs already.
 1.3 09-Jun-2010  pooka Add a test which checks autoloading modules from the host's
/stand/arch/vers/kmods works in rump (and that the result is usable ;).

On i386 this "just works". For amd64, due to -mcmodel=kernel,
things are a little more complicated. We must have the entire rump
kernel loaded in the lower 2GB. Currently, this can be done either
by using the non-PIC version for the rump kernel compiled with
-mcmodel=small, or, as njoly pointed out, using netbsd32, which
causes vm_default_addr() to give something in the lower 2GB and
therefore shared libs "magically" getting loaded there. I guess
it would be possible to put a suggested vaddr into the rump kernel
libs and make ld.elf_so map memory from the suggested address if
present ... but that's another show.

Also thanks to tron for access to an amd64 so that I could verify
the test works.
 1.2 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.1 02-May-2009  pooka branches: 1.1.2;
add regression test for module init/fini in rump
 1.1.2.2 13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.1.2.1 02-May-2009  jym file Atffile was added on branch jym-xensuspend on 2009-05-13 19:19:34 +0000
 1.6 10-Mar-2011  pooka Add a test checks that 16 rump kernels on one shmif bus can ping
each other.
 1.5 13-Jul-2010  jmmv Get rid of static Atffiles and let bsd.test.mk generate them on the fly.
 1.4 16-Jun-2010  pooka Add simple etfs test which almost tests for bug fixed yesterday
(the yesterday bug was against an emulated block device, so slighlty
different). But at least this test uncovered a few bugs already.
 1.3 09-Jun-2010  pooka Add a test which checks autoloading modules from the host's
/stand/arch/vers/kmods works in rump (and that the result is usable ;).

On i386 this "just works". For amd64, due to -mcmodel=kernel,
things are a little more complicated. We must have the entire rump
kernel loaded in the lower 2GB. Currently, this can be done either
by using the non-PIC version for the rump kernel compiled with
-mcmodel=small, or, as njoly pointed out, using netbsd32, which
causes vm_default_addr() to give something in the lower 2GB and
therefore shared libs "magically" getting loaded there. I guess
it would be possible to put a suggested vaddr into the rump kernel
libs and make ld.elf_so map memory from the suggested address if
present ... but that's another show.

Also thanks to tron for access to an amd64 so that I could verify
the test works.
 1.2 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.1 02-May-2009  pooka branches: 1.1.2;
add regression test for module init/fini in rump
 1.1.2.2 13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.1.2.1 02-May-2009  jym file Makefile was added on branch jym-xensuspend on 2009-05-13 19:19:34 +0000
 1.2 23-Jan-2016  christos Define _KERNTYPES for things that need it.
 1.1 03-Nov-2010  christos add Makefile.inc everywhere so that we can set WARNS=4 by default. Amazing
how many bugs this found :-)
 1.7 24-Dec-2018  thorpej Add rump-based test cases for threadpool(9).
 1.6 29-Sep-2017  maya branches: 1.6.2; 1.6.4;
Add simple test for workqueue(9)
 1.5 14-Jan-2011  pooka branches: 1.5.38;
elementary tests for rump sigmodels
 1.4 06-Jan-2011  pooka Add some tests for lock errors. Notably, some of them fare nicely
with just the pthread consistency checks (which are enabled by
default in rumpuser), but others require real LOCKDEBUG.
 1.3 14-Jun-2010  pooka add a vm allocator test which tests that:
* RUMP_MEMLIMIT works
* allocating memory with PR_NOWAIT will fail immediately if no memory
is available and PR_WAITOK will wait for memory to be available
 1.2 31-May-2010  pooka need bsd.own.mk to avoid the "NETBSDSRCDIR is nothing" syndrome
 1.1 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.5.38.1 16-Jan-2018  martin Pull up following revision(s) (requested by ozaki-r in ticket #497):
tests/rump/rumpkern/Makefile: revision 1.16
tests/rump/kernspace/Makefile: revision 1.6
tests/rump/kernspace/workqueue.c: revision 1.1
tests/rump/kernspace/workqueue.c: revision 1.2
tests/rump/kernspace/workqueue.c: revision 1.3
tests/rump/kernspace/workqueue.c: revision 1.4
tests/rump/kernspace/workqueue.c: revision 1.5
tests/rump/kernspace/workqueue.c: revision 1.6
tests/rump/rumpkern/t_workqueue.c: revision 1.1
sys/sys/workqueue.h: revision 1.10
tests/rump/rumpkern/t_workqueue.c: revision 1.2
tests/rump/kernspace/kernspace.h: revision 1.5
tests/rump/kernspace/kernspace.h: revision 1.6
sys/net/if_bridge.c: revision 1.147
distrib/sets/lists/debug/mi: revision 1.225
sys/kern/subr_workqueue.c: revision 1.34
share/man/man9/workqueue.9: revision 1.12
sys/net/if_spppsubr.c: revision 1.178
distrib/sets/lists/tests/mi: revision 1.763
Add simple test for workqueue(9)
Add declaration. build fix
sorry, I forgot to commit this file.
Tweak use of cv_timedwait
- Handle its return value
- Specify more appropriate time-out periods (2 ticks is too short)
Fix a race condition on taking the mutex
The workqueue worker can take the mutex before the tester tries to take it after
calling workqueue_enqueue. If it happens, the worker calls cv_broadcast before
the tester calls cv_timedwait and the tester will wait until the cv timed out
Take the mutex before calling workqueue_enqueue so that the tester surely calls
cv_timedwait before the worker calls cv_broadcast.
The fix stabilizes the test, t_workqueue/workqueue1.
Add workqueue_wait that waits for a specific work to finish
The caller must ensure that no new work is enqueued before calling
workqueue_wait. Note that Note that if the workqueue is WQ_PERCPU, the caller
can enqueue a new work to another queue other than the waiting queue.
Discussed on tech-kern@
Ensure the timer isn't running by using workqueue_wait
Functionalize some routines to add new tests easily (NFC)
Add a test case for workqueue_wait
Fix build
 1.6.4.1 10-Jun-2019  christos Sync with HEAD
 1.6.2.1 26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.1 14-Jun-2010  pooka add a vm allocator test which tests that:
* RUMP_MEMLIMIT works
* allocating memory with PR_NOWAIT will fail immediately if no memory
is available and PR_WAITOK will wait for memory to be available
 1.8 17-Mar-2020  ad Tweak the March 14th change to make page waits interlocked by pg->interlock.
Remove unneeded changes and only deal with the PQ_WANTED flag, to exclude
possible bugs.
 1.7 14-Mar-2020  ad Catch up with reality.
 1.6 23-Feb-2020  ad UVM locking changes, proposed on tech-kern:

- Change the lock on uvm_object, vm_amap and vm_anon to be a RW lock.
- Break v_interlock and vmobjlock apart. v_interlock remains a mutex.
- Do partial PV list locking in the x86 pmap. Others to follow later.
 1.5 07-Aug-2011  rmind branches: 1.5.42;
Rename slightly misleading KTHREAD_JOINABLE to KTHREAD_MUSTJOIN.
 1.4 12-Jun-2011  mrg vmobjlock is now a pointer to kmutex_t. use it as one.
 1.3 09-Sep-2010  pooka branches: 1.3.4;
hold object lock across page unbusy
 1.2 08-Sep-2010  pooka vm object must be locked during page allocation.
 1.1 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.3.4.1 23-Jun-2011  cherry Catchup with rmind-uvmplock merge.
 1.5.42.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.9 09-Aug-2023  riastradh workqueue(9) tests: Add test for PR kern/57574.

XXX pullup-10
XXX pullup-9
XXX pullup-8
 1.8 28-Dec-2018  thorpej branches: 1.8.2; 1.8.10;
Add a test case that exercises repeated sceduling and cancelling of a job,
with periodic dropping of the interlock.
 1.7 24-Dec-2018  thorpej Add rump-based test cases for threadpool(9).
 1.6 28-Dec-2017  ozaki-r branches: 1.6.2; 1.6.4;
Add a test case for workqueue_wait
 1.5 29-Sep-2017  maya Add declaration. build fix

sorry, I forgot to commit this file.
 1.4 14-Jan-2011  pooka branches: 1.4.38;
elementary tests for rump sigmodels
 1.3 06-Jan-2011  pooka Add some tests for lock errors. Notably, some of them fare nicely
with just the pthread consistency checks (which are enabled by
default in rumpuser), but others require real LOCKDEBUG.
 1.2 14-Jun-2010  pooka add a vm allocator test which tests that:
* RUMP_MEMLIMIT works
* allocating memory with PR_NOWAIT will fail immediately if no memory
is available and PR_WAITOK will wait for memory to be available
 1.1 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.4.38.1 16-Jan-2018  martin Pull up following revision(s) (requested by ozaki-r in ticket #497):
tests/rump/rumpkern/Makefile: revision 1.16
tests/rump/kernspace/Makefile: revision 1.6
tests/rump/kernspace/workqueue.c: revision 1.1
tests/rump/kernspace/workqueue.c: revision 1.2
tests/rump/kernspace/workqueue.c: revision 1.3
tests/rump/kernspace/workqueue.c: revision 1.4
tests/rump/kernspace/workqueue.c: revision 1.5
tests/rump/kernspace/workqueue.c: revision 1.6
tests/rump/rumpkern/t_workqueue.c: revision 1.1
sys/sys/workqueue.h: revision 1.10
tests/rump/rumpkern/t_workqueue.c: revision 1.2
tests/rump/kernspace/kernspace.h: revision 1.5
tests/rump/kernspace/kernspace.h: revision 1.6
sys/net/if_bridge.c: revision 1.147
distrib/sets/lists/debug/mi: revision 1.225
sys/kern/subr_workqueue.c: revision 1.34
share/man/man9/workqueue.9: revision 1.12
sys/net/if_spppsubr.c: revision 1.178
distrib/sets/lists/tests/mi: revision 1.763
Add simple test for workqueue(9)
Add declaration. build fix
sorry, I forgot to commit this file.
Tweak use of cv_timedwait
- Handle its return value
- Specify more appropriate time-out periods (2 ticks is too short)
Fix a race condition on taking the mutex
The workqueue worker can take the mutex before the tester tries to take it after
calling workqueue_enqueue. If it happens, the worker calls cv_broadcast before
the tester calls cv_timedwait and the tester will wait until the cv timed out
Take the mutex before calling workqueue_enqueue so that the tester surely calls
cv_timedwait before the worker calls cv_broadcast.
The fix stabilizes the test, t_workqueue/workqueue1.
Add workqueue_wait that waits for a specific work to finish
The caller must ensure that no new work is enqueued before calling
workqueue_wait. Note that Note that if the workqueue is WQ_PERCPU, the caller
can enqueue a new work to another queue other than the waiting queue.
Discussed on tech-kern@
Ensure the timer isn't running by using workqueue_wait
Functionalize some routines to add new tests easily (NFC)
Add a test case for workqueue_wait
Fix build
 1.6.4.1 10-Jun-2019  christos Sync with HEAD
 1.6.2.2 18-Jan-2019  pgoyette Synch with HEAD
 1.6.2.1 26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.8.10.1 04-Sep-2023  martin Pull up following revision(s) (requested by riastradh in ticket #342):

sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20

tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.

There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.8.2.1 18-Apr-2024  martin Pull up following revision(s) (requested by riastradh in ticket #1830):

sys/kern/subr_workqueue.c: revision 1.40
sys/kern/subr_workqueue.c: revision 1.41
sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20
sys/kern/subr_workqueue.c: revision 1.39
share/man/man9/workqueue.9: revision 1.15
(all via patch)

workqueue: Lift unnecessary restriction on workqueue_wait.

Allow multiple concurrent waits at a time, and allow enqueueing work
at the same time (as long as it's not the work we're waiting for).

This way multiple users can use a shared global workqueue and safely
wait for individual work items concurrently, while the workqueue is
still in use for other items (e.g., wg(4) peers).

This has the side effect of taking away a diagnostic measure, but I
think allowing the diagnostic's false positives instead of rejecting
them is worth it. We could cheaply add it back with some false
negatives if it's important.
workqueue(9): workqueue_wait and workqueue_destroy may sleep.

But might not, so assert sleepable up front.
workqueue(9): Sprinkle dtrace probes.
tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.
There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.1 06-Jan-2011  pooka Add some tests for lock errors. Notably, some of them fare nicely
with just the pthread consistency checks (which are enabled by
default in rumpuser), but others require real LOCKDEBUG.
 1.2 23-May-2020  ad Move proc_lock into the data segment. It was dynamically allocated because
at the time we had mutex_obj_alloc() but not __cacheline_aligned.
 1.1 14-Jan-2011  pooka elementary tests for rump sigmodels
 1.2 07-Aug-2011  rmind Rename slightly misleading KTHREAD_JOINABLE to KTHREAD_MUSTJOIN.
 1.1 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.6 02-Feb-2024  andvar s/shold/should/
 1.5 04-Jan-2019  thorpej branches: 1.5.2;
Fix a silly bug the "cancel thrash" test: the exit condition for the
job was never set, and so if the job actually got started before the
cancellation request came in, it would never finish and the cancellation
request would just hang forever.

Should address a spurious automated test failure reported by kre@.
 1.4 28-Dec-2018  thorpej Add a test case that exercises repeated sceduling and cancelling of a job,
with periodic dropping of the interlock.
 1.3 26-Dec-2018  thorpej - De-opaque'ify struct threadpool_job.
- De-_t'ify all of the structure types.

No functional chage, no ABI change (verified with old rump unit test
before and after new librump.so).

Per Taylor's request.
 1.2 25-Dec-2018  thorpej branches: 1.2.2;
Include some non-critical-but-still-for-correctness lines of code
in the cancellation unit test. (I could have sworn I actually typed
these lines, no really...)
 1.1 24-Dec-2018  thorpej Add rump-based test cases for threadpool(9).
 1.2.2.3 18-Jan-2019  pgoyette Synch with HEAD
 1.2.2.2 26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.2.2.1 25-Dec-2018  pgoyette file threadpool.c was added on branch pgoyette-compat on 2018-12-26 14:02:10 +0000
 1.5.2.2 10-Jun-2019  christos Sync with HEAD
 1.5.2.1 04-Jan-2019  christos file threadpool.c was added on branch phil-wifi on 2019-06-10 22:10:10 +0000
 1.4 21-Mar-2014  dholland remove sys/simplelock.h (straggler)
 1.3 28-Jan-2012  rmind branches: 1.3.6;
tsleep(9) no more.
 1.2 07-Aug-2011  rmind branches: 1.2.2;
Rename slightly misleading KTHREAD_JOINABLE to KTHREAD_MUSTJOIN.
 1.1 31-May-2010  pooka Add some kernel namespace (i.e. _KERNEL) helpers for regression tests.
 1.2.2.2 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.2.2.1 17-Apr-2012  yamt sync with head
 1.3.6.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.10 10-Aug-2023  riastradh workqueue(9) tests: Fix mistake in rev. 1.9.

Somehow, despite manually verifying a build/install/test of every
revision in my patch series, I managed to commit the wrong version of
the file for what became rev. 1.9, so the test was just broken when
it went in and remained broken in the commit where I fixed the real
bug and removed the xfail marker on the test.

PR kern/5757

XXX pullup-10
XXX pullup-9
XXX pullup-8
 1.9 09-Aug-2023  riastradh workqueue(9) tests: Add test for PR kern/57574.

XXX pullup-10
XXX pullup-9
XXX pullup-8
 1.8 09-Aug-2023  riastradh workqueue(9) tests: Destroy struct work immediately on entry.
 1.7 09-Aug-2023  riastradh workqueue(9) tests: Nix trailing whitespace.
 1.6 28-Dec-2017  ozaki-r branches: 1.6.2; 1.6.8; 1.6.16;
Fix build
 1.5 28-Dec-2017  ozaki-r Add a test case for workqueue_wait
 1.4 28-Dec-2017  ozaki-r Functionalize some routines to add new tests easily (NFC)
 1.3 28-Dec-2017  ozaki-r Fix a race condition on taking the mutex

The workqueue worker can take the mutex before the tester tries to take it after
calling workqueue_enqueue. If it happens, the worker calls cv_broadcast before
the tester calls cv_timedwait and the tester will wait until the cv timed out

Take the mutex before calling workqueue_enqueue so that the tester surely calls
cv_timedwait before the worker calls cv_broadcast.

The fix stabilizes the test, t_workqueue/workqueue1.
 1.2 28-Dec-2017  ozaki-r Tweak use of cv_timedwait

- Handle its return value
- Specify more appropriate time-out periods (2 ticks is too short)
 1.1 29-Sep-2017  maya Add simple test for workqueue(9)
 1.6.16.2 07-Sep-2023  martin Pull up following revision(s) (requested by riastradh in ticket #353):

tests/rump/kernspace/workqueue.c: revision 1.10

workqueue(9) tests: Fix mistake in rev. 1.9.

Somehow, despite manually verifying a build/install/test of every
revision in my patch series, I managed to commit the wrong version of
the file for what became rev. 1.9, so the test was just broken when
it went in and remained broken in the commit where I fixed the real
bug and removed the xfail marker on the test.

PR kern/5757
 1.6.16.1 04-Sep-2023  martin Pull up following revision(s) (requested by riastradh in ticket #342):

sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20

tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.

There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.6.8.1 18-Apr-2024  martin Pull up following revision(s) (requested by riastradh in ticket #1830):

sys/kern/subr_workqueue.c: revision 1.40
sys/kern/subr_workqueue.c: revision 1.41
sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20
sys/kern/subr_workqueue.c: revision 1.39
share/man/man9/workqueue.9: revision 1.15
(all via patch)

workqueue: Lift unnecessary restriction on workqueue_wait.

Allow multiple concurrent waits at a time, and allow enqueueing work
at the same time (as long as it's not the work we're waiting for).

This way multiple users can use a shared global workqueue and safely
wait for individual work items concurrently, while the workqueue is
still in use for other items (e.g., wg(4) peers).

This has the side effect of taking away a diagnostic measure, but I
think allowing the diagnostic's false positives instead of rejecting
them is worth it. We could cheaply add it back with some false
negatives if it's important.
workqueue(9): workqueue_wait and workqueue_destroy may sleep.

But might not, so assert sleepable up front.
workqueue(9): Sprinkle dtrace probes.
tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.
There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.6.2.2 16-Jan-2018  martin Pull up following revision(s) (requested by ozaki-r in ticket #497):
tests/rump/rumpkern/Makefile: revision 1.16
tests/rump/kernspace/Makefile: revision 1.6
tests/rump/kernspace/workqueue.c: revision 1.1
tests/rump/kernspace/workqueue.c: revision 1.2
tests/rump/kernspace/workqueue.c: revision 1.3
tests/rump/kernspace/workqueue.c: revision 1.4
tests/rump/kernspace/workqueue.c: revision 1.5
tests/rump/kernspace/workqueue.c: revision 1.6
tests/rump/rumpkern/t_workqueue.c: revision 1.1
sys/sys/workqueue.h: revision 1.10
tests/rump/rumpkern/t_workqueue.c: revision 1.2
tests/rump/kernspace/kernspace.h: revision 1.5
tests/rump/kernspace/kernspace.h: revision 1.6
sys/net/if_bridge.c: revision 1.147
distrib/sets/lists/debug/mi: revision 1.225
sys/kern/subr_workqueue.c: revision 1.34
share/man/man9/workqueue.9: revision 1.12
sys/net/if_spppsubr.c: revision 1.178
distrib/sets/lists/tests/mi: revision 1.763
Add simple test for workqueue(9)
Add declaration. build fix
sorry, I forgot to commit this file.
Tweak use of cv_timedwait
- Handle its return value
- Specify more appropriate time-out periods (2 ticks is too short)
Fix a race condition on taking the mutex
The workqueue worker can take the mutex before the tester tries to take it after
calling workqueue_enqueue. If it happens, the worker calls cv_broadcast before
the tester calls cv_timedwait and the tester will wait until the cv timed out
Take the mutex before calling workqueue_enqueue so that the tester surely calls
cv_timedwait before the worker calls cv_broadcast.
The fix stabilizes the test, t_workqueue/workqueue1.
Add workqueue_wait that waits for a specific work to finish
The caller must ensure that no new work is enqueued before calling
workqueue_wait. Note that Note that if the workqueue is WQ_PERCPU, the caller
can enqueue a new work to another queue other than the waiting queue.
Discussed on tech-kern@
Ensure the timer isn't running by using workqueue_wait
Functionalize some routines to add new tests easily (NFC)
Add a test case for workqueue_wait
Fix build
 1.6.2.1 28-Dec-2017  martin file workqueue.c was added on branch netbsd-8 on 2018-01-16 13:01:10 +0000
 1.2 13-Jul-2010  jmmv Get rid of static Atffiles and let bsd.test.mk generate them on the fly.
 1.1 09-Jun-2010  pooka Add a test which checks autoloading modules from the host's
/stand/arch/vers/kmods works in rump (and that the result is usable ;).

On i386 this "just works". For amd64, due to -mcmodel=kernel,
things are a little more complicated. We must have the entire rump
kernel loaded in the lower 2GB. Currently, this can be done either
by using the non-PIC version for the rump kernel compiled with
-mcmodel=small, or, as njoly pointed out, using netbsd32, which
causes vm_default_addr() to give something in the lower 2GB and
therefore shared libs "magically" getting loaded there. I guess
it would be possible to put a suggested vaddr into the rump kernel
libs and make ld.elf_so map memory from the suggested address if
present ... but that's another show.

Also thanks to tron for access to an amd64 so that I could verify
the test works.
 1.14 24-Apr-2023  uwe tests/rump/modautoload: reorder -lrumpvfs_nofifofs

Make the way we spell "-lrumpvfs -lrumpvfs_nofifofs" hack consistent.
The order doesn't matter here because of --whole-archive.
 1.13 07-Jul-2021  martin Allow to set sanitizer flags for the rump build from the
build.sh command line, like: -V RUMP_SANITIZE=address
 1.12 26-May-2020  christos Fix alpha build (relocation truncated to fit: GPREL16 against symbol ...)
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47230
 1.11 16-May-2020  christos Do the same thing with linker flags instead of directly specifying the archives.
 1.10 16-May-2020  christos more nofifofs
 1.9 17-Aug-2019  kamil Avoid symbol clashes in test/rump/modautoload/t_modautoload with sanitizers

Set SANITIZER_RENAME_SYMBOL.t_modautoload to:

* sysctlbyname
* sysctlgetmibinfo
 1.8 14-Oct-2016  christos branches: 1.8.14; 1.8.16;
Disable aslr too since we are playing address space range tricks.
 1.7 10-Sep-2016  christos need bsd.init.mk
 1.6 27-Aug-2016  christos don't disable PIE
 1.5 27-Aug-2016  christos needs mprotect disable since it loads kernel code and relocates it.
 1.4 20-Aug-2016  christos add missing library dependencies.
 1.3 27-Dec-2015  pgoyette branches: 1.3.2;
When MODULAR kernels grew a MODULAR_DEFAULT_AUTOLOAD option, (in rev 1.98
of src/sys/kern/kern_module.c), the default was "off" for all kernels
including rump kernels. While many (most?) kernel config files were
updated to include the new option, rump kernels weren't so lucky. Thus,
rump kernels still had autoload disabled.

This commit uses rump_sysctl to change the module_autoload_on value to
true (ie, enabled) before trying to test if autoloading actually works.

For now, I am _not_ changing the default for all rump kernels. I'll
leave that for another day, after all appropriate discussion has occurred.
 1.2 10-Mar-2014  pooka Move the "is arch capable of loading native kernel modules into
rump kernel" clauses from bsd.own.mk to Makefile.rump. Also,
add a rump_nativeabi_p() call to determine if rump kernel is
compiled with native ABI support.
 1.1 09-Jun-2010  pooka branches: 1.1.6; 1.1.12;
Add a test which checks autoloading modules from the host's
/stand/arch/vers/kmods works in rump (and that the result is usable ;).

On i386 this "just works". For amd64, due to -mcmodel=kernel,
things are a little more complicated. We must have the entire rump
kernel loaded in the lower 2GB. Currently, this can be done either
by using the non-PIC version for the rump kernel compiled with
-mcmodel=small, or, as njoly pointed out, using netbsd32, which
causes vm_default_addr() to give something in the lower 2GB and
therefore shared libs "magically" getting loaded there. I guess
it would be possible to put a suggested vaddr into the rump kernel
libs and make ld.elf_so map memory from the suggested address if
present ... but that's another show.

Also thanks to tron for access to an amd64 so that I could verify
the test works.
 1.1.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.1.6.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.3.2.1 04-Nov-2016  pgoyette Sync with HEAD
 1.8.16.1 19-Aug-2019  martin Pull up following revision(s) (requested by kamil in ticket #91):

tests/rump/modautoload/Makefile: revision 1.9

Avoid symbol clashes in test/rump/modautoload/t_modautoload with sanitizers

Set SANITIZER_RENAME_SYMBOL.t_modautoload to:

* sysctlbyname
* sysctlgetmibinfo
 1.8.14.1 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.6 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.5 14-Sep-2016  ozaki-r Fill old_len which is required by sysctlbyname
 1.4 27-Dec-2015  pgoyette branches: 1.4.2;
Remove a left-over debugging variable. Fix the build.
 1.3 27-Dec-2015  pgoyette When MODULAR kernels grew a MODULAR_DEFAULT_AUTOLOAD option, (in rev 1.98
of src/sys/kern/kern_module.c), the default was "off" for all kernels
including rump kernels. While many (most?) kernel config files were
updated to include the new option, rump kernels weren't so lucky. Thus,
rump kernels still had autoload disabled.

This commit uses rump_sysctl to change the module_autoload_on value to
true (ie, enabled) before trying to test if autoloading actually works.

For now, I am _not_ changing the default for all rump kernels. I'll
leave that for another day, after all appropriate discussion has occurred.
 1.2 10-Mar-2014  pooka Move the "is arch capable of loading native kernel modules into
rump kernel" clauses from bsd.own.mk to Makefile.rump. Also,
add a rump_nativeabi_p() call to determine if rump kernel is
compiled with native ABI support.
 1.1 09-Jun-2010  pooka branches: 1.1.6; 1.1.12;
Add a test which checks autoloading modules from the host's
/stand/arch/vers/kmods works in rump (and that the result is usable ;).

On i386 this "just works". For amd64, due to -mcmodel=kernel,
things are a little more complicated. We must have the entire rump
kernel loaded in the lower 2GB. Currently, this can be done either
by using the non-PIC version for the rump kernel compiled with
-mcmodel=small, or, as njoly pointed out, using netbsd32, which
causes vm_default_addr() to give something in the lower 2GB and
therefore shared libs "magically" getting loaded there. I guess
it would be possible to put a suggested vaddr into the rump kernel
libs and make ld.elf_so map memory from the suggested address if
present ... but that's another show.

Also thanks to tron for access to an amd64 so that I could verify
the test works.
 1.1.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.1.6.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.4.2.2 20-Mar-2017  pgoyette Sync with HEAD
 1.4.2.1 04-Nov-2016  pgoyette Sync with HEAD
 1.3 13-Jul-2010  jmmv Get rid of static Atffiles and let bsd.test.mk generate them on the fly.
 1.2 24-Sep-2009  pooka Add regression test to verify that linksets work correctly with rump.
 1.1 02-May-2009  pooka branches: 1.1.2;
add regression test for module init/fini in rump
 1.1.2.2 13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.1.2.1 02-May-2009  jym file Atffile was added on branch jym-xensuspend on 2009-05-13 19:19:34 +0000
 1.20 09-Aug-2023  riastradh tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.
 1.19 01-Mar-2020  christos branches: 1.19.8;
Centralize the base rump libraries into a variable used by all the other
Makefiles so that we can make changes to it centrally as needed and have
less mess. Fixes the sun2 build that needs rumpvfs after librump after
the latest changes.
 1.18 26-Dec-2018  thorpej branches: 1.18.2;
Add -lrump after -lkernspace, because kernspace.a references symbols
from librump and hooray for static linking semantics.

Fixes sun2 build issue reported by kre@.

(XXX WTF did this only start failing after the addition of t_threadpool?)
 1.17 24-Dec-2018  thorpej Add rump-based test cases for threadpool(9).
 1.16 29-Sep-2017  maya branches: 1.16.2; 1.16.4;
Add simple test for workqueue(9)
 1.15 10-Jun-2014  he branches: 1.15.16;
Fix static linking for the tests: -lrump is also used by -lrumpuser,
so we also need -lrump after -lrumpuser. Fixes build for sun2.
 1.14 14-Jan-2011  pooka branches: 1.14.12; 1.14.22;
test remove signal delivery
 1.13 14-Jan-2011  pooka elementary tests for rump sigmodels
 1.12 06-Jan-2011  pooka Add some tests for lock errors. Notably, some of them fare nicely
with just the pthread consistency checks (which are enabled by
default in rumpuser), but others require real LOCKDEBUG.
 1.11 13-Dec-2010  pooka Retire h_simpleserver and use rump_server instead.
 1.10 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.9 09-Nov-2010  pooka Test copystr/copyinstr/copyoutstr focusing on the off-by-one cases.

As a notable caveat, this does not test the remote RPC paths of
those routines, which are arguably a little more complex.
 1.8 01-Sep-2010  pooka tests for rump_lwproc
 1.7 31-May-2010  pooka add tests for:
* threading
* tsleep variants
* uvm page busying and wanting
 1.6 25-Jan-2010  pooka msdosfs depends on disk devices now
 1.5 28-Nov-2009  he It seems that LDADD.file gets added to the linker invocation after
the LDADD variable expansion. To support static linking, ensure
that the common libraries gets tacked on at the end as well (order
matters for static linking), by using a convenience variable and
add it to the end of LDADD.t_modlinkset, as well as when doing the
general LDADD+= setting.
 1.4 06-Nov-2009  pooka WARNS=4
 1.3 24-Sep-2009  pooka Add regression test to verify that linksets work correctly with rump.
 1.2 09-Jun-2009  he Apparently, there's not a clear dependency ordering for the libraries,
this becomes apparent when linking statically (e.g. as for sun2).
Add an extra instance of -lrump to the library list so that it can be
linked statically as well.
 1.1 02-May-2009  pooka branches: 1.1.2;
add regression test for module init/fini in rump
 1.1.2.2 13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.1.2.1 02-May-2009  jym file Makefile was added on branch jym-xensuspend on 2009-05-13 19:19:34 +0000
 1.14.22.1 10-Aug-2014  tls Rebase.
 1.14.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.15.16.1 16-Jan-2018  martin Pull up following revision(s) (requested by ozaki-r in ticket #497):
tests/rump/rumpkern/Makefile: revision 1.16
tests/rump/kernspace/Makefile: revision 1.6
tests/rump/kernspace/workqueue.c: revision 1.1
tests/rump/kernspace/workqueue.c: revision 1.2
tests/rump/kernspace/workqueue.c: revision 1.3
tests/rump/kernspace/workqueue.c: revision 1.4
tests/rump/kernspace/workqueue.c: revision 1.5
tests/rump/kernspace/workqueue.c: revision 1.6
tests/rump/rumpkern/t_workqueue.c: revision 1.1
sys/sys/workqueue.h: revision 1.10
tests/rump/rumpkern/t_workqueue.c: revision 1.2
tests/rump/kernspace/kernspace.h: revision 1.5
tests/rump/kernspace/kernspace.h: revision 1.6
sys/net/if_bridge.c: revision 1.147
distrib/sets/lists/debug/mi: revision 1.225
sys/kern/subr_workqueue.c: revision 1.34
share/man/man9/workqueue.9: revision 1.12
sys/net/if_spppsubr.c: revision 1.178
distrib/sets/lists/tests/mi: revision 1.763
Add simple test for workqueue(9)
Add declaration. build fix
sorry, I forgot to commit this file.
Tweak use of cv_timedwait
- Handle its return value
- Specify more appropriate time-out periods (2 ticks is too short)
Fix a race condition on taking the mutex
The workqueue worker can take the mutex before the tester tries to take it after
calling workqueue_enqueue. If it happens, the worker calls cv_broadcast before
the tester calls cv_timedwait and the tester will wait until the cv timed out
Take the mutex before calling workqueue_enqueue so that the tester surely calls
cv_timedwait before the worker calls cv_broadcast.
The fix stabilizes the test, t_workqueue/workqueue1.
Add workqueue_wait that waits for a specific work to finish
The caller must ensure that no new work is enqueued before calling
workqueue_wait. Note that Note that if the workqueue is WQ_PERCPU, the caller
can enqueue a new work to another queue other than the waiting queue.
Discussed on tech-kern@
Ensure the timer isn't running by using workqueue_wait
Functionalize some routines to add new tests easily (NFC)
Add a test case for workqueue_wait
Fix build
 1.16.4.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.16.4.1 10-Jun-2019  christos Sync with HEAD
 1.16.2.2 01-Jan-2019  pgoyette Bring in some fixes from HEAD to address a couple of build breaks (in
i386 ipmi driver and sun2 rump tests). Also fix a 'resolve conflict'
from previous commit in sparc64

With this, I am able to successfully build 66 out of 67 architectures
(the same architectures as handled by the releng build server. The
only exception is evbarm64 which has a strange build failure during
the installcd step - the same failure occurs on HEAD. It seems to be
something in the build itself, perhaps a difference between handling
of -O vs -M (MAKEOBJDIR vs MAKEOBJDIRPREFIX).
 1.16.2.1 26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.18.2.1 18-Apr-2024  martin Pull up following revision(s) (requested by riastradh in ticket #1830):

sys/kern/subr_workqueue.c: revision 1.40
sys/kern/subr_workqueue.c: revision 1.41
sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20
sys/kern/subr_workqueue.c: revision 1.39
share/man/man9/workqueue.9: revision 1.15
(all via patch)

workqueue: Lift unnecessary restriction on workqueue_wait.

Allow multiple concurrent waits at a time, and allow enqueueing work
at the same time (as long as it's not the work we're waiting for).

This way multiple users can use a shared global workqueue and safely
wait for individual work items concurrently, while the workqueue is
still in use for other items (e.g., wg(4) peers).

This has the side effect of taking away a diagnostic measure, but I
think allowing the diagnostic's false positives instead of rejecting
them is worth it. We could cheaply add it back with some false
negatives if it's important.
workqueue(9): workqueue_wait and workqueue_destroy may sleep.

But might not, so assert sleepable up front.
workqueue(9): Sprinkle dtrace probes.
tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.
There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.19.8.1 04-Sep-2023  martin Pull up following revision(s) (requested by riastradh in ticket #342):

sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20

tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.

There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.1 23-Jan-2016  christos bridge with the higher Makefile.inc
 1.2 26-Jul-2013  njoly New testcase which checks that rump copyin/copyout/copyinstr/copyoutstr
version return EFAULT for special NULL "user" address.
ok pooka@.
 1.1 09-Nov-2010  pooka branches: 1.1.6; 1.1.12;
Test copystr/copyinstr/copyoutstr focusing on the off-by-one cases.

As a notable caveat, this does not test the remote RPC paths of
those routines, which are arguably a little more complex.
 1.1.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.1.6.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.6 28-Aug-2020  martin lockme_DOUBLEINIT:
The failure message differs slightly when using LOCKDEBUG, modify the
expected pattern to cover both variants.
 1.5 03-May-2017  pgoyette Fix detection of expected results. The rump kernel code apparently
includes source-code line numbers in the messages, so rather than
hard-coding them in the test, just use a reg-ex to match the text.

Fixes PR bin/52207
 1.4 13-Jan-2017  christos branches: 1.4.4;
Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.3 30-Jan-2012  njoly branches: 1.3.22;
Adjust MEMFREE expected output to recent kmem(9) changes.
 1.2 06-Jan-2011  pooka branches: 1.2.6;
In case of LOCKDEBUG, expect certain text in the kernel output.
 1.1 06-Jan-2011  pooka Add some tests for lock errors. Notably, some of them fare nicely
with just the pthread consistency checks (which are enabled by
default in rumpuser), but others require real LOCKDEBUG.
 1.2.6.1 17-Apr-2012  yamt sync with head
 1.3.22.1 20-Mar-2017  pgoyette Sync with HEAD
 1.4.4.2 11-May-2017  pgoyette Sync with HEAD
 1.4.4.1 03-May-2017  pgoyette Include fix for PR bin/52207 on the localcount2 branch.
 1.10 08-Jan-2020  ad Hopefully fix some problems seen with MP support on non-x86, in particular
where curcpu() is defined as curlwp->l_cpu:

- mi_switch(): undo the ~2007ish optimisation to unlock curlwp before
calling cpu_switchto(). It's not safe to let other actors mess with the
LWP (in particular l->l_cpu) while it's still context switching. This
removes l->l_ctxswtch.

- Move the LP_RUNNING flag into l->l_flag and rename to LW_RUNNING since
it's now covered by the LWP's lock.

- Ditch lwp_exit_switchaway() and just call mi_switch() instead. Everything
is in cache anyway so it wasn't buying much by trying to avoid saving old
state. This means cpu_switchto() will never be called with prevlwp ==
NULL.

- Remove some KERNEL_LOCK handling which hasn't been needed for years.
 1.9 13-Jan-2017  christos branches: 1.9.14;
Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.8 10-Jan-2017  christos more tests needing <sys/stat.h>
 1.7 21-Jan-2015  pooka branches: 1.7.2;
call previous with the correct args too
 1.6 21-Jan-2015  pooka check that setuid() works for procs with >1 lwp
 1.5 02-Jan-2011  pooka + rump_lwproc_newproc -> rump_lwproc_rfork()
+ add a tess for rump_lwproc_rfork()
 1.4 29-Oct-2010  pooka implicit pid is 1 instead of 0 now
 1.3 07-Sep-2010  pooka +tc (turns out the bug was elsewhere, but a test is always a test)
 1.2 02-Sep-2010  pooka check that curlwp for an implicit context is NULL
 1.1 01-Sep-2010  pooka tests for rump_lwproc
 1.7.2.1 20-Mar-2017  pgoyette Sync with HEAD
 1.9.14.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.10 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.9 31-May-2010  pooka branches: 1.9.28;
hmm, using unifdef for the previous might have been a good idea ...
 1.8 31-May-2010  pooka Now that atf gdb/coredump conflicts have been solved (thanks jmmv!),
remove USE_ATF ifdefs.
 1.7 01-May-2010  pooka convert to ifdef USE_ATF
 1.6 01-May-2010  pooka Disable module autoload so that it won't foil our module unload test.
 1.5 05-Mar-2010  pooka Update to use newstyle rump_module interfaces.
 1.4 06-Nov-2009  pooka WARNS=4
 1.3 06-Nov-2009  pooka rump_module -> rump_pub_module
 1.2 02-May-2009  pooka branches: 1.2.2;
don't hardcode /usr/lib path
 1.1 02-May-2009  pooka add regression test for module init/fini in rump
 1.2.2.2 13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html
 1.2.2.1 02-May-2009  jym file t_modcmd.c was added on branch jym-xensuspend on 2009-05-13 19:19:34 +0000
 1.9.28.1 20-Mar-2017  pgoyette Sync with HEAD
 1.4 24-May-2022  andvar fix various typos in comments, docs and log messages.
 1.3 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.2 06-Nov-2009  pooka branches: 1.2.28;
WARNS=4
 1.1 24-Sep-2009  pooka Add regression test to verify that linksets work correctly with rump.
 1.2.28.1 20-Mar-2017  pgoyette Sync with HEAD
 1.3 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.2 20-Feb-2011  pooka branches: 1.2.26;
explicitly set the signal model
 1.1 14-Jan-2011  pooka branches: 1.1.2;
elementary tests for rump sigmodels
 1.1.2.1 05-Mar-2011  bouyer Sync with HEAD
 1.2.26.1 20-Mar-2017  pgoyette Sync with HEAD
 1.21 02-Apr-2025  riastradh tests/rump/rumpkern/t_sp: Go fishing for a rump_server core dump.
 1.20 02-Apr-2025  riastradh librumpuser: New RUMPUSER_DEBUG env var enables debug output.

Use it in t_sp:sigsafe to see if we can get more diagnostics out.
 1.19 04-Apr-2024  riastradh branches: 1.19.2;
Temporarily make PR t_sp:sigsafe noisier.

This is an attempt to diagnose why it's flaky in the releng testbeds
but not when I run it. This change will be backed out once we get
new testbed output.
 1.18 04-Apr-2024  riastradh rumpkern/t_sp: Save stdout and stderr to report on failure.

This is not very tidy at the moment, but it's an experiment using the
approach in PR bin/58112, to diagnose why t_sp:sigsafe keeps failing
intermittently. If this works, perhaps can tidy it up and apply it
to all the other tests that run rump_servers.
 1.17 01-Sep-2020  gson Format PR references consistently so that they can be automatically
turned into links in HTML reports.
 1.16 28-Aug-2020  martin Also skip the stress_short test - it just needs way too long to timeout
and fail.
 1.15 28-Aug-2020  martin Skip a few tests with reference to already existing PRs as after "recent"
scheduler changes these tests now leave rump_server processes around that
eat CPU and disturb later tests.
 1.14 13-May-2019  bad Get rid of all the -lrumpdev and -lrumpvfs that are no longer needed
after moving rump's mainbus from rumpdev to rumpkern.

Produces the same atf-run results as before.
 1.13 10-Aug-2016  kre branches: 1.13.14;

+ -lrumpdev
 1.12 30-Aug-2014  gson On systems that have only 32M of memory, the stress_short and
stress_long tests thrash a lot, and the stress_long test sometimes
times out, so skip them if we don't have at least 64M.
 1.11 24-Feb-2011  pooka in reconnect, ignore any all reconnect messages
 1.10 24-Jan-2011  pooka test for rumpclient reconnect feature
 1.9 14-Jan-2011  pooka branches: 1.9.2;
test remove signal delivery
 1.8 12-Jan-2011  pooka Execute a variety of syscalls in the stress test, including opening
files and sockets.
 1.7 12-Jan-2011  pooka * run the killer stress test
* reduce default runtime to 5s
 1.6 10-Jan-2011  pooka Make sure stressclient worker threads complete their operation
instead of hanging.
 1.5 06-Jan-2011  pooka test rumpclient syscalls from a signal handler
 1.4 05-Jan-2011  pooka Some tests for rumpclient fork.
 1.3 13-Dec-2010  pooka Retire h_simpleserver and use rump_server instead.
 1.2 12-Dec-2010  pooka use rump.halt in cleanup
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.9.2.2 05-Mar-2011  bouyer Sync with HEAD
 1.9.2.1 08-Feb-2011  bouyer Sync with HEAD
 1.13.14.1 10-Jun-2019  christos Sync with HEAD
 1.19.2.1 02-Aug-2025  perseant Sync with HEAD
 1.2 28-Dec-2018  thorpej branches: 1.2.2;
Add a test case that exercises repeated sceduling and cancelling of a job,
with periodic dropping of the interlock.
 1.1 24-Dec-2018  thorpej branches: 1.1.2;
Add rump-based test cases for threadpool(9).
 1.1.2.3 18-Jan-2019  pgoyette Synch with HEAD
 1.1.2.2 26-Dec-2018  pgoyette Sync with HEAD, resolve a few conflicts
 1.1.2.1 24-Dec-2018  pgoyette file t_threadpool.c was added on branch pgoyette-compat on 2018-12-26 14:02:10 +0000
 1.2.2.2 10-Jun-2019  christos Sync with HEAD
 1.2.2.1 28-Dec-2018  christos file t_threadpool.c was added on branch phil-wifi on 2019-06-10 22:10:11 +0000
 1.3 29-Sep-2017  maya Run both tests (rather than rumptest_threadjoin twice)
 1.2 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.1 31-May-2010  pooka branches: 1.1.28;
add tests for:
* threading
* tsleep variants
* uvm page busying and wanting
 1.1.28.1 20-Mar-2017  pgoyette Sync with HEAD
 1.2 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.1 31-May-2010  pooka branches: 1.1.28;
add tests for:
* threading
* tsleep variants
* uvm page busying and wanting
 1.1.28.1 20-Mar-2017  pgoyette Sync with HEAD
 1.8 02-Apr-2025  riastradh tests/rump/rumpkern/t_vm: Re-enable test as xfail.

We do, after all, have a way to mark a test as expecting a crash,
namely, with atf_tc_expect_signal(SIGABRT, ...). Also cite the PR
while here.

It is unclear to me what the bug in the test is. Is it supposed to
get the page via uobj->uo_pager->pgo_get (perhaps in turn via
uvm_obj_wirepages) instead of uvm_pagealloc? This should be
explained more clearly in the message (or just fixed).

PR kern/55945: rump/rumpkern/t_vm:busypage fails since early December
 1.7 11-Apr-2023  kre branches: 1.7.2;

PR misc/57343 (Jim Spath) - fixed a typo in atf_tc_skip message.
 1.6 22-Jan-2021  chs for the busypage test, replace atf_tc_expect_fail() with atf_tc_skip()
because atf apparently has no way to expect a test program to crash.
fixes PR 55945.
 1.5 08-Dec-2020  chs the busypage test is buggy, expect it to fail.
 1.4 13-Jan-2017  christos branches: 1.4.16;
Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.3 17-Mar-2012  hannken branches: 1.3.14;
Starting with Rev. 1.191 of kern/subr_pool.c a pool has to be inactive
for at least 10 seconds before it can be reclaimed.

Change the uvmwait test timeout from 10 to 30 seconds so it has a chance
to reclaim memory and succeed.
 1.2 14-Jun-2010  pooka branches: 1.2.6; 1.2.8;
add a vm allocator test which tests that:
* RUMP_MEMLIMIT works
* allocating memory with PR_NOWAIT will fail immediately if no memory
is available and PR_WAITOK will wait for memory to be available
 1.1 31-May-2010  pooka add tests for:
* threading
* tsleep variants
* uvm page busying and wanting
 1.2.8.1 25-Mar-2012  bouyer Pull up following revision(s) (requested by hannken in ticket #141):
tests/rump/rumpkern/t_vm.c: revision 1.3
sys/rump/librump/rumpkern/vm.c: revision 1.125
Don't take a mutex we already took 6 lines above.
Starting with Rev. 1.191 of kern/subr_pool.c a pool has to be inactive
for at least 10 seconds before it can be reclaimed.
Change the uvmwait test timeout from 10 to 30 seconds so it has a chance
to reclaim memory and succeed.
 1.2.6.1 17-Apr-2012  yamt sync with head
 1.3.14.1 20-Mar-2017  pgoyette Sync with HEAD
 1.4.16.1 06-Jul-2021  martin Pull up following revision(s) - all via patch -
(requested by riastradh in ticket #1317):

sys/uvm/uvm_page.c: revision 1.248
sys/uvm/uvm_anon.c: revision 1.80
sys/rump/librump/rumpvfs/vm_vfs.c: revision 1.40
sys/rump/librump/rumpvfs/vm_vfs.c: revision 1.41
sys/rump/librump/rumpkern/vm.c: revision 1.191
sys/uvm/uvm_pager.c: revision 1.130
external/cddl/osnet/dist/uts/common/fs/zfs/zfs_vnops.c: revision 1.71
tests/rump/rumpkern/t_vm.c: revision 1.5
tests/rump/rumpkern/t_vm.c: revision 1.6
sys/rump/librump/rumpvfs/vm_vfs.c: revision 1.39

Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately. Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.

In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors. Fixes PR 55702.

fix an incorrect assertion in the previous commit.

Handle PG_PAGEOUT in uvm_anon_release() too.

Commit the ZFS file that I forgot in this previous commit:

Move the handling of PG_PAGEOUT from uvm_aio_aiodone_pages() to
uvm_page_unbusy() so that all callers of uvm_page_unbusy() don't need to
handle this flag separately. Split out the pages part of uvm_aio_aiodone()
into uvm_aio_aiodone_pages() in rump just like in the real kernel.

In ZFS functions that can fail to copy data between the ARC and VM pages,
use uvm_aio_aiodone_pages() rather than uvm_page_unbusy() so that we can
handle these "I/O" errors. Fixes PR 55702.
update the rump copy of uvm_page_unbusy() to match the real version,
in particular handle PG_PAGEOUT. fixes a few atf tests.
the busypage test is buggy, expect it to fail.

make rump's uvm_aio_aiodone_pages() look more like the kernel version.
fixes some more rumpy assertions.

for the busypage test, replace atf_tc_expect_fail() with atf_tc_skip()
because atf apparently has no way to expect a test program to crash.
fixes PR 55945.
 1.7.2.1 02-Aug-2025  perseant Sync with HEAD
 1.4 09-Aug-2023  riastradh workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.

There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.

PR kern/57574

XXX pullup-10
XXX pullup-9
XXX pullup-8
 1.3 09-Aug-2023  riastradh workqueue(9) tests: Add test for PR kern/57574.

XXX pullup-10
XXX pullup-9
XXX pullup-8
 1.2 28-Dec-2017  ozaki-r branches: 1.2.2; 1.2.8; 1.2.16;
Add a test case for workqueue_wait
 1.1 29-Sep-2017  maya Add simple test for workqueue(9)
 1.2.16.1 04-Sep-2023  martin Pull up following revision(s) (requested by riastradh in ticket #342):

sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20

tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.

There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.2.8.1 18-Apr-2024  martin Pull up following revision(s) (requested by riastradh in ticket #1830):

sys/kern/subr_workqueue.c: revision 1.40
sys/kern/subr_workqueue.c: revision 1.41
sys/kern/subr_workqueue.c: revision 1.42
sys/kern/subr_workqueue.c: revision 1.43
sys/kern/subr_workqueue.c: revision 1.44
sys/kern/subr_workqueue.c: revision 1.45
sys/kern/subr_workqueue.c: revision 1.46
tests/rump/kernspace/workqueue.c: revision 1.7
sys/kern/subr_workqueue.c: revision 1.47
tests/rump/kernspace/workqueue.c: revision 1.8
tests/rump/kernspace/workqueue.c: revision 1.9
tests/rump/rumpkern/t_workqueue.c: revision 1.3
tests/rump/rumpkern/t_workqueue.c: revision 1.4
tests/rump/kernspace/kernspace.h: revision 1.9
tests/rump/rumpkern/Makefile: revision 1.20
sys/kern/subr_workqueue.c: revision 1.39
share/man/man9/workqueue.9: revision 1.15
(all via patch)

workqueue: Lift unnecessary restriction on workqueue_wait.

Allow multiple concurrent waits at a time, and allow enqueueing work
at the same time (as long as it's not the work we're waiting for).

This way multiple users can use a shared global workqueue and safely
wait for individual work items concurrently, while the workqueue is
still in use for other items (e.g., wg(4) peers).

This has the side effect of taking away a diagnostic measure, but I
think allowing the diagnostic's false positives instead of rejecting
them is worth it. We could cheaply add it back with some false
negatives if it's important.
workqueue(9): workqueue_wait and workqueue_destroy may sleep.

But might not, so assert sleepable up front.
workqueue(9): Sprinkle dtrace probes.
tests/rump/rumpkern: Use PROGDPLIBS, not explicit -L/-l.

This way we relink the t_* test programs whenever changes under
tests/rump/kernspace change libkernspace.a.

workqueue(9) tests: Nix trailing whitespace.

workqueue(9) tests: Destroy struct work immediately on entry.

workqueue(9) tests: Add test for PR kern/57574.

workqueue(9): Avoid touching running work items in workqueue_wait.

As soon as the workqueue function has called, it is forbidden to
touch the struct work passed to it -- the function might free or
reuse the data structure it is embedded in.

So workqueue_wait is forbidden to search the queue for the batch of
running work items. Instead, use a generation number which is odd
while the thread is processing a batch of work and even when not.
There's still a small optimization available with the struct work
pointer to wait for: if we find the work item in one of the per-CPU
_pending_ queues, then after we wait for a batch of work to complete
on that CPU, we don't need to wait for work on any other CPUs.
PR kern/57574

workqueue(9): Sprinkle dtrace probes for workqueue_wait edge cases.

Let's make it easy to find out whether these are hit.

workqueue(9): Stop violating queue(3) internals.

workqueue(9): Avoid unnecessary mutex_exit/enter cycle each loop.

workqueue(9): Sort includes.
No functional change intended.

workqueue(9): Factor out wq->wq_flags & WQ_FPU in workqueue_worker.
No functional change intended. Makes it clearer that s is
initialized when used.
 1.2.2.2 16-Jan-2018  martin Pull up following revision(s) (requested by ozaki-r in ticket #497):
tests/rump/rumpkern/Makefile: revision 1.16
tests/rump/kernspace/Makefile: revision 1.6
tests/rump/kernspace/workqueue.c: revision 1.1
tests/rump/kernspace/workqueue.c: revision 1.2
tests/rump/kernspace/workqueue.c: revision 1.3
tests/rump/kernspace/workqueue.c: revision 1.4
tests/rump/kernspace/workqueue.c: revision 1.5
tests/rump/kernspace/workqueue.c: revision 1.6
tests/rump/rumpkern/t_workqueue.c: revision 1.1
sys/sys/workqueue.h: revision 1.10
tests/rump/rumpkern/t_workqueue.c: revision 1.2
tests/rump/kernspace/kernspace.h: revision 1.5
tests/rump/kernspace/kernspace.h: revision 1.6
sys/net/if_bridge.c: revision 1.147
distrib/sets/lists/debug/mi: revision 1.225
sys/kern/subr_workqueue.c: revision 1.34
share/man/man9/workqueue.9: revision 1.12
sys/net/if_spppsubr.c: revision 1.178
distrib/sets/lists/tests/mi: revision 1.763
Add simple test for workqueue(9)
Add declaration. build fix
sorry, I forgot to commit this file.
Tweak use of cv_timedwait
- Handle its return value
- Specify more appropriate time-out periods (2 ticks is too short)
Fix a race condition on taking the mutex
The workqueue worker can take the mutex before the tester tries to take it after
calling workqueue_enqueue. If it happens, the worker calls cv_broadcast before
the tester calls cv_timedwait and the tester will wait until the cv timed out
Take the mutex before calling workqueue_enqueue so that the tester surely calls
cv_timedwait before the worker calls cv_broadcast.
The fix stabilizes the test, t_workqueue/workqueue1.
Add workqueue_wait that waits for a specific work to finish
The caller must ensure that no new work is enqueued before calling
workqueue_wait. Note that Note that if the workqueue is WQ_PERCPU, the caller
can enqueue a new work to another queue other than the waiting queue.
Discussed on tech-kern@
Ensure the timer isn't running by using workqueue_wait
Functionalize some routines to add new tests easily (NFC)
Add a test case for workqueue_wait
Fix build
 1.2.2.1 28-Dec-2017  martin file t_workqueue.c was added on branch netbsd-8 on 2018-01-16 13:01:10 +0000
 1.5 24-Jan-2011  pooka test for rumpclient reconnect feature
 1.4 06-Jan-2011  pooka branches: 1.4.2;
test rumpclient syscalls from a signal handler
 1.3 05-Jan-2011  pooka Some tests for rumpclient fork.
 1.2 12-Dec-2010  pooka h_reboot has been superceded by rump.halt
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.4.2.1 08-Feb-2011  bouyer Sync with HEAD
 1.2 16-Jul-2019  martin PR misc/54382: whenever open(2) is called with O_CREAT, make sure to
pass an open mode argument.
 1.1 05-Jan-2011  pooka branches: 1.1.46;
Some tests for rumpclient fork.
 1.1.46.1 13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.2 12-Dec-2010  pooka h_reboot has been superceded by rump.halt
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.2 19-Feb-2011  pooka set reconnect property now that it's off by default
 1.1 24-Jan-2011  pooka branches: 1.1.2;
test for rumpclient reconnect feature
 1.1.2.3 05-Mar-2011  bouyer Sync with HEAD
 1.1.2.2 08-Feb-2011  bouyer Sync with HEAD
 1.1.2.1 24-Jan-2011  bouyer file h_reconcli.c was added on branch bouyer-quota2 on 2011-02-08 16:20:10 +0000
 1.3 07-Feb-2011  pooka Limit test duration based on wall time instead of loops
(took a long time on slow platforms).
 1.2 10-Jan-2011  pooka branches: 1.2.2;
check that we actually go into the signal handler
 1.1 06-Jan-2011  pooka test rumpclient syscalls from a signal handler
 1.2.2.1 08-Feb-2011  bouyer Sync with HEAD
 1.2 14-Jan-2011  pooka test remove signal delivery
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.9 26-Jun-2011  christos fix fallout from including signal.h in rump_syscallargs.h
 1.8 12-Jan-2011  pooka Execute a variety of syscalls in the stress test, including opening
files and sockets.
 1.7 12-Jan-2011  pooka Give the stress queen two modes: one which nicely suggests an exit
and another one which keeps moet et chandon in her pretty cabinet.
 1.6 12-Jan-2011  pooka Establish signal handler already in parent. Otherwise the child
might be killed before it has a chance to run.
 1.5 11-Jan-2011  pooka Print some more info in an attempt to try to understand why the
test fails in automated test runs but not my desktop.
 1.4 10-Jan-2011  pooka Make sure stressclient worker threads complete their operation
instead of hanging.
 1.3 10-Jan-2011  pooka Don't use printf in a signal handler.

XXX: it would be nice if the deadlock with malloc were a little
more obvious, especially since gdb doesn't provide any clues unless
you compile libpthread with -g
 1.2 06-Jan-2011  pooka check that child exits with an expected status
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.7 01-Mar-2020  christos Centralize the base rump libraries into a variable used by all the other
Makefiles so that we can make changes to it centrally as needed and have
less mess. Fixes the sun2 build that needs rumpvfs after librump after
the latest changes.
 1.6 01-Jun-2019  kre Deal with fallout from the addition of
KERN_PROC_CWD in sysctl(3)
That is kern.proc.$$.KERN_PROC_CWD (I think - not that it matters here)

The effect is that -lrump now requires -lrumpvfs

This set of changes fixes (I believe) regular dynamic builds,
more might be required for static builds (will be verified soon).
 1.5 07-Jan-2015  pooka branches: 1.5.16;
Move sysproxy support into a separate component, rumpkern_sysproxy,
instead of it being always provided by the rump kernel base. This
move accomplishes two things:

1) it is no longer necessary to provide sysproxy hypercall stubs for
platforms which do not want to use sysproxy
2) it is easier to reason about the security aspects, since configurations
not linking the sysproxy component simply do not support remote
system calls

discussed on rumpkernel-users
 1.4 10-Jun-2014  he Fix static linking for the tests: -lrump is also used by -lrumpuser,
so we also need -lrump after -lrumpuser. Fixes build for sun2.
 1.3 14-Jan-2011  pooka branches: 1.3.12; 1.3.22;
test remove signal delivery
 1.2 13-Dec-2010  pooka Retire h_simpleserver and use rump_server instead.
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.3.22.1 10-Aug-2014  tls Rebase.
 1.3.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.5.16.2 08-Apr-2020  martin Merge changes from current as of 20200406
 1.5.16.1 10-Jun-2019  christos Sync with HEAD
 1.4 25-Jan-2016  pooka include <stdbool.h> for bool
 1.3 14-Jan-2011  pooka test remove signal delivery
 1.2 13-Dec-2010  pooka Retire h_simpleserver and use rump_server instead.
 1.1 30-Nov-2010  pooka Add a simple and stress test cases for the rump remote syscall code.
Fun fact: since the server daemonizes into its own process group,
it's not in atf's pgrp. Use rump_sys_reboot() in atf cleanup to
kill the server after the test.
 1.1 10-Mar-2011  pooka Add a test checks that 16 rump kernels on one shmif bus can ping
each other.
 1.5 09-Sep-2020  gson Disable reverse DNS lookups in ping to avoid spurious test failures
due to unresponsive DNS servers.
 1.4 13-May-2019  bad Get rid of all the -lrumpdev and -lrumpvfs that are no longer needed
after moving rump's mainbus from rumpdev to rumpkern.

Produces the same atf-run results as before.
 1.3 10-Aug-2016  kre branches: 1.3.14;

+ -lrumpdev
 1.2 09-Sep-2013  pooka Use 8 TCP/IP stacks instead of 16. That still gives us plenty crossping
testing for 1/4th of the cost.
 1.1 10-Mar-2011  pooka branches: 1.1.4; 1.1.10;
Add a test checks that 16 rump kernels on one shmif bus can ping
each other.
 1.1.10.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.1.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.3.14.1 10-Jun-2019  christos Sync with HEAD
 1.2 13-Jul-2010  jmmv Get rid of static Atffiles and let bsd.test.mk generate them on the fly.
 1.1 16-Jun-2010  pooka Add simple etfs test which almost tests for bug fixed yesterday
(the yesterday bug was against an emulated block device, so slighlty
different). But at least this test uncovered a few bugs already.
 1.5 01-Mar-2020  christos Centralize the base rump libraries into a variable used by all the other
Makefiles so that we can make changes to it centrally as needed and have
less mess. Fixes the sun2 build that needs rumpvfs after librump after
the latest changes.
 1.4 10-Jun-2014  he branches: 1.4.24;
Fix static linking for the tests: -lrump is also used by -lrumpuser,
so we also need -lrump after -lrumpuser. Fixes build for sun2.
 1.3 22-Feb-2011  pooka branches: 1.3.10; 1.3.20;
test lseek return value (off_t, might be >register_t)
 1.2 30-Nov-2010  pooka branches: 1.2.2;
test makecn/freecn
 1.1 16-Jun-2010  pooka Add simple etfs test which almost tests for bug fixed yesterday
(the yesterday bug was against an emulated block device, so slighlty
different). But at least this test uncovered a few bugs already.
 1.2.2.1 05-Mar-2011  bouyer Sync with HEAD
 1.3.20.1 10-Aug-2014  tls Rebase.
 1.3.10.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.4.24.1 08-Apr-2020  martin Merge changes from current as of 20200406
 1.3 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.2 22-Feb-2011  pooka branches: 1.2.2; 1.2.28;
One more lseek test case: in case of an error, check rv == -1
(so that it's not e.g UINT_MAX).
 1.1 22-Feb-2011  pooka test lseek return value (off_t, might be >register_t)
 1.2.28.1 20-Mar-2017  pgoyette Sync with HEAD
 1.2.2.2 05-Mar-2011  bouyer Sync with HEAD
 1.2.2.1 22-Feb-2011  bouyer file t_basic.c was added on branch bouyer-quota2 on 2011-03-05 15:10:57 +0000
 1.12 03-Aug-2023  rin t_etfs: Skip large_blk for system with page size > 8192

Work around kernel freeze reported as PR kern/55658 for
powerpc/ibm4xx (16K pages)
 1.11 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.10 12-May-2014  christos branches: 1.10.6;
CID 978337: Fix resource leak
 1.9 30-Nov-2010  pooka branches: 1.9.6; 1.9.12; 1.9.22;
one more test
 1.8 30-Nov-2010  pooka check etfs key rules
 1.7 07-Nov-2010  jmmv Adjusts tests after import of atf-0.12:

- The use.fs property is gone.
- Mark the tests/fs/t_create:attrs test as broken when using the default
unprivileged-user:_atf setting. This probably deserves a fix somehow
but I'm not sure at this point.
 1.6 21-Jun-2010  pooka check etfs mappings with offsets
 1.5 20-Jun-2010  pooka Check that etfs block mapping works for >2TB devices.
 1.4 19-Jun-2010  pooka ... and remove the not-supposed-to-be-committed call to rump_sys_reboot()
 1.3 19-Jun-2010  pooka fix pasto, sprinkle ATF_REQUIRE_EQ()

ATF_REQUIRE_ERRNO, oh ATF_REQUIRE_ERRNO, wherefore art thou ATF_REQUIRE_ERRNO?
 1.2 19-Jun-2010  pooka add test for block device support
 1.1 16-Jun-2010  pooka Add simple etfs test which almost tests for bug fixed yesterday
(the yesterday bug was against an emulated block device, so slighlty
different). But at least this test uncovered a few bugs already.
 1.9.22.1 10-Aug-2014  tls Rebase.
 1.9.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.9.6.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.10.6.1 20-Mar-2017  pgoyette Sync with HEAD
 1.7 03-May-2022  hannken Lock vnode for VOP_LOOKUP().
 1.6 13-Jan-2017  christos Don't play with "../.." in includes for h_macros.h; deal with it centrally.
Minor fixes.
 1.5 25-Jan-2016  pooka branches: 1.5.2;
Don't include <rump/rumpvnode_if.h> from rump.h. It's not needed
unless you're doing something special, but requires register_t.
Adjust the few places which actually need rumpvnode_if.h.
 1.4 07-Feb-2014  hannken Change vnode operation lookup to return the resulting vnode *vpp unlocked.
Change cache_lookup() to return an unlocked vnode.

Discussed on tech-kern@

Welcome to 6.99.31
 1.3 02-Jan-2011  pooka branches: 1.3.6; 1.3.12;
+ rump_lwproc_newproc -> rump_lwproc_rfork()
+ add a tess for rump_lwproc_rfork()
 1.2 14-Dec-2010  pooka Use a larger array to avoid overflow.

from Piotr Meyer
 1.1 30-Nov-2010  pooka test makecn/freecn
 1.3.12.1 20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.3.6.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.5.2.1 20-Mar-2017  pgoyette Sync with HEAD

RSS XML Feed