From owner-svn-src-all@freebsd.org Fri Jan 19 22:17:15 2018 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 6DDC2ECBC32; Fri, 19 Jan 2018 22:17:15 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47C2078C39; Fri, 19 Jan 2018 22:17:15 +0000 (UTC) (envelope-from nwhitehorn@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 621F8136EA; Fri, 19 Jan 2018 22:17:14 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w0JMHE6T039117; Fri, 19 Jan 2018 22:17:14 GMT (envelope-from nwhitehorn@FreeBSD.org) Received: (from nwhitehorn@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w0JMHDlp039113; Fri, 19 Jan 2018 22:17:13 GMT (envelope-from nwhitehorn@FreeBSD.org) Message-Id: <201801192217.w0JMHDlp039113@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: nwhitehorn set sender to nwhitehorn@FreeBSD.org using -f From: Nathan Whitehorn Date: Fri, 19 Jan 2018 22:17:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r328178 - in head/sys: arm/include compat/linuxkpi/common/src i386/include sys X-SVN-Group: head X-SVN-Commit-Author: nwhitehorn X-SVN-Commit-Paths: in head/sys: arm/include compat/linuxkpi/common/src i386/include sys X-SVN-Commit-Revision: 328178 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.25 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, 19 Jan 2018 22:17:15 -0000 Author: nwhitehorn Date: Fri Jan 19 22:17:13 2018 New Revision: 328178 URL: https://svnweb.freebsd.org/changeset/base/328178 Log: Define PHYS_TO_DMAP() and DMAP_TO_PHYS() as panics on the architectures (i386 and arm) that never implement them. This allows the removal of #ifdef PHYS_TO_DMAP on code otherwise protected by a runtime check on PMAP_HAS_DMAP. It also fixes the build on ARM and i386 after I forgot an #ifdef in r328168. Reported by: Milan Obuch Pointy hat to: me Modified: head/sys/arm/include/vmparam.h head/sys/compat/linuxkpi/common/src/linux_page.c head/sys/i386/include/vmparam.h head/sys/sys/sf_buf.h Modified: head/sys/arm/include/vmparam.h ============================================================================== --- head/sys/arm/include/vmparam.h Fri Jan 19 22:10:29 2018 (r328177) +++ head/sys/arm/include/vmparam.h Fri Jan 19 22:17:13 2018 (r328178) @@ -188,6 +188,8 @@ extern vm_offset_t vm_max_kernel_address; #define SFBUF_MAP #define PMAP_HAS_DMAP 0 +#define PHYS_TO_DMAP(x) ({ panic("No direct map exists"); 0; }) +#define DMAP_TO_PHYS(x) ({ panic("No direct map exists"); 0; }) #define DEVMAP_MAX_VADDR ARM_VECTORS_HIGH Modified: head/sys/compat/linuxkpi/common/src/linux_page.c ============================================================================== --- head/sys/compat/linuxkpi/common/src/linux_page.c Fri Jan 19 22:10:29 2018 (r328177) +++ head/sys/compat/linuxkpi/common/src/linux_page.c Fri Jan 19 22:17:13 2018 (r328178) @@ -68,12 +68,8 @@ linux_page_address(struct page *page) { if (page->object != kmem_object && page->object != kernel_object) { -#ifdef PHYS_TO_DMAP return (PMAP_HAS_DMAP ? ((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(page))) : NULL); -#else - return (NULL); -#endif } return ((void *)(uintptr_t)(VM_MIN_KERNEL_ADDRESS + IDX_TO_OFF(page->pindex))); @@ -82,66 +78,65 @@ linux_page_address(struct page *page) vm_page_t linux_alloc_pages(gfp_t flags, unsigned int order) { -#ifdef PHYS_TO_DMAP - KASSERT(PMAP_HAS_DMAP, ("Direct map unavailable")); - unsigned long npages = 1UL << order; - int req = (flags & M_ZERO) ? (VM_ALLOC_ZERO | VM_ALLOC_NOOBJ | - VM_ALLOC_NORMAL) : (VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL); vm_page_t page; - if (order == 0 && (flags & GFP_DMA32) == 0) { - page = vm_page_alloc(NULL, 0, req); - if (page == NULL) - return (NULL); - } else { - vm_paddr_t pmax = (flags & GFP_DMA32) ? - BUS_SPACE_MAXADDR_32BIT : BUS_SPACE_MAXADDR; -retry: - page = vm_page_alloc_contig(NULL, 0, req, - npages, 0, pmax, PAGE_SIZE, 0, VM_MEMATTR_DEFAULT); + if (PMAP_HAS_DMAP) { + unsigned long npages = 1UL << order; + int req = (flags & M_ZERO) ? (VM_ALLOC_ZERO | VM_ALLOC_NOOBJ | + VM_ALLOC_NORMAL) : (VM_ALLOC_NOOBJ | VM_ALLOC_NORMAL); - if (page == NULL) { - if (flags & M_WAITOK) { - if (!vm_page_reclaim_contig(req, - npages, 0, pmax, PAGE_SIZE, 0)) { - VM_WAIT; + if (order == 0 && (flags & GFP_DMA32) == 0) { + page = vm_page_alloc(NULL, 0, req); + if (page == NULL) + return (NULL); + } else { + vm_paddr_t pmax = (flags & GFP_DMA32) ? + BUS_SPACE_MAXADDR_32BIT : BUS_SPACE_MAXADDR; + retry: + page = vm_page_alloc_contig(NULL, 0, req, + npages, 0, pmax, PAGE_SIZE, 0, VM_MEMATTR_DEFAULT); + + if (page == NULL) { + if (flags & M_WAITOK) { + if (!vm_page_reclaim_contig(req, + npages, 0, pmax, PAGE_SIZE, 0)) { + VM_WAIT; + } + flags &= ~M_WAITOK; + goto retry; } - flags &= ~M_WAITOK; - goto retry; + return (NULL); } - return (NULL); } - } - if (flags & M_ZERO) { - unsigned long x; + if (flags & M_ZERO) { + unsigned long x; - for (x = 0; x != npages; x++) { - vm_page_t pgo = page + x; + for (x = 0; x != npages; x++) { + vm_page_t pgo = page + x; - if ((pgo->flags & PG_ZERO) == 0) - pmap_zero_page(pgo); + if ((pgo->flags & PG_ZERO) == 0) + pmap_zero_page(pgo); + } } - } -#else - vm_offset_t vaddr; - vm_page_t page; + } else { + vm_offset_t vaddr; - vaddr = linux_alloc_kmem(flags, order); - if (vaddr == 0) - return (NULL); + vaddr = linux_alloc_kmem(flags, order); + if (vaddr == 0) + return (NULL); - page = PHYS_TO_VM_PAGE(vtophys((void *)vaddr)); + page = PHYS_TO_VM_PAGE(vtophys((void *)vaddr)); - KASSERT(vaddr == (vm_offset_t)page_address(page), - ("Page address mismatch")); -#endif + KASSERT(vaddr == (vm_offset_t)page_address(page), + ("Page address mismatch")); + } + return (page); } void linux_free_pages(vm_page_t page, unsigned int order) { -#ifdef PHYS_TO_DMAP if (PMAP_HAS_DMAP) { unsigned long npages = 1UL << order; unsigned long x; @@ -154,15 +149,12 @@ linux_free_pages(vm_page_t page, unsigned int order) vm_page_unlock(pgo); } } else { -#endif vm_offset_t vaddr; vaddr = (vm_offset_t)page_address(page); linux_free_kmem(vaddr, order); -#ifdef PHYS_TO_DMAP } -#endif } vm_offset_t Modified: head/sys/i386/include/vmparam.h ============================================================================== --- head/sys/i386/include/vmparam.h Fri Jan 19 22:10:29 2018 (r328177) +++ head/sys/i386/include/vmparam.h Fri Jan 19 22:17:13 2018 (r328178) @@ -203,5 +203,7 @@ #define SFBUF_PROCESS_PAGE #define PMAP_HAS_DMAP 0 +#define PHYS_TO_DMAP(x) ({ panic("No direct map exists"); 0; }) +#define DMAP_TO_PHYS(x) ({ panic("No direct map exists"); 0; }) #endif /* _MACHINE_VMPARAM_H_ */ Modified: head/sys/sys/sf_buf.h ============================================================================== --- head/sys/sys/sf_buf.h Fri Jan 19 22:10:29 2018 (r328177) +++ head/sys/sys/sf_buf.h Fri Jan 19 22:17:13 2018 (r328178) @@ -115,10 +115,8 @@ void sf_buf_ref(struct sf_buf *); static inline vm_offset_t sf_buf_kva(struct sf_buf *sf) { -#ifdef PMAP_HAS_DMAP if (PMAP_HAS_DMAP) return (PHYS_TO_DMAP(VM_PAGE_TO_PHYS((vm_page_t)sf))); -#endif return (sf->kva); } @@ -126,10 +124,8 @@ sf_buf_kva(struct sf_buf *sf) static inline vm_page_t sf_buf_page(struct sf_buf *sf) { -#ifdef PMAP_HAS_DMAP if (PMAP_HAS_DMAP) return ((vm_page_t)sf); -#endif return (sf->m); }