Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Jan 2011 22:58:28 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r217515 - in head/sys: amd64/amd64 amd64/include arm/arm arm/include conf dev/mem i386/i386 i386/include ia64/include mips/include modules/mem powerpc/include powerpc/powerpc sparc64/in...
Message-ID:  <201101172258.p0HMwSCM015552@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Mon Jan 17 22:58:28 2011
New Revision: 217515
URL: http://svn.freebsd.org/changeset/base/217515

Log:
  Add reader/writer lock around mem_range_attr_get() and mem_range_attr_set().
  Compile sys/dev/mem/memutil.c for all supported platforms and remove now
  unnecessary dev_mem_md_init().  Consistently define mem_range_softc from
  mem.c for all platforms.  Add missing #include guards for machine/memdev.h
  and sys/memrange.h.  Clean up some nearby style(9) nits.
  
  MFC after:	1 month

Modified:
  head/sys/amd64/amd64/machdep.c
  head/sys/amd64/amd64/mem.c
  head/sys/amd64/include/memdev.h
  head/sys/arm/arm/mem.c
  head/sys/arm/include/memdev.h
  head/sys/conf/files
  head/sys/conf/files.amd64
  head/sys/conf/files.i386
  head/sys/conf/files.pc98
  head/sys/conf/files.powerpc
  head/sys/dev/mem/memdev.c
  head/sys/dev/mem/memutil.c
  head/sys/i386/i386/machdep.c
  head/sys/i386/i386/mem.c
  head/sys/i386/include/memdev.h
  head/sys/ia64/include/memdev.h
  head/sys/mips/include/memdev.h
  head/sys/modules/mem/Makefile
  head/sys/powerpc/include/memdev.h
  head/sys/powerpc/powerpc/mem.c
  head/sys/sparc64/include/memdev.h
  head/sys/sun4v/include/memdev.h
  head/sys/sys/memrange.h

Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/amd64/amd64/machdep.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -74,7 +74,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/linker.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
-#include <sys/memrange.h>
 #include <sys/msgbuf.h>
 #include <sys/mutex.h>
 #include <sys/pcpu.h>
@@ -196,8 +195,6 @@ struct pcpu __pcpu[MAXCPU];
 
 struct mtx icu_lock;
 
-struct mem_range_softc mem_range_softc;
-
 struct mtx dt_lock;	/* lock for GDT and LDT */
 
 static void

Modified: head/sys/amd64/amd64/mem.c
==============================================================================
--- head/sys/amd64/amd64/mem.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/amd64/amd64/mem.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$");
  */
 MALLOC_DEFINE(M_MEMDESC, "memdesc", "memory range descriptors");
 
+struct mem_range_softc mem_range_softc;
+
 /* ARGSUSED */
 int
 memrw(struct cdev *dev, struct uio *uio, int flags)
@@ -214,10 +216,3 @@ memioctl(struct cdev *dev __unused, u_lo
 	}
 	return (error);
 }
-
-void
-dev_mem_md_init(void)
-{
-	if (mem_range_softc.mr_op != NULL)
-		mem_range_softc.mr_op->init(&mem_range_softc);
-}

Modified: head/sys/amd64/include/memdev.h
==============================================================================
--- head/sys/amd64/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/amd64/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 d_ioctl_t	memioctl;
 d_mmap_t	memmmap;
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/arm/arm/mem.c
==============================================================================
--- head/sys/arm/arm/mem.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/arm/arm/mem.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -70,6 +70,8 @@ __FBSDID("$FreeBSD$");
  */
 MALLOC_DEFINE(M_MEMDESC, "memdesc", "memory range descriptors");
 
+struct mem_range_softc mem_range_softc;
+
 /* ARGSUSED */
 int
 memrw(struct cdev *dev, struct uio *uio, int flags)

Modified: head/sys/arm/include/memdev.h
==============================================================================
--- head/sys/arm/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/arm/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 d_mmap_t	memmmap;
 #define		memioctl	(d_ioctl_t *)NULL
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/conf/files
==============================================================================
--- head/sys/conf/files	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/conf/files	Mon Jan 17 22:58:28 2011	(r217515)
@@ -1292,6 +1292,7 @@ dev/mcd/mcd.c			optional mcd isa nowerro
 dev/mcd/mcd_isa.c		optional mcd isa nowerror
 dev/md/md.c			optional md
 dev/mem/memdev.c		optional mem
