summaryrefslogtreecommitdiff
path: root/sys/src/9
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-12-12 18:00:41 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2020-12-12 18:00:41 +0100
commit5ea540e75def56d3c2b5ef16f0f4e91d5f5c0ad1 (patch)
tree4c79099a0f61013129f420fe762e01501019d3d9 /sys/src/9
parentb1d1fa04b952d19064ecc9c4b0a6c07e39e71c3b (diff)
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.
Diffstat (limited to 'sys/src/9')
-rw-r--r--sys/src/9/pc/sdiahci.c2
1 files changed, 1 insertions, 1 deletions
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]);