• T
    ANDROID: add support for vendor hooks · 122b83d2
    Todd Kjos 提交于
    aosp inclusion
    category: feature
    bugzilla: https://gitee.com/openeuler/kernel/issues/I4RCS8
    CVE: NA
    
    Reference: https://android.googlesource.com/kernel/common/+/7f62740112ef
    
    ---------------------------
    
    Add support for vendor hooks. Adds include/trace/hooks
    directory for trace definition headers where hooks
    can be defined and vendor_hook.c for instantiating
    and exporting them for vendor modules.
    
    There are two variants of vendor hooks, both based
    on tracepoints:
    
    Normal: this uses the DECLARE_HOOK macro
    to create a tracepoint function with the name trace_<name>
    where <name> is the unique identifier for the trace.
    
    Restricted: restricted hooks are needed for cases like
    scheduler hooks where the attached function must be
    called even if the cpu is offline or requires a
    non-atomic context. Restricted vendor hooks cannot
    be detached, so modules that attach to a restricted
    hook can never unload. Also, only 1 attachment is
    allowed (any other attempts to attach will fail with
    -EBUSY).
    
    For either case, modules attach to the hook by using
    register_trace_<name>(func_ptr, NULL).
    
    New hooks should be defined in headers in the
    include/trace/hooks/ directory using the
    DECLARE_HOOK() or DECLARE_RESTRICTED_HOOK()
    macros.
    
    New files added to include/trace/hooks should
    be #include'd from drivers/android/vendor_hooks.c.
    The EXPORT_TRACEPOINT_SYMBOL_GPL() should be
    also added to drivers/android/vendor_hooks.c.
    
    For example, if a new hook, 'android_vh_foo(int &ret)'
    is added in do_exit() in exit.c, these changes are
    needed:
    
    1. create a new header file include/trace/hooks/foo.h
    which contains:
    	#include <trace/hooks/vendor_hooks.h>
    	...
     	DECLARE_HOOK(android_vh_foo,
    		     TP_PROTO(int *retp),
    		     TP_ARGS(retp);
    
    2. in exit.c, add
    	#include <trace/hooks/foo.h>
    	...
      	int ret = 0;
    	...
      	android_vh_foo(&ret);
      	if (ret)
        		return ret;
    	...
    
    3. in drivers/android/vendor_hooks.c, add
    	#include <trace/hooks/foo.h>
    	...
    	EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_foo);
    
    The hook can then be attached by adding the registration code
    to the module:
    
    	#include <trace/hooks/sched.h>
    	...
    	static void my_foo(int *retp)
    	{
    		*retp = 0;
    	}
    	...
    	rc = register_trace_android_vh_sched_exit(my_foo, NULL);
    
    Bug: 156285741
    Signed-off-by: NTodd Kjos <tkjos@google.com>
    Change-Id: I6a7d1c8919dae91c965e2a0450df50eac2d282db
    Signed-off-by: NJialin Zhang <zhangjialin11@huawei.com>
    Reviewed-by: NWei Li <liwei391@huawei.com>
    Reviewed-by: NXie XiuQi <xiexiuqi@huawei.com>
    Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
    122b83d2
vendor_hooks.h 2.0 KB