Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch bus_dmamem_map() maps DMA safe memory, which is usu...



details:   https://anonhg.NetBSD.org/src/rev/c1c91c955ba6
branches:  trunk
changeset: 473221:c1c91c955ba6
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Tue May 25 23:14:03 1999 +0000

description:
bus_dmamem_map() maps DMA safe memory, which is usually one or more
managed pages, into KVA space.  Since the pages are managed, we should
use pmap_enter(), not pmap_kenter_pa().

Also, when entering the mappings, enter with an access_type of
VM_PROT_READ | VM_PROT_WRITE.  We do this for a couple of reasons:

        (1) On systems that have H/W mod/ref attributes, the hardware
            may not be able to track mod/ref done by a bus master.

        (2) On systems that have to do mod/ref emulation, this prevents
            a mod/ref page fault from potentially happening while in an
            interrupt context, which can be problematic.

This latter change is fairly important if we ever want to be able to
transfer DMA-safe memory pages to anonymous memory objects; we will need
to know that the pages are modified, or else data could be lost!

Note that while the pages are unowned (i.e. "just DMA-safe memory pages"),
they won't consume any swap resources, as the mappings are wired, and
the pages aren't on the active or inactive queues.

diffstat:

 sys/arch/alpha/common/bus_dma.c    |  11 ++++-------
 sys/arch/arm32/arm32/bus_dma.c     |   5 +++--
 sys/arch/atari/atari/bus.c         |  10 +++-------
 sys/arch/bebox/bebox/bus_dma.c     |   5 +++--
 sys/arch/i386/i386/machdep.c       |   9 +++------
 sys/arch/macppc/macppc/bus_dma.c   |   9 +++------
 sys/arch/next68k/dev/bus_dma.c     |   7 ++++---
 sys/arch/pmax/pmax/bus_dma.c       |  10 ++++------
 sys/arch/sparc/sparc/iommu.c       |   5 +++--
 sys/arch/sparc/sparc/machdep.c     |   5 +++--
 sys/arch/sparc64/dev/sbus.c        |   5 +++--
 sys/arch/sparc64/sparc64/machdep.c |   5 +++--
 sys/arch/vax/vax/bus_dma.c         |   6 ++++--
 sys/arch/x68k/x68k/bus.c           |   5 +++--
 14 files changed, 46 insertions(+), 51 deletions(-)

diffs (truncated from 312 to 300 lines):

diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/alpha/common/bus_dma.c
--- a/sys/arch/alpha/common/bus_dma.c   Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/alpha/common/bus_dma.c   Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_dma.c,v 1.29 1999/03/26 23:41:27 mycroft Exp $ */
+/* $NetBSD: bus_dma.c,v 1.30 1999/05/25 23:14:03 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -41,7 +41,7 @@
 
 #include <sys/cdefs.h>                 /* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.29 1999/03/26 23:41:27 mycroft Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.30 1999/05/25 23:14:03 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -584,12 +584,9 @@
                    addr += NBPG, va += NBPG, size -= NBPG) {
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
-#if defined(PMAP_NEW)
-                       pmap_kenter_pa(va, addr, VM_PROT_READ | VM_PROT_WRITE);
-#else
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
-#endif
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
                }
        }
 
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/arm32/arm32/bus_dma.c
--- a/sys/arch/arm32/arm32/bus_dma.c    Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/arm32/arm32/bus_dma.c    Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bus_dma.c,v 1.13 1999/03/26 22:00:24 mycroft Exp $     */
+/*     $NetBSD: bus_dma.c,v 1.14 1999/05/25 23:14:04 thorpej Exp $     */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -515,7 +515,8 @@
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
                        /*
                         * If the memory must remain coherent with the
                         * cache then we must make the memory uncacheable
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/atari/atari/bus.c
--- a/sys/arch/atari/atari/bus.c        Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/atari/atari/bus.c        Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bus.c,v 1.13 1999/03/26 23:41:28 mycroft Exp $ */
+/*     $NetBSD: bus.c,v 1.14 1999/05/25 23:14:04 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -500,13 +500,9 @@
                    addr += NBPG, va += NBPG, size -= NBPG) {
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
-#if defined(PMAP_NEW)
-                       pmap_kenter_pa(va, addr - offset,
+                       pmap_enter(pmap_kernel(), va, addr - offset,
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
                            VM_PROT_READ | VM_PROT_WRITE);
-#else
-                       pmap_enter(pmap_kernel(), va, addr - offset,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
-#endif
                }
        }
 
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/bebox/bebox/bus_dma.c
--- a/sys/arch/bebox/bebox/bus_dma.c    Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/bebox/bebox/bus_dma.c    Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bus_dma.c,v 1.22 1999/03/26 23:41:28 mycroft Exp $     */
+/*     $NetBSD: bus_dma.c,v 1.23 1999/05/25 23:14:04 thorpej Exp $     */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -420,7 +420,8 @@
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
 #if 0
                        if (flags & BUS_DMA_COHERENT)
                                pmap_changebit(addr, PG_N, ~0);
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/i386/i386/machdep.c
--- a/sys/arch/i386/i386/machdep.c      Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/i386/i386/machdep.c      Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.354 1999/05/20 08:21:44 lukem Exp $      */
+/*     $NetBSD: machdep.c,v 1.355 1999/05/25 23:14:05 thorpej Exp $    */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -2737,12 +2737,9 @@
                    addr += NBPG, va += NBPG, size -= NBPG) {
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
-#if defined(PMAP_NEW)
-                       pmap_kenter_pa(va, addr, VM_PROT_READ | VM_PROT_WRITE);
-#else
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
-#endif
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
                }
        }
 
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/macppc/macppc/bus_dma.c
--- a/sys/arch/macppc/macppc/bus_dma.c  Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/macppc/macppc/bus_dma.c  Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_dma.c,v 1.8 1999/03/26 23:41:31 mycroft Exp $ */
+/* $NetBSD: bus_dma.c,v 1.9 1999/05/25 23:14:06 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -543,12 +543,9 @@
                    addr += NBPG, va += NBPG, size -= NBPG) {
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
-#if defined(PMAP_NEW)
-                       pmap_kenter_pa(va, addr, VM_PROT_READ | VM_PROT_WRITE);
-#else
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
-#endif
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
                }
        }
 
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/next68k/dev/bus_dma.c
--- a/sys/arch/next68k/dev/bus_dma.c    Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/next68k/dev/bus_dma.c    Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_dma.c,v 1.7 1999/03/26 23:41:32 mycroft Exp $ */
+/* $NetBSD: bus_dma.c,v 1.8 1999/05/25 23:14:06 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -40,7 +40,7 @@
 #include <sys/cdefs.h>                 /* RCS ID & Copyright macro defns */
 
 #if 0
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.7 1999/03/26 23:41:32 mycroft Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.8 1999/05/25 23:14:06 thorpej Exp $");
 #endif
 
 #include <sys/param.h>
