From fb08791096af8c8d916760963b23fb74d3424dd7 Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 16 Nov 2016 14:30:54 -0700 Subject: [PATCH] copy_engine: only calculate task size once Track the maximum copy task size as modules are registered rather than recalculating it every time spdk_copy_task_size() is called. Change-Id: I141aca61e7075402dac41915080d1b43faee32ce Signed-off-by: Daniel Verkamp --- lib/copy/copy_engine.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/copy/copy_engine.c b/lib/copy/copy_engine.c index 1a1a593bb..a2d6d16cc 100644 --- a/lib/copy/copy_engine.c +++ b/lib/copy/copy_engine.c @@ -44,6 +44,8 @@ #include "spdk/event.h" #include "spdk/io_channel.h" +static size_t g_max_copy_module_size = 0; + static struct spdk_copy_engine *hw_copy_engine = NULL; /* Memcpy engine always exist */ static struct spdk_copy_engine *mem_copy_engine = NULL; @@ -163,20 +165,15 @@ copy_engine_mem_get_ctx_size(void) size_t spdk_copy_task_size(void) { - struct spdk_copy_module_if *copy_engine; - size_t max_copy_module_size = 0; - - TAILQ_FOREACH(copy_engine, &spdk_copy_module_list, tailq) { - if (copy_engine->get_ctx_size && copy_engine->get_ctx_size() > max_copy_module_size) { - max_copy_module_size = copy_engine->get_ctx_size(); - } - } - return max_copy_module_size; + return g_max_copy_module_size; } void spdk_copy_module_list_add(struct spdk_copy_module_if *copy_module) { TAILQ_INSERT_TAIL(&spdk_copy_module_list, copy_module, tailq); + if (copy_module->get_ctx_size && copy_module->get_ctx_size() > g_max_copy_module_size) { + g_max_copy_module_size = copy_module->get_ctx_size(); + } } static int