akaros.git
8 years agoSorted out proc refcounting with ARCs
Barret Rhoden [Tue, 17 Aug 2010 18:31:49 +0000 (11:31 -0700)]
Sorted out proc refcounting with ARCs

8 years agoFixes when we add a new proc to the pidhash
Barret Rhoden [Tue, 17 Aug 2010 18:09:51 +0000 (11:09 -0700)]
Fixes when we add a new proc to the pidhash

Not all code paths use proc_create(), etc.

8 years agoSyncs up Makeconfig and the Makelocal.template
Barret Rhoden [Tue, 17 Aug 2010 17:26:02 +0000 (10:26 -0700)]
Syncs up Makeconfig and the Makelocal.template

There are still some _CONFIG_s that are unused in the kernel, but might
be used in the future (KFS), or that should go away entirely (ghetto
networking hacks).

8 years agoCheck for null location before setting errno and retval.
David Zhu [Mon, 16 Aug 2010 22:09:56 +0000 (15:09 -0700)]
Check for null location before setting errno and retval.

8 years agofixing sparc-specific compilation issues.
David Zhu [Sun, 15 Aug 2010 04:30:02 +0000 (21:30 -0700)]
fixing sparc-specific compilation issues.

8 years agoFixing syscalls to new seterrno and setretval.
David Zhu [Wed, 11 Aug 2010 23:17:12 +0000 (16:17 -0700)]
Fixing syscalls to new seterrno and setretval.

8 years agoMake errno and return value work for async syscalls.
David Zhu [Wed, 11 Aug 2010 06:08:23 +0000 (23:08 -0700)]
Make errno and return value work for async syscalls.

Added a level of indirection so that sparc/i386/async call can
change where to put errno and return value at run time.
Widespread seterrno changes forthcoming after merge.

8 years agoremove some unnecessary printing in the arsc server.
David Zhu [Fri, 6 Aug 2010 00:05:39 +0000 (17:05 -0700)]
remove some unnecessary printing in the arsc server.

8 years agoBring back the ARSC functionality that was removed earlier.
David Zhu [Wed, 4 Aug 2010 22:17:57 +0000 (15:17 -0700)]
Bring back the ARSC functionality that was removed earlier.

ARSC server are now running on a management core.
Separate lists are maintainted for those processes interested in ARSC.
Need to rebuild crosscompiler because of an addition to syscall numbers.

8 years agoKFS defaults (Read this if you have no files)
Barret Rhoden [Wed, 11 Aug 2010 00:23:07 +0000 (17:23 -0700)]
KFS defaults (Read this if you have no files)

You don't have to have anything in KFS (default kern/kfs), but you ought
to have a bin/ with your binaries and a lib/ with ld.so.1 and libc.so.6
(and any other libraries you link against).

There's also no automatic copying of test binaries, either to KFS or the
old FS folder, to save dev time, to keep the FS manageable, and to keep
the image size down for people using static apps.

8 years agolink_path_walk() can handle ../, ./, and lots of /
Barret Rhoden [Tue, 10 Aug 2010 23:52:10 +0000 (16:52 -0700)]
link_path_walk() can handle ../, ./, and lots of /

8 years agoClarifies issues in mprotect with MAP_PRIVATE
Barret Rhoden [Tue, 10 Aug 2010 21:22:37 +0000 (14:22 -0700)]
Clarifies issues in mprotect with MAP_PRIVATE

The main danger here is with dynamically loaded processes overwriting
libc.  Also note that after mprotecting, you may have mergeable VMRs
that aren't merged.

8 years agoAdded monitor command to do an "ls -R"
Barret Rhoden [Tue, 10 Aug 2010 20:31:44 +0000 (13:31 -0700)]
Added monitor command to do an "ls -R"

8 years agoFile modes and permissions
Barret Rhoden [Tue, 10 Aug 2010 06:59:18 +0000 (23:59 -0700)]
File modes and permissions

