Commit Graph

657 Commits

Author SHA1 Message Date
pooka
c8d929f4fb add Arnaud's EuroBSDCon paper 2009-10-19 14:43:46 +00:00
pooka
9646a920b0 Clear PG_FAKE for pages we wrote to. This avoids paging in data
we already have (and the backend might not yet have) in cases where
fs_bshift > PAGE_SHIFT.
2009-10-18 00:41:09 +00:00
pooka
afa1f603b7 In case of timeout, remember to remove ourselves from the sleep staleq. 2009-10-16 02:13:54 +00:00
pooka
d0c17feb81 We have real pollsuck() now, so remove this, ahem, less-than-perfect one.
(XXX: only thing in the kernel using pollsuck is netsmb)
2009-10-16 00:16:32 +00:00
pooka
254ffabc38 Include sys_select.c for proper select()/poll() support. 2009-10-16 00:14:53 +00:00
pooka
cc056ae92c include rumpcpu_generic 2009-10-15 23:42:40 +00:00
pooka
2f6e67dfd6 When allocating the temporary lwp we must have an lwp context. So
take turns using lwp0 for this purpose, nothing else uses it.
2009-10-15 23:15:55 +00:00
pooka
c663ed2f3f regen: lwp interface changes 2009-10-15 16:40:15 +00:00
pooka
8559951571 Give lwp usage some much-needed love: stop treating lwp0 as the
all-sink and make sure each separate thread in rump has its own
lwp.  Happy-go-lucky callers will get scheduled a temporary lwp
on entry, while true lwp connoisseurs may request a stable lwp
for their purposes.  Some more love may be required later down the
road, but for now different threads will stepping on each others
toes.
2009-10-15 16:39:22 +00:00
pooka
8c6bd3376a forgot to commit with previous batch 2009-10-15 01:29:06 +00:00
pooka
9bb1dbd8d7 rump_cpu is now a pointer 2009-10-15 00:34:05 +00:00
pooka
f1f3f36233 regen: scheduling points 2009-10-15 00:32:11 +00:00
pooka
000a197343 regen: scheduling points in rump_pub wrappers 2009-10-15 00:31:25 +00:00
pooka
cd231d0604 Generate scheduling points in rump_pub calls. 2009-10-15 00:29:19 +00:00
pooka
9454f185c4 Add initial work on a rump virtual cpu scheduler. This is necessary
for kernel code which has been written to avoid MP contention by
using cpu-local storage (most prominently, select and pool_cache).

Instead of always assuming rump_cpu, the scheduler must now be run
(and unrun) on all entry points into rump.  Likewise, rumpuser
unruns and re-runs the scheduler around each potentially blocking
operation.  As an optimization, I modified some locking primitives
to try to get the lock without blocking before releasing the cpu.

Also, ltsleep was modified to assume that it is never called without
the biglock held and made to use the biglock as the sleep interlock.
Otherwise there is just too much drama with deadlocks.  If some
kernel code wants to call ltsleep without the biglock, then, *snif*,
it's no longer supported and rump and should be modified to support
newstyle locks anyway.
2009-10-15 00:28:46 +00:00
pooka
d09e2773d0 "rumppriv" goes back to "rump" per internal interface naming change. 2009-10-14 18:18:53 +00:00
pooka
a6f92a2b8f regen: put all public interfaces created by ifspec into a rump_pub namespace 2009-10-14 18:16:41 +00:00
pooka
abf164854c Actually, adjust previous a bit: instead of preserving the names
of the external interfaces and namespacing the internal ones to
"rumppriv", put the external ones in a "rump_pub" namespace.  While
this requires adjusting all of the external callers of these
interfaces, it is the right thing to do in the long run, since it
clarifies the structure.
2009-10-14 18:14:48 +00:00
pooka
8ca7f09f6e g/c some stuff which wasn't supposed to see the light of day 2009-10-14 17:30:52 +00:00
pooka
42972db848 Adjust rump sources for external/internal interfaces.
No functional change.
2009-10-14 17:29:19 +00:00
pooka
796b2444f2 generate rump local interfaces 2009-10-14 17:28:13 +00:00
pooka
c1bfb8966b adjust whitespace a bit 2009-10-14 17:26:09 +00:00
pooka
f2c144d595 Create rump public interfaces from description tables. This allows
us to control and wrap all entry points from "userspace" into rump.
This in turn is necessary for the upcoming rump cpu scheduler.

