diff options
Diffstat (limited to 'lib/test_printf.c')
| -rw-r--r-- | lib/test_printf.c | 46 | 
1 files changed, 29 insertions, 17 deletions
| diff --git a/lib/test_printf.c b/lib/test_printf.c index 659b6cc0d483..93da0a5000ec 100644 --- a/lib/test_printf.c +++ b/lib/test_printf.c @@ -21,6 +21,8 @@  #include <linux/gfp.h>  #include <linux/mm.h> +#include "../tools/testing/selftests/kselftest_module.h" +  #define BUF_SIZE 256  #define PAD_SIZE 16  #define FILL_CHAR '$' @@ -239,6 +241,7 @@ plain_format(void)  #define PTR ((void *)0x456789ab)  #define PTR_STR "456789ab"  #define PTR_VAL_NO_CRNG "(ptrval)" +#define ZEROS ""  static int __init  plain_format(void) @@ -268,7 +271,6 @@ plain_hash_to_buffer(const void *p, char *buf, size_t len)  	return 0;  } -  static int __init  plain_hash(void)  { @@ -326,6 +328,24 @@ test_hashed(const char *fmt, const void *p)  }  static void __init +null_pointer(void) +{ +	test_hashed("%p", NULL); +	test(ZEROS "00000000", "%px", NULL); +	test("(null)", "%pE", NULL); +} + +#define PTR_INVALID ((void *)0x000000ab) + +static void __init +invalid_pointer(void) +{ +	test_hashed("%p", PTR_INVALID); +	test(ZEROS "000000ab", "%px", PTR_INVALID); +	test("(efault)", "%pE", PTR_INVALID); +} + +static void __init  symbol_ptr(void)  {  } @@ -462,8 +482,7 @@ struct_rtc_time(void)  		.tm_year = 118,  	}; -	test_hashed("%pt", &tm); - +	test("(%ptR?)", "%pt", &tm);  	test("2018-11-26T05:35:43", "%ptR", &tm);  	test("0118-10-26T05:35:43", "%ptRr", &tm);  	test("05:35:43|2018-11-26", "%ptRt|%ptRd", &tm, &tm); @@ -481,14 +500,14 @@ static void __init  large_bitmap(void)  {  	const int nbits = 1 << 16; -	unsigned long *bits = kcalloc(BITS_TO_LONGS(nbits), sizeof(long), GFP_KERNEL); +	unsigned long *bits = bitmap_zalloc(nbits, GFP_KERNEL);  	if (!bits)  		return;  	bitmap_set(bits, 1, 20);  	bitmap_set(bits, 60000, 15);  	test("1-20,60000-60014", "%*pbl", nbits, bits); -	kfree(bits); +	bitmap_free(bits);  }  static void __init @@ -572,6 +591,8 @@ static void __init  test_pointer(void)  {  	plain(); +	null_pointer(); +	invalid_pointer();  	symbol_ptr();  	kernel_ptr();  	struct_resource(); @@ -590,12 +611,11 @@ test_pointer(void)  	flags();  } -static int __init -test_printf_init(void) +static void __init selftest(void)  {  	alloced_buffer = kmalloc(BUF_SIZE + 2*PAD_SIZE, GFP_KERNEL);  	if (!alloced_buffer) -		return -ENOMEM; +		return;  	test_buffer = alloced_buffer + PAD_SIZE;  	test_basic(); @@ -604,16 +624,8 @@ test_printf_init(void)  	test_pointer();  	kfree(alloced_buffer); - -	if (failed_tests == 0) -		pr_info("all %u tests passed\n", total_tests); -	else -		pr_warn("failed %u out of %u tests\n", failed_tests, total_tests); - -	return failed_tests ? -EINVAL : 0;  } -module_init(test_printf_init); - +KSTM_MODULE_LOADERS(test_printf);  MODULE_AUTHOR("Rasmus Villemoes <[email protected]>");  MODULE_LICENSE("GPL"); |