From 5ea540e75def56d3c2b5ef16f0f4e91d5f5c0ad1 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 12 Dec 2020 18:00:41 +0100 Subject: sdiahci: enable pci busmaster before ahciconfigdrive() (fix qemu crash) enable pci busmaster before set the fis-receive-enable bit in the port command register. not doing so triggers a crash in qemu like: address_space_unmap: Assertion `mr != NULL' failed. as qemu tries to process the dma command list as soon as we set that flag and busmaster dma needs to be enabled at this point. --- sys/src/9/pc/sdiahci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/src/9/pc/sdiahci.c b/sys/src/9/pc/sdiahci.c index 63ac8559b..1c243908e 100644 --- a/sys/src/9/pc/sdiahci.c +++ b/sys/src/9/pc/sdiahci.c @@ -1553,7 +1553,6 @@ iaenable(SDev *s) } if(c->ndrive == 0) panic("iaenable: zero s->ctlr->ndrive"); - pcisetbme(c->pci); snprint(name, sizeof name, "%s (%s)", s->name, s->ifc->name); intrenable(c->pci->intl, iainterrupt, c, c->pci->tbdf, name); /* supposed to squelch leftover interrupts here. */ @@ -2228,6 +2227,7 @@ iapnp(void) c->drive[d->driveno] = d; iadrive[niadrive + d->driveno] = d; } + pcisetbme(c->pci); for(i = 0; i < n; i++){ c->drive[i]->mode = DMautoneg; configdrive(c->drive[i]); -- cgit v1.2.3