Add `hw.ciss.nop_message_heartbeat' tunable (default disabled) for

NOP-message polling in ciss_periodic().
Note that setting the tunable to non-zero can be workaround only for
`ADAPTER HEARTBEAT FAILED' problem, and may freeze the system w/o
the problem.

Reviewed by:	scottl
Reported by:	Attila Nagy
MFC after:	3 days
This commit is contained in:
Mitsuru IWASAKI 2008-02-10 06:21:52 +00:00
parent cf27101909
commit 5a3c4d694e
2 changed files with 10 additions and 1 deletions

View File

@ -84,6 +84,12 @@ drives) are only exposed as
devices.
Hot-insertion and removal of devices is supported but a bus
rescan might be necessary.
.Pp
The problem which adapter freezes with the message
.Dq ADAPTER HEARTBEAT FAILED
might be solved by updating the firmware and/or setting the
.Va hw.ciss.nop_message_heartbeat
tunable to non-zero at boot time.
.Sh HARDWARE
Controllers supported by the
.Nm

View File

@ -247,6 +247,9 @@ static struct cdevsw ciss_cdevsw = {
static unsigned int ciss_expose_hidden_physical = 0;
TUNABLE_INT("hw.ciss.expose_hidden_physical", &ciss_expose_hidden_physical);
static unsigned int ciss_nop_message_heartbeat = 0;
TUNABLE_INT("hw.ciss.nop_message_heartbeat", &ciss_nop_message_heartbeat);
/************************************************************************
* CISS adapters amazingly don't have a defined programming interface
* value. (One could say some very despairing things about PCI and
@ -3099,7 +3102,7 @@ ciss_periodic(void *arg)
/*
* Send the NOP message and wait for a response.
*/
if ((error = ciss_get_request(sc, &cr)) == 0) {
if (ciss_nop_message_heartbeat != 0 && (error = ciss_get_request(sc, &cr)) == 0) {
cc = CISS_FIND_COMMAND(cr);
cr->cr_complete = ciss_nop_complete;
cc->cdb.cdb_length = 1;