Source-Changes-HG archive

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

[src/trunk]: src Add a test to ensure that PAGE_SIZE is available in kernel m...



details:   https://anonhg.NetBSD.org/src/rev/5bc29ddd0c64
branches:  trunk
changeset: 777415:5bc29ddd0c64
user:      jmmv <jmmv%NetBSD.org@localhost>
date:      Fri Feb 17 22:36:50 2012 +0000

description:
Add a test to ensure that PAGE_SIZE is available in kernel modules.
This test reproduces the error condition in PR port-macppc/46041 and
therefore it is an xfail in this particular platform.

diffstat:

 distrib/sets/lists/tests/module.mi |    5 +-
 tests/modules/Makefile             |    6 +-
 tests/modules/k_uvm/Makefile       |   14 ++++
 tests/modules/k_uvm/k_uvm.c        |  113 +++++++++++++++++++++++++++++++++++++
 tests/modules/t_abi_uvm.sh         |   60 +++++++++++++++++++
 5 files changed, 195 insertions(+), 3 deletions(-)

diffs (240 lines):

diff -r 2b35e3c33f2c -r 5bc29ddd0c64 distrib/sets/lists/tests/module.mi
--- a/distrib/sets/lists/tests/module.mi        Fri Feb 17 20:17:38 2012 +0000
+++ b/distrib/sets/lists/tests/module.mi        Fri Feb 17 22:36:50 2012 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: module.mi,v 1.5 2010/08/27 10:01:04 pooka Exp $
+# $NetBSD: module.mi,v 1.6 2012/02/17 22:36:50 jmmv Exp $
 #
 # These are only made for ports doing modules.
 #
@@ -7,6 +7,9 @@
 ./usr/tests/modules/k_helper/k_helper.kmod     tests-sys-tests         atf
 ./usr/tests/modules/k_helper2                  tests-sys-tests         atf
 ./usr/tests/modules/k_helper2/k_helper2.kmod   tests-sys-tests         atf
+./usr/tests/modules/k_uvm                      tests-sys-tests         atf
+./usr/tests/modules/k_uvm/k_uvm.kmod           tests-sys-tests         atf
+./usr/tests/modules/t_abi_uvm                  tests-sys-tests         atf
 ./usr/tests/modules/t_builtin                  tests-sys-tests         atf
 ./usr/tests/modules/t_modctl                   tests-sys-tests         atf
 ./usr/tests/modules/t_modload                  tests-sys-tests         atf
diff -r 2b35e3c33f2c -r 5bc29ddd0c64 tests/modules/Makefile
--- a/tests/modules/Makefile    Fri Feb 17 20:17:38 2012 +0000
+++ b/tests/modules/Makefile    Fri Feb 17 22:36:50 2012 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.8 2010/08/27 09:56:40 pooka Exp $
+# $NetBSD: Makefile,v 1.9 2012/02/17 22:36:50 jmmv Exp $
 
 .include <bsd.own.mk>
 
@@ -14,9 +14,11 @@
 LDADD=         -lprop
 LDADD+=                -lrumpfs_kernfs -lrumpvfs -lrump -lrumpuser -lpthread
 
-TESTS_SH=      t_modload
+TESTS_SH=      t_abi_uvm
+TESTS_SH+=     t_modload
 
 SUBDIR=                k_helper
 SUBDIR+=       k_helper2
+SUBDIR+=       k_uvm
 
 .include <bsd.test.mk>
