freebsd-nq/sys/i386
Alfred Perlstein 426da3bcfb SMP Lock struct file, filedesc and the global file list.
Seigo Tanimura (tanimura) posted the initial delta.

I've polished it quite a bit reducing the need for locking and
adapting it for KSE.

Locks:

1 mutex in each filedesc
   protects all the fields.
   protects "struct file" initialization, while a struct file
     is being changed from &badfileops -> &pipeops or something
     the filedesc should be locked.

1 mutex in each struct file
   protects the refcount fields.
   doesn't protect anything else.
   the flags used for garbage collection have been moved to
     f_gcflag which was the FILLER short, this doesn't need
     locking because the garbage collection is a single threaded
     container.
  could likely be made to use a pool mutex.

1 sx lock for the global filelist.

struct file *	fhold(struct file *fp);
        /* increments reference count on a file */

struct file *	fhold_locked(struct file *fp);
        /* like fhold but expects file to locked */

struct file *	ffind_hold(struct thread *, int fd);
        /* finds the struct file in thread, adds one reference and
                returns it unlocked */

struct file *	ffind_lock(struct thread *, int fd);
        /* ffind_hold, but returns file locked */

I still have to smp-safe the fget cruft, I'll get to that asap.
2002-01-13 11:58:06 +00:00
..
acpica Fix typo in function name. 2002-01-10 03:26:46 +00:00
apm Some fix for the recent apm module changes. 2001-11-01 16:34:07 +00:00
bios Some fix for the recent apm module changes. 2001-11-01 16:34:07 +00:00
compile Don't need the .keep_me files. Obrien and I committed past each other. 2001-07-01 23:35:44 +00:00
conf - generic Arcnet framework 2002-01-08 20:03:13 +00:00
i386 Clear the single-step flag for signal handlers. This fixes bogus trace 2002-01-10 11:49:55 +00:00
ibcs2 SMP Lock struct file, filedesc and the global file list. 2002-01-13 11:58:06 +00:00
include Use a spare slot in the machine context for a flags word to indicate 2002-01-10 02:32:30 +00:00
isa Change the preemption code for software interrupt thread schedules and 2002-01-05 08:47:13 +00:00
linux Clear the single-step flag for signal handlers. This fixes bogus trace 2002-01-10 11:49:55 +00:00
pci Add identification string for AMD-761 host to PCI bridge. 2001-12-10 09:27:00 +00:00
svr4 Clear the single-step flag for signal handlers. This fixes bogus trace 2002-01-10 11:49:55 +00:00
Makefile Update pathnames for creation of tags file. 2001-12-05 01:23:21 +00:00