summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/pc/ether79c970.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/src/9/pc/ether79c970.c b/sys/src/9/pc/ether79c970.c
index e77b1cd3b..bb1741201 100644
--- a/sys/src/9/pc/ether79c970.c
+++ b/sys/src/9/pc/ether79c970.c
@@ -404,6 +404,7 @@ intrloop:
* until a descriptor is encountered still owned by the chip.
*/
if(csr0 & Rint){
+ ilock(ctlr);
i = ctlr->rdrx;
dre = &ctlr->rdr[i];
while(!(dre->md1 & Own)){
@@ -435,16 +436,17 @@ intrloop:
dre->md2 = 0;
dre->md1 = Own|(-Rbsize & 0xFFFF);
- ctlr->rdrx = NEXT(ctlr->rdrx, Nrdre);
- dre = &ctlr->rdr[ctlr->rdrx];
+ i = ctlr->rdrx = NEXT(ctlr->rdrx, Nrdre);
+ dre = &ctlr->rdr[i];
}
+ iunlock(ctlr);
}
/*
* Transmitter interrupt: wakeup anyone waiting for a free descriptor.
*/
if(csr0 & Tint){
- lock(ctlr);
+ ilock(ctlr);
while(ctlr->ntq){
i = ctlr->tdri;
dre = &ctlr->tdr[i];
@@ -474,7 +476,7 @@ intrloop:
ctlr->tdri = NEXT(ctlr->tdri, Ntdre);
}
txstart(ether);
- unlock(ctlr);
+ iunlock(ctlr);
}
goto intrloop;
}