From a1f7e1b4c5912effd980002e7784da06fdc5b4da Mon Sep 17 00:00:00 2001 From: Guido van Rooij Date: Sun, 14 Feb 1999 20:16:15 +0000 Subject: [PATCH] Somehow, it is possible to get a pcicintr() when in the resume process. This will trigger inserted()) to be called twice which confuses pccardd. Add code to not process pcicitr())'s when in the middle of a resume process. The real insertion of cards and the emulated one in the suspend/resume code really do not mix up. --- sys/pccard/pcic.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c index 651c1d5b4bc8..4514dbcea622 100644 --- a/sys/pccard/pcic.c +++ b/sys/pccard/pcic.c @@ -1104,7 +1104,14 @@ pcicintr(void *unused) #endif /* PC98 */ s = splhigh(); for (slot = 0; slot < PCIC_MAX_SLOTS; slot++, sp++) - if (sp->slt && (chg = sp->getb(sp, PCIC_STAT_CHG)) != 0) + /* + * don't process this interrupt if we are in suspend + * state; we have different means to (re)initialize the + * slot. + * XXX we shouldn't even get here!? + */ + if (sp->slt && (sp->slt->state != suspend) && + (chg = sp->getb(sp, PCIC_STAT_CHG)) != 0) if (chg & PCIC_CDTCH) { if ((sp->getb(sp, PCIC_STATUS) & PCIC_CD) == PCIC_CD) {