Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Sep 2011 11:58:37 +0200
From:      Filippo Sironi <filippo.sironi@gmail.com>
To:        =?iso-8859-1?Q?=22Marc_L=F6rner=22?= <loerner@gmx.de>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Kernel timers infrastructure
Message-ID:  <9B13644B-F61E-4761-8C4F-E9E33F6E82B8@gmail.com>
In-Reply-To: <20110912094842.251380@gmx.net>
References:  <20110912094842.251380@gmx.net>

next in thread | previous in thread | raw e-mail | index | archive | help
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() !=3D 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() !=3D 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 =3D {
	"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=F6rner wrote:

> Hello,
> what about changing order of callout_reset and uprintf?
> And your timeout isn't 1minute, it's one second!
>=20
> Regards,
> Marc
> --=20
> 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?9B13644B-F61E-4761-8C4F-E9E33F6E82B8>