summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>1998-11-28 13:18:16 +0000
committerbde <bde@FreeBSD.org>1998-11-28 13:18:16 +0000
commit8f11507158b1ddd01885cc36b8da7e9f3e076721 (patch)
tree2f60487d168a2bb1f1c1a46dfcd5797d5ac0417e
parentdb70b202394164c029f74456ac007910e2be176d (diff)
downloadFreeBSD-src-8f11507158b1ddd01885cc36b8da7e9f3e076721.zip
FreeBSD-src-8f11507158b1ddd01885cc36b8da7e9f3e076721.tar.gz
Merge from sio.c rev.1.163:
Don't call timeout() for DTR wakeup if the relevant timeout is already active. This fixes "timeout table full" panics when sufficiently many cyopen()s are interrupted while they are sleeping waiting for the timeout to expire.
-rw-r--r--sys/dev/cy/cy.c4
-rw-r--r--sys/dev/cy/cy_isa.c4
-rw-r--r--sys/i386/isa/cy.c4
3 files changed, 6 insertions, 6 deletions
diff --git a/sys/dev/cy/cy.c b/sys/dev/cy/cy.c
index 1d41b5b..6e810c0 100644
--- a/sys/dev/cy/cy.c
+++ b/sys/dev/cy/cy.c
@@ -27,7 +27,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: cy.c,v 1.73 1998/11/22 17:40:32 bde Exp $
+ * $Id: cy.c,v 1.74 1998/11/23 13:58:55 bde Exp $
*/
#include "opt_compat.h"
@@ -931,7 +931,7 @@ comhardclose(com)
| CD1400_CCR_RCVDIS;
cd1400_channel_cmd(com, com->channel_control);
- if (com->dtr_wait != 0) {
+ if (com->dtr_wait != 0 && !(com->state & CS_DTR_OFF)) {
timeout(siodtrwakeup, com, com->dtr_wait);
com->state |= CS_DTR_OFF;
}
diff --git a/sys/dev/cy/cy_isa.c b/sys/dev/cy/cy_isa.c
index 1d41b5b..6e810c0 100644
--- a/sys/dev/cy/cy_isa.c
+++ b/sys/dev/cy/cy_isa.c
@@ -27,7 +27,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: cy.c,v 1.73 1998/11/22 17:40:32 bde Exp $
+ * $Id: cy.c,v 1.74 1998/11/23 13:58:55 bde Exp $
*/
#include "opt_compat.h"
@@ -931,7 +931,7 @@ comhardclose(com)
| CD1400_CCR_RCVDIS;
cd1400_channel_cmd(com, com->channel_control);
- if (com->dtr_wait != 0) {
+ if (com->dtr_wait != 0 && !(com->state & CS_DTR_OFF)) {
timeout(siodtrwakeup, com, com->dtr_wait);
com->state |= CS_DTR_OFF;
}
diff --git a/sys/i386/isa/cy.c b/sys/i386/isa/cy.c
index 1d41b5b..6e810c0 100644
--- a/sys/i386/isa/cy.c
+++ b/sys/i386/isa/cy.c
@@ -27,7 +27,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: cy.c,v 1.73 1998/11/22 17:40:32 bde Exp $
+ * $Id: cy.c,v 1.74 1998/11/23 13:58:55 bde Exp $
*/
#include "opt_compat.h"
@@ -931,7 +931,7 @@ comhardclose(com)
| CD1400_CCR_RCVDIS;
cd1400_channel_cmd(com, com->channel_control);
- if (com->dtr_wait != 0) {
+ if (com->dtr_wait != 0 && !(com->state & CS_DTR_OFF)) {
timeout(siodtrwakeup, com, com->dtr_wait);
com->state |= CS_DTR_OFF;
}
OpenPOWER on IntegriCloud