Module Name: src Committed By: rin Date: Fri Dec 15 09:44:00 UTC 2023
Modified Files: src/sys/arch/powerpc/include: pmap.h src/sys/arch/powerpc/powerpc: bus_dma.c vm_machdep.c Log Message: powerpc: Make sure direct-mapped buffer fits within correct range For OEA and OEA64_BRIDGE, only first 3GiB memory is direct-mapped. Part of PR kern/57621 To generate a diff of this commit: cvs rdiff -u -r1.42 -r1.43 src/sys/arch/powerpc/include/pmap.h cvs rdiff -u -r1.55 -r1.56 src/sys/arch/powerpc/powerpc/bus_dma.c cvs rdiff -u -r1.105 -r1.106 src/sys/arch/powerpc/powerpc/vm_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/powerpc/include/pmap.h diff -u src/sys/arch/powerpc/include/pmap.h:1.42 src/sys/arch/powerpc/include/pmap.h:1.43 --- src/sys/arch/powerpc/include/pmap.h:1.42 Sat May 7 07:10:46 2022 +++ src/sys/arch/powerpc/include/pmap.h Fri Dec 15 09:43:59 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: pmap.h,v 1.42 2022/05/07 07:10:46 rin Exp $ */ +/* $NetBSD: pmap.h,v 1.43 2023/12/15 09:43:59 rin Exp $ */ #ifndef _POWERPC_PMAP_H_ #define _POWERPC_PMAP_H_ @@ -20,6 +20,10 @@ #error unknown PPC variant #endif +#ifndef PMAP_DIRECT_MAPPED_LEN +#define PMAP_DIRECT_MAPPED_LEN (~0UL) +#endif + #endif /* !_MODULE */ #if !defined(_LOCORE) && (defined(MODULAR) || defined(_MODULE)) Index: src/sys/arch/powerpc/powerpc/bus_dma.c diff -u src/sys/arch/powerpc/powerpc/bus_dma.c:1.55 src/sys/arch/powerpc/powerpc/bus_dma.c:1.56 --- src/sys/arch/powerpc/powerpc/bus_dma.c:1.55 Tue Jul 26 20:08:56 2022 +++ src/sys/arch/powerpc/powerpc/bus_dma.c Fri Dec 15 09:43:59 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma.c,v 1.55 2022/07/26 20:08:56 andvar Exp $ */ +/* $NetBSD: bus_dma.c,v 1.56 2023/12/15 09:43:59 rin Exp $ */ /*- * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc. @@ -33,7 +33,7 @@ #define _POWERPC_BUS_DMA_PRIVATE #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.55 2022/07/26 20:08:56 andvar Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.56 2023/12/15 09:43:59 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_ppcarch.h" @@ -707,8 +707,10 @@ _bus_dmamem_map(bus_dma_tag_t t, bus_dma if (nsegs == 1 && (flags & BUS_DMA_DONTCACHE) == 0) { KASSERT(size == segs->ds_len); addr = BUS_MEM_TO_PHYS(t, segs->ds_addr); - *kvap = (void *)PMAP_MAP_POOLPAGE(addr); - return 0; + if (__predict_true(addr + size < PMAP_DIRECT_MAPPED_LEN)) { + *kvap = (void *)PMAP_MAP_POOLPAGE(addr); + return 0; + } } #endif Index: src/sys/arch/powerpc/powerpc/vm_machdep.c diff -u src/sys/arch/powerpc/powerpc/vm_machdep.c:1.105 src/sys/arch/powerpc/powerpc/vm_machdep.c:1.106 --- src/sys/arch/powerpc/powerpc/vm_machdep.c:1.105 Mon Dec 5 16:01:03 2022 +++ src/sys/arch/powerpc/powerpc/vm_machdep.c Fri Dec 15 09:43:59 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: vm_machdep.c,v 1.105 2022/12/05 16:01:03 martin Exp $ */ +/* $NetBSD: vm_machdep.c,v 1.106 2023/12/15 09:43:59 rin Exp $ */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.105 2022/12/05 16:01:03 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.106 2023/12/15 09:43:59 rin Exp $"); #ifdef _KERNEL_OPT #include "opt_altivec.h" @@ -322,7 +322,8 @@ cpu_uarea_alloc(bool system) * Allocate a new physically contiguous uarea which can be * direct-mapped. */ - error = uvm_pglistalloc(USPACE, 0, ~0UL, 0, 0, &pglist, 1, 1); + error = uvm_pglistalloc(USPACE, 0, PMAP_DIRECT_MAPPED_LEN, 0, 0, + &pglist, 1, 1); if (error) { return NULL; }