Better handling for creation modes, separation of flags and modes, and
things like that.  Also, mprotect() allows the upgrading of a file's
mmapping from its open mode to its desired mode, so long as it is
allowed by the inode's mode.

8 years agoFixed mmap() so that offset is a number of pages
Barret Rhoden [Tue, 10 Aug 2010 05:36:39 +0000 (22:36 -0700)]
Fixed mmap() so that offset is a number of pages

While the syscall/mmap() takes a number of pages, the rest of the system
tracks it as bytes - like the file pointer does.  See the change if
you're curious.

8 years agosys_stat() and friends
Barret Rhoden [Tue, 10 Aug 2010 00:27:16 +0000 (17:27 -0700)]
sys_stat() and friends

Not heavily tested, and the numbers are not necessarily "right."  The
syscall accurately reports the values in the inode, but some of them are
neither set properly xnor kept up to date.

8 years agoChanges stat interface
Barret Rhoden [Mon, 9 Aug 2010 22:46:53 +0000 (15:46 -0700)]
Changes stat interface

Rebuild your cross compiler.

struct stat and stat64 are the same (sizes and all), and the kernel
knows about the right sizes.  This also changes the glibc wrappers
around the stat family to not do the buffer conversion that we used to
do with the appserver.

8 years agoAssert to catch 5 args to sysenter
Barret Rhoden [Mon, 9 Aug 2010 19:18:10 +0000 (12:18 -0700)]
Assert to catch 5 args to sysenter

It's more likely that we'll accidentally send five args to sysenter than
actually fix our sysenter so we can have more args or come up with some
other scheme for syscalls with lots of arguments.

8 years agoSyscalls with strings take a length parameter
Barret Rhoden [Mon, 9 Aug 2010 18:34:30 +0000 (11:34 -0700)]
Syscalls with strings take a length parameter

Rebuild your cross compiler!  This has been a TODO for over a year now -
hurray!

8 years agoCatch negative FDs
Barret Rhoden [Mon, 9 Aug 2010 18:33:36 +0000 (11:33 -0700)]
Catch negative FDs

8 years agosys_access()
Barret Rhoden [Sat, 7 Aug 2010 01:06:11 +0000 (18:06 -0700)]
sys_access()

Since we don't have any resembling security or users, we just attempt a
lookup.  It can tell if files don't exist (ENOENT), but that's about it
for now.

8 years agoRemoved sys_brk()
Barret Rhoden [Sat, 7 Aug 2010 00:27:42 +0000 (17:27 -0700)]
Removed sys_brk()

It's been deprecated for a while, and no one uses it.

8 years agosys_read(), sys_write(), and sys_lseek()
Barret Rhoden [Fri, 6 Aug 2010 22:47:38 +0000 (15:47 -0700)]
sys_read(), sys_write(), and sys_lseek()

8 years agouser_strdup() forces null termination
Barret Rhoden [Fri, 6 Aug 2010 20:30:23 +0000 (13:30 -0700)]
user_strdup() forces null termination

The previous version checked for it and failed if it wasn't null
terminated.  This one just makes it null-terminated, and clarifies it's
usage.  Specifically, it is meant for when we know a string's length,
which will be the case for all syscalls eventually (patch pending).

8 years agoChanges the pidhash to be an internal reference
Barret Rhoden [Fri, 6 Aug 2010 19:20:10 +0000 (12:20 -0700)]
Changes the pidhash to be an internal reference

In sync with kref usage patterns, easier to understand, and fixes a bug
with removing from the pidhash before freeing (which messed up
sys_try_wait()).

Side note: this patch changes more documentation than code (which was
really just one change and one move).

8 years agoFork and exec handle files better
Barret Rhoden [Fri, 6 Aug 2010 06:18:43 +0000 (23:18 -0700)]
Fork and exec handle files better

A fork-created process has the same files as its parent, and exec'd
process will close all of its O_CLOEXEC files.  Not tested much.

8 years agoPulled file and directory creation up into the VFS
Barret Rhoden [Fri, 6 Aug 2010 03:16:37 +0000 (20:16 -0700)]
Pulled file and directory creation up into the VFS