+dev/mem/memutil.c		optional mem
 dev/mfi/mfi.c			optional mfi
 dev/mfi/mfi_debug.c		optional mfi
 dev/mfi/mfi_pci.c		optional mfi pci

Modified: head/sys/conf/files.amd64
==============================================================================
--- head/sys/conf/files.amd64	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/conf/files.amd64	Mon Jan 17 22:58:28 2011	(r217515)
@@ -206,7 +206,6 @@ dev/hwpmc/hwpmc_x86.c		optional	hwpmc
 dev/kbd/kbd.c			optional	atkbd | sc | ukbd
 dev/lindev/full.c		optional	lindev
 dev/lindev/lindev.c		optional	lindev
-dev/mem/memutil.c		optional	mem
 dev/nfe/if_nfe.c		optional	nfe pci
 dev/nve/if_nve.c		optional	nve pci
 dev/nvram/nvram.c		optional	nvram isa

Modified: head/sys/conf/files.i386
==============================================================================
--- head/sys/conf/files.i386	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/conf/files.i386	Mon Jan 17 22:58:28 2011	(r217515)
@@ -209,7 +209,6 @@ dev/kbd/kbd.c			optional atkbd | sc | uk
 dev/le/if_le_isa.c		optional le isa
 dev/lindev/full.c		optional lindev
 dev/lindev/lindev.c		optional lindev
-dev/mem/memutil.c		optional mem
 dev/mse/mse.c			optional mse
 dev/mse/mse_isa.c		optional mse isa
 dev/nfe/if_nfe.c		optional nfe pci

Modified: head/sys/conf/files.pc98
==============================================================================
--- head/sys/conf/files.pc98	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/conf/files.pc98	Mon Jan 17 22:58:28 2011	(r217515)
@@ -110,7 +110,6 @@ dev/kbd/kbd.c			optional pckbd | sc | uk
 dev/le/if_le_cbus.c		optional le isa
 dev/lindev/full.c		optional lindev
 dev/lindev/lindev.c		optional lindev
-dev/mem/memutil.c		optional mem
 dev/mse/mse.c			optional mse
 dev/mse/mse_cbus.c		optional mse isa
 dev/sbni/if_sbni.c		optional sbni

Modified: head/sys/conf/files.powerpc
==============================================================================
--- head/sys/conf/files.powerpc	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/conf/files.powerpc	Mon Jan 17 22:58:28 2011	(r217515)
@@ -30,7 +30,6 @@ dev/hwpmc/hwpmc_powerpc.c	optional	hwpmc
 dev/iicbus/ds1775.c		optional	ds1775 powermac
 dev/iicbus/max6690.c		optional	max6690 powermac
 dev/kbd/kbd.c			optional	sc
-dev/mem/memutil.c		optional	mem
 dev/ofw/openfirm.c		optional	aim | fdt
 dev/ofw/openfirmio.c		optional	aim | fdt
 dev/ofw/ofw_bus_if.m		optional	aim | fdt

Modified: head/sys/dev/mem/memdev.c
==============================================================================
--- head/sys/dev/mem/memdev.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/dev/mem/memdev.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -34,6 +34,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/kernel.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
+#include <sys/memrange.h>
 #include <sys/module.h>
 #include <sys/mutex.h>
 #include <sys/proc.h>
