Module Name:    src
Committed By:   uebayasi
Date:           Wed Apr 28 16:33:47 UTC 2010

Modified Files:
        src/sys/dev [uebayasi-xip]: flash.c
        src/sys/miscfs/genfs [uebayasi-xip]: genfs_io.c
        src/sys/miscfs/specfs [uebayasi-xip]: specdev.h
        src/sys/ufs/ffs [uebayasi-xip]: ffs_vfsops.c

Log Message:
When mounting a block device as XIP, pass registered struct vm_physseg
* as a cookie from the block device to the caller (== mount code).
struct vm_physseg * will be passed to XIP vnode pager
(genfs_do_getpages_xip()), then converted back to paddr_t.

(My future plan is to pass struct vm_physseg * back to the fault handler,
and to pmap_enter() as is.)


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.6 -r1.1.2.7 src/sys/dev/flash.c
cvs rdiff -u -r1.36.2.6 -r1.36.2.7 src/sys/miscfs/genfs/genfs_io.c
cvs rdiff -u -r1.39.2.1 -r1.39.2.2 src/sys/miscfs/specfs/specdev.h
cvs rdiff -u -r1.257.2.3 -r1.257.2.4 src/sys/ufs/ffs/ffs_vfsops.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/dev/flash.c
diff -u src/sys/dev/flash.c:1.1.2.6 src/sys/dev/flash.c:1.1.2.7
--- src/sys/dev/flash.c:1.1.2.6	Wed Apr 28 14:56:13 2010
+++ src/sys/dev/flash.c	Wed Apr 28 16:33:47 2010
@@ -1,4 +1,4 @@
-/*	$Id: flash.c,v 1.1.2.6 2010/04/28 14:56:13 uebayasi Exp $	*/
+/*	$Id: flash.c,v 1.1.2.7 2010/04/28 16:33:47 uebayasi Exp $	*/
 
 /*-
  * Copyright (c) 2010 Tsubai Masanari.  All rights reserved.
@@ -100,8 +100,7 @@
 		if (sc->sc_addr == 0)
 			error = EINVAL;
 		else
-			*(paddr_t *)data = bus_space_mmap(sc->sc_iot,
-			    sc->sc_addr, 0, 0/* XXX prot */, BUS_SPACE_MAP_LINEAR);
+			*(void **)data = sc->sc_phys;
 		break;
 #endif
 

Index: src/sys/miscfs/genfs/genfs_io.c
diff -u src/sys/miscfs/genfs/genfs_io.c:1.36.2.6 src/sys/miscfs/genfs/genfs_io.c:1.36.2.7
--- src/sys/miscfs/genfs/genfs_io.c:1.36.2.6	Tue Mar 23 01:58:13 2010
+++ src/sys/miscfs/genfs/genfs_io.c	Wed Apr 28 16:33:47 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: genfs_io.c,v 1.36.2.6 2010/03/23 01:58:13 uebayasi Exp $	*/
+/*	$NetBSD: genfs_io.c,v 1.36.2.7 2010/04/28 16:33:47 uebayasi Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.36.2.6 2010/03/23 01:58:13 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: genfs_io.c,v 1.36.2.7 2010/04/28 16:33:47 uebayasi Exp $");
 
 #include "opt_device_page.h"
 #include "opt_xip.h"
@@ -812,8 +812,12 @@
 			/* unallocated page is redirected to read-only zero-filled page */
 			phys_addr = uvm_pageofzero_xip_phys_addr();
 		} else {
+			struct vm_physseg *seg;
+
+			seg = devvp->v_physseg;
+			KASSERT(seg != NULL);
 			/* bus_space_mmap cookie -> paddr_t */
-			phys_addr = pmap_phys_address(devvp->v_phys_addr) +
+			phys_addr = pmap_phys_address(seg->start) +
 			    (blkno << dev_bshift) +
 			    (off - (lbn << fs_bshift));
 		}

Index: src/sys/miscfs/specfs/specdev.h
diff -u src/sys/miscfs/specfs/specdev.h:1.39.2.1 src/sys/miscfs/specfs/specdev.h:1.39.2.2
--- src/sys/miscfs/specfs/specdev.h:1.39.2.1	Tue Mar 23 01:58:13 2010
+++ src/sys/miscfs/specfs/specdev.h	Wed Apr 28 16:33:47 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: specdev.h,v 1.39.2.1 2010/03/23 01:58:13 uebayasi Exp $	*/
+/*	$NetBSD: specdev.h,v 1.39.2.2 2010/04/28 16:33:47 uebayasi Exp $	*/
 
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
 	u_int		sd_opencnt;
 	u_int		sd_refcnt;
 	dev_t		sd_rdev;
-	paddr_t		sd_phys_addr;	/* XIP */
+	void		*sd_physseg;	/* XIP */
 } specdev_t;
 
 /*

Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.257.2.3 src/sys/ufs/ffs/ffs_vfsops.c:1.257.2.4
--- src/sys/ufs/ffs/ffs_vfsops.c:1.257.2.3	Tue Mar 23 01:58:14 2010
+++ src/sys/ufs/ffs/ffs_vfsops.c	Wed Apr 28 16:33:47 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vfsops.c,v 1.257.2.3 2010/03/23 01:58:14 uebayasi Exp $	*/
+/*	$NetBSD: ffs_vfsops.c,v 1.257.2.4 2010/04/28 16:33:47 uebayasi Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.257.2.3 2010/03/23 01:58:14 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.257.2.4 2010/04/28 16:33:47 uebayasi Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -1175,16 +1175,16 @@
 	mp->mnt_flag |= MNT_LOCAL;
 	mp->mnt_iflag |= IMNT_MPSAFE;
 #ifdef XIP
-	paddr_t phys_addr = 0;
+	void *physseg = 0;
 	if (mp->mnt_flag & MNT_XIP) {
 		if ((mp->mnt_flag & MNT_RDONLY) == 0)
 			printf("XIP needs read-only mount\n");
 		else {
-			if ((VOP_IOCTL(devvp, DIOCGPHYSADDR, &phys_addr, FREAD,
+			if ((VOP_IOCTL(devvp, DIOCGPHYSADDR, &physseg, FREAD,
 			    cred) == 0) &&
-			    phys_addr != 0) {
+			    physseg != NULL) {
 				mp->mnt_iflag |= IMNT_XIP;
-				devvp->v_phys_addr = phys_addr;	/* XXX */
+				devvp->v_physseg = physseg;
 			} else
 				printf("device doesn't support DIOCGPHYSADDR\n");
 		}

Reply via email to