diff options
author | Justin Hibbits <jhibbits@FreeBSD.org> | 2019-01-19 04:54:12 +0000 |
---|---|---|
committer | Justin Hibbits <jhibbits@FreeBSD.org> | 2019-01-19 04:54:12 +0000 |
commit | bb0e68335f0f1e83e91bef984460a33ce4923553 (patch) | |
tree | 8dc1833bbe9fa61fb7fb9def5b3fe91395f5eec2 | |
parent | 15fba9d3bea8b1284434e78b8df0723458ddc22a (diff) | |
download | src-bb0e68335f0f1e83e91bef984460a33ce4923553.tar.gz src-bb0e68335f0f1e83e91bef984460a33ce4923553.zip |
powerpc/dpaa: Handle DMAP virtual addresses in DPAA
sendfile(2) appears to now use DMAP wherever possible. These addresses are not
managed by pmap, so pmap_kextract() returns a 0 physical address, causing
failure.
This change fixes nginx running on P5020 SoC.
MFC after: 3 weeks
Notes
Notes:
svn path=/head/; revision=343168
-rw-r--r-- | sys/contrib/ncsw/user/env/xx.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/contrib/ncsw/user/env/xx.c b/sys/contrib/ncsw/user/env/xx.c index 515e5f115ff8..2a3c90ebf072 100644 --- a/sys/contrib/ncsw/user/env/xx.c +++ b/sys/contrib/ncsw/user/env/xx.c @@ -701,7 +701,12 @@ XX_VirtToPhys(void *addr) return (XX_PInfo.portal_ci_pa[QM_PORTAL][cpu] + (vm_offset_t)addr - XX_PInfo.portal_ci_va[QM_PORTAL]); - paddr = pmap_kextract((vm_offset_t)addr); + if (PMAP_HAS_DMAP && (vm_offset_t)addr >= DMAP_BASE_ADDRESS && + (vm_offset_t)addr <= DMAP_MAX_ADDRESS) + return (DMAP_TO_PHYS((vm_offset_t)addr)); + else + paddr = pmap_kextract((vm_offset_t)addr); + if (paddr == 0) printf("NetCommSW: " "Unable to translate virtual address %p!\n", addr); @@ -757,6 +762,9 @@ XX_PhysToVirt(physAddress_t addr) if (pv != NULL) return ((void *)(pv->pv_va + ((vm_offset_t)addr & PAGE_MASK))); + if (PMAP_HAS_DMAP) + return ((void *)PHYS_TO_DMAP(addr)); + printf("NetCommSW: " "Unable to translate physical address 0x%09jx!\n", (uintmax_t)addr); |