8 years agoRevisited dentry and inode creation
Barret Rhoden [Fri, 6 Aug 2010 01:39:50 +0000 (18:39 -0700)]
Revisited dentry and inode creation

Pulled out VFS stuff from the alloc_inode, and reworked how it worked
with get_dentry().  get_dentry() will now have a d_ops set for most
dentries (except for the parentless, which needs to be handled by the
mounting).

8 years agoFile opening revisited
Barret Rhoden [Fri, 6 Aug 2010 00:46:26 +0000 (17:46 -0700)]
File opening revisited

Pulled all of the file opening out of KFS and into the VFS,
and converted old usages of path_to_file() to use do_file_open().

8 years agoAdd a default initramfs path to allow default builds.
David Zhu [Thu, 5 Aug 2010 22:57:58 +0000 (15:57 -0700)]
Add a default initramfs path to allow default builds.

Any builds without a Makelocal file should still work by default.
This change makes that happen.

8 years agoUses kref in the FS, fixes up refcount bugs
Barret Rhoden [Thu, 5 Aug 2010 02:52:35 +0000 (19:52 -0700)]
Uses kref in the FS, fixes up refcount bugs

References are still a bit messy, esp regarding the sb and vfsmounts.
Also, KFS "pins all paths," which makes it difficult to check the dentry
and inode release paths.  Lots of TODOs left.

Also, this changes f_inode to f_dentry for reasons intuitively obvious
to the casual observer.

8 years agoDestroys vmrs on __proc_free()
Barret Rhoden [Wed, 4 Aug 2010 23:08:31 +0000 (16:08 -0700)]
Destroys vmrs on __proc_free()

8 years agoKref changes and tweaks
Barret Rhoden [Tue, 3 Aug 2010 23:56:07 +0000 (16:56 -0700)]
Kref changes and tweaks

No change in usage for processes, but a bunch of changes with how they
will work for the filesystem.

8 years agoAdded krefs, used them for process refcounting
Barret Rhoden [Thu, 29 Jul 2010 01:09:40 +0000 (18:09 -0700)]
Added krefs, used them for process refcounting

krefs: the approved solution for reference counting.

Removes old proc_increfs, decrefs, manual env_refcnting, cries for
lockless refcounting, a couple bugs, and eleven TODOs!

8 years agoAdds useful atomics
Barret Rhoden [Wed, 28 Jul 2010 21:50:44 +0000 (14:50 -0700)]
Adds useful atomics

8 years agoFixes compilation issues for sparc
Barret Rhoden [Wed, 28 Jul 2010 21:50:17 +0000 (14:50 -0700)]
Fixes compilation issues for sparc

8 years agosys_open() and sys_close()
Barret Rhoden [Wed, 28 Jul 2010 03:15:35 +0000 (20:15 -0700)]
sys_open() and sys_close()

A process can open and close files.  There's some refcounting issues,
which will be worked on soonish.

8 years agoConverts sys_exec / proc_create to use umem
Barret Rhoden [Mon, 26 Jul 2010 23:05:05 +0000 (16:05 -0700)]
Converts sys_exec / proc_create to use umem

Also fixes a bug with dynamically linked binaries not starting properly
if they were sys_proc_create()d.  The arguments need to be set before
loading the elf, which can be fixed if we come up with a good way to do
argument passing.

8 years agoFixed bug in reading elf headers
Barret Rhoden [Mon, 26 Jul 2010 22:05:50 +0000 (15:05 -0700)]
Fixed bug in reading elf headers

Need to be careful about reading or writing a file on behalf of the
kernel.  If current is set, the file read/write will think it is the
user, and fail to write to a kernel buffer.  Marked as TODO: KFOP.

8 years agoReorganized user-memory checking/copying functions
Barret Rhoden [Mon, 26 Jul 2010 20:52:58 +0000 (13:52 -0700)]
Reorganized user-memory checking/copying functions