diff -r 2b35e3c33f2c -r 5bc29ddd0c64 tests/modules/k_uvm/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/modules/k_uvm/Makefile      Fri Feb 17 22:36:50 2012 +0000
@@ -0,0 +1,14 @@
+#      $NetBSD: Makefile,v 1.1 2012/02/17 22:36:50 jmmv Exp $
+
+.include <bsd.own.mk>
+
+KMOD=          k_uvm
+KMODULEDIR=    ${DESTDIR}/${TESTSBASE}/modules/${KMOD}
+
+SRCS=          k_uvm.c
+
+ATFFILE=       no
+NOMAN=         # defined
+
+.include <bsd.test.mk>
+.include <bsd.kmodule.mk>
diff -r 2b35e3c33f2c -r 5bc29ddd0c64 tests/modules/k_uvm/k_uvm.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/modules/k_uvm/k_uvm.c       Fri Feb 17 22:36:50 2012 +0000
@@ -0,0 +1,113 @@
+/*     $NetBSD: k_uvm.c,v 1.1 2012/02/17 22:36:50 jmmv Exp $   */
+/*
+ * Copyright (c) 2012 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
+ * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: k_uvm.c,v 1.1 2012/02/17 22:36:50 jmmv Exp $");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/sysctl.h>
+
+MODULE(MODULE_CLASS_MISC, k_uvm, NULL);
+
+/* --------------------------------------------------------------------- */
+/* Sysctl interface to query information about the module.               */
+/* --------------------------------------------------------------------- */
+
+static struct sysctllog *clogp;
+static int page_size;
+
+#define K_UVM 0x12345678
+#define K_UVM_VALUE 0
+
+SYSCTL_SETUP(sysctl_k_uvm_setup, "sysctl k_uvm subtree setup")
+{
+
+       sysctl_createv(clog, 0, NULL, NULL,
+                      CTLFLAG_PERMANENT,
+                      CTLTYPE_NODE, "k_uvm", NULL,
+                      NULL, 0, NULL, 0,
+                      CTL_VENDOR, K_UVM, CTL_EOL);
+
+       sysctl_createv(clog, 0, NULL, NULL,
+                      CTLFLAG_PERMANENT,
+                      CTLTYPE_INT, "page_size",
+                      SYSCTL_DESCR("Value of PAGE_SIZE"),
+                      NULL, 0, &page_size, 0,
+                      CTL_VENDOR, K_UVM, K_UVM_VALUE, CTL_EOL);
+}
+
+/* --------------------------------------------------------------------- */
+/* Module management.                                                    */
+/* --------------------------------------------------------------------- */
+
+static
+int
+k_uvm_init(prop_dictionary_t props)
+{
+
+       page_size = PAGE_SIZE;
+
+       sysctl_k_uvm_setup(&clogp);
+
+       return 0;
+}
+
+static
+int
+k_uvm_fini(void *arg)
+{
+
+       sysctl_teardown(&clogp);
+
+       return 0;
+}
+
+static
+int
+k_uvm_modcmd(modcmd_t cmd, void *arg)
+{
+       int ret;
+
+       switch (cmd) {
+       case MODULE_CMD_INIT:
+               ret = k_uvm_init(arg);
+               break;
+
+       case MODULE_CMD_FINI:
+               ret = k_uvm_fini(arg);
+               break;
+
+       case MODULE_CMD_STAT:
+       default:
+               ret = ENOTTY;
+       }
+
+       return ret;
+}
diff -r 2b35e3c33f2c -r 5bc29ddd0c64 tests/modules/t_abi_uvm.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/modules/t_abi_uvm.sh        Fri Feb 17 22:36:50 2012 +0000
@@ -0,0 +1,60 @@
+# $NetBSD: t_abi_uvm.sh,v 1.1 2012/02/17 22:36:50 jmmv Exp $
+#
+# Copyright (c) 2012 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+atf_test_case PAGE_SIZE cleanup
+PAGE_SIZE_head() {
+       atf_set "descr" "Ensures that modules have access to PAGE_SIZE"
+       atf_set "require.user" "root"
+}
+PAGE_SIZE_body() {
+       if modload $(atf_get_srcdir)/k_uvm/k_uvm.kmod; then
+               :
+       else
+               case "$(uname -m)" in
+               macppc)
+                       atf_expect_fail "PR port-macppc/46041"
+                       ;;
+               esac
+               atf_fail "Failed to load k_uvm; missing uvmexp_pagesize?"
+       fi
+
+       kernel_pagesize="$(sysctl -n hw.pagesize || echo fail1)"
+       module_pagesize="$(sysctl -n vendor.k_uvm.page_size || echo fail2)"
+       echo "Kernel PAGE_SIZE: ${kernel_pagesize}"
+       echo "Module PAGE_SIZE: ${module_pagesize}"
+       atf_check_equal "${kernel_pagesize}" "${module_pagesize}"
+
+       atf_check -s eq:0 -o empty -e empty modunload k_uvm
+}
+PAGE_SIZE_cleanup() {
+       modunload k_uvm >/dev/null 2>&1 || true
+}
+
+atf_init_test_cases()
+{
+       atf_add_test_case PAGE_SIZE
+}



Home | Main Index | Thread Index | Old Index