timer problem

Prashant Shah pshah.mumbai at gmail.com
Wed Jul 6 12:52:04 EDT 2011


Hi,

I am test out a simple schedule_timeout() code. When I insert the
module kernel goes in a infinite loop printing this in the log :

Jul  6 22:04:35 ubuntupc kernel: [ 5738.281659] Pid: 0, comm: swapper
Not tainted 2.6.35-22-generic #33-Ubuntu
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281663] Call Trace:
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281671]  [<ffffffff8104d15a>]
dequeue_task_idle+0x3a/0x50
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281679]  [<ffffffff81052d6a>]
dequeue_task+0x9a/0xb0
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281687]  [<ffffffff81052dae>]
deactivate_task+0x2e/0x40
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281693]  [<ffffffff81586ba9>]
schedule+0x4a9/0x830
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281702]  [<ffffffff81008ddb>]
cpu_idle+0xeb/0x110
Jul  6 22:04:35 ubuntupc kernel: [ 5738.281710]  [<ffffffff815832ad>]
start_secondary+0x100/0x102

Any ideas on what is going on ?

---------------------------------- <testmod.c>
----------------------------------

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/timer.h>
#include <linux/delay.h>
#include <linux/sched.h>

struct timer_list tim;

void timfunc(unsigned long data)
{
        printk("hi this is a timer %lu\n", data);
        set_current_state(TASK_INTERRUPTIBLE);
        schedule_timeout(10 * HZ);
        printk("hi again this is a timer after timeout %lu\n", data);
}

static int __init init_testmod(void)
{
        init_timer(&tim);
        tim.expires = jiffies + HZ*5;
        tim.data = 1000;
        tim.function = timfunc;
        add_timer(&tim);
        return 0;
}

static void __exit exit_testmod(void)
{
        printk("end of module\n");
        return;
}

module_init(init_testmod);
module_exit(exit_testmod);
MODULE_LICENSE("GPL");

------------------------------ </testmod.c> ----------------------------------

---------------------------------- <Makefile> ----------------------------------

obj-m += testmod.o

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD       := $(shell pwd)

default:
	        $(MAKE) -C $(KERNELDIR) M=$(PWD)

clean:
	        rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions

depend .depend dep:
	        $(CC) $(CFLAGS) -M *.c > .depend

ifeq (.depend,$(wildcard .depend))
	include .depend
endif
---------------------------------- </Makefile>
----------------------------------



More information about the Kernelnewbies mailing list