diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-12 18:00:41 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-12-12 18:00:41 +0100 |
commit | 5ea540e75def56d3c2b5ef16f0f4e91d5f5c0ad1 (patch) | |
tree | 4c79099a0f61013129f420fe762e01501019d3d9 /sys/src/9 | |
parent | b1d1fa04b952d19064ecc9c4b0a6c07e39e71c3b (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.c | 2 |
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]); |