Put them all in one place.  If I missed any, move them to umem.{h,c}.

8 years agoload_elf() uses the FS for dynamics
Barret Rhoden [Mon, 26 Jul 2010 20:05:38 +0000 (13:05 -0700)]
load_elf() uses the FS for dynamics

Though we don't support enough syscalls yet, so don't bother using it.

8 years agosys_exec() uses the FS, sys_proc_create takes args
Barret Rhoden [Mon, 26 Jul 2010 17:43:15 +0000 (10:43 -0700)]
sys_exec() uses the FS, sys_proc_create takes args

Rebuild your cross compiler!

The syscalls take a path, instead of a file descriptor, similarly to
linux, and mostly due to it being unclear whether a process should have
its program open().  Also, sys_open() doesn't use the FS yet...

Both syscalls still use the ghetto-procinfo-style arg packing, since
it's a pain to change.  I like not having the kernel worry about argv
packing, but struct procinfo is about 3 pages huge.

8 years agoFixed up manager macros and fork()'s test
Barret Rhoden [Fri, 23 Jul 2010 23:33:28 +0000 (16:33 -0700)]
Fixed up manager macros and fork()'s test

8 years agoRemoved sys_run_binary()
Barret Rhoden [Fri, 23 Jul 2010 21:30:25 +0000 (14:30 -0700)]
Removed sys_run_binary()

8 years agoGuts load_icode and proc_create() takes a path
Barret Rhoden [Fri, 23 Jul 2010 21:21:15 +0000 (14:21 -0700)]
Guts load_icode and proc_create() takes a path

This guts the old load_icode() way of making a process and makes
proc_create() play with the filesystem.  proc_create() also takes args,
but the syscall doesn't.  Will sort that eventually.

8 years agoGuts the old KFS!
Barret Rhoden [Fri, 23 Jul 2010 18:59:21 +0000 (11:59 -0700)]
Guts the old KFS!

Note that sys_proc_create() hasn't been changed to make processes the
appropriate way, and that a couple of the managers don't work properly,
since they were based on KFS and/or try to load binaries that don't
exist.

8 years agokfs_run and friends use the FS and s/kfs/bin/
Barret Rhoden [Fri, 23 Jul 2010 18:41:06 +0000 (11:41 -0700)]
kfs_run and friends use the FS and s/kfs/bin/

The monitor functions will ls and run programs out of the bin directory,
however you get one of those.  For KFS, make a bin/ directory in
whatever folder you pull from for your initramfs (e.g. kern/kfs) and put
your binaries in there.

8 years agoload_elf() uses the FS for static programs
Barret Rhoden [Fri, 23 Jul 2010 02:50:21 +0000 (19:50 -0700)]
load_elf() uses the FS for static programs

Once we get a couple helper functions, we can load the interp too.

8 years agoMAP_PRIVATE with PROT_WRITE
Barret Rhoden [Fri, 23 Jul 2010 02:31:35 +0000 (19:31 -0700)]
MAP_PRIVATE with PROT_WRITE

Allows mmap() to handle private writable regions.  For now, it will
immediately give you a fresh copy, instead of trying to CoW it when
write-faulted.  Due to the way we'll load elves, we'll need to have the
kernel be able to page fault if we want to change this.

8 years agoRadix Bug - growing quickly
Barret Rhoden [Fri, 23 Jul 2010 02:30:56 +0000 (19:30 -0700)]
Radix Bug - growing quickly

Allows growing by more than one level at a time...

8 years agoFixes radix tree bug
Barret Rhoden [Fri, 23 Jul 2010 00:31:50 +0000 (17:31 -0700)]
Fixes radix tree bug

Be more careful with masking, and write more tests!  This was a pain to
find when the FS was reordering pages somewhere else...

8 years agoPrimitive path_lookup()
Barret Rhoden [Wed, 21 Jul 2010 20:59:14 +0000 (13:59 -0700)]
Primitive path_lookup()

