proper place for devfs_register_chrdev with pci_module_init

From: Oliver Dain
Date: Wed Feb 04 2004 - 15:52:12 EST


I'm writing a char driver for a PCI card. Looking at examples of such things I've found that most have a module_init like this:

int foo_init(void)
{
/* stuff... */
devfs_register_chrdev(...);
/* more stuff... */
pci_module_init(...);
}

This seems strange to me. The devfs_register_chrdev call will register the module and cause it to be held in memory even if the associated PCI device isn't present on the system. It seems like a better way to do this is to have the init method just call pci_module_init(...) and then in that method, after the PCI device has been initialized, call devfs_register_chrdev to associate the driver with the device. That way the kernel can unload the module if no such device is present, but if the device is present (or if one appears via hotplug) the module will be loaded and can then register itself. Will this work? Is there a reason people don't do this?

I'm not subscribed to the LKML so please CC me on any responses.

Thanks,
Oliver
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/