diff options
| author | 2006-10-08 03:51:50 +0000 | |
|---|---|---|
| committer | 2006-10-08 03:51:50 +0000 | |
| commit | e67a46f3de72c9f6e79934b14f05e48decf6f863 (patch) | |
| tree | 1b5a65d4319b7d691aa207f6b276048da0f7d651 | |
| parent | Something more closely resembling english in this comment. (diff) | |
| download | wireguard-openbsd-e67a46f3de72c9f6e79934b14f05e48decf6f863.tar.xz wireguard-openbsd-e67a46f3de72c9f6e79934b14f05e48decf6f863.zip | |
Execute the Enforce in-order Execution of I/O (eieio) instruction in
mc_dmaintr, its a little bit of voodoo, I dont understand why its necessary
for mace versus the near identical dma isr in if_bm.c, but the system no
longer panics under network load.
| -rw-r--r-- | sys/arch/macppc/dev/if_mc.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/arch/macppc/dev/if_mc.c b/sys/arch/macppc/dev/if_mc.c index 3eb5ae81f82..a82060e4aad 100644 --- a/sys/arch/macppc/dev/if_mc.c +++ b/sys/arch/macppc/dev/if_mc.c @@ -1047,8 +1047,10 @@ mc_dmaintr(void *arg) /* continue; */ goto next; } - DBDMA_BUILD_CMD(cmd, DBDMA_CMD_STOP, 0, 0, 0, 0); - + DBDMA_BUILD_CMD(cmd, DBDMA_CMD_STOP, 0, 0, 0, 0); + /* XXX: Why? */ + __asm volatile("eieio"); + offset = i * MACE_BUFLEN; statoff = offset + datalen; sc->sc_rxframe.rx_rcvcnt = sc->sc_rxbuf[statoff + 0]; @@ -1062,6 +1064,9 @@ mc_dmaintr(void *arg) next: DBDMA_BUILD_CMD(cmd, DBDMA_CMD_IN_LAST, 0, DBDMA_INT_ALWAYS, DBDMA_WAIT_NEVER, DBDMA_BRANCH_NEVER); + /* XXX: Why? */ + __asm volatile("eieio"); + cmd->d_status = 0; cmd->d_resid = 0; sc->sc_tail = i + 1; |
