Kernel timers infrastructure
"Marc Lörner"
loerner at gmx.de
Mon Sep 12 11:17:45 UTC 2011
Hello again,
it seems that uprintf needs a tty to put output to.
I tried your code with printf instead of uprintf and got
output to root-console ttyu0 every second.
HTH,
Marc
-------- Original-Nachricht --------
> Datum: Mon, 12 Sep 2011 11:58:37 +0200
> Von: Filippo Sironi <filippo.sironi at gmail.com>
> An: "Marc Lörner" <loerner at gmx.de>
> CC: freebsd-hackers at freebsd.org
> Betreff: Re: Kernel timers infrastructure
> This is how I modified the module:
> --------------------------------------------------------------------------------
> #include <sys/param.h>
> #include <sys/kernel.h>
> #include <sys/module.h>
> #include <sys/systm.h>
>
> static struct callout timer_callout;
>
> static void
> timer_function(void *arg)
> {
> uprintf("timer_function() begin\n");
> if (callout_reset(&timer_callout, hz, timer_function, NULL))
> uprintf("callout_reset() != 0\n");
> uprintf("Hello, World!\n");
> uprintf("timer_function() end\n");
> }
>
> static int
> timer_event_handler(struct module *mod, int cmd, void *arg)
> {
> uprintf("timer_event_handler() begin\n");
> switch (cmd) {
> case MOD_LOAD:
> uprintf("MOD_LOAD\n");
> callout_init(&timer_callout, CALLOUT_MPSAFE);
> if (callout_reset(&timer_callout, hz, timer_function, NULL))
> uprintf("callout_reset() != 0\n");
> break;
> case MOD_UNLOAD:
> uprintf("MOD_UNLOAD\n");
> callout_drain(&timer_callout);
> break;
> case MOD_SHUTDOWN:
> uprintf("MOD_SHUTDOWN\n");
> break;
> default:
> return EOPNOTSUPP;
> }
> uprintf("timer_event_handler() end\n");
> return 0;
> }
>
> static struct moduledata timer_moduledata = {
> "timer",
> timer_event_handler,
> NULL
> };
>
> DECLARE_MODULE(timer, timer_moduledata, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
> --------------------------------------------------------------------------------
> and this is the output of load and unload operations:
> freebsd# kldload ./timer.ko
> timer_event_handler() begin
> MOD_LOAD
> timer_event_handler() end
> freebsd# kldunload timer.ko
> timer_event_handler() begin
> timer_event_handler() begin
> MOD_UNLOAD
> timer_event_handler() end
>
> I don't know why "timer_event_handler() begin" is printed twice on unload
> but the timer doesn't start... and of course it is set on 1 second but I
> left the module load for 1 minute or so just to be sure. ;)
>
> Thanks again for your help,
> Filippo
>
> On 12/set/2011, at 11:48, Marc Lörner wrote:
>
> > Hello,
> > what about changing order of callout_reset and uprintf?
> > And your timeout isn't 1minute, it's one second!
> >
> > Regards,
> > Marc
> > --
> > Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
> > belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
>
--
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
More information about the freebsd-hackers
mailing list