Author: kib
Date: Sun May  8 09:06:52 2016
New Revision: 299231
URL: https://svnweb.freebsd.org/changeset/base/299231

Log:
  MFC r298891:
  Avoid duplicated calls to pmap_page_get_memattr().
  Avoid logging inconsistency for the /dev/mem device.

Modified:
  stable/10/sys/vm/device_pager.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/vm/device_pager.c
==============================================================================
--- stable/10/sys/vm/device_pager.c     Sun May  8 09:02:51 2016        
(r299230)
+++ stable/10/sys/vm/device_pager.c     Sun May  8 09:06:52 2016        
(r299231)
@@ -299,7 +299,7 @@ old_dev_pager_fault(vm_object_t object, 
        struct cdevsw *csw;
        struct file *fpop;
        struct thread *td;
-       vm_memattr_t memattr;
+       vm_memattr_t memattr, memattr1;
        int ref, ret;
 
        pidx = OFF_TO_IDX(offset);
@@ -328,10 +328,18 @@ old_dev_pager_fault(vm_object_t object, 
 
        /* If "paddr" is a real page, perform a sanity check on "memattr". */
        if ((m_paddr = vm_phys_paddr_to_vm_page(paddr)) != NULL &&
-           pmap_page_get_memattr(m_paddr) != memattr) {
-               memattr = pmap_page_get_memattr(m_paddr);
-               printf(
-           "WARNING: A device driver has set \"memattr\" inconsistently.\n");
+           (memattr1 = pmap_page_get_memattr(m_paddr)) != memattr) {
+               /*
+                * For the /dev/mem d_mmap routine to return the
+                * correct memattr, pmap_page_get_memattr() needs to
+                * be called, which we do there.
+                */
+               if ((csw->d_flags & D_MEM) == 0) {
+                       printf("WARNING: Device driver %s has set "
+                           "\"memattr\" inconsistently (drv %u pmap %u).\n",
+                           csw->d_name, memattr, memattr1);
+               }
+               memattr = memattr1;
        }
        if (((*mres)->flags & PG_FICTITIOUS) != 0) {
                /*
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to