@@ -80,7 +81,7 @@ mem_modevent(module_t mod __unused, int 
 	case MOD_LOAD:
 		if (bootverbose)
 			printf("mem: <memory>\n");
-		dev_mem_md_init(); /* Machine dependant bit */
+		mem_range_init();
 		memdev = make_dev(&mem_cdevsw, CDEV_MINOR_MEM,
 			UID_ROOT, GID_KMEM, 0640, "mem");
 		kmemdev = make_dev(&mem_cdevsw, CDEV_MINOR_KMEM,
@@ -88,6 +89,7 @@ mem_modevent(module_t mod __unused, int 
 		break;
 
 	case MOD_UNLOAD:
+		mem_range_destroy();
 		destroy_dev(memdev);
 		destroy_dev(kmemdev);
 		break;

Modified: head/sys/dev/mem/memutil.c
==============================================================================
--- head/sys/dev/mem/memutil.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/dev/mem/memutil.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -28,35 +28,64 @@
 __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/memrange.h>
+#include <sys/rwlock.h>
 #include <sys/systm.h>
 
+static struct rwlock	mr_lock;
+
 /*
  * Implementation-neutral, kernel-callable functions for manipulating
  * memory range attributes.
  */
+void
+mem_range_init(void)
+{
+
+	if (mem_range_softc.mr_op == NULL)
+		return;
+	rw_init(&mr_lock, "memrange");
+	mem_range_softc.mr_op->init(&mem_range_softc);
+}
+
+void
+mem_range_destroy(void)
+{
+
+	if (mem_range_softc.mr_op == NULL)
+		return;
+	rw_destroy(&mr_lock);
+}
+
 int
 mem_range_attr_get(struct mem_range_desc *mrd, int *arg)
 {
-	/* can we handle this? */
+	int nd;
+
 	if (mem_range_softc.mr_op == NULL)
 		return (EOPNOTSUPP);
-
-	if (*arg == 0)
+	nd = *arg;
+	rw_rlock(&mr_lock);
+	if (nd == 0)
 		*arg = mem_range_softc.mr_ndesc;
 	else
-		bcopy(mem_range_softc.mr_desc, mrd,
-			(*arg) * sizeof(struct mem_range_desc));
+		bcopy(mem_range_softc.mr_desc, mrd, nd * sizeof(*mrd));
+	rw_runlock(&mr_lock);
 	return (0);
 }
 
 int
 mem_range_attr_set(struct mem_range_desc *mrd, int *arg)
 {
-	/* can we handle this? */
+	int ret;
+
 	if (mem_range_softc.mr_op == NULL)
 		return (EOPNOTSUPP);
-
-	return (mem_range_softc.mr_op->set(&mem_range_softc, mrd, arg));
+	rw_wlock(&mr_lock);
+	ret = mem_range_softc.mr_op->set(&mem_range_softc, mrd, arg);
+	rw_wunlock(&mr_lock);
+	return (ret);
 }

Modified: head/sys/i386/i386/machdep.c
==============================================================================
--- head/sys/i386/i386/machdep.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/i386/i386/machdep.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -73,7 +73,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/linker.h>
 #include <sys/lock.h>
 #include <sys/malloc.h>
-#include <sys/memrange.h>
 #include <sys/msgbuf.h>
 #include <sys/mutex.h>
 #include <sys/pcpu.h>
@@ -239,8 +238,6 @@ struct pcpu __pcpu[MAXCPU];
 
 struct mtx icu_lock;
 
-struct mem_range_softc mem_range_softc;
-
 static void
 cpu_startup(dummy)
 	void *dummy;

Modified: head/sys/i386/i386/mem.c
==============================================================================
--- head/sys/i386/i386/mem.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/i386/i386/mem.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -72,10 +72,11 @@ __FBSDID("$FreeBSD$");
  */
 MALLOC_DEFINE(M_MEMDESC, "memdesc", "memory range descriptors");
 
+struct mem_range_softc mem_range_softc;
+
 static struct sx memsxlock;
 SX_SYSINIT(memsxlockinit, &memsxlock, "/dev/mem lock");
 
-
 /* ARGSUSED */
 int
 memrw(struct cdev *dev, struct uio *uio, int flags)
@@ -233,10 +234,3 @@ memioctl(struct cdev *dev __unused, u_lo
 	}
 	return (error);
 }
-
-void
-dev_mem_md_init(void)
-{
-	if (mem_range_softc.mr_op != NULL)
-		mem_range_softc.mr_op->init(&mem_range_softc);
-}

Modified: head/sys/i386/include/memdev.h
==============================================================================
--- head/sys/i386/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/i386/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 d_ioctl_t	memioctl;
 d_mmap_t	memmmap;
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/ia64/include/memdev.h
==============================================================================
--- head/sys/ia64/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/ia64/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 #define		memioctl	(d_ioctl_t *)NULL
 d_mmap_t	memmmap;
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/mips/include/memdev.h
==============================================================================
--- head/sys/mips/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/mips/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -27,6 +27,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -35,4 +38,4 @@ d_read_t	memrw;
 #define		memioctl	(d_ioctl_t *)NULL
 d_mmap_t	memmmap;
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/modules/mem/Makefile
==============================================================================
--- head/sys/modules/mem/Makefile	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/modules/mem/Makefile	Mon Jan 17 22:58:28 2011	(r217515)
@@ -5,10 +5,7 @@
 .PATH: ${.CURDIR}/../../${MACHINE_CPUARCH}/${MACHINE_CPUARCH}
 
 KMOD=	mem
-SRCS=	memdev.c mem.c
-.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "powerpc"
-SRCS+=	memutil.c
-.endif
+SRCS=	mem.c memdev.c memutil.c
 .if ${MACHINE_CPUARCH} == "i386"
 SRCS+=	i686_mem.c k6_mem.c
 .endif

Modified: head/sys/powerpc/include/memdev.h
==============================================================================
--- head/sys/powerpc/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/powerpc/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 d_ioctl_t	memioctl;
 d_mmap_t	memmmap;
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/powerpc/powerpc/mem.c
==============================================================================
--- head/sys/powerpc/powerpc/mem.c	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/powerpc/powerpc/mem.c	Mon Jan 17 22:58:28 2011	(r217515)
@@ -82,7 +82,7 @@ static struct mem_range_ops ppc_mem_rang
 };
 struct mem_range_softc mem_range_softc = {
 	&ppc_mem_range_ops,
-	0, 0, 0
+	0, 0, NULL
 }; 
 
 /* ARGSUSED */
@@ -225,12 +225,6 @@ memmmap(struct cdev *dev, vm_ooffset_t o
 	return (0);
 }
 
-void
-dev_mem_md_init(void)
-{
-	mem_range_softc.mr_op->init(&mem_range_softc);
-}
-
 static void
 ppc_mrinit(struct mem_range_softc *sc)
 {
@@ -334,4 +328,3 @@ memioctl(struct cdev *dev __unused, u_lo
 	}
 	return (error);
 }
-

Modified: head/sys/sparc64/include/memdev.h
==============================================================================
--- head/sys/sparc64/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/sparc64/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 #define		memioctl	(d_ioctl_t *)NULL
 #define		memmmap		(d_mmap_t *)NULL
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/sun4v/include/memdev.h
==============================================================================
--- head/sys/sun4v/include/memdev.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/sun4v/include/memdev.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -26,6 +26,9 @@
  * $FreeBSD$
  */
 
+#ifndef _MACHINE_MEMDEV_H_
+#define	_MACHINE_MEMDEV_H_
+
 #define	CDEV_MINOR_MEM	0
 #define	CDEV_MINOR_KMEM	1
 
@@ -34,4 +37,4 @@ d_read_t	memrw;
 #define		memioctl	(d_ioctl_t *)NULL
 #define		memmmap		(d_mmap_t *)NULL
 
-void		dev_mem_md_init(void);
+#endif /* _MACHINE_MEMDEV_H_ */

Modified: head/sys/sys/memrange.h
==============================================================================
--- head/sys/sys/memrange.h	Mon Jan 17 20:32:17 2011	(r217514)
+++ head/sys/sys/memrange.h	Mon Jan 17 22:58:28 2011	(r217515)
@@ -4,6 +4,9 @@
  * $FreeBSD$
  */
 
+#ifndef _SYS_MEMRANGE_H_
+#define	_SYS_MEMRANGE_H_
+
 /* Memory range attributes */
 #define MDF_UNCACHEABLE		(1<<0)	/* region not cached */
 #define MDF_WRITECOMBINE	(1<<1)	/* region supports "write combine" action */
@@ -65,7 +68,12 @@ struct mem_range_softc 
 
 extern struct mem_range_softc mem_range_softc;
 
-extern int mem_range_attr_get(struct mem_range_desc *mrd, int *arg);
-extern int mem_range_attr_set(struct mem_range_desc *mrd, int *arg);
+extern void	mem_range_init(void);
+extern void	mem_range_destroy(void);
+
+extern int	mem_range_attr_get(struct mem_range_desc *mrd, int *arg);
+extern int	mem_range_attr_set(struct mem_range_desc *mrd, int *arg);
+
+#endif /* _KERNEL */
 
-#endif
+#endif /* _SYS_MEMRANGE_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101172258.p0HMwSCM015552>