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 <daniel.verkamp@intel.com>
This commit is contained in:
Daniel Verkamp 2016-11-16 14:30:54 -07:00
parent 5b63b8a448
commit fb08791096

View File

@ -44,6 +44,8 @@
#include "spdk/event.h" #include "spdk/event.h"
#include "spdk/io_channel.h" #include "spdk/io_channel.h"
static size_t g_max_copy_module_size = 0;
static struct spdk_copy_engine *hw_copy_engine = NULL; static struct spdk_copy_engine *hw_copy_engine = NULL;
/* Memcpy engine always exist */ /* Memcpy engine always exist */
static struct spdk_copy_engine *mem_copy_engine = NULL; static struct spdk_copy_engine *mem_copy_engine = NULL;
@ -163,20 +165,15 @@ copy_engine_mem_get_ctx_size(void)
size_t size_t
spdk_copy_task_size(void) spdk_copy_task_size(void)
{ {
struct spdk_copy_module_if *copy_engine; return g_max_copy_module_size;
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;
} }
void spdk_copy_module_list_add(struct spdk_copy_module_if *copy_module) void spdk_copy_module_list_add(struct spdk_copy_module_if *copy_module)
{ {
TAILQ_INSERT_TAIL(&spdk_copy_module_list, copy_module, tailq); 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 static int