Path: csiph.com!news.mixmin.net!aioe.org!bofh.it!news.nic.it!robomod From: Felix Kostenzer Newsgroups: linux.kernel Subject: [PATCH] lib: add CONFIG_TEST_SORT to enable self-test of sort() Date: Tue, 13 Dec 2016 22:00:02 +0100 Message-ID: X-Greylist: delayed 421 seconds by postgrey-1.27 at vger.kernel.org; Tue, 13 Dec 2016 15:50:44 EST Thread-Topic: [PATCH] lib: add CONFIG_TEST_SORT to enable self-test of sort() Thread-Index: AQHSVYFquz/4+tbyZ0Sg3fL/Xv/++Q== Accept-Language: en-GB, en-US Content-Language: en-US Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=live.at; X-Incomingtopheadermarker: OriginalChecksum:59702EA4FED20945A61A706792997E718B31F5932F9AFAB599DDD3D09F6C4C45;UpperCasedChecksum:612143AB57D82FA1C1154A3CCB2AF00E6EFF5C2A979021DAF42F77E363619354;SizeAsReceived:7187;Count:35 X-Ms-Exchange-Messagesentrepresentingtype: 1 X-Incomingheadercount: 35 X-Microsoft-Exchange-Diagnostics: 1;VE1EUR02HT183;5:HQwMzeeSAWTJSY3xm30BOm6u/ItQvvdPgVUrE5DPUAXpKtyts4xxWRSwPN6M+SNFOp2bJV8uvmmjRVMb+lUUj+XvCeMDKILpZa1fwuAsKxc/HdGr9qfrvWdhcfTRkrNzS3xTm/FQ6KjbrgRC2n5hfVxIfh92gUhviW20dkJkSR4=;24:odxd9R3pxM61JPzs94OBf5OcFnMuV28XyS+zIGZxKU2Ibr/Kra3hKW6oNi5foLIY9L45dHHyWe8A2BEo2Nqrhq2u2c9ZWTUUPiQPoo+gbf4=;7:RveiCkF645DuKOmFTzsjDRf6IdnzH3Z4AKifgy0n+0MgnU2nmv2+dIfQKXxIkq+24MrnSlJbc0RdcWWWk27nKWt6otcjWkfLWxRjmOrkTEanExOYM02vrxra4A10aaeEzYNdOPKOV23IZR02YlT8ujqkUUIMN64oeBnBL/kBa6fUfLrVYMZmwOaco6brp52ky2BJ+s2wO3j/T8D6doWg63evDstzIzhHJpD7VAMA//HtyEosUnRdlpQZUwbDu1vDX9ZWAaL1JfM0psqrIgciZ2pOqe4sRAQCT2eBrGeb08zZBJKmS7Hyuj5KLvhU34suMshhGe0RfG0zu21F7x4KGQNT+DVpdPk7+4lDTZ/lOG1d61QRPaYgakS1BSUnTJxI6/ecHOZ8ajYoHwK6cPBFJFSsRwPPn6JS4G+NIlm9vJAkd8IRZxp893HMScvWizeX9yDGn8YOh2s3Dawt31cbJg== X-Forefront-Antispam-Report: EFV:NLI;SFV:NSPM;SFS:(10019020)(98900003);DIR:OUT;SFP:1102;SCL:1;SRVR:VE1EUR02HT183;H:HE1PR09MB0394.eurprd09.prod.outlook.com;FPR:;SPF:None;LANG:en; X-Ms-Office365-Filtering-Correlation-ID: 5b718ab7-67f2-4891-7d4f-08d423988ca7 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(1601124038)(5061506293)(5061507293)(1603103113)(1601125047);SRVR:VE1EUR02HT183; X-Exchange-Antispam-Report-Cfa-Test: BCL:0;PCL:0;RULEID:(432015012)(82015046);SRVR:VE1EUR02HT183;BCL:0;PCL:0;RULEID:;SRVR:VE1EUR02HT183; X-Forefront-Prvs: 01559F388D Spamdiagnosticoutput: 1:99 Spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-Originatororg: outlook.com X-Ms-Exchange-Crosstenant-Originalarrivaltime: 13 Dec 2016 20:42:27.9689 (UTC) X-Ms-Exchange-Crosstenant-Fromentityheader: Internet X-Ms-Exchange-Crosstenant-ID: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-Ms-Exchange-Transport-Crosstenantheadersstamped: VE1EUR02HT183 X-Originalarrivaltime: 13 Dec 2016 20:42:48.0122 (UTC) FILETIME=[76E7F1A0:01D25581] Sender: robomod@news.nic.it List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Approved: robomod@news.nic.it Lines: 112 Organization: linux.* mail to news gateway X-Original-Cc: Felix Kostenzer X-Original-Date: Tue, 13 Dec 2016 20:42:27 +0000 X-Original-Message-ID: X-Original-Sender: linux-kernel-owner@vger.kernel.org Xref: csiph.com linux.kernel:1541523 From: Kostenzer Felix along with the addition made to Kconfig.debug, the prior existing but permanently disabled test function has been slightly refactored. patch has been tested using QEMU 2.1.2 with a .config obtained through 'make defconfig' (x86_64) and manually enabling the option. Signed-off-by: Kostenzer Felix --- lib/Kconfig.debug | 8 ++++++++ lib/sort.c | 41 ++++++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index a6c8db1..3f6b0ed 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -1718,6 +1718,14 @@ config TEST_LIST_SORT If unsure, say N. +config TEST_SORT + bool "Array-based sort test" + depends on DEBUG_KERNEL + help + This option enables the self-test function of 'sort()' at boot. + + If unsure, say N. + config KPROBES_SANITY_TEST bool "Kprobes sanity tests" depends on DEBUG_KERNEL diff --git a/lib/sort.c b/lib/sort.c index fc20df4..a9b156e 100644 --- a/lib/sort.c +++ b/lib/sort.c @@ -4,6 +4,8 @@ * Jan 23 2005 Matt Mackall */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include @@ -102,41 +104,46 @@ void sort(void *base, size_t num, size_t size, EXPORT_SYMBOL(sort); -#if 0 +#ifdef CONFIG_TEST_SORT #include +#include /* a simple boot-time regression test */ -int cmpint(const void *a, const void *b) +#define TEST_LEN 1000 + +static int __init cmpint(const void *a, const void *b) { return *(int *)a - *(int *)b; } -static int sort_test(void) +static int __init test_sort_init(void) { - int *a, i, r = 1; - - a = kmalloc(1000 * sizeof(int), GFP_KERNEL); - BUG_ON(!a); + int *a, i, r = 1, err = -ENOMEM; - printk("testing sort()\n"); + a = kmalloc_array(TEST_LEN, sizeof(*a), GFP_KERNEL); + if (!a) + return err; - for (i = 0; i < 1000; i++) { + for (i = 0; i < TEST_LEN; i++) { r = (r * 725861) % 6599; a[i] = r; } - sort(a, 1000, sizeof(int), cmpint, NULL); + sort(a, TEST_LEN, sizeof(*a), cmpint, NULL); - for (i = 0; i < 999; i++) + err = -EINVAL; + for (i = 0; i < TEST_LEN-1; i++) if (a[i] > a[i+1]) { - printk("sort() failed!\n"); - break; + pr_err("test has failed\n"); + goto exit; } - + err = 0; + pr_info("test passed\n"); +exit: kfree(a); - - return 0; + return err; } -module_init(sort_test); +module_init(test_sort_init); +MODULE_LICENSE("GPL"); #endif -- 2.1.4