Date: Mon, 12 Sep 2011 13:17:41 +0200 From: =?iso-8859-1?Q?=22Marc_L=F6rner=22?= <loerner@gmx.de> To: Filippo Sironi <filippo.sironi@gmail.com> Cc: freebsd-hackers@freebsd.org Subject: Re: Kernel timers infrastructure Message-ID: <20110912111741.298340@gmx.net> In-Reply-To: <9B13644B-F61E-4761-8C4F-E9E33F6E82B8@gmail.com> References: <20110912094842.251380@gmx.net> <9B13644B-F61E-4761-8C4F-E9E33F6E82B8@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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@gmail.com> > An: "Marc Lörner" <loerner@gmx.de> > CC: freebsd-hackers@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110912111741.298340>