It can't handle mount points, symlinks, and probably a few corner cases.
Its refcounting is probably wrong too, esp related to what gets pinned
from a fs_lookup().  As with everything, it needs testing, bug fixes,
etc...

8 years agoFile <-> file descriptor management
Barret Rhoden [Tue, 20 Jul 2010 02:16:51 +0000 (19:16 -0700)]
File <-> file descriptor management

mmap() now works with file descriptors.  Of course, you the process to
open a file first, which you have to do manually...

8 years agostruct proc FS structures and preprocessor hacks
Barret Rhoden [Mon, 19 Jul 2010 22:01:02 +0000 (15:01 -0700)]
struct proc FS structures and preprocessor hacks

8 years agoUses i_type for the filetype
Barret Rhoden [Mon, 19 Jul 2010 19:56:08 +0000 (12:56 -0700)]
Uses i_type for the filetype

We were using i_flags for the type (directory, file, etc), which is
clearly wrong.  Linux uses the i_mode for type and access, but for now
we'll explicitly have the i_type.

8 years agodo_mmap() checks in with the FS
Barret Rhoden [Mon, 19 Jul 2010 19:41:56 +0000 (12:41 -0700)]
do_mmap() checks in with the FS

8 years agogeneric_file_write() and file holes
Barret Rhoden [Mon, 19 Jul 2010 18:31:17 +0000 (11:31 -0700)]
generic_file_write() and file holes

