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

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to