summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorguido <guido@FreeBSD.org>1999-02-14 20:16:15 +0000
committerguido <guido@FreeBSD.org>1999-02-14 20:16:15 +0000
commit2b2e902d2357c8432b39702a30c40259b632c995 (patch)
treef7eb27a91727a40cca7cc5cb8961a8ceec000ff1 /sys
parent4fda307f5ba94f74288034e942fb80fd84a30395 (diff)
downloadFreeBSD-src-2b2e902d2357c8432b39702a30c40259b632c995.zip
FreeBSD-src-2b2e902d2357c8432b39702a30c40259b632c995.tar.gz
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.
Diffstat (limited to 'sys')
-rw-r--r--sys/pccard/pcic.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c
index 651c1d5..4514dbc 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) {
OpenPOWER on IntegriCloud