Age | Commit message (Collapse) | Author |
|
|
|
|
|
ok miod@ marco@ deraadt@
|
|
ok marco@
|
|
while here try to avoid nesting splbio calls when dealing with the
runqueue.
|
|
be done on the logical disks so ami_scsi_cmd can stash the name of the
device doing the io. we now walk the device tree after the logical disks
are attached and use the names of ami's child devices.
ok marco@
|
|
|
|
i could move the shared code that the sensor and bio paths use, but this
would add bloat i think.
found by _mx, fix by deraadt@
|
|
|
|
spare ccbs for it and they dont understand the megaraid commands we use in
those paths.
initially found by jared rr spiegel
|
|
|
|
# bioctl -h ami0
Volume Status Size Device
ami0 0 Rebuild 1000M sd1 RAID5 8% done
|
|
|
|
|
|
(aptly called ami_alloc_ccbs). allocate the ccbs after the firmware has
been queried, but still for the full number of AMI_MAXCMDS.
ok krw@
|
|
of the function and unindent that block.
ok krw@
|
|
for its params. this means we can ask it how many ccbs it can deal with
before we allocate them.
ok krw@
|
|
is preallocated in the softc, even if the driver is only ever going to use
one of them when running. this allocates them separately during attach as a
first step toward having the driver only allocate as many ccbs as the
firmware can support.
ok krw@
|
|
older firmwares. it was stagnating and now completely broken. if we need it
back then we can poke around in cvs for it.
|
|
structure not included in the MegaRAID command, so it needs to be synced
before we submit it. Previously this was done only when the SCSI command
had an associated data buffer. The syncing of the passthrough command is
now done unconditionally.
ok krw@ marco@
|
|
reported by several people. What happens is that the firmware sometimes
misreports what SCSI type a device is. The driver was only allowing a create
hotspare function when the type was set to hard disk. Since the firmware will,
obviously, not allow the driver to create a hotspare on any other type of device
the driver doesn't need these smarts and now will ignore the type.
Tested by henning todd and Ben Lovett.
ok dlg
|
|
established at. this means we dont need splbio() calls in ami_intr because
its already been raised.
this diff removes unneeded splbio calls from the interrupt handler path.
it also sets it up so the completion paths are all called at splbio, so i
can get rid of the spl calls inside those functions too.
neither marco or pedro could see anything wrong with it
|
|
on with the second half of the command.
|
|
ok dlg
|
|
Disable until diagnosed and fixed.
|
|
used anywhere.
thanks lint. thint.
|
|
|
|
of TAILQ_TAIL when pulling ccbs off the free list since it does less
"interesting" things with pointers. changes prompted by lint bitching.
|
|
|
|
from him since he did most of the hard work on it.
when marco added the sensor for logical disks he added some extra bits
to the softc, but inside an #if NBIO > 0 block. NBIO is set by "bio.h"
which was included in ami.c, but not in ami_pci.c which is what is
actually responsible for getting the softc allocated. because of this
the softc in the rest of the system was smaller than what ami.c needed,
so technically it was using unallocated memory. in krws case that
unallocated space was filled with garbage, hence his panic.
the moral of this story is do NOT put #if inside structs that are passed
between different source files. its too easy to have this kind of screwup
happen.
|
|
doesn't blow up on first call to ami_refresh(). There's probably a
better fix, but this stops the crashes while that fix is found.
ok dlg@
|
|
|
|
monitor disks on ami.
Ex.: hw.sensors.0=sd2, logical disk, WARNING, drive, degraded
Requested deraadt@ ok dlg@
|
|
commands to emulated one scsi command. i reuse the ccb and pushed it
along the scsi setup path twice. when we do this for asynchronous cache
syncs this happens with the timeout: timeout_set, timeout_add,
timeout_set, timeout_del.
from the looks of the timeout code the repeat of the timeout_set/add part
can do really interesting things with the linked list holding all the
timeouts.
this adds a timeout_del in the middle of the two set/adds so the lists
are kept sane.
|
|
as a counter for both an inner and outer loop is not good(tm).
ok marco@
|
|
of the async exec and done commands. ami_poll uses a special command id
that isnt needed for normal commands. on top of this we should drain the
runq before using ami_poll. using ami_complete means that we can poll with
commands still on the card.
|
|
ok dlg
|
|
the card if there is any still pending.
ok dlg
|
|
ami_quartz_exec. This fixes interactivity issues that we saw when running
iogen. This is possible due to the new run-queue model for io.
ok dlg@
|
|
return void instead.
|
|
callback bits for completions. also do the AMI_SYSFLUSH command as well
as AMI_FLUSH.
|
|
returning ENOMEM and the like. userland can say that for us while keeping
our dmesg clean.
|
|
with the ccb queues rather than over the whole ioctl.
also get rid of the CMD_WAIT flag which is used to restrict the ioctl to
only one caller at a time. this is actually protecting from overuse of
ccbs for management tasks (like bioctl) by making sure the scsi paths
will always have their ccbs. replace the flag with a real lock so that
callers can sleep till the mgmt ccb is free, rather than returning EBUSY
|
|
the ioctl paths can wake up, check the state of the ccb instead. when the
ccb becomes READY again then the command has completed.
|
|
now that each code path that puts commands on the hardware has specific
completion routines, we dont have to deal with the memory magic in a
generic fashion.
|
|
|
|
of the dmammem is now done in the ioctl, the completion routing simply
wakes it up.
|
|
things down. this path is easy to verify without this code so im just
dropping it.
|
|
|
|
|