/* * perf_hooks.c * * Copyright (C) 2016 Wang Nan * Copyright (C) 2016 Huawei Inc. */ #include #include #include #include #include "util/util.h" #include "util/debug.h" #include "util/perf-hooks.h" static sigjmp_buf jmpbuf; static const struct perf_hook_desc *current_perf_hook; void perf_hooks__invoke(const struct perf_hook_desc *desc) { if (!(desc && desc->p_hook_func && *desc->p_hook_func)) return; if (sigsetjmp(jmpbuf, 1)) { pr_warning("Fatal error (SEGFAULT) in perf hook '%s'\n", desc->hook_name); *(current_perf_hook->p_hook_func) = NULL; } else { current_perf_hook = desc; (**desc->p_hook_func)(desc->hook_ctx); } current_perf_hook = NULL; } void perf_hooks__recover(void) { if (current_perf_hook) siglongjmp(jmpbuf, 1); } #define PERF_HOOK(name) \ perf_hook_func_t __perf_hook_func_##name = NULL; \ struct perf_hook_desc __perf_hook_desc_##name = \ {.hook_name = #name, \ .p_hook_func = &__perf_hook_func_##name, \ .hook_ctx = NULL}; #include "perf-hooks-list.h" #undef PERF_HOOK #define PERF_HOOK(name) \ &__perf_hook_desc_##name, static struct perf_hook_desc *perf_hooks[] = { #include "perf-hooks-list.h" }; #undef PERF_HOOK int perf_hooks__set_hook(const char *hook_name, perf_hook_func_t hook_func, void *hook_ctx) { unsigned int i; for (i = 0; i < ARRAY_SIZE(perf_hooks); i++) { if (strcmp(hook_name, perf_hooks[i]->hook_name) != 0) continue; if (*(perf_hooks[i]->p_hook_func)) pr_warning("Overwrite existing hook: %s\n", hook_name); *(perf_hooks[i]->p_hook_func) = hook_func; perf_hooks[i]->hook_ctx = hook_ctx; return 0; } return -ENOENT; } perf_hook_func_t perf_hooks__get_hook(const char *hook_name) { unsigned int i; for (i = 0; i < ARRAY_SIZE(perf_hooks); i++) { if (strcmp(hook_name, perf_hooks[i]->hook_name) != 0) continue; return *(perf_hooks[i]->p_hook_func); } return ERR_PTR(-ENOENT); } 527960b07ad2bb'>commitdiff
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2017-01-29 21:00:48 -0800
committerOlof Johansson <olof@lixom.net>2017-01-29 21:00:48 -0800
commit0a019a28e0ca0af7dc2691d1a9527960b07ad2bb (patch)
tree5ee1db9aacacd6af6701fb290e8a294ef3cc2bf2 /sound/mips
parentec026b5020688a8bde5fae9a69ae3c59b66ba3ae (diff)
parent8413299cb3933dade6186bbee8363f190032107e (diff)
Merge tag 'sti-dt-for-v4.10-rc' of git://git.kernel.org/pub/scm/linux/kernel/git/pchotard/sti into fixes
STi DT fix: Since v4.10-rc1, xhci is complaining in loop with : [ 801.953836] usb usb6-port1: Cannot enable. Maybe the USB cable is bad? [ 801.960455] xhci-hcd xhci-hcd.0.auto: Cannot set link state. [ 801.966611] usb usb6-port1: cannot disable (err = -32) set property "snps,dis_u3_susphy_quirk" in DT fix it. * tag 'sti-dt-for-v4.10-rc' of git://git.kernel.org/pub/scm/linux/kernel/git/pchotard/sti: ARM: dts: STiH407-family: set snps,dis_u3_susphy_quirk Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'sound/mips')