/* * 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); } et/ethernet/eth.c?id=2bd137de531367fb573d90150d1872cb2a2095f7'>diff
name='ignorews' onchange='this.form.submit();'>
AgeCommit message (Expand)AuthorFilesLines
mode:
authorScott Peterson <scott.d.peterson@intel.com>2017-02-09 23:37:28 -0800
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-02-11 20:39:01 -0800
commit7987dcd7b95111a5acbf5abdbf155eedacd3546b (patch)
treef89cb5472c01b4c3020de196674ea368f781f899
parente5f77f4a2ff2d6ce2d973ebc62084d92f203c9f6 (diff)
i40e/i40evf: Limit DMA sync of RX buffers to actual packet size
On packet RX, we perform a DMA sync for CPU before passing the packet up. Here we limit that sync to the actual length of the incoming packet, rather than always syncing the entire buffer. Change-ID: I626aaf6c37275a8ce9e81efcaa773f327b331487 Signed-off-by: Scott Peterson <scott.d.peterson@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>