lib/accel: remove RPC for setting the module

This was added before the usage of having a SW engine and 2 HW
engines was fully thought out. The current rules are:

* if no HW engine specific enable RPC is sent, use SW
* if a HW engine specific enable RPC is sent, use it
* If a 2nd HW engine specific enable RPC is sent, ignore

In this scheme there's no need for an RPC that lets the user
choose which engine to use because they already do so when
they enable an engine.

Signed-off-by: paul luse <paul.e.luse@intel.com>
Change-Id: I006ffb3b417f1e93bb061b29535d157ba66f03b4
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/2033
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
paul luse 2020-04-24 17:11:03 -04:00 committed by Tomasz Zawadzki
parent 3788d6967a
commit 3044bd27d0
10 changed files with 10 additions and 161 deletions

View File

@ -39,16 +39,6 @@
#include "spdk/accel_engine.h" #include "spdk/accel_engine.h"
#include "spdk/queue.h" #include "spdk/queue.h"
enum accel_module {
ACCEL_SW = 0,
ACCEL_AUTO = 1,
ACCEL_CBDMA = 2,
ACCEL_IDXD_DSA = 3,
ACCEL_MODULE_MAX = 4,
};
int accel_set_module(enum accel_module *opts);
struct spdk_accel_task { struct spdk_accel_task {
spdk_accel_completion_cb cb; spdk_accel_completion_cb cb;
uint8_t offload_ctx[0]; uint8_t offload_ctx[0];

View File

@ -39,7 +39,7 @@ SO_MINOR := 1
SO_SUFFIX := $(SO_VER).$(SO_MINOR) SO_SUFFIX := $(SO_VER).$(SO_MINOR)
LIBNAME = accel LIBNAME = accel
C_SRCS = accel_engine.c accel_engine_rpc.c C_SRCS = accel_engine.c
SPDK_MAP_FILE = $(abspath $(CURDIR)/spdk_accel.map) SPDK_MAP_FILE = $(abspath $(CURDIR)/spdk_accel.map)

View File

@ -37,7 +37,6 @@
#include "spdk/env.h" #include "spdk/env.h"
#include "spdk/event.h" #include "spdk/event.h"
#include "spdk/log.h"
#include "spdk/thread.h" #include "spdk/thread.h"
#include "spdk/json.h" #include "spdk/json.h"
@ -56,7 +55,6 @@ static struct spdk_accel_engine *g_sw_accel_engine = NULL;
static struct spdk_accel_module_if *g_accel_engine_module = NULL; static struct spdk_accel_module_if *g_accel_engine_module = NULL;
static spdk_accel_fini_cb g_fini_cb_fn = NULL; static spdk_accel_fini_cb g_fini_cb_fn = NULL;
static void *g_fini_cb_arg = NULL; static void *g_fini_cb_arg = NULL;
enum accel_module g_active_accel_module = ACCEL_AUTO;
/* Global list of registered accelerator modules */ /* Global list of registered accelerator modules */
static TAILQ_HEAD(, spdk_accel_module_if) spdk_accel_module_list = static TAILQ_HEAD(, spdk_accel_module_if) spdk_accel_module_list =
@ -67,14 +65,6 @@ struct accel_io_channel {
struct spdk_io_channel *ch; struct spdk_io_channel *ch;
}; };
int
accel_set_module(enum accel_module *opts)
{
g_active_accel_module = *opts;
return 0;
}
/* Registration of hw modules (currently supports only 1 at a time) */ /* Registration of hw modules (currently supports only 1 at a time) */
void void
spdk_accel_hw_engine_register(struct spdk_accel_engine *accel_engine) spdk_accel_hw_engine_register(struct spdk_accel_engine *accel_engine)
@ -165,19 +155,6 @@ accel_engine_create_cb(void *io_device, void *ctx_buf)
{ {
struct accel_io_channel *accel_ch = ctx_buf; struct accel_io_channel *accel_ch = ctx_buf;
/* If they specify CBDMA and its not available, fail */
if (g_active_accel_module == ACCEL_CBDMA && g_hw_accel_engine == NULL) {
SPDK_ERRLOG("CBDMA acceleration engine specified but not available.\n");
return -EINVAL;
}
if (g_active_accel_module == ACCEL_IDXD_DSA && g_hw_accel_engine == NULL) {
SPDK_ERRLOG("IDXD acceleration engine specified but not available.\n");
return -EINVAL;
}
/* For either HW or AUTO */
if (g_active_accel_module > ACCEL_SW) {
if (g_hw_accel_engine != NULL) { if (g_hw_accel_engine != NULL) {
accel_ch->ch = g_hw_accel_engine->get_io_channel(); accel_ch->ch = g_hw_accel_engine->get_io_channel();
if (accel_ch->ch != NULL) { if (accel_ch->ch != NULL) {
@ -185,11 +162,8 @@ accel_engine_create_cb(void *io_device, void *ctx_buf)
return 0; return 0;
} }
} }
}
/* Choose SW either because auto was selected and there was no HW, /* No hw engine enabled, use sw. */
* or because SW was selected.
*/
accel_ch->ch = g_sw_accel_engine->get_io_channel(); accel_ch->ch = g_sw_accel_engine->get_io_channel();
assert(accel_ch->ch != NULL); assert(accel_ch->ch != NULL);
accel_ch->engine = g_sw_accel_engine; accel_ch->engine = g_sw_accel_engine;
@ -249,12 +223,9 @@ spdk_accel_engine_module_finish_cb(void)
void void
spdk_accel_write_config_json(struct spdk_json_write_ctx *w) spdk_accel_write_config_json(struct spdk_json_write_ctx *w)
{ {
/* TODO: call engine config_json entry points. */
spdk_json_write_array_begin(w); spdk_json_write_array_begin(w);
spdk_json_write_object_begin(w); spdk_json_write_object_begin(w);
spdk_json_write_named_string(w, "method", "accel_set_module");
spdk_json_write_named_object_begin(w, "params");
spdk_json_write_named_uint32(w, "module", g_active_accel_module);
spdk_json_write_object_end(w);
spdk_json_write_object_end(w); spdk_json_write_object_end(w);
spdk_json_write_array_end(w); spdk_json_write_array_end(w);
} }

View File

@ -1,85 +0,0 @@
/*-
* BSD LICENSE
*
* Copyright (c) Intel Corporation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Intel Corporation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "spdk_internal/accel_engine.h"
#include "spdk/rpc.h"
#include "spdk/util.h"
#include "spdk/string.h"
#include "spdk_internal/log.h"
struct rpc_accel_set_module {
enum accel_module module;
};
static const struct spdk_json_object_decoder rpc_accel_set_module_decoder[] = {
{"module", offsetof(struct rpc_accel_set_module, module), spdk_json_decode_uint32},
};
static void
spdk_rpc_accel_set_module(struct spdk_jsonrpc_request *request,
const struct spdk_json_val *params)
{
struct rpc_accel_set_module req = {};
struct spdk_json_write_ctx *w;
int rc = 0;
if (spdk_json_decode_object(params, rpc_accel_set_module_decoder,
SPDK_COUNTOF(rpc_accel_set_module_decoder),
&req)) {
SPDK_ERRLOG("spdk_json_decode_object failed\n");
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_PARSE_ERROR,
"spdk_json_decode_object failed");
return;
}
if (req.module >= ACCEL_MODULE_MAX) {
spdk_jsonrpc_send_error_response_fmt(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
"Module value %d should be less than %d", req.module,
ACCEL_MODULE_MAX);
return;
}
rc = accel_set_module(&req.module);
if (rc) {
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, spdk_strerror(-rc));
return;
}
w = spdk_jsonrpc_begin_result(request);
if (w != NULL) {
spdk_json_write_bool(w, true);
spdk_jsonrpc_end_result(request, w);
}
}
SPDK_RPC_REGISTER("accel_set_module", spdk_rpc_accel_set_module,
SPDK_RPC_STARTUP)

View File

@ -57,7 +57,7 @@ DEPDIRS-reduce := log util
DEPDIRS-thread := log util DEPDIRS-thread := log util
DEPDIRS-blob := log util thread DEPDIRS-blob := log util thread
DEPDIRS-accel := thread log rpc thread util $(JSON_LIBS) DEPDIRS-accel := log json thread
DEPDIRS-jsonrpc := log util json DEPDIRS-jsonrpc := log util json
DEPDIRS-virtio := log util json thread DEPDIRS-virtio := log util json thread

View File

@ -60,18 +60,12 @@ spdk_accel_engine_subsystem_finish(void)
spdk_accel_engine_finish(spdk_accel_engine_subsystem_finish_done, NULL); spdk_accel_engine_finish(spdk_accel_engine_subsystem_finish_done, NULL);
} }
static void
spdk_accel_engine_subsystem_write_config_json(struct spdk_json_write_ctx *w)
{
spdk_accel_write_config_json(w);
}
static struct spdk_subsystem g_spdk_subsystem_accel = { static struct spdk_subsystem g_spdk_subsystem_accel = {
.name = "accel", .name = "accel",
.init = spdk_accel_engine_subsystem_initialize, .init = spdk_accel_engine_subsystem_initialize,
.fini = spdk_accel_engine_subsystem_finish, .fini = spdk_accel_engine_subsystem_finish,
.config = spdk_accel_engine_config_text, .config = spdk_accel_engine_config_text,
.write_config_json = spdk_accel_engine_subsystem_write_config_json, .write_config_json = NULL,
}; };
SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_accel); SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_accel);

View File

@ -2133,16 +2133,6 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
p.add_argument('name', help='Name of the Open Channel bdev') p.add_argument('name', help='Name of the Open Channel bdev')
p.set_defaults(func=bdev_ocssd_delete) p.set_defaults(func=bdev_ocssd_delete)
# accel framework
def accel_set_module(args):
rpc.accel.accel_set_module(args.client,
module=args.module)
p = subparsers.add_parser('accel_set_module',
help='Set module option for the accelerator framework')
p.add_argument('-m', '--module', type=int, help='0 = auto-select, 1= Software, 2 = CBDMA')
p.set_defaults(func=accel_set_module)
# ioat # ioat
def ioat_scan_accel_engine(args): def ioat_scan_accel_engine(args):
pci_whitelist = [] pci_whitelist = []

View File

@ -1,7 +1,6 @@
import json import json
import sys import sys
from . import accel
from . import app from . import app
from . import bdev from . import bdev
from . import blobfs from . import blobfs

View File

@ -1,9 +0,0 @@
def accel_set_module(client, module):
"""Set the module for the acceleration framework.
Args:
pmd: 0 = auto-select, 1 = Software, 2 = CBDMA
"""
params = {'module': module}
return client.call('accel_set_module', params)

View File

@ -23,7 +23,6 @@ def sort_json_object(o):
def filter_methods(do_remove_global_rpcs): def filter_methods(do_remove_global_rpcs):
global_rpcs = [ global_rpcs = [
'accel_set_module',
'iscsi_set_options', 'iscsi_set_options',
'nvmf_set_config', 'nvmf_set_config',
'nvmf_set_max_subsystems', 'nvmf_set_max_subsystems',