From owner-svn-src-all@freebsd.org Fri Aug 11 10:44:42 2017 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2A5FBDC4F5B; Fri, 11 Aug 2017 10:44:42 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 073666C477; Fri, 11 Aug 2017 10:44:41 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v7BAifPR032307; Fri, 11 Aug 2017 10:44:41 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v7BAif9v032305; Fri, 11 Aug 2017 10:44:41 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201708111044.v7BAif9v032305@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Fri, 11 Aug 2017 10:44:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r322397 - in head/sys/compat/linuxkpi/common: include/linux src X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: in head/sys/compat/linuxkpi/common: include/linux src X-SVN-Commit-Revision: 322397 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Aug 2017 10:44:42 -0000 Author: hselasky Date: Fri Aug 11 10:44:40 2017 New Revision: 322397 URL: https://svnweb.freebsd.org/changeset/base/322397 Log: Make sure the "vm_flags" and "vm_page_prot" fields get set correctly in the VM area structure in the LinuxKPI when doing mmap() and that unsupported bits are masked away. While at it fix some redundant use of parenthesing inside some related macros. Found by: KrishnamRaju ErapaRaju MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/page.h head/sys/compat/linuxkpi/common/src/linux_compat.c Modified: head/sys/compat/linuxkpi/common/include/linux/page.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/page.h Fri Aug 11 10:08:18 2017 (r322396) +++ head/sys/compat/linuxkpi/common/include/linux/page.h Fri Aug 11 10:44:40 2017 (r322397) @@ -48,38 +48,36 @@ typedef unsigned long pgprot_t; #define page vm_page -#define LINUXKPI_PROT_VALID (1 << 4) -#define LINUXKPI_CACHE_MODE_SHIFT 3 +#define LINUXKPI_PROT_VALID (1 << 3) +#define LINUXKPI_CACHE_MODE_SHIFT 4 +CTASSERT((VM_PROT_ALL & -LINUXKPI_PROT_VALID) == 0); + static inline pgprot_t cachemode2protval(vm_memattr_t attr) { - return ((attr | LINUXKPI_PROT_VALID) << LINUXKPI_CACHE_MODE_SHIFT); + return ((attr << LINUXKPI_CACHE_MODE_SHIFT) | LINUXKPI_PROT_VALID); } static inline vm_memattr_t pgprot2cachemode(pgprot_t prot) { - int val; - - val = prot >> LINUXKPI_CACHE_MODE_SHIFT; - - if (val & LINUXKPI_PROT_VALID) - return (val & ~LINUXKPI_PROT_VALID); + if (prot & LINUXKPI_PROT_VALID) + return (prot >> LINUXKPI_CACHE_MODE_SHIFT); else return (VM_MEMATTR_DEFAULT); } -#define virt_to_page(x) PHYS_TO_VM_PAGE(vtophys((x))) -#define page_to_pfn(pp) (VM_PAGE_TO_PHYS((pp)) >> PAGE_SHIFT) +#define virt_to_page(x) PHYS_TO_VM_PAGE(vtophys(x)) +#define page_to_pfn(pp) (VM_PAGE_TO_PHYS(pp) >> PAGE_SHIFT) #define pfn_to_page(pfn) (PHYS_TO_VM_PAGE((pfn) << PAGE_SHIFT)) -#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n)) +#define nth_page(page,n) pfn_to_page(page_to_pfn(page) + (n)) -#define clear_page(page) memset((page), 0, PAGE_SIZE) +#define clear_page(page) memset(page, 0, PAGE_SIZE) #define pgprot_noncached(prot) \ - ((prot) | cachemode2protval(VM_MEMATTR_UNCACHEABLE)) + (((prot) & VM_PROT_ALL) | cachemode2protval(VM_MEMATTR_UNCACHEABLE)) #define pgprot_writecombine(prot) \ - ((prot) | cachemode2protval(VM_MEMATTR_WRITE_COMBINING)) + (((prot) & VM_PROT_ALL) | cachemode2protval(VM_MEMATTR_WRITE_COMBINING)) #undef PAGE_MASK #define PAGE_MASK (~(PAGE_SIZE-1)) Modified: head/sys/compat/linuxkpi/common/src/linux_compat.c ============================================================================== --- head/sys/compat/linuxkpi/common/src/linux_compat.c Fri Aug 11 10:08:18 2017 (r322396) +++ head/sys/compat/linuxkpi/common/src/linux_compat.c Fri Aug 11 10:44:40 2017 (r322397) @@ -1210,7 +1210,7 @@ linux_dev_mmap_single(struct cdev *dev, vm_ooffset_t * vmap->vm_end = size; vmap->vm_pgoff = *offset / PAGE_SIZE; vmap->vm_pfn = 0; - vmap->vm_flags = vmap->vm_page_prot = nprot; + vmap->vm_flags = vmap->vm_page_prot = (nprot & VM_PROT_ALL); vmap->vm_ops = NULL; vmap->vm_file = get_file(filp); vmap->vm_mm = mm;