tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: config_init_component(), ioconf, and pseudo-devices
On Thu, Apr 16, 2015 at 5:34 PM, Paul Goyette <paul%vps1.whooppee.com@localhost> wrote:
> I'm working on turning swwdog (for now, eventually others) into a kernel
> module, and I'm running into some difficulty with the autoconfig stuff.
>
> I've got an IOCONF=swwdog.ioconf in my Makefile, and swwdog.ioconf contains
>
> ioconf swwdog
> include "conf/files"
> include "dev/sysmon/files.sysmon"
> pseudo-device swwdog
>
> In files.sysmon there is
>
> defpseudodev swwdog: sysmon_wdog
> file dev/sysmon/swwdog.c swwdog
>
> In the swwdog_modcmd()'s init code, I am calling
>
> config_init_component(cfdriver_ioconf_swwdog,
> cfattach_ioconf_swwdog, cfdata_ioconf_swwdog);
>
> where the arguments are all references to data structures defined in the
> generated ioconf.[ch] files.
>
> The problem occurs a bit later on when I create a local struct cfattach
>
> cf.cf_name = "swwdog";
> cf.cf_atname = "swwdog";
> cf.cf_unit = 0;
> cf.cf_fstate = FSTATE_STAR;
> cf.cf_pspec = NULL;
> cf.cf_loc = NULL;
> cf.cf_flags = 0;
>
> and attempt to call config_attach_pseudo(). config_attach_pseudo() calls
> config_devalloc() to allocate memory (primarily for the softc), and
> config_devalloc() in turn locates the swwdog's struct cfdriver (which was
> "frobbed" into the master device list by config_init_component()).
>
> Next, config_devalloc() tries to find a struct cfattach in the cfdriver list
> of attachments. Unfortunately, the generated ioconf.c file has empty lists
> of both struct cfdata and struct cfattach, so no struct cfattach ever got
> "frobbed" by config_init_component, and thus the call to
> cf_attach_lookup_cd() fails.
>
> ...
> static struct cfdata cfdata_ioconf_swwdog[] = {
> /* driver attachment unit state loc flags pspec */
> { NULL, NULL, 0, 0, NULL, 0, NULL }
> };
>
>
> static const struct cfattachinit cfattach_ioconf_swwdog[] = {
> { NULL, NULL }
> };
> ...
>
>
> Am I missing something obvious here? Or is config not generating valid
> ioconf.[ch] files for a defpseudodev device?
I'd be surprised if config(1) works normally for defpseudodev as is. ;)
Home |
Main Index |
Thread Index |
Old Index