diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2015-02-03 00:29:58 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2015-02-03 00:29:58 +0000 |
commit | f1bce3cd6456129c133faab5efa9f38631dffa50 (patch) | |
tree | 5e7bcf16da86ccd9a230b03ec6a4f18b909fca4c /sys | |
parent | 00fdf5663ab60629f1fb9bceeb2653c1d6faafbf (diff) | |
download | FreeBSD-src-f1bce3cd6456129c133faab5efa9f38631dffa50.zip FreeBSD-src-f1bce3cd6456129c133faab5efa9f38631dffa50.tar.gz |
MFC r277792:
Fix bug in mapppings of multiple pages exposed by updates to the VSCSI
support in QEMU. Each page of a many page mapping was getting mapped to
the same physical address, which is not the desired behavior.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/powerpc/pseries/plpar_iommu.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/sys/powerpc/pseries/plpar_iommu.c b/sys/powerpc/pseries/plpar_iommu.c index 8db374c..5edbf6d 100644 --- a/sys/powerpc/pseries/plpar_iommu.c +++ b/sys/powerpc/pseries/plpar_iommu.c @@ -191,13 +191,13 @@ phyp_iommu_map(device_t dev, bus_dma_segment_t *segs, int *nsegs, tce = trunc_page(segs[i].ds_addr); tce |= 0x3; /* read/write */ - if (papr_supports_stuff_tce) { - error = phyp_hcall(H_STUFF_TCE, window->map->iobn, - alloced, tce, allocsize/PAGE_SIZE); - } else { - for (j = 0; j < allocsize; j += PAGE_SIZE) - error = phyp_hcall(H_PUT_TCE, window->map->iobn, - alloced + j, tce + j); + for (j = 0; j < allocsize; j += PAGE_SIZE) { + error = phyp_hcall(H_PUT_TCE, window->map->iobn, + alloced + j, tce + j); + if (error < 0) { + panic("IOMMU mapping error: %d\n", error); + return (ENOMEM); + } } segs[i].ds_addr = alloced + (segs[i].ds_addr & PAGE_MASK); |