[Xenomai-git] Philippe Gerum : drivers/testing: add core heap test module
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
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