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)
|
## 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:
|
## v21.01:
|
||||||
|
|
||||||
### bdev
|
### 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);
|
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
|
* 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
|
* 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);
|
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 *(*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);
|
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)/../..)
|
SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
|
||||||
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
|
||||||
|
|
||||||
SO_VER := 4
|
SO_VER := 5
|
||||||
SO_MINOR := 2
|
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 \
|
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
|
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(
|
struct spdk_nvme_transport_poll_group *nvme_transport_poll_group_create(
|
||||||
const struct spdk_nvme_transport *transport);
|
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,
|
int nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
|
||||||
struct spdk_nvme_qpair *qpair);
|
struct spdk_nvme_qpair *qpair);
|
||||||
int nvme_transport_poll_group_remove(struct spdk_nvme_transport_poll_group *tgroup,
|
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;
|
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
|
int
|
||||||
spdk_nvme_poll_group_add(struct spdk_nvme_poll_group *group, struct spdk_nvme_qpair *qpair)
|
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;
|
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
|
int
|
||||||
nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
|
nvme_transport_poll_group_add(struct spdk_nvme_transport_poll_group *tgroup,
|
||||||
struct spdk_nvme_qpair *qpair)
|
struct spdk_nvme_qpair *qpair)
|
||||||
|
@ -141,6 +141,7 @@
|
|||||||
spdk_nvme_ns_cmd_comparev_with_md;
|
spdk_nvme_ns_cmd_comparev_with_md;
|
||||||
spdk_nvme_ns_cmd_compare_with_md;
|
spdk_nvme_ns_cmd_compare_with_md;
|
||||||
|
|
||||||
|
spdk_nvme_qpair_get_optimal_poll_group;
|
||||||
spdk_nvme_qpair_process_completions;
|
spdk_nvme_qpair_process_completions;
|
||||||
spdk_nvme_qpair_get_failure_reason;
|
spdk_nvme_qpair_get_failure_reason;
|
||||||
spdk_nvme_qpair_add_cmd_error_injection;
|
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(nvme_transport_list, spdk_nvme_transport) g_spdk_nvme_transports =
|
||||||
TAILQ_HEAD_INITIALIZER(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
|
static void
|
||||||
unit_test_disconnected_qpair_cb(struct spdk_nvme_qpair *qpair, void *poll_group_ctx)
|
unit_test_disconnected_qpair_cb(struct spdk_nvme_qpair *qpair, void *poll_group_ctx)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user