readpage() is supposed to handle hole (use a 0'd page).  KFS can handle
extending files and dealing with the holes, though they won't get saved,
which may be an issue once we start evicting from the page cache.  Also,
there are no constraints on file sizes or anything like that.

8 years agogeneric_file_read()
Barret Rhoden [Fri, 16 Jul 2010 22:22:21 +0000 (15:22 -0700)]
generic_file_read()

Common read function that most FSs will use, utilizing the page cache.

8 years agoPage cache for memory mapped files
Barret Rhoden [Fri, 16 Jul 2010 20:13:02 +0000 (13:13 -0700)]
Page cache for memory mapped files

Ties the radix trees and page maps into the VFS, KFS, and mmap().  Still
lots of little corner cases, it can't block yet, and I bet we're
screwing something up with page refcounting (which will cause memory
leaks).

Big note: this breaks support for appserver-managed files.  It had to
happen sooner or later.  The memory mapping currently only works for
files through do_mmap, since processes don't know about files yet.

8 years agoRadix Trees!
Barret Rhoden [Wed, 14 Jul 2010 03:44:10 +0000 (20:44 -0700)]
Radix Trees!

Basics of a radix tree, mapping key->void*.  Some very basic testing.

8 years agoInitial page cache structures
Barret Rhoden [Fri, 9 Jul 2010 22:59:15 +0000 (15:59 -0700)]
Initial page cache structures

Also changed a few things with the struct page and some of its
functions, including making it use atomics (albeit poorly).  For now,
don't trust page_incref() and page_decref() to work concurrently.

8 years agommap() errnos
Barret Rhoden [Thu, 8 Jul 2010 22:05:51 +0000 (15:05 -0700)]
mmap() errnos

8 years agommap() merges, fixed 0-page allocation bug
Barret Rhoden [Thu, 8 Jul 2010 21:04:12 +0000 (14:04 -0700)]
mmap() merges, fixed 0-page allocation bug

do_mmap() will attempt to merge its new VMR, which will help a bit
(although it might not be the best way to do things).

There was also a bug with VMR requests for the 0th page, which is now
fixed.  You can create that vmr, but it's not recommended.  mmap() and
friends will check to make sure userspace doesn't affect the 0th page.
Also note that glibc did not like getting the 0 page, for whatever
reason.

8 years agoRenamed vm_prot from vm_perm to be more consistent
Barret Rhoden [Thu, 8 Jul 2010 19:19:03 +0000 (12:19 -0700)]
Renamed vm_prot from vm_perm to be more consistent

8 years agoAvoids deadlock when handle_page_fault() fails
Barret Rhoden [Thu, 8 Jul 2010 00:10:23 +0000 (17:10 -0700)]
Avoids deadlock when handle_page_fault() fails

Need to unlock the proc_lock, since proc_destroy() is not an internal
function.  Also note that even if we had an mm_lock, you'd want to clean
up better and unlock, so proc_destroy() can do it's work.

8 years agoCleaned up issues with PAGE_UNMAPPED and friends
Barret Rhoden [Thu, 8 Jul 2010 00:07:18 +0000 (17:07 -0700)]
Cleaned up issues with PAGE_UNMAPPED and friends

Removed get_free_va_range(), which is now done with VMRs, cleaned up
cases of PAGED_OUT pages (mostly made it panic since we don't swap
properly), and took care of a couple other details related to the
meaning of UNMAPPED, PAGED_OUT, and PRESENT.

8 years agoRemoved the old pfault, fork() uses VMRs
Barret Rhoden [Wed, 7 Jul 2010 22:26:05 +0000 (15:26 -0700)]
Removed the old pfault, fork() uses VMRs

This gets rid of the last bits of the old per-PTE memory region
management.  Lots of gotchas still, mostly related to file backed memory
and swapped out pages.

8 years agommap() and friends using vm regions
Barret Rhoden [Wed, 7 Jul 2010 18:37:30 +0000 (11:37 -0700)]
mmap() and friends using vm regions

Not heavily tested, esp with files.  There are still things related to
the old pfault_info floating around, which will go away soon.

mprotect() also now is best effort, and won't fail if a part of the
interval is unmapped.  Might change that later.

There are also a bunch of inefficiencies with vmr management, related to
merging and finding them when performing some of these operations.
Plenty of TODOs.

8 years agoMinor build system bug
Barret Rhoden [Wed, 7 Jul 2010 18:32:53 +0000 (11:32 -0700)]
Minor build system bug

Hate this crap.

8 years agoVM regions: management functions and structs
Barret Rhoden [Fri, 11 Jun 2010 01:26:09 +0000 (18:26 -0700)]
VM regions: management functions and structs

They aren't used for anything yet, and their interface might change a
bit.  Long term, any mapping into an address space should use these.

8 years agoKFS: llseek, read, write, readdir
Barret Rhoden [Wed, 9 Jun 2010 23:37:27 +0000 (16:37 -0700)]
KFS: llseek, read, write, readdir

Note that KFS will not let you seek, read, or write past the end of the
file, since it currently just uses the memory of the CPIO archive and
directly accesses the "backing store."

8 years agoset_errno: only if there is a tf
Barret Rhoden [Wed, 9 Jun 2010 20:59:46 +0000 (13:59 -0700)]
set_errno: only if there is a tf

Some paths (like async calls) might not have a current_tf when they call
set_errno.  Eventually, we'll need a way to propagate the errors back,
and perhaps current_tf isn't the right way.  For now, this will avoid
null ptr dereferences while keeping the calling code clean.

8 years agokfs_lookup() and parsing directories
Barret Rhoden [Wed, 9 Jun 2010 00:25:20 +0000 (17:25 -0700)]
kfs_lookup() and parsing directories

KFS now builds a full tree from a CPIO archive.  No support for symlinks
or anything like that yet.

8 years agoCPIO parsing, kfs building, vfs tweaks
Barret Rhoden [Tue, 8 Jun 2010 20:58:30 +0000 (13:58 -0700)]
CPIO parsing, kfs building, vfs tweaks

Creates a KFS from a CPIO, though it doesn't handle nesting / lookup()
yet.  Can create and mkdir though.  Some basic testing, and some fixes
for generic VFS helpers.

8 years agoRemoved the KFS file entries (raw apps)
Barret Rhoden [Mon, 7 Jun 2010 21:14:25 +0000 (14:14 -0700)]
Removed the KFS file entries (raw apps)

8 years agoCPIO support for KFS
Barret Rhoden [Sat, 5 Jun 2010 03:58:13 +0000 (20:58 -0700)]
CPIO support for KFS

Basic support to understand CPIO archives for an initramfs.  There is
some rudimentary support in the Makefile mess to build the initramfs
based on some variables in Makelocal.  If you want to strip the binaries
before adding them, do it in a tools script.  For whatever bullshit
Makefile reason, it's a pain doing that in tests/Makefrag.

8 years agokfs_open()
Barret Rhoden [Fri, 4 Jun 2010 22:09:40 +0000 (15:09 -0700)]
kfs_open()

Minor WIP.

8 years agoVFS: mounts KFS, shell functions
Barret Rhoden [Thu, 3 Jun 2010 00:48:56 +0000 (17:48 -0700)]
VFS: mounts KFS, shell functions

Added the appserver file items to the vfs's struct file, until we can
port the appserver or whatever over to use the vfs layer (if ever).

So far, it just inits the VFS and mounts a useless KFS.

8 years agoInitial VFS
Barret Rhoden [Fri, 12 Feb 2010 00:41:13 +0000 (16:41 -0800)]
Initial VFS

Just the header for the VFS.

8 years agoRemoved fillmeup.c
Barret Rhoden [Tue, 1 Jun 2010 23:12:56 +0000 (16:12 -0700)]
Removed fillmeup.c

8 years agoUse get_pcoreid() in proc management code
Barret Rhoden [Fri, 28 May 2010 19:01:38 +0000 (12:01 -0700)]
Use get_pcoreid() in proc management code

Will properly convert its usage in resource.c once I split that up a
bit.

8 years agoRemoved CONFIG_OSDI and EXPER_TRADPROC
Barret Rhoden [Thu, 27 May 2010 23:30:42 +0000 (16:30 -0700)]
Removed CONFIG_OSDI and EXPER_TRADPROC

All the stuff they did will still exist on the OSDI branch, but we don't
want to maintain / wade through that stuff anymore.

8 years agoAdding support for perfctr in trad_proc timer handler
Yu Zhu [Fri, 7 May 2010 02:03:00 +0000 (19:03 -0700)]
Adding support for perfctr in trad_proc timer handler

8 years agoFixed TLS for statically-linked programs
Andrew Waterman [Wed, 5 May 2010 09:58:27 +0000 (02:58 -0700)]
Fixed TLS for statically-linked programs

Basically, the kernel needs to communicate the program headers
to libc.  Not all ELFs include the program header in the memory-
resident image, so we might have to forcibly map it in.

8 years agoFixed a current_tf setting bug and added checks
Andrew Waterman [Wed, 5 May 2010 07:58:42 +0000 (00:58 -0700)]
Fixed a current_tf setting bug and added checks

Never call proc_restartcore without previously calling set_current_tf.
In all situations, the tf passed to restartcore should be the same
as current_tf (as far as I know), so the parameter should actually
be removed and current_tf should be used instead.

8 years agoFixed SPARC kernel entry SNAFU
Andrew Waterman [Wed, 5 May 2010 07:56:03 +0000 (00:56 -0700)]
Fixed SPARC kernel entry SNAFU

If a trap occurred with interrupts disabled (i.e. a kernel bug),
then the trap handler would invert the interrupt state, which would
enable interrupts!!!

8 years agoReduced SPARC udelay for microbenchmarks again
Andrew Waterman [Wed, 5 May 2010 07:55:15 +0000 (00:55 -0700)]
Reduced SPARC udelay for microbenchmarks again

8 years agoChanged the way delays happen in the packetizer.
Kevin Klues [Wed, 5 May 2010 05:43:16 +0000 (22:43 -0700)]
Changed the way delays happen in the packetizer.

Tuned to spit out packets at about 40K per second.

8 years agoPotential workaround for e1000
Barret Rhoden [Wed, 5 May 2010 00:00:50 +0000 (17:00 -0700)]
Potential workaround for e1000

Not the right answer, but might work for OSDI.  Will at least help us
see the issue.  If we see a warning that isn't followed by the panic on
line 680, then there are more issues (and this fix might not be
helping).

8 years agoSSE support
Barret Rhoden [Tue, 4 May 2010 22:56:26 +0000 (15:56 -0700)]
SSE support

Enables basic SSE support in the kernel.  Like with FP, this doesn't
handle exceptions or anything.  Save/restore should be working (at
least, the save_fp_state() works, maybe we don't call it at the right
times).

Untested, might work.

8 years agoPage coloring for boxboro tests
Barret Rhoden [Tue, 4 May 2010 21:50:37 +0000 (14:50 -0700)]
Page coloring for boxboro tests

Use the example macros in manager.c.  If you just create, but don't run,
don't forget to proc_decref() after schedule_proc() or whatever.

8 years agoFixed experiment timing on SPARC
Andrew Waterman [Mon, 3 May 2010 07:25:40 +0000 (00:25 -0700)]
Fixed experiment timing on SPARC

Since target time progresses much more slowly than wall time, I divide
the argument to any udelay call in the microbenchmarks by a constant.
I don't do this in a header file because really we don't want to change
the semantics of udelay, just how long we delay for in these benchmarks.

8 years agoAdding initial support for performance counters.
David Zhu [Mon, 3 May 2010 01:53:54 +0000 (18:53 -0700)]
Adding initial support for performance counters.

The kernel sets up the performance counter specifically for OSDI.
It also changes cr4 to allow user level to read performance counters.
User can read pmc to obtain the relevant counter data.

8 years agoOSDI Microbenchmarks
Barret Rhoden [Mon, 3 May 2010 03:22:17 +0000 (20:22 -0700)]
OSDI Microbenchmarks

Adds new testing files and a new developer name.  Use the developer
"tests" to run the scripted tests.  Make sure you have KFS running.

8 years agoAdded another missing icache flush in RTLD
Andrew Waterman [Mon, 3 May 2010 02:01:28 +0000 (19:01 -0700)]
Added another missing icache flush in RTLD

Stupid fucks.  Anyway, also made trap frame printing
on SPARC more atomic-looking (less interleaving of prints)

8 years agoCompiler memory barriers and pthread barrier fix
Barret Rhoden [Mon, 3 May 2010 00:32:11 +0000 (17:32 -0700)]
Compiler memory barriers and pthread barrier fix

Also touches up some loose ends in kernel synch.  The pthread bearier
works on the core i7's, etc.

8 years agoUse correct memory barrier on x86
Andrew Waterman [Sun, 2 May 2010 20:56:54 +0000 (13:56 -0700)]
Use correct memory barrier on x86

On Intel implementations of x86, SFENCE seems to only have any effect on
programs that use the write-combining buffers (e.g., those that use the
SSE instruction MOVNTPS).  Its semantics seem to NOT guarantee load-to-store
ordering.

LFENCE and SFENCE do not prevent older stores from bypassing younger
loads to different addresses, which is something a full memory barrier
should most definitely do.  So, mb() should call MFENCE, which does
have this property, not LFENCE+SFENCE.  If the latter two worked, it
may be because they happened to interlock the pipeline just enough that
the desired ordering serendipitously was enforced.

8 years agoChanged type of variable to match type in kernel
Kevin Klues [Sun, 2 May 2010 10:53:59 +0000 (03:53 -0700)]
Changed type of variable to match type in kernel

8 years agoAdded a barrier test for pthreads that stress tests them
Kevin Klues [Sun, 2 May 2010 10:46:37 +0000 (03:46 -0700)]
Added a barrier test for pthreads that stress tests them

8 years agoFixed bug in pthread barrier code
Kevin Klues [Sun, 2 May 2010 10:45:42 +0000 (03:45 -0700)]
Fixed bug in pthread barrier code

Needed to reset some more state after the barrier is cleared, but before
opening the floodgates.  Also needed a memory barrier in the pthread_mutex()
code to ensure the write to the count variable and the write to the lock variable
are in the proper order.  This one was a bitch to track down.