On Wednesday 26 April 2006 22:59, Trent Piepho wrote: > On Tue, 25 Apr 2006, Andrew de Quincey wrote: > > This has had the various feedbacks from various people applied - let me > > know what you think. > > I haven't tested this, but what about using this for dvb_attach: > > #define dvb_attach(FUNCTION, ARGS...) ({ \ > struct dvb_frontend *__r = NULL; \ > typeof(&FUNCTION) __a = symbol_request(FUNCTION); \ > if (__a) { \ > if (!(__r = __a(ARGS))) symbol_put(FUNCTION); \ > } else printk(KERN_ERR "DVB: Unable to get function "#FUNCTION"()\n"); > \ __r; \ > }) > > The idea is to use symbol_request, which will try to get the symbol, and if > it's not there and module loading is enabled, it will try to load the > module it is in. You don't need to specify the module name manually, > modprobe knows which module exports which symbols. Modules can be renamed, > split, combined, etc. without having to fix all the module names in the > card drivers. It also doesn't call request_module() if it's not necessary. Oooh, that looks good! Thanks! I just need to figure out a nice way to solve the problem Johannes raised about the symbol_puts now. _______________________________________________ linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb