mirror of
https://github.com/torvalds/linux.git
synced 2026-10-07 22:37:45 -04:00
test_sort.c performs array-based and linked list sort test. Code allows to compile either as a loadable modules or builtin into the kernel. Current code is not allow to unload the test_sort.ko module after successful completion. This patch adds support to unload the "test_sort.ko" module by adding module_exit support. Previous patch was implemented auto unload support by returning -EAGAIN from module_init() function on successful case, but this approach is not ideal. The auto-unload might seem like a nice optimization, but it encourages inconsistent behaviour. And behaviour that is different from all other normal modules. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Pravin Shedge <[email protected]> Cc: Kostenzer Felix <[email protected]> Cc: Andy Shevchenko <[email protected]> Cc: Geert Uytterhoeven <[email protected]> Cc: Paul Gortmaker <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
50 lines
829 B
C
50 lines
829 B
C
#include <linux/sort.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/module.h>
|
|
|
|
/* a simple boot-time regression test */
|
|
|
|
#define TEST_LEN 1000
|
|
|
|
static int __init cmpint(const void *a, const void *b)
|
|
{
|
|
return *(int *)a - *(int *)b;
|
|
}
|
|
|
|
static int __init test_sort_init(void)
|
|
{
|
|
int *a, i, r = 1, err = -ENOMEM;
|
|
|
|
a = kmalloc_array(TEST_LEN, sizeof(*a), GFP_KERNEL);
|
|
if (!a)
|
|
return err;
|
|
|
|
for (i = 0; i < TEST_LEN; i++) {
|
|
r = (r * 725861) % 6599;
|
|
a[i] = r;
|
|
}
|
|
|
|
sort(a, TEST_LEN, sizeof(*a), cmpint, NULL);
|
|
|
|
err = -EINVAL;
|
|
for (i = 0; i < TEST_LEN-1; i++)
|
|
if (a[i] > a[i+1]) {
|
|
pr_err("test has failed\n");
|
|
goto exit;
|
|
}
|
|
err = 0;
|
|
pr_info("test passed\n");
|
|
exit:
|
|
kfree(a);
|
|
return err;
|
|
}
|
|
|
|
static void __exit test_sort_exit(void)
|
|
{
|
|
}
|
|
|
|
module_init(test_sort_init);
|
|
module_exit(test_sort_exit);
|
|
|
|
MODULE_LICENSE("GPL");
|