Author: jhibbits
Date: Sat Jan 19 04:54:12 2019
New Revision: 343168
URL: https://svnweb.freebsd.org/changeset/base/343168

Log:
  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

Modified:
  head/sys/contrib/ncsw/user/env/xx.c

Modified: head/sys/contrib/ncsw/user/env/xx.c
==============================================================================
--- head/sys/contrib/ncsw/user/env/xx.c Sat Jan 19 04:47:19 2019        
(r343167)
+++ head/sys/contrib/ncsw/user/env/xx.c Sat Jan 19 04:54:12 2019        
(r343168)
@@ -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);
@@ -756,6 +761,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);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to