Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Jan 2009 15:10:29 +0100
From:      Mateusz Guzik <mjguzik@gmail.com>
To:        Alexej Sokolov <bsd.quest@googlemail.com>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: panic by unlocking of mutex in KLD
Message-ID:  <20090112141029.GA31108@skucha>
In-Reply-To: <20090112134726.GA2988@debian.samsung.router>
References:  <20090112134726.GA2988@debian.samsung.router>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jan 12, 2009 at 02:47:26PM +0100, Alexej Sokolov wrote:
> Hello, 
> 
> by unloading of folowing module  I have kernel panic.
> 
> I would like to get any explanation about my mistake.
> 
> #include <sys/param.h>
> #include <sys/module.h>
> #include <sys/kernel.h>
> #include <sys/systm.h>
> #include <sys/queue.h>
> #include <sys/kernel.h>
> #include <sys/kobj.h>
> #include <sys/malloc.h>
> #include <sys/types.h>
> #include <sys/lock.h>
> #include <sys/mutex.h>
> 
> 
> struct mtx my_mtx; 
> 
> 
> /* Load handler */
> static int
> load(struct module *mod, int cmd, void *arg)
> {
>         int error = 0; 
>         switch(cmd) {
>                 case MOD_LOAD:
>                         printf("Start! Addres of mutex = 0x%X \n",
> &my_mtx);
>                         mtx_init(&my_mtx, "My mutex name", "My mutex
> type", MTX_DEF);
> 
>                         mtx_lock(&my_mtx);
>                         break;
>                 case MOD_UNLOAD:
>                         printf("Stop! Addres of mutex = 0x%X \n",
> &my_mtx);
>                         mtx_unlock(&my_mtx);
>                         break;
>                 default:
>                         error = EOPNOTSUPP;
>                         break;
>         }
> 
>         return (error);
> }
> 
> /* Module structure */
> static moduledata_t mod_data = {
>         "mymod",
>         load,
>         NULL
> };
> MODULE_VERSION (kld, 1);
> DECLARE_MODULE (kld, mod_data, SI_SUB_DRIVERS, SI_ORDER_MIDDLE); 
> 
> 

Acutally it panics even on loading. :)

Mutexes have owners. It panics on loading because processes cannot
return to userland with locks held. It panics on unloading (in your
case) because curproc != my_mtx's owner.

-- 
Mateusz Guzik <mjguzik at gmail.com>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090112141029.GA31108>