diff options
author | guido <guido@FreeBSD.org> | 1999-02-14 20:16:15 +0000 |
---|---|---|
committer | guido <guido@FreeBSD.org> | 1999-02-14 20:16:15 +0000 |
commit | 2b2e902d2357c8432b39702a30c40259b632c995 (patch) | |
tree | f7eb27a91727a40cca7cc5cb8961a8ceec000ff1 /sys/pccard | |
parent | 4fda307f5ba94f74288034e942fb80fd84a30395 (diff) | |
download | FreeBSD-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/pccard')
-rw-r--r-- | sys/pccard/pcic.c | 9 |
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) { |