mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
Linux Kernel Markers
The marker activation functions sits in kernel/marker.c. A hash table is used to keep track of the registered probes and armed markers, so the markers within a newly loaded module that should be active can be activated at module load time. marker_query has been removed. marker_get_first, marker_get_next and marker_release should be used as iterators on the markers. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> Acked-by: "Frank Ch. Eigler" <fche@redhat.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Mike Mason <mmlnx@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
09cadedbdc
commit
8256e47cdc
7 changed files with 710 additions and 1 deletions
|
@ -1673,6 +1673,8 @@ static struct module *load_module(void __user *umod,
|
|||
unsigned int unusedcrcindex;
|
||||
unsigned int unusedgplindex;
|
||||
unsigned int unusedgplcrcindex;
|
||||
unsigned int markersindex;
|
||||
unsigned int markersstringsindex;
|
||||
struct module *mod;
|
||||
long err = 0;
|
||||
void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
|
||||
|
@ -1939,6 +1941,9 @@ static struct module *load_module(void __user *umod,
|
|||
add_taint_module(mod, TAINT_FORCED_MODULE);
|
||||
}
|
||||
#endif
|
||||
markersindex = find_sec(hdr, sechdrs, secstrings, "__markers");
|
||||
markersstringsindex = find_sec(hdr, sechdrs, secstrings,
|
||||
"__markers_strings");
|
||||
|
||||
/* Now do relocations. */
|
||||
for (i = 1; i < hdr->e_shnum; i++) {
|
||||
|
@ -1961,6 +1966,11 @@ static struct module *load_module(void __user *umod,
|
|||
if (err < 0)
|
||||
goto cleanup;
|
||||
}
|
||||
#ifdef CONFIG_MARKERS
|
||||
mod->markers = (void *)sechdrs[markersindex].sh_addr;
|
||||
mod->num_markers =
|
||||
sechdrs[markersindex].sh_size / sizeof(*mod->markers);
|
||||
#endif
|
||||
|
||||
/* Find duplicate symbols */
|
||||
err = verify_export_symbols(mod);
|
||||
|
@ -1979,6 +1989,11 @@ static struct module *load_module(void __user *umod,
|
|||
|
||||
add_kallsyms(mod, sechdrs, symindex, strindex, secstrings);
|
||||
|
||||
#ifdef CONFIG_MARKERS
|
||||
if (!mod->taints)
|
||||
marker_update_probe_range(mod->markers,
|
||||
mod->markers + mod->num_markers, NULL, NULL);
|
||||
#endif
|
||||
err = module_finalize(hdr, sechdrs, mod);
|
||||
if (err < 0)
|
||||
goto cleanup;
|
||||
|
@ -2570,3 +2585,18 @@ EXPORT_SYMBOL(module_remove_driver);
|
|||
void struct_module(struct module *mod) { return; }
|
||||
EXPORT_SYMBOL(struct_module);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MARKERS
|
||||
void module_update_markers(struct module *probe_module, int *refcount)
|
||||
{
|
||||
struct module *mod;
|
||||
|
||||
mutex_lock(&module_mutex);
|
||||
list_for_each_entry(mod, &modules, list)
|
||||
if (!mod->taints)
|
||||
marker_update_probe_range(mod->markers,
|
||||
mod->markers + mod->num_markers,
|
||||
probe_module, refcount);
|
||||
mutex_unlock(&module_mutex);
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue