nvme: Add the interface to get the optimal polling group
This patch is used to add spdk_nvme_poll_group_get_optimal public API. Signed-off-by: Ziye Yang <ziye.yang@intel.com> Change-Id: Iee34c89e0e1ff1f81167b18e198c144ca28f71de Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3311 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
7cc83b6258
commit
e749b5d3ec
@ -2,6 +2,12 @@
|
||||
|
||||
## v21.04: (Upcoming Release)
|
||||
|
||||
### nvme
|
||||
|
||||
Added `spdk_nvme_qpair_get_optimal_poll_group` function and `qpair_get_optimal_poll_group`
|
||||
function pointer in spdk_nvmf_transport_ops structure in order to add the qpair to the most
|
||||
suitable polling group.
|
||||
|
||||
## v21.01:
|
||||
|
||||
### bdev
|
||||
|
@ -2186,6 +2186,15 @@ typedef void (*spdk_nvme_disconnected_qpair_cb)(struct spdk_nvme_qpair *qpair,
|
||||
*/
|
||||
struct spdk_nvme_poll_group *spdk_nvme_poll_group_create(void *ctx);
|
||||
|
||||
/**
|
||||
* Get a optimal poll group.
|
||||
*
|
||||
* \param qpair The qpair to get the optimal poll group.
|
||||
*
|
||||
* \return Pointer to the optimal poll group, or NULL if not found.
|
||||
*/
|
||||
struct spdk_nvme_poll_group *spdk_nvme_qpair_get_optimal_poll_group(struct spdk_nvme_qpair *qpair);
|
||||
|
||||
/**
|
||||
* Add an spdk_nvme_qpair to a poll group. qpairs may only be added to
|
||||
* a poll group if they are in the disconnected state; i.e. either they were
|
||||
@ -3408,6 +3417,8 @@ struct spdk_nvme_transport_ops {
|
||||
void (*admin_qpair_abort_aers)(struct spdk_nvme_qpair *qpair);
|
||||
|
||||
struct spdk_nvme_transport_poll_group *(*poll_group_create)(void);
|
||||
struct spdk_nvme_transport_poll_group *(*qpair_get_optimal_poll_group)(
|
||||
struct spdk_nvme_qpair *qpair);
|
||||
|
||||
int (*poll_group_add)(struct spdk_nvme_transport_poll_group *tgroup, struct spdk_nvme_qpair *qpair);
|
||||
|
||||
|
@ -34,8 +34,8 @@
|
||||
SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
|
||||
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
||||
|
||||
SO_VER := 4
|
||||
SO_MINOR := 2
|
||||
SO_VER := 5
|
||||
SO_MINOR := 0
|
||||
|
||||
C_SRCS = nvme_ctrlr_cmd.c nvme_ctrlr.c nvme_fabric.c nvme_ns_cmd.c nvme_ns.c nvme_pcie_common.c nvme_pcie.c nvme_qpair.c nvme.c nvme_quirks.c nvme_transport.c nvme_uevent.c \
|
||||
nvme_ctrlr_ocssd_cmd.c nvme_ns_ocssd_cmd.c nvme_tcp.c nvme_opal.c nvme_io_msg.c nvme_poll_group.c nvme_zns.c
|
||||
|
@ -1315,6 +1315,9 @@ int nvme_transport_qpair_iterate_requests(struct spdk_nvme_qpair *qpair,
|
||||
|
||||
struct spdk_nvme_transport_poll_group *nvme_transport_poll_group_create(
|
||||
const struct spdk_nvme_transport *transport);
|
||||
struct spdk_nvme_transport_poll_group *nvme_transport_qpair_get_optimal_poll_group(
|
||||
const struct spdk_nvme_transport *transport,
|
||||
struct spdk_nvme_qpair *qpair);
|
||||
int nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
|
||||
struct spdk_nvme_qpair *qpair);
|
||||
int nvme_transport_poll_group_remove(struct spdk_nvme_transport_poll_group *tgroup,
|
||||
|
@ -50,6 +50,20 @@ spdk_nvme_poll_group_create(void *ctx)
|
||||
return group;
|
||||
}
|
||||
|
||||
struct spdk_nvme_poll_group *
|
||||
spdk_nvme_qpair_get_optimal_poll_group(struct spdk_nvme_qpair *qpair)
|
||||
{
|
||||
struct spdk_nvme_transport_poll_group *tgroup;
|
||||
|
||||
tgroup = nvme_transport_qpair_get_optimal_poll_group(qpair->transport, qpair);
|
||||
|
||||
if (tgroup == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return tgroup->group;
|
||||
}
|
||||
|
||||
int
|
||||
spdk_nvme_poll_group_add(struct spdk_nvme_poll_group *group, struct spdk_nvme_qpair *qpair)
|
||||
{
|
||||
|
@ -448,6 +448,17 @@ nvme_transport_poll_group_create(const struct spdk_nvme_transport *transport)
|
||||
return group;
|
||||
}
|
||||
|
||||
struct spdk_nvme_transport_poll_group *
|
||||
nvme_transport_qpair_get_optimal_poll_group(const struct spdk_nvme_transport *transport,
|
||||
struct spdk_nvme_qpair *qpair)
|
||||
{
|
||||
if (transport->ops.qpair_get_optimal_poll_group) {
|
||||
return transport->ops.qpair_get_optimal_poll_group(qpair);
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
|
||||
struct spdk_nvme_qpair *qpair)
|
||||
|
@ -141,6 +141,7 @@
|
||||
spdk_nvme_ns_cmd_comparev_with_md;
|
||||
spdk_nvme_ns_cmd_compare_with_md;
|
||||
|
||||
spdk_nvme_qpair_get_optimal_poll_group;
|
||||
spdk_nvme_qpair_process_completions;
|
||||
spdk_nvme_qpair_get_failure_reason;
|
||||
spdk_nvme_qpair_add_cmd_error_injection;
|
||||
|
@ -63,6 +63,12 @@ int g_destroy_return_value = 0;
|
||||
TAILQ_HEAD(nvme_transport_list, spdk_nvme_transport) g_spdk_nvme_transports =
|
||||
TAILQ_HEAD_INITIALIZER(g_spdk_nvme_transports);
|
||||
|
||||
DEFINE_STUB(nvme_transport_qpair_get_optimal_poll_group,
|
||||
struct spdk_nvme_transport_poll_group *,
|
||||
(const struct spdk_nvme_transport *transport,
|
||||
struct spdk_nvme_qpair *qpair),
|
||||
NULL);
|
||||
|
||||
static void
|
||||
unit_test_disconnected_qpair_cb(struct spdk_nvme_qpair *qpair, void *poll_group_ctx)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user