There seems to be good arguments for markers to support proprierary modules. So I am throwing this one-liner in and let's see how people react. It only makes sure that a module that has been "forced" to be loaded won't have its markers used. It is important to leave this check to make sure the kernel does not crash by expecting the markers part of the struct module by mistake in the case there is an incorrect checksum. Discussion so far : http://lkml.org/lkml/2008/1/22/226 Jon Masters writes: I notice in module.c: #ifdef CONFIG_MARKERS if (!mod->taints) marker_update_probe_range(mod->markers, mod->markers + mod->num_markers, NULL, NULL); #endif Is this an attempt to not set a marker for proprietary modules? [...] * Frank Ch. Eigler (fche@redhat.com) wrote: I can't seem to find any discussion about this aspect. If this is the intent, it seems misguided to me. There may instead be a relationship to TAINT_FORCED_{RMMOD,MODULE}. Mathieu? - FChE On Tue, 2008-01-22 at 22:10 -0500, Mathieu Desnoyers wrote: On my part, its mostly a matter of not crashing the kernel when someone tries to force modprobe of a proprietary module (where the checksums doesn't match) on a kernel that supports the markers. Not doing so causes the markers to try to find the marker-specific information in struct module which doesn't exist and OOPSes. Christoph's point of view is rather more drastic than mine : it's not interesting for the kernel community to help proprietary modules writers, so it's a good idea not to give them marker support. (I CC'ed him so he can clarify his position). * Frank Ch. Eigler (fche@redhat.com) wrote: [...] Another way of looking at this though is that by allowing/encouraging proprietary module writers to include markers, we and their users get new diagnostic capabilities. It constitutes a little bit of opening up, which IMO we should reward rather than punish. * Vladis Ketnieks (Valdis.Kletnieks@vt.edu) wrote: On Wed, 23 Jan 2008 09:48:12 EST, Mathieu Desnoyers said: > This specific one is a kernel policy matter, and I personally don't > have a strong opinion about it. I agree that you raise a good counter > argument : it can be useful to proprietary modules users to be able to > extract tracing information from those modules to argue with their > vendors that their driver/hardware is broken (a tracer is _very_ useful > in that kind of situation). Amen, brother. Been there, done that, got the tshirt (not on Linux, but other operating systems). > However, it is also useful to proprieraty > module writers who can benefit from the merged kernel/modules traces. > Do we want to give them this ability ? The proprietary module writer has the *source* for the kernel and their module. There's no way you can prevent the proprietary module writers from using this feature as long as you allow other module writers to use it. > It would surely help writing > better proprieraty kernel modules. The biggest complaint against proprietary modules is that they make it impossible for *us* to debug. And you want to argue *against* a feature that would allow them to develop better code that causes less crashes, and therefor less people *asking* for us to debug it? Remember - when a user tries a Linux box with a proprietary module, and the experience sucks because the module sucks, they will walk away thinking "Linux sucks", not "That module sucks". Signed-off-by: Mathieu Desnoyers Acked-by: Jon Masters CC: "Frank Ch. Eigler" CC: Jon Masters CC: Rusty Russell CC: Christoph Hellwig CC: Linus Torvalds CC: Andrew Morton --- kernel/module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) Index: linux-2.6-lttng/kernel/module.c =================================================================== --- linux-2.6-lttng.orig/kernel/module.c 2009-03-05 15:45:38.000000000 -0500 +++ linux-2.6-lttng/kernel/module.c 2009-03-05 15:45:49.000000000 -0500 @@ -2809,7 +2809,7 @@ void module_update_markers(void) mutex_lock(&module_mutex); list_for_each_entry(mod, &modules, list) - if (!mod->taints) + if (!(mod->taints & TAINT_FORCED_MODULE)) marker_update_probe_range(mod->markers, mod->markers + mod->num_markers); mutex_unlock(&module_mutex); @@ -2826,7 +2826,7 @@ int module_get_iter_markers(struct marke mutex_lock(&module_mutex); list_for_each_entry(iter_mod, &modules, list) { - if (!iter_mod->taints) { + if (!(iter_mod->taints & TAINT_FORCED_MODULE)) { /* * Sorted module list */ -- Mathieu Desnoyers OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/