Hi,
I know that ktimer is not yet part of the main tree of the Linux kernel.
However, maybe someone can help me to understand why the following code in a
module makes crash my x86_64.
Many thanks,
Claudio
struct ktimer mytimer;
void myfunction()
{
int i;
}
static int module_insert(void)
{
ktime_t mytime = ktime_set(1,0);
mytimer.function = myfunction;
mytimer.data = NULL;
ktimer_init(&mytimer);
ktimer_start(&mytimer, &mytime, KTIMER_REL);
//...
}
On Thu, 2005-11-17 at 16:39 +0100, Claudio Scordino wrote:
> Hi,
>
> I know that ktimer is not yet part of the main tree of the Linux kernel.
>
> However, maybe someone can help me to understand why the following code in a
> module makes crash my x86_64.
>
> Many thanks,
>
> Claudio
>
>
>
> struct ktimer mytimer;
>
> void myfunction()
> {
> int i;
> }
>
>
> static int module_insert(void)
> {
> ktime_t mytime = ktime_set(1,0);
> mytimer.function = myfunction;
> mytimer.data = NULL;
> ktimer_init(&mytimer);
> ktimer_start(&mytimer, &mytime, KTIMER_REL);
> //...
> }
You must do the ktimer_init first!
So the order must be:
ktimer_init(&mytimer);
mytimer.function = myfunction;
mytimer.data = NULL;
//...
Think of ktimer_init like memset(...) (since it actually does a memset)
You wouldn't do;
struct myvar;
myvar.my_field = 1;
memset(&myvar, 0, sizeof(myvar));
Right ;-)
-- Steve
Hi,
I know that ktimer is not yet part of the main tree of the Linux
kernel...
I need an high precision timer in a kernel module for 2.6.14, so I chose to
use ktimers.
My timer must be stopped and reprogrammed very frequently.
This is how I initialize the timer:
struct ktimer mytimer;
ktimer_init(&mytimer);
mytimer.function = myfunction;
mytimer.data = NULL;
This is how I stop the timer:
ktimer_cancel(&mytimer);
This is how I restart the timer:
ktime_t mytime = ktime_set(...,...);
ktimer_start(&mytimer, &mytime, KTIMER_REL)
However, the timer never fires. I checked the return value of the start and
it's correct (0 = success). Any idea of why the timer does not fire ?
I tried also by directly using ktimer_restart instead of ktimer_cancel +
ktimer_start, but the timer does not fire either.
The module has also another ktimer which works perfectly...
Many thanks for your help,
Claudio
On Mon, 2006-01-16 at 09:45 -0500, Claudio Scordino wrote:
> Hi,
>
> I know that ktimer is not yet part of the main tree of the Linux
> kernel...
And will never be. ktimers have been superseeded by hrtimers. The base
patch is merged into Linus tree and the high resolution patch can be
found here:
http://www.tglx.de/projects/hrtimers/2.6.15/
> However, the timer never fires. I checked the return value of the start and
> it's correct (0 = success). Any idea of why the timer does not fire ?
Have you checked the expiry value after you called (re)start? It might
be far in the future.
tglx