[Xenomai-git] Philippe Gerum : drivers/testing: add core heap test module

2018-05-21 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: e4a38086b2fbe4d4696046d27228d38e4a8987d4
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e4a38086b2fbe4d4696046d27228d38e4a8987d4

Author: Philippe Gerum 
Date:   Sun May 13 19:00:50 2018 +0200

drivers/testing: add core heap test module

---

 include/rtdm/uapi/testing.h|   41 ++-
 kernel/drivers/testing/Kconfig |6 +
 kernel/drivers/testing/Makefile|3 +
 kernel/drivers/testing/heapcheck.c |  515 
 4 files changed, 564 insertions(+), 1 deletion(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 06b8f1e..f8207b8 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -87,6 +87,37 @@ struct rttst_swtest_error {
 #define RTTST_RTDM_MAGIC_PRIMARY   0xfefbfefb
 #define RTTST_RTDM_MAGIC_SECONDARY 0xa5b9a5b9
 
+#define RTTST_HEAPCHECK_ZEROOVRD   1
+#define RTTST_HEAPCHECK_SHUFFLE2
+#define RTTST_HEAPCHECK_PATTERN4
+#define RTTST_HEAPCHECK_HOT8
+
+struct rttst_heap_parms {
+   __u64 heap_size;
+   __u64 block_size;
+   int flags;
+   int nrstats;
+};
+
+struct rttst_heap_stats {
+   __u64 heap_size;
+   __u64 user_size;
+   __u64 block_size;
+   __s64 alloc_avg_ns;
+   __s64 alloc_max_ns;
+   __s64 free_avg_ns;
+   __s64 free_max_ns;
+   __u64 maximum_free;
+   __u64 largest_free;
+   int nrblocks;
+   int flags;
+};
+
+struct rttst_heap_stathdr {
+   int nrstats;
+   struct rttst_heap_stats *buf;
+};
+
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
 /*!
@@ -100,6 +131,8 @@ struct rttst_swtest_error {
 #define RTDM_SUBCLASS_SWITCHTEST   2
 /** subclase name: "rtdm" */
 #define RTDM_SUBCLASS_RTDMTEST 3
+/** subclase name: "heapcheck" */
+#define RTDM_SUBCLASS_HEAPCHECK4
 /** @} */
 
 /*!
@@ -153,7 +186,13 @@ struct rttst_swtest_error {
   
 #define RTTST_RTIOC_RTDM_PING_SECONDARY \
_IOR(RTIOC_TYPE_TESTING, 0x43, __u32)
-  
+
+#define RTTST_RTIOC_HEAP_CHECK \
+   _IOR(RTIOC_TYPE_TESTING, 0x44, struct rttst_heap_parms)
+
+#define RTTST_RTIOC_HEAP_STAT_COLLECT \
+   _IOR(RTIOC_TYPE_TESTING, 0x45, int)
+
 /** @} */
 
 #endif /* !_RTDM_UAPI_TESTING_H */
diff --git a/kernel/drivers/testing/Kconfig b/kernel/drivers/testing/Kconfig
index bb44abb..88c043c 100644
--- a/kernel/drivers/testing/Kconfig
+++ b/kernel/drivers/testing/Kconfig
@@ -14,6 +14,12 @@ config XENO_DRIVERS_SWITCHTEST
Kernel-based driver for unit testing context switches and
FPU switches.
 
+config XENO_DRIVERS_HEAPCHECK
+   tristate "Memory allocator test driver"
+   default y
+   help
+   Kernel-based driver for testing Cobalt's memory allocator.
+
 config XENO_DRIVERS_RTDMTEST
depends on m
tristate "RTDM unit tests driver"
diff --git a/kernel/drivers/testing/Makefile b/kernel/drivers/testing/Makefile
index 367a22e..09b0763 100644
--- a/kernel/drivers/testing/Makefile
+++ b/kernel/drivers/testing/Makefile
@@ -2,9 +2,12 @@
 obj-$(CONFIG_XENO_DRIVERS_TIMERBENCH) += xeno_timerbench.o
 obj-$(CONFIG_XENO_DRIVERS_SWITCHTEST) += xeno_switchtest.o
 obj-$(CONFIG_XENO_DRIVERS_RTDMTEST)   += xeno_rtdmtest.o
+obj-$(CONFIG_XENO_DRIVERS_HEAPCHECK)   += xeno_heapcheck.o
 
 xeno_timerbench-y := timerbench.o
 
 xeno_switchtest-y := switchtest.o
 
 xeno_rtdmtest-y := rtdmtest.o
+
+xeno_heapcheck-y := heapcheck.o
diff --git a/kernel/drivers/testing/heapcheck.c 
b/kernel/drivers/testing/heapcheck.c
new file mode 100644
index 000..bed5a05
--- /dev/null
+++ b/kernel/drivers/testing/heapcheck.c
@@ -0,0 +1,515 @@
+/*
+ * Copyright (C) 2018 Philippe Gerum .
+ *
+ * Xenomai is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * Xenomai is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Xenomai; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define complain(__fmt, __args...) \
+   printk(XENO_WARNING "heap check: " __fmt "\n", ##__args)
+
+static struct xnheap test_heap = {
+   .name = "test_heap"
+};
+
+enum pattern {
+   alphabet_series,
+   digit_series,
+   binary_series,
+};
+
+struct chunk {
+   void *ptr;
+   enum pattern pattern;
+};
+
+struct runstats {
+   struct rttst_heap_stats stats;
+   struct runstats *next;
+};
+
+static struct runstats *st

[Xenomai-git] Philippe Gerum : drivers/testing: add core heap test module

2018-05-20 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: f1382fa8534381a644a3b3162978a4c8fb2f1437
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=f1382fa8534381a644a3b3162978a4c8fb2f1437

Author: Philippe Gerum 
Date:   Sun May 13 19:00:50 2018 +0200

drivers/testing: add core heap test module

---

 include/rtdm/uapi/testing.h|   41 ++-
 kernel/drivers/testing/Kconfig |6 +
 kernel/drivers/testing/Makefile|3 +
 kernel/drivers/testing/heapcheck.c |  515 
 4 files changed, 564 insertions(+), 1 deletion(-)

diff --git a/include/rtdm/uapi/testing.h b/include/rtdm/uapi/testing.h
index 06b8f1e..f8207b8 100644
--- a/include/rtdm/uapi/testing.h
+++ b/include/rtdm/uapi/testing.h
@@ -87,6 +87,37 @@ struct rttst_swtest_error {
 #define RTTST_RTDM_MAGIC_PRIMARY   0xfefbfefb
 #define RTTST_RTDM_MAGIC_SECONDARY 0xa5b9a5b9
 
+#define RTTST_HEAPCHECK_ZEROOVRD   1
+#define RTTST_HEAPCHECK_SHUFFLE2
+#define RTTST_HEAPCHECK_PATTERN4
+#define RTTST_HEAPCHECK_HOT8
+
+struct rttst_heap_parms {
+   __u64 heap_size;
+   __u64 block_size;
+   int flags;
+   int nrstats;
+};
+
+struct rttst_heap_stats {
+   __u64 heap_size;
+   __u64 user_size;
+   __u64 block_size;
+   __s64 alloc_avg_ns;
+   __s64 alloc_max_ns;
+   __s64 free_avg_ns;
+   __s64 free_max_ns;
+   __u64 maximum_free;
+   __u64 largest_free;
+   int nrblocks;
+   int flags;
+};
+
+struct rttst_heap_stathdr {
+   int nrstats;
+   struct rttst_heap_stats *buf;
+};
+
 #define RTIOC_TYPE_TESTING RTDM_CLASS_TESTING
 
 /*!
@@ -100,6 +131,8 @@ struct rttst_swtest_error {
 #define RTDM_SUBCLASS_SWITCHTEST   2
 /** subclase name: "rtdm" */
 #define RTDM_SUBCLASS_RTDMTEST 3
+/** subclase name: "heapcheck" */
+#define RTDM_SUBCLASS_HEAPCHECK4
 /** @} */
 
 /*!
@@ -153,7 +186,13 @@ struct rttst_swtest_error {
   
 #define RTTST_RTIOC_RTDM_PING_SECONDARY \
_IOR(RTIOC_TYPE_TESTING, 0x43, __u32)
-  
+
+#define RTTST_RTIOC_HEAP_CHECK \
+   _IOR(RTIOC_TYPE_TESTING, 0x44, struct rttst_heap_parms)
+
+#define RTTST_RTIOC_HEAP_STAT_COLLECT \
+   _IOR(RTIOC_TYPE_TESTING, 0x45, int)
+
 /** @} */
 
 #endif /* !_RTDM_UAPI_TESTING_H */
diff --git a/kernel/drivers/testing/Kconfig b/kernel/drivers/testing/Kconfig
index bb44abb..88c043c 100644
--- a/kernel/drivers/testing/Kconfig
+++ b/kernel/drivers/testing/Kconfig
@@ -14,6 +14,12 @@ config XENO_DRIVERS_SWITCHTEST
Kernel-based driver for unit testing context switches and
FPU switches.
 
+config XENO_DRIVERS_HEAPCHECK
+   tristate "Memory allocator test driver"
+   default y
+   help
+   Kernel-based driver for testing Cobalt's memory allocator.
+
 config XENO_DRIVERS_RTDMTEST
depends on m
tristate "RTDM unit tests driver"
diff --git a/kernel/drivers/testing/Makefile b/kernel/drivers/testing/Makefile
index 367a22e..09b0763 100644
--- a/kernel/drivers/testing/Makefile
+++ b/kernel/drivers/testing/Makefile
@@ -2,9 +2,12 @@
 obj-$(CONFIG_XENO_DRIVERS_TIMERBENCH) += xeno_timerbench.o
 obj-$(CONFIG_XENO_DRIVERS_SWITCHTEST) += xeno_switchtest.o
 obj-$(CONFIG_XENO_DRIVERS_RTDMTEST)   += xeno_rtdmtest.o
+obj-$(CONFIG_XENO_DRIVERS_HEAPCHECK)   += xeno_heapcheck.o
 
 xeno_timerbench-y := timerbench.o
 
 xeno_switchtest-y := switchtest.o
 
 xeno_rtdmtest-y := rtdmtest.o
+
+xeno_heapcheck-y := heapcheck.o
diff --git a/kernel/drivers/testing/heapcheck.c 
b/kernel/drivers/testing/heapcheck.c
new file mode 100644
index 000..bed5a05
--- /dev/null
+++ b/kernel/drivers/testing/heapcheck.c
@@ -0,0 +1,515 @@
+/*
+ * Copyright (C) 2018 Philippe Gerum .
+ *
+ * Xenomai is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published
+ * by the Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version.
+ *
+ * Xenomai is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Xenomai; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define complain(__fmt, __args...) \
+   printk(XENO_WARNING "heap check: " __fmt "\n", ##__args)
+
+static struct xnheap test_heap = {
+   .name = "test_heap"
+};
+
+enum pattern {
+   alphabet_series,
+   digit_series,
+   binary_series,
+};
+
+struct chunk {
+   void *ptr;
+   enum pattern pattern;
+};
+
+struct runstats {
+   struct rttst_heap_stats stats;
+   struct runstats *next;
+};
+
+static struct runstats *st