For each interface "foo" a public wrapper called "rump_foo" is
created.  It calls the internal implementation "rumppriv_foo".  In
case foo is to be called from inside of rump kernel space, the
private interface "rumppriv_foo" is used -- the userspace wrapper
prototypes are not even exported into the rump kernel namespace.
Needless to say, the rump kernel internal interfaces are not exported
for users.

Now, three classes of interfaces fight for control of rump:
  + the noble local control interfaces (which this commit addresses)
  + the insidious rump system calls (which are generated from syscalls.master)
  + and the evil vnode interfaces (which are generated from vnode_if.src)
2009-10-14 17:17:00 +00:00
pooka
ddc943db02 regen: fix rump varargs syscalls prototypes 2009-10-13 21:57:52 +00:00
pooka
7e9bd843aa Include host offset in regular etfs read/write operations (I can't
imagine it being particularly useful, but let's call file this
under POLA).
2009-10-11 18:12:51 +00:00
pooka
860f5d7238 Support creating file system sockets (non-sockets not supported in
VOP_CREATE since I don't want to have to write read/write support
for non-etfs files).
2009-10-11 17:54:22 +00:00
pooka
8d38112c32 add some stubs required by raidframe linkage 2009-10-10 21:10:04 +00:00
pooka
d4069e2c5e Provide an interface for reboot. 2009-10-09 14:41:36 +00:00
pooka
0111b794da Seems like module loading code is tasked with calling secmodel_register()
these days ...
2009-10-08 00:47:47 +00:00
pooka
b15be8fcc2 remove extraneous call to secmodel_suser_start() 2009-10-08 00:36:56 +00:00
pooka
4ecb17968a dlclose() in error branch 2009-10-08 00:34:54 +00:00
pooka
366ae82927 Use uvm_readahead.c instead of null stubs. 2009-10-07 10:23:50 +00:00
pooka
2038fbfec8 use vref() for increasing reference count instead of homegrown brilliance 2009-10-07 09:55:35 +00:00
pooka
3398bac8f2 g/c some prehistoric interfaces which have been superceded by others. 2009-10-07 09:50:43 +00:00
pooka
9759195360 * set winsize to memwinsize in initial getwindow(). makes no functional
difference, but looks less like a debug hack leftover.
* explain memory windows vs. directio a little better in comment
2009-10-07 09:42:14 +00:00
pooka
a8268fa583 space -> tab in one entry for consistency 2009-10-07 09:24:27 +00:00
pooka
788da19b0b do initial window allocation test at proper offsets 2009-10-07 09:23:03 +00:00
pooka
61d1563c1b Allow to set size and host file offset for etfs files and rumpblk. 2009-10-07 09:17:54 +00:00
pooka
5290e6c820 Give a p2k node an internal state. This allows us to do proper
reference counting and not release nodes based just on puffs'
impression of if they are free.

This also allows us to reclaim vnodes already in inactive if the
file system so desires.  Some file systems, most notably ffs, change
file state already in inactive.  This could lead to a deadlock in
the middle of inactive and reclaim if some other puffs operation
was processed in between (as exposed by haad's open(at) test
program).

