Commit f8ff04e2 authored by Chris Wilson's avatar Chris Wilson Committed by Linus Torvalds

lib/debugobjects: export for use in modules

Drivers, or other modules, that use a mixture of objects (especially
objects embedded within other objects) would like to take advantage of
the debugobjects facilities to help catch misuse.  Currently, the
debugobjects interface is only available to builtin drivers and requires
a set of EXPORT_SYMBOL_GPL for use by modules.

I am using the debugobjects in i915.ko to try and catch some invalid
operations on embedded objects.  The problem currently only presents
itself across module unload so forcing i915 to be builtin is not an
option.

Link: http://lkml.kernel.org/r/20161122143039.6433-1-chris@chris-wilson.co.ukSigned-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: "Du, Changbin" <changbin.du@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 529e71e1
...@@ -362,6 +362,7 @@ void debug_object_init(void *addr, struct debug_obj_descr *descr) ...@@ -362,6 +362,7 @@ void debug_object_init(void *addr, struct debug_obj_descr *descr)
__debug_object_init(addr, descr, 0); __debug_object_init(addr, descr, 0);
} }
EXPORT_SYMBOL_GPL(debug_object_init);
/** /**
* debug_object_init_on_stack - debug checks when an object on stack is * debug_object_init_on_stack - debug checks when an object on stack is
...@@ -376,6 +377,7 @@ void debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr) ...@@ -376,6 +377,7 @@ void debug_object_init_on_stack(void *addr, struct debug_obj_descr *descr)
__debug_object_init(addr, descr, 1); __debug_object_init(addr, descr, 1);
} }
EXPORT_SYMBOL_GPL(debug_object_init_on_stack);
/** /**
* debug_object_activate - debug checks when an object is activated * debug_object_activate - debug checks when an object is activated
...@@ -449,6 +451,7 @@ int debug_object_activate(void *addr, struct debug_obj_descr *descr) ...@@ -449,6 +451,7 @@ int debug_object_activate(void *addr, struct debug_obj_descr *descr)
} }
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(debug_object_activate);
/** /**
* debug_object_deactivate - debug checks when an object is deactivated * debug_object_deactivate - debug checks when an object is deactivated
...@@ -496,6 +499,7 @@ void debug_object_deactivate(void *addr, struct debug_obj_descr *descr) ...@@ -496,6 +499,7 @@ void debug_object_deactivate(void *addr, struct debug_obj_descr *descr)
raw_spin_unlock_irqrestore(&db->lock, flags); raw_spin_unlock_irqrestore(&db->lock, flags);
} }
EXPORT_SYMBOL_GPL(debug_object_deactivate);
/** /**
* debug_object_destroy - debug checks when an object is destroyed * debug_object_destroy - debug checks when an object is destroyed
...@@ -542,6 +546,7 @@ void debug_object_destroy(void *addr, struct debug_obj_descr *descr) ...@@ -542,6 +546,7 @@ void debug_object_destroy(void *addr, struct debug_obj_descr *descr)
out_unlock: out_unlock:
raw_spin_unlock_irqrestore(&db->lock, flags); raw_spin_unlock_irqrestore(&db->lock, flags);
} }
EXPORT_SYMBOL_GPL(debug_object_destroy);
/** /**
* debug_object_free - debug checks when an object is freed * debug_object_free - debug checks when an object is freed
...@@ -582,6 +587,7 @@ void debug_object_free(void *addr, struct debug_obj_descr *descr) ...@@ -582,6 +587,7 @@ void debug_object_free(void *addr, struct debug_obj_descr *descr)
out_unlock: out_unlock:
raw_spin_unlock_irqrestore(&db->lock, flags); raw_spin_unlock_irqrestore(&db->lock, flags);
} }
EXPORT_SYMBOL_GPL(debug_object_free);
/** /**
* debug_object_assert_init - debug checks when object should be init-ed * debug_object_assert_init - debug checks when object should be init-ed
...@@ -626,6 +632,7 @@ void debug_object_assert_init(void *addr, struct debug_obj_descr *descr) ...@@ -626,6 +632,7 @@ void debug_object_assert_init(void *addr, struct debug_obj_descr *descr)
raw_spin_unlock_irqrestore(&db->lock, flags); raw_spin_unlock_irqrestore(&db->lock, flags);
} }
EXPORT_SYMBOL_GPL(debug_object_assert_init);
/** /**
* debug_object_active_state - debug checks object usage state machine * debug_object_active_state - debug checks object usage state machine
...@@ -673,6 +680,7 @@ debug_object_active_state(void *addr, struct debug_obj_descr *descr, ...@@ -673,6 +680,7 @@ debug_object_active_state(void *addr, struct debug_obj_descr *descr,
raw_spin_unlock_irqrestore(&db->lock, flags); raw_spin_unlock_irqrestore(&db->lock, flags);
} }
EXPORT_SYMBOL_GPL(debug_object_active_state);
#ifdef CONFIG_DEBUG_OBJECTS_FREE #ifdef CONFIG_DEBUG_OBJECTS_FREE
static void __debug_check_no_obj_freed(const void *address, unsigned long size) static void __debug_check_no_obj_freed(const void *address, unsigned long size)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment