From b267359b69cb5b04f500a145e3c9c2bab813274e Mon Sep 17 00:00:00 2001 From: aiju Date: Sun, 24 Apr 2011 17:23:17 +0200 Subject: [PATCH] fixed interrupt problem with BCM driver on multicore machines --- sys/src/9/pc/etherbcm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/src/9/pc/etherbcm.c b/sys/src/9/pc/etherbcm.c index 67d7c2a4a..48963c247 100644 --- a/sys/src/9/pc/etherbcm.c +++ b/sys/src/9/pc/etherbcm.c @@ -22,7 +22,7 @@ typedef struct Ctlr Ctlr; struct Ctlr { - Lock txlock; + Lock txlock, imlock; Ctlr *link; Pcidev *pdev; ulong *nic, *status; @@ -404,6 +404,7 @@ bcminterrupt(Ureg*, void *arg) edev = arg; ctlr = edev->ctlr; + ilock(&ctlr->imlock); dummyread(csr32(ctlr, InterruptMailbox)); csr32(ctlr, InterruptMailbox) = 1; status = ctlr->status[0]; @@ -416,6 +417,7 @@ bcminterrupt(Ureg*, void *arg) bcmtransclean(edev); bcmtransmit(edev); csr32(ctlr, InterruptMailbox) = tag << 24; + iunlock(&ctlr->imlock); } static void @@ -664,5 +666,5 @@ bcmpnp(Ether* edev) void etherbcmlink(void) { - addethercard("BCM57xx", bcmpnp); + addethercard("BCM5755", bcmpnp); }