grog [Sun, 28 Mar 1999 08:51:10 +0000 (08:51 +0000)]
vinum_start: Allow user to specify a plex. In this case, revive all
subdisks in need of revival.
vinum_stop: sleep for a second before unloading. This solves a race
condition with a potential daemon when the stop command
is specified on the command line.
This code includes lots of stuff for verbose probing. I'm not 100%
sure that the output of the verbose probe is correct, but everything
else works fine, and -CURRENT was broken for the 5591 before, so I'm
committing it anyway.
alc [Sat, 27 Mar 1999 23:46:04 +0000 (23:46 +0000)]
Mainly, eliminate the comments about share maps. (We don't have share maps
any more.) Also, eliminate an incorrect comment that says that we don't
coalesce vm_map_entry's. (We do.)
helbig [Sat, 27 Mar 1999 21:08:13 +0000 (21:08 +0000)]
Due to the switch form Julian to Gregorian calender,
even a whole month might be missing.
This caused a bug for the LN -calender, whose switch was
on Dec 12, 9999.
wpaul [Sat, 27 Mar 1999 20:41:25 +0000 (20:41 +0000)]
Make the xl and pn drivers work on FreeBSD/alpha and add them to
sys/alpha/conf/GENERIC.
Note: the PNIC ignores the lower few bits of the RX buffer DMA address,
which means we have to add yet another kludge to make it happy. Since
we can't offset the packet data, we copy the first few bytes of the
received data into a separate mbuf with proper alignment. This puts
the IP header where it needs to be to prevent unaligned accesses.
Also modified the PNIC driver to use a non-interrupt driven TX
strategy. This improves performance somewhat on x86/SMP systems where
interrupt delivery doesn't seem to be as fast with an SMP kernel as
with a UP kernel.
alc [Fri, 26 Mar 1999 20:25:21 +0000 (20:25 +0000)]
Changed vn_read/write such that fp->f_offset isn't touched
if uio->uio_offset != -1. This fixes a problem with aio_read/write
and permits a straightforward implementation of pread/pwrite.
PR: kern/8669
Submitted by: John Plevyak <jplevyak@inktomi.com>
Reviewed by: Matthew Dillon <dillon@apollo.backplane.com>
luigi [Fri, 26 Mar 1999 14:15:59 +0000 (14:15 +0000)]
Use the correct length from the mbuf header instead of the one from
the IP header (this would not work for bridged packets).
This has been fixed long ago in the 2.2 branch.
Problem noticed by: a few people
Fix suggested by: Remy Nonnenmacher
mjacob [Fri, 26 Mar 1999 00:33:13 +0000 (00:33 +0000)]
Annoying little nigglet- apparently *some* Qlogic temporarily ignore
settings you've just sent them and return random values if you follow
the set by a get. This causes problems when you latter run a Tag-enabled
command when you've command tagged mode off.
chuckr [Thu, 25 Mar 1999 04:25:38 +0000 (04:25 +0000)]
Add Turtle Beach Malibu soundcard (and a sample config) to CARDS as
a real example of a CS4237 soundcard.
Luigi said all contributions like this were welcome in this file.
peter [Wed, 24 Mar 1999 02:43:05 +0000 (02:43 +0000)]
Fix a (relatively harmless) braino. I confused myself over the for() loop
that counted the number of elements in argv. The counter is incremented
in the next-iteration section of the loop, not the body, so at termination
it's already "counted" the element that failed the continuation test - in
this case the NULL argv terminator.
n_hibma [Tue, 23 Mar 1999 21:37:45 +0000 (21:37 +0000)]
Check whether the PIRQD enable bit is set in LegSup and if not, set it.
On my PIIX4 chip rev 1 this is required. Have not had any complaints from
other people so it might be a problem with this stepping.
n_hibma [Tue, 23 Mar 1999 21:35:57 +0000 (21:35 +0000)]
1) clean up debugging output
2) remove erroneous querying of PCI LegSup register while it should be
fetched from PCI config space
3) change name of define for this register
dfr [Tue, 23 Mar 1999 21:11:47 +0000 (21:11 +0000)]
Call the module's unload handler before removing the device from the
cdevsw list. This allows a handler to veto the load without losing its
place in the list.
peter [Tue, 23 Mar 1999 16:40:34 +0000 (16:40 +0000)]
Remove last remaining references to malloc/realloc and functions that
call them. All the execX() libc functions should be vfork() safe now.
Specifically:
- execlp() does the argument count-and-build into a vector from alloca
(like the others) - buildargv() is no longer used (and gone).
- execvp() uses alloca/strcpy rather than strdup().
- the ENOEXEC handler uses alloca rather than malloc.
- a couple of free() calls removed - alloca works on the local stack and
the allocations are freed on function exit (which is why buildargv
wasn't useful - it's alloca() context would disappear on return).
Along the way:
- If alloca() fails (can it?), set errno = ENOMEM explicitly.
- The ENOEXEC recovery routine that trys again with /bin/sh appeared to
not be terminating the new argv[] array for /bin/sh, allowing it to
walk off the end of the list.
I dithered a bit about using alloca() even more as it's most commonly
associated with gcc. However, standalone portable (using malloc) and
machine-specific assembler alloca implementations appear to be available
on just about all the architectures we're likely to want to port to.
alloca will be the least of our problems if ever going to another compiler.
bde [Tue, 23 Mar 1999 10:22:19 +0000 (10:22 +0000)]
Fixed a couple of missing drive selects in wdreset(). This mainly
affects cases where there is a slave but no master. These bugs
were usually recovered from provided ATAPI was configured, but only
after lengthy delays. Configuring ATAPI still fixes some bugs for
non-atapi drives.
Don't wait for seek complete in wdreset(). If necessary for pre-ata
drives, it can be waited for later (we got it wrong by only looking
at it for drive 0 anyway). It is set as part of a historical
signature for ata drives but doesn't say anything useful about the
reset state. It is cleared as part of a non-historical signature
for atapi drives so that drivers which don't understand atapi drives
seem to see no drive. Waiting for it caused lengthy delays and
broke the status returned by wdreset() in cases where the master
was not an ata drive. Then the whole wdprobe() failed in some
cases where the recovery code didn't work.
Don't wait for drive ready in wdreset(). The considerations are
the same as for seek complete, except drive ready does say something
useful about the reset state of ata drives, and waiting for it
later is required anyway for such drives.
Lengthy delays can now be avoided by not configuring nonexistent
(ata) drives. Unfortunately, this breaks detection of atapi drives
in some configurations.
gibbs [Tue, 23 Mar 1999 07:24:29 +0000 (07:24 +0000)]
Use TCL_CHANNEL/SCSI_ID/etc. macros in more locations.
Don't mess with the IRQMS bit in the host control register unless
we are an aic7770 chip.
Use calling context to determine if the card is already paused when
we update the target message request bit field in controller scratch
ram. Looking at the paused bit in the HCNTRL register opened up a
race condition.
Insert delays in the target message request update routine as a temporary
work around for what looks like a chip bug. I'm still investigating this
one.
Fix the Abort/Abort Tag/BDR handler to pull its message from the message
buffer in our softc instead of attempting to get it from a register on
the controller. The message is never recorded by the controller in the
new message scheme.
Don't rely on having an SCB when a BDR occurs. We can issue these during
invalid reconnects to.
Fix a few cases where we were restarting the sequencer but then still
falling out of a switch statement to unpause the sequencer again.
This could cause us to mess up sequencer state if it generated another
pausing interrupt between the time of the restart and unpause.
Kill the 'transceiver settle' loop during card initialization. I
failed to realize that a controller that is not connected to any
cables will never settle or enable the SCSI transceivers at all.
The correct solution is to monitor the IOERR interrupt which indicates
that the transceiver state has changed (UW<->LVD).
Modify the aic7xxx assembler to properly echo input when stdin is not
a tty.
jb [Tue, 23 Mar 1999 05:11:30 +0000 (05:11 +0000)]
o Runnable threads are now maintained in priority queues. The
implementation requires two things:
1.) The priority queues must be protected during insertion
and removal of threads. Since the kernel scheduler
must modify the priority queues, a spinlock for
protection cannot be used. The functions
_thread_kern_sched_defer() and _thread_kern_sched_undefer()
were added to {un}defer kernel scheduler activation.
2.) A thread (active) priority change can be performed only
when the thread is removed from the priority queue. The
implementation uses a threads active priority when
inserting it into the queue.
A by-product is that thread switches are much faster. A
separate queue is used for waiting and/or blocked threads,
and it is searched at most 2 times in the kernel scheduler
when there are active threads. It should be possible to
reduce this to once by combining polling of threads waiting
on I/O with the loop that looks for timed out threads and
the minimum timeout value.
o Functions to defer kernel scheduler activation were added. These
are _thread_kern_sched_defer() and _thread_kern_sched_undefer()
and may be called recursively. These routines do not block the
scheduling signal, but latch its occurrence. The signal handler
will not call the kernel scheduler when the running thread has
deferred scheduling, but it will be called when running thread
undefers scheduling.
o Added support for _POSIX_THREAD_PRIORITY_SCHEDULING. All the
POSIX routines required by this should now be implemented.
One note, SCHED_OTHER, SCHED_FIFO, and SCHED_RR are required
to be defined by including pthread.h. These defines are currently
in sched.h. I modified pthread.h to include sched.h but don't
know if this is the proper thing to do.
o Added support for priority protection and inheritence mutexes.
This allows definition of _POSIX_THREAD_PRIO_PROTECT and
_POSIX_THREAD_PRIO_INHERIT.
o Added additional error checks required by POSIX for mutexes and
condition variables.
o Provided a wrapper for sigpending which is marked as a hidden
syscall.
o Added a non-portable function as a debugging aid to allow an
application to monitor thread context switches. An application
can install a routine that gets called everytime a thread
(explicitly created by the application) gets context switched.
The routine gets passed the pthread IDs of the threads that are
being switched in and out. I found this useful, but we can
get rid of it if you want.
jb [Tue, 23 Mar 1999 05:07:56 +0000 (05:07 +0000)]
[ The author's description... ]
o Runnable threads are now maintained in priority queues. The
implementation requires two things:
1.) The priority queues must be protected during insertion
and removal of threads. Since the kernel scheduler
must modify the priority queues, a spinlock for
protection cannot be used. The functions
_thread_kern_sched_defer() and _thread_kern_sched_undefer()
were added to {un}defer kernel scheduler activation.
2.) A thread (active) priority change can be performed only
when the thread is removed from the priority queue. The
implementation uses a threads active priority when
inserting it into the queue.
A by-product is that thread switches are much faster. A
separate queue is used for waiting and/or blocked threads,
and it is searched at most 2 times in the kernel scheduler
when there are active threads. It should be possible to
reduce this to once by combining polling of threads waiting
on I/O with the loop that looks for timed out threads and
the minimum timeout value.
o Functions to defer kernel scheduler activation were added. These
are _thread_kern_sched_defer() and _thread_kern_sched_undefer()
and may be called recursively. These routines do not block the
scheduling signal, but latch its occurrence. The signal handler
will not call the kernel scheduler when the running thread has
deferred scheduling, but it will be called when running thread
undefers scheduling.
o Added support for _POSIX_THREAD_PRIORITY_SCHEDULING. All the
POSIX routines required by this should now be implemented.
One note, SCHED_OTHER, SCHED_FIFO, and SCHED_RR are required
to be defined by including pthread.h. These defines are currently
in sched.h. I modified pthread.h to include sched.h but don't
know if this is the proper thing to do.
o Added support for priority protection and inheritence mutexes.
This allows definition of _POSIX_THREAD_PRIO_PROTECT and
_POSIX_THREAD_PRIO_INHERIT.
o Added additional error checks required by POSIX for mutexes and
condition variables.
o Provided a wrapper for sigpending which is marked as a hidden
syscall.
o Added a non-portable function as a debugging aid to allow an
application to monitor thread context switches. An application
can install a routine that gets called everytime a thread
(explicitly created by the application) gets context switched.
The routine gets passed the pthread IDs of the threads that are
being switched in and out.
Submitted by: Dan Eischen <eischen@vigrid.com>
Changes by me:
o Added a PS_SPINBLOCK state to deal with the priority inversion
problem most often (I think) seen by threads calling malloc/free/realloc.
o Dispatch signals to the running thread directly rather than at a
context switch to avoid the situation where the switch never occurs.
grog [Tue, 23 Mar 1999 04:55:50 +0000 (04:55 +0000)]
Describe the new semantics of 'create':
When creating a new drive, if the drive already has a vinum label,
and name doesn't match the specified drive, do it anyway if the
'force' flag is specified.
Continually-tripped-over-by: Karl Pielorz <kpielorz@tdx.co.uk>
Update information about partition type for Vinum drives. They
*should* be of type 'vinum', but currently we still accept (and
complain about) partitions of type 'unused'. At a later date, only
'vinum' will be accepted.
grog [Tue, 23 Mar 1999 04:54:59 +0000 (04:54 +0000)]
vinum_create: pass 'force' flag to ioctl VINUM_STARTCONFIG.
Semantics:
When creating a new drive, if the drive already has a vinum label,
and name doesn't match the specified drive, do it anyway if the
'force' flag is specified.
Continually-tripped-over-by: Karl Pielorz <kpielorz@tdx.co.uk>
grog [Tue, 23 Mar 1999 04:49:08 +0000 (04:49 +0000)]
vinum_start:
remove the splbio() around the call to launch read requests.
launch_requests:
Move the splbio() protection outside the entire launch_loop. The
previous location was causing problems with IDE drives, where the
call to the strategy routine often did not complete until after
complete_rqe deallocated the request structure.
Solution-independently-found-by: Russell Neeper <r-neeper@tamu.edu> Problem-reported-by: Vallo Kallaste <vallo@matti.ee>
John Saunders <john@nlc.net.au>
Bernd Walter <ticso@cicely.de> (maybe)
grog [Tue, 23 Mar 1999 04:48:05 +0000 (04:48 +0000)]
init_drive:
Check for partition types FS_VINUM and FS_UNUSED. Accept both, but
complain about FS_UNUSED. At a later date, only FS_VINUM will be
accepted.
grog [Tue, 23 Mar 1999 04:47:09 +0000 (04:47 +0000)]
start_config:
Add a flag `force' (VF_FORCECONFIG) to force name changes of
existing drives.
config_drive:
If the drive already has a vinum label, and name doesn't match the
specified drive, do it anyway if the 'force' flag is specified.
finish_config:
Reset the `force' flag.
Continually-tripped-over-by: Karl Pielorz <kpielorz@tdx.co.uk>
give_sd_to_drive:
If the drive is down, take the subdisk down and don't try to fix
things.
update_plex_config:
Don't try to update the config parameters of a plex which isn't
fully configured (state plex_init or plex_unallocated).
Correctly calculate the amount to trim off a striped or RAID-5 plex
whose size is not a multiple of the stripe size.
bde [Tue, 23 Mar 1999 03:41:09 +0000 (03:41 +0000)]
Simplified using new SYMLINKS macro, mainly to test this macro. The
ifdefs are too ugly for this to be much of a simplification. The
existence tests are even uglier now. Note that the previous commit
was not submitted by me. It missed the point and just added a second
layer of unused removals.
Fixed hard-coded "libcrypt"s. The LCRYPTBASE macro mainly makes
things hard to read, but use it while we have it.
bde [Tue, 23 Mar 1999 03:06:25 +0000 (03:06 +0000)]
Removed all traces of LN_FLAGS. It was only used to produce a link
/usr/sbin/sysctl -> ${DESTDIR}/sbin/sysctl in some versions of 2.2,
and this link was broken if DESTDIR was set.
Added a SYMLINKS macro. This works the same as LINKS, except it
creates symlinks and the linked-to pathname may be relative. This
is more flexible than LN_FLAGS, since it supports installing
symlinks independently of hard links.
Use `ln -f[s] ...' instead of `rm -f ...; ln [-s] ...' for LINKS and
SYMLINKS. This is equivalent if the target is neither a directory nor
a symlink to a directory.
bde [Mon, 22 Mar 1999 03:44:01 +0000 (03:44 +0000)]
Display floats with format %*.0f instead of as "*****" if there is
enough space for this but not enough space for the normal %*.*f
format. Similarly for long doubles.