nitturis-linux / kedr

Automatically exported from code.google.com/p/kedr
0 stars 1 forks source link

Test leak_check.kfree_rcu.01 freeze system #20

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
System becomes completely unresponsible few moments after the test  
leak_check.kfree_rcu.01 begins.

Reproduced on OpenSUSE 13.1, Linux kernel 3.11.25 and 3.18.1(vanilla).
On previous distro-specific kernel (3.11.7 or near) the test has passed 
successfully. Same for many others distro/kernel pairs.

Playing with tests/leak_check/kfree_rcu_module/test_module.c shows that 
problems remains when code for 'foo' allocation/deallocation is removed, but 
disappears when code for 'bar' is removed instead.
Without Leak Check given module is loaded/unloaded without errors.

Original issue reported on code.google.com by tsy...@gmail.com on 19 Jan 2015 at 8:54

GoogleCodeExporter commented 9 years ago
Actually, problem persists only on 3.11.10-25 kernel, which is distro-specific.
Investigation shows that problem is in dump_trace() call inside call_rcu() 
callback.
Simple module demonstrates same behaviour(freeze system while loading):
--
#include <linux/module.h>
#include <linux/rcupdate.h>

MODULE_AUTHOR("Tsyvarev Andrey");
MODULE_LICENSE("GPL");

struct my_struct
{
    struct rcu_head rh;
} s;

int a;

void rcu_func(struct rcu_head* head)
{
    dump_stack();
    a = 1;
}

static int my_module_init(void)
{
    call_rcu(&s.rh, rcu_func);

    return 0;
}
static void my_module_exit(void)
{
    rcu_barrier();
}

module_init(my_module_init);
module_exit(my_module_exit);
--

Original comment by tsy...@gmail.com on 24 Jan 2015 at 1:17