@@ -597,7 +597,8 @@
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
                }
        }
 
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/pmax/pmax/bus_dma.c
--- a/sys/arch/pmax/pmax/bus_dma.c      Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/pmax/pmax/bus_dma.c      Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bus_dma.c,v 1.13 1999/03/26 23:41:34 mycroft Exp $     */
+/*     $NetBSD: bus_dma.c,v 1.14 1999/05/25 23:14:06 thorpej Exp $     */
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -681,12 +681,10 @@
                    addr += NBPG, va += NBPG, size -= NBPG) {
                        if (size == 0)
                                panic("_bus_dmamem_map: size botch");
-#if defined(PMAP_NEW)
-                       pmap_kenter_pa(va, addr, VM_PROT_READ | VM_PROT_WRITE);
-#else
                        pmap_enter(pmap_kernel(), va, addr,
-                           VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
-#endif
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
+
                        /* XXX Do something about COHERENT here. */
                }
        }
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/sparc/sparc/iommu.c
--- a/sys/arch/sparc/sparc/iommu.c      Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/sparc/sparc/iommu.c      Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: iommu.c,v 1.33 1999/04/20 20:15:48 pk Exp $ */
+/*     $NetBSD: iommu.c,v 1.34 1999/05/25 23:14:07 thorpej Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -762,7 +762,8 @@
 
                addr = VM_PAGE_TO_PHYS(m);
                pmap_enter(pmap_kernel(), va, addr | cbit,
-                   VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                   VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                   VM_PROT_READ | VM_PROT_WRITE);
 #if 0
                        if (flags & BUS_DMA_COHERENT)
                                /* XXX */;
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/sparc/sparc/machdep.c
--- a/sys/arch/sparc/sparc/machdep.c    Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/sparc/sparc/machdep.c    Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.149 1999/05/21 00:08:14 thorpej Exp $ */
+/*     $NetBSD: machdep.c,v 1.150 1999/05/25 23:14:07 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -1566,7 +1566,8 @@
 
                pa = VM_PAGE_TO_PHYS(m);
                pmap_enter(pmap_kernel(), va, pa | PMAP_NC,
-                          VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                          VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                          VM_PROT_READ | VM_PROT_WRITE);
 
                va += PAGE_SIZE;
                size -= PAGE_SIZE;
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/sparc64/dev/sbus.c
--- a/sys/arch/sparc64/dev/sbus.c       Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/sparc64/dev/sbus.c       Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: sbus.c,v 1.13 1999/05/23 07:24:02 mrg Exp $ */
+/*     $NetBSD: sbus.c,v 1.14 1999/05/25 23:14:08 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -1403,7 +1403,8 @@
 
                addr = VM_PAGE_TO_PHYS(m);
                pmap_enter(pmap_kernel(), va, addr | cbit,
-                   VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                   VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                   VM_PROT_READ | VM_PROT_WRITE);
                va += PAGE_SIZE;
                size -= PAGE_SIZE;
        }
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/sparc64/sparc64/machdep.c
--- a/sys/arch/sparc64/sparc64/machdep.c        Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/sparc64/sparc64/machdep.c        Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.40 1999/05/22 20:28:22 eeh Exp $ */
+/*     $NetBSD: machdep.c,v 1.41 1999/05/25 23:14:08 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -1532,7 +1532,8 @@
 
                addr = VM_PAGE_TO_PHYS(m);
                pmap_enter(pmap_kernel(), va, addr | cbit,
-                          VM_PROT_READ | VM_PROT_WRITE, TRUE, 0);
+                          VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                          VM_PROT_READ | VM_PROT_WRITE);
 #if 0
                        if (flags & BUS_DMA_COHERENT)
                                /* XXX */;
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/vax/vax/bus_dma.c
--- a/sys/arch/vax/vax/bus_dma.c        Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/vax/vax/bus_dma.c        Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bus_dma.c,v 1.1 1999/04/14 23:14:46 ragge Exp $        */
+/*     $NetBSD: bus_dma.c,v 1.2 1999/05/25 23:14:09 thorpej Exp $      */
 
 /*-
  * Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
@@ -473,7 +473,9 @@
                                panic("_bus_dmamem_map: size botch");
                        if (vax_boardtype == VAX_BTYP_43)
                                addr |= KA43_DIAGMEM;
-                       pmap_kenter_pa(va, addr, VM_PROT_READ | VM_PROT_WRITE);
+                       pmap_enter(pmap_kernel(), va, addr,
+                           VM_PROT_READ | VM_PROT_WRITE, TRUE,
+                           VM_PROT_READ | VM_PROT_WRITE);
                }
        }
        return (0);
diff -r 31dddd7dad61 -r c1c91c955ba6 sys/arch/x68k/x68k/bus.c
--- a/sys/arch/x68k/x68k/bus.c  Tue May 25 20:46:54 1999 +0000
+++ b/sys/arch/x68k/x68k/bus.c  Tue May 25 23:14:03 1999 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: bus.c,v 1.4 1999/03/26 23:41:38 mycroft Exp $  */
+/*     $NetBSD: bus.c,v 1.5 1999/05/25 23:14:09 thorpej Exp $  */
 



Home | Main Index | Thread Index | Old Index