Also, properly thread the componentname from lookup to the actual
vnode operation.  This required the changes the rump componentname
routines.  Yes, the rename case is truly mindbogglingly disgusting.
Puke for yourself.
2009-10-06 16:23:03 +00:00
pooka
a373547b43 Use uint64_t instead of size_t for block device partition size.
from jak
2009-10-06 13:05:44 +00:00
pooka
281623cb29 Call the pager with page-aligned offsets, 'cause that's what the
pager expects.  Fixes KASSERT failure if someone manages to do
otherwise.
2009-10-05 09:11:29 +00:00
pooka
cd7abaf063 set l_cpu for lwp0 2009-10-05 09:09:29 +00:00
pooka
8e5c2019ed Fix hopefully the last deadlock in the wretched piece of code:
since ltsleep abuses "while (!mutex_tryenter()) continue;" for NOT
releasing the kernel biglock before sleeping, we cannot do a normal
mutex_enter() in the wakeup path, or otherwise we might be a
situation where the sleeper holds the kernel lock and wants the
sleepermutex (and will not back down) and the wakeupper holds the
sleepermutex and wants the kernel lock.  So introduce kernel lock
backdown to the wakeup path.
2009-10-04 17:40:34 +00:00
pooka
9dbaa03ccb Implement RUMP_ETFS_REG. Usable e.g. by firmload(9).
(well, it should probably be RUMP_ETFS_PATH, but simple things first)
2009-10-04 16:31:08 +00:00
pooka
8ec501e110 Include firmload. Although it may be used by devices, it's pure
vfs in nature, and therefore it belongs here (can't load a firmware
from a file system without file system support, right?).  Rename
rump_cwdi to cwdi0, since firmload depends on that name (naughty
firmload).
2009-10-04 13:29:36 +00:00
pooka
a346a8ca77 Initialize suckets before domains since some domains install timers
which take softnet_lock and might run before the lock is actually
initialized.  Also, soinit() itself already calls soinit2(), so no
need to call it twice.
2009-10-04 13:24:58 +00:00
christos
c9bb67bb7b Need proc_uidmatch 2009-10-03 22:55:48 +00:00
pooka
cbdc6e568f pass unit number in mainbus attach args 2009-10-03 19:06:35 +00:00
elad
53ca19a3b3 First part of secmodel cleanup and other misc. changes:
- Separate the suser part of the bsd44 secmodel into its own secmodel
    and directory, pending even more cleanups. For revision history
    purposes, the original location of the files was

        src/sys/secmodel/bsd44/secmodel_bsd44_suser.c
        src/sys/secmodel/bsd44/suser.h

  - Add a man-page for secmodel_suser(9) and update the one for
    secmodel_bsd44(9).

  - Add a "secmodel" module class and use it. Userland program and
    documentation updated.

  - Manage secmodel count (nsecmodels) through the module framework.
    This eliminates the need for secmodel_{,de}register() calls in
    secmodel code.

  - Prepare for secmodel modularization by adding relevant module bits.
    The secmodels don't allow auto unload. The bsd44 secmodel depends
    on the suser and securelevel secmodels. The overlay secmodel depends
    on the bsd44 secmodel. As the module class is only cosmetic, and to
    prevent ambiguity, the bsd44 and overlay secmodels are prefixed with
    "secmodel_".

  - Adapt the overlay secmodel to recent changes (mainly vnode scope).

  - Stop using link-sets for the sysctl node(s) creation.

  - Keep sysctl variables under nodes of their relevant secmodels. In
    other words, don't create duplicates for the suser/securelevel
    secmodels under the bsd44 secmodel, as the latter is merely used
    for "grouping".

  - For the suser and securelevel secmodels, "advertise presence" in
    relevant sysctl nodes (sysctl.security.models.{suser,securelevel}).

  - Get rid of the LKM preprocessor stuff.

  - As secmodels are now modules, there's no need for an explicit call
    to secmodel_start(); it's handled by the module framework. That
    said, the module framework was adjusted to properly load secmodels
    early during system startup.

  - Adapt rump to changes: Instead of using empty stubs for securelevel,
    simply use the suser secmodel. Also replace secmodel_start() with a
    call to secmodel_suser_start().

  - 5.99.20.

Testing was done on i386 ("release" build). Spearated module_init()
changes were tested on sparc and sparc64 as well by martin@ (thanks!).

Mailing list reference:

	http://mail-index.netbsd.org/tech-kern/2009/09/25/msg006135.html
2009-10-02 18:50:12 +00:00
pooka
93992109b3 Include humanize and extent support in rumpkern. 2009-10-02 15:51:26 +00:00