Date: Mon, 25 Aug 1997 17:44:48 -0700 (PDT) From: Pat Bozeman <peb@george.lbl.gov> To: freebsd-hackers@FreeBSD.ORG Subject: lkm.h MOD_DEV & DISPATCH Message-ID: <Pine.SOL.3.95.970825173548.22258E-100000@george.lbl.gov> In-Reply-To: <199708252325.AAA14034@awfulhak.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Why does MOD_DEV concatinate the name of the device with _module when
none of the other module types do?  This leads to a conflict with DISPATCH
which does not expect the name to be concatinated to _module.
Here is the relevant code.  The static struct lkm_* is the part I am
talking about, notice the differnce in the naming of the lkm_* structure.
#define MOD_DEV(name,devtype,devslot,devp)      \
        MOD_DECL(name);                         \
        static struct lkm_dev name ## _module = { \   
                LM_DEV,                         \
                LKM_VERSION,                    \
                #name ## "_mod",                \
                devslot,                        \
                devtype,                        \
                (void *)devp                    \
        }
#define MOD_EXEC(name,execslot,execsw)          \
        MOD_DECL(name);                         \
        static struct lkm_exec _module = {      \
                LM_EXEC,                        \
                LKM_VERSION,                    \
                #name ## "_mod",                \
                execslot,                       \
                execsw                          \
        } 
MOD_DEV and DISPATCH do not get along because dispatch just uses 
_module on fisrt line of the 'case LKM_E_LOAD' block.  
#define DISPATCH(lkmtp,cmd,ver,load,unload,stat)                        \
        if (ver != LKM_VERSION)                                         \
                return EINVAL;  /* version mismatch */                  \
        switch (cmd) {                                                  \
        int     error;                                                  \
        case LKM_E_LOAD:                                                \
                lkmtp->private.lkm_any = (struct lkm_any *)&_module;    \
                if (lkmexists(lkmtp)) /* !!! */                         \
                        return EEXIST;                                  \
                if ((error = load(lkmtp, cmd)))                         \
                        return error;                                   \
                break;                
(rest of macro cut)
Is there a reason that this is like this?
--
Patrick Bozeman
PBozeman@lbl.gov
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SOL.3.95.970825173548.22258E-100000>
