[RFC PATCH v4 03/27] qed: Add qed-NVMeTCP personality
Hannes Reinecke
hare at suse.de
Sun May 2 12:11:54 BST 2021
On 4/29/21 9:09 PM, Shai Malin wrote:
> From: Omkar Kulkarni <okulkarni at marvell.com>
>
> This patch adds qed NVMeTCP personality in order to support the NVMeTCP
> qed functionalities and manage the HW device shared resources.
> The same design is used with Eth (qede), RDMA(qedr), iSCSI (qedi) and
> FCoE (qedf).
>
> Acked-by: Igor Russkikh <irusskikh at marvell.com>
> Signed-off-by: Prabhakar Kushwaha <pkushwaha at marvell.com>
> Signed-off-by: Omkar Kulkarni <okulkarni at marvell.com>
> Signed-off-by: Shai Malin <smalin at marvell.com>
> Signed-off-by: Michal Kalderon <mkalderon at marvell.com>
> Signed-off-by: Ariel Elior <aelior at marvell.com>
> ---
> drivers/net/ethernet/qlogic/qed/qed.h | 3 ++
> drivers/net/ethernet/qlogic/qed/qed_cxt.c | 32 ++++++++++++++
> drivers/net/ethernet/qlogic/qed/qed_cxt.h | 1 +
> drivers/net/ethernet/qlogic/qed/qed_dev.c | 44 ++++++++++++++++---
> drivers/net/ethernet/qlogic/qed/qed_hsi.h | 3 +-
> drivers/net/ethernet/qlogic/qed/qed_ll2.c | 31 ++++++++-----
> drivers/net/ethernet/qlogic/qed/qed_mcp.c | 3 ++
> drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c | 3 +-
> drivers/net/ethernet/qlogic/qed/qed_ooo.c | 5 ++-
> .../net/ethernet/qlogic/qed/qed_sp_commands.c | 1 +
> 10 files changed, 108 insertions(+), 18 deletions(-)
>
> diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h
> index 91d4635009ab..7ae648c4edba 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed.h
> +++ b/drivers/net/ethernet/qlogic/qed/qed.h
> @@ -200,6 +200,7 @@ enum qed_pci_personality {
> QED_PCI_ETH,
> QED_PCI_FCOE,
> QED_PCI_ISCSI,
> + QED_PCI_NVMETCP,
> QED_PCI_ETH_ROCE,
> QED_PCI_ETH_IWARP,
> QED_PCI_ETH_RDMA,
> @@ -285,6 +286,8 @@ struct qed_hw_info {
> ((dev)->hw_info.personality == QED_PCI_FCOE)
> #define QED_IS_ISCSI_PERSONALITY(dev) \
> ((dev)->hw_info.personality == QED_PCI_ISCSI)
> +#define QED_IS_NVMETCP_PERSONALITY(dev) \
> + ((dev)->hw_info.personality == QED_PCI_NVMETCP)
>
So you have a distinct PCI personality for NVMe-oF, but not for the
protocol? Strange.
Why don't you have a distinct NVMe-oF protocol ID?
> /* Resource Allocation scheme results */
> u32 resc_start[QED_MAX_RESC];
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.c b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
> index 0a22f8ce9a2c..6cef75723e38 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_cxt.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.c
> @@ -2106,6 +2106,30 @@ int qed_cxt_set_pf_params(struct qed_hwfn *p_hwfn, u32 rdma_tasks)
> }
> break;
> }
> + case QED_PCI_NVMETCP:
> + {
> + struct qed_nvmetcp_pf_params *p_params;
> +
> + p_params = &p_hwfn->pf_params.nvmetcp_pf_params;
> +
> + if (p_params->num_cons && p_params->num_tasks) {
> + qed_cxt_set_proto_cid_count(p_hwfn,
> + PROTOCOLID_NVMETCP,
> + p_params->num_cons,
> + 0);
> +
> + qed_cxt_set_proto_tid_count(p_hwfn,
> + PROTOCOLID_NVMETCP,
> + QED_CTX_NVMETCP_TID_SEG,
> + 0,
> + p_params->num_tasks,
> + true);
> + } else {
> + DP_INFO(p_hwfn->cdev,
> + "NvmeTCP personality used without setting params!\n");
> + }
> + break;
> + }
> default:
> return -EINVAL;
> }
> @@ -2132,6 +2156,10 @@ int qed_cxt_get_tid_mem_info(struct qed_hwfn *p_hwfn,
> proto = PROTOCOLID_ISCSI;
> seg = QED_CXT_ISCSI_TID_SEG;
> break;
> + case QED_PCI_NVMETCP:
> + proto = PROTOCOLID_NVMETCP;
> + seg = QED_CTX_NVMETCP_TID_SEG;
> + break;
> default:
> return -EINVAL;
> }
> @@ -2458,6 +2486,10 @@ int qed_cxt_get_task_ctx(struct qed_hwfn *p_hwfn,
> proto = PROTOCOLID_ISCSI;
> seg = QED_CXT_ISCSI_TID_SEG;
> break;
> + case QED_PCI_NVMETCP:
> + proto = PROTOCOLID_NVMETCP;
> + seg = QED_CTX_NVMETCP_TID_SEG;
> + break;
> default:
> return -EINVAL;
> }
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_cxt.h b/drivers/net/ethernet/qlogic/qed/qed_cxt.h
> index 056e79620a0e..8f1a77cb33f6 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_cxt.h
> +++ b/drivers/net/ethernet/qlogic/qed/qed_cxt.h
> @@ -51,6 +51,7 @@ int qed_cxt_get_tid_mem_info(struct qed_hwfn *p_hwfn,
> struct qed_tid_mem *p_info);
>
> #define QED_CXT_ISCSI_TID_SEG PROTOCOLID_ISCSI
> +#define QED_CTX_NVMETCP_TID_SEG PROTOCOLID_NVMETCP
> #define QED_CXT_ROCE_TID_SEG PROTOCOLID_ROCE
> #define QED_CXT_FCOE_TID_SEG PROTOCOLID_FCOE
> enum qed_cxt_elem_type {
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
> index d2f5855b2ea7..d3f8cc42d07e 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
> @@ -37,6 +37,7 @@
> #include "qed_sriov.h"
> #include "qed_vf.h"
> #include "qed_rdma.h"
> +#include "qed_nvmetcp.h"
>
> static DEFINE_SPINLOCK(qm_lock);
>
> @@ -667,7 +668,8 @@ qed_llh_set_engine_affin(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
> }
>
> /* Storage PF is bound to a single engine while L2 PF uses both */
> - if (QED_IS_FCOE_PERSONALITY(p_hwfn) || QED_IS_ISCSI_PERSONALITY(p_hwfn))
> + if (QED_IS_FCOE_PERSONALITY(p_hwfn) || QED_IS_ISCSI_PERSONALITY(p_hwfn) ||
> + QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> eng = cdev->fir_affin ? QED_ENG1 : QED_ENG0;
> else /* L2_PERSONALITY */
> eng = QED_BOTH_ENG;
> @@ -1164,6 +1166,9 @@ void qed_llh_remove_mac_filter(struct qed_dev *cdev,
> if (!test_bit(QED_MF_LLH_MAC_CLSS, &cdev->mf_bits))
> goto out;
>
> + if (QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> + return;
> +
> ether_addr_copy(filter.mac.addr, mac_addr);
> rc = qed_llh_shadow_remove_filter(cdev, ppfid, &filter, &filter_idx,
> &ref_cnt);
> @@ -1381,6 +1386,11 @@ void qed_resc_free(struct qed_dev *cdev)
> qed_ooo_free(p_hwfn);
> }
>
> + if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> + qed_nvmetcp_free(p_hwfn);
> + qed_ooo_free(p_hwfn);
> + }
> +
> if (QED_IS_RDMA_PERSONALITY(p_hwfn) && rdma_info) {
> qed_spq_unregister_async_cb(p_hwfn, rdma_info->proto);
> qed_rdma_info_free(p_hwfn);
> @@ -1423,6 +1433,7 @@ static u32 qed_get_pq_flags(struct qed_hwfn *p_hwfn)
> flags |= PQ_FLAGS_OFLD;
> break;
> case QED_PCI_ISCSI:
> + case QED_PCI_NVMETCP:
> flags |= PQ_FLAGS_ACK | PQ_FLAGS_OOO | PQ_FLAGS_OFLD;
> break;
> case QED_PCI_ETH_ROCE:
> @@ -2269,6 +2280,12 @@ int qed_resc_alloc(struct qed_dev *cdev)
> PROTOCOLID_ISCSI,
> NULL);
> n_eqes += 2 * num_cons;
> + } else if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> + num_cons =
> + qed_cxt_get_proto_cid_count(p_hwfn,
> + PROTOCOLID_NVMETCP,
> + NULL);
> + n_eqes += 2 * num_cons;
> }
>
> if (n_eqes > 0xFFFF) {
> @@ -2313,6 +2330,15 @@ int qed_resc_alloc(struct qed_dev *cdev)
> goto alloc_err;
> }
>
> + if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> + rc = qed_nvmetcp_alloc(p_hwfn);
> + if (rc)
> + goto alloc_err;
> + rc = qed_ooo_alloc(p_hwfn);
> + if (rc)
> + goto alloc_err;
> + }
> +
> if (QED_IS_RDMA_PERSONALITY(p_hwfn)) {
> rc = qed_rdma_info_alloc(p_hwfn);
> if (rc)
> @@ -2393,6 +2419,11 @@ void qed_resc_setup(struct qed_dev *cdev)
> qed_iscsi_setup(p_hwfn);
> qed_ooo_setup(p_hwfn);
> }
> +
> + if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP) {
> + qed_nvmetcp_setup(p_hwfn);
> + qed_ooo_setup(p_hwfn);
> + }
> }
> }
>
> @@ -2854,7 +2885,8 @@ static int qed_hw_init_pf(struct qed_hwfn *p_hwfn,
>
> /* Protocol Configuration */
> STORE_RT_REG(p_hwfn, PRS_REG_SEARCH_TCP_RT_OFFSET,
> - (p_hwfn->hw_info.personality == QED_PCI_ISCSI) ? 1 : 0);
> + ((p_hwfn->hw_info.personality == QED_PCI_ISCSI) ||
> + (p_hwfn->hw_info.personality == QED_PCI_NVMETCP)) ? 1 : 0);
> STORE_RT_REG(p_hwfn, PRS_REG_SEARCH_FCOE_RT_OFFSET,
> (p_hwfn->hw_info.personality == QED_PCI_FCOE) ? 1 : 0);
> STORE_RT_REG(p_hwfn, PRS_REG_SEARCH_ROCE_RT_OFFSET, 0);
> @@ -3531,7 +3563,7 @@ static void qed_hw_set_feat(struct qed_hwfn *p_hwfn)
> RESC_NUM(p_hwfn,
> QED_CMDQS_CQS));
>
> - if (QED_IS_ISCSI_PERSONALITY(p_hwfn))
> + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> feat_num[QED_ISCSI_CQ] = min_t(u32, sb_cnt.cnt,
> RESC_NUM(p_hwfn,
> QED_CMDQS_CQS));
> @@ -3734,7 +3766,8 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
> break;
> case QED_BDQ:
> if (p_hwfn->hw_info.personality != QED_PCI_ISCSI &&
> - p_hwfn->hw_info.personality != QED_PCI_FCOE)
> + p_hwfn->hw_info.personality != QED_PCI_FCOE &&
> + p_hwfn->hw_info.personality != QED_PCI_NVMETCP)
> *p_resc_num = 0;
> else
> *p_resc_num = 1;
> @@ -3755,7 +3788,8 @@ int qed_hw_get_dflt_resc(struct qed_hwfn *p_hwfn,
> *p_resc_start = 0;
> else if (p_hwfn->cdev->num_ports_in_engine == 4)
> *p_resc_start = p_hwfn->port_id;
> - else if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
> + else if (p_hwfn->hw_info.personality == QED_PCI_ISCSI ||
> + p_hwfn->hw_info.personality == QED_PCI_NVMETCP)
> *p_resc_start = p_hwfn->port_id;
> else if (p_hwfn->hw_info.personality == QED_PCI_FCOE)
> *p_resc_start = p_hwfn->port_id + 2;
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_hsi.h b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
> index 24472f6a83c2..9c9ec8f53ef8 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_hsi.h
> +++ b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
> @@ -12148,7 +12148,8 @@ struct public_func {
> #define FUNC_MF_CFG_PROTOCOL_ISCSI 0x00000010
> #define FUNC_MF_CFG_PROTOCOL_FCOE 0x00000020
> #define FUNC_MF_CFG_PROTOCOL_ROCE 0x00000030
> -#define FUNC_MF_CFG_PROTOCOL_MAX 0x00000030
> +#define FUNC_MF_CFG_PROTOCOL_NVMETCP 0x00000040
> +#define FUNC_MF_CFG_PROTOCOL_MAX 0x00000040
>
> #define FUNC_MF_CFG_MIN_BW_MASK 0x0000ff00
> #define FUNC_MF_CFG_MIN_BW_SHIFT 8
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_ll2.c b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> index 49783f365079..88bfcdcd4a4c 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_ll2.c
> @@ -960,7 +960,8 @@ static int qed_sp_ll2_rx_queue_start(struct qed_hwfn *p_hwfn,
>
> if (test_bit(QED_MF_LL2_NON_UNICAST, &p_hwfn->cdev->mf_bits) &&
> p_ramrod->main_func_queue && conn_type != QED_LL2_TYPE_ROCE &&
> - conn_type != QED_LL2_TYPE_IWARP) {
> + conn_type != QED_LL2_TYPE_IWARP &&
> + (!QED_IS_NVMETCP_PERSONALITY(p_hwfn))) {
> p_ramrod->mf_si_bcast_accept_all = 1;
> p_ramrod->mf_si_mcast_accept_all = 1;
> } else {
> @@ -1049,6 +1050,8 @@ static int qed_sp_ll2_tx_queue_start(struct qed_hwfn *p_hwfn,
> case QED_LL2_TYPE_OOO:
> if (p_hwfn->hw_info.personality == QED_PCI_ISCSI)
> p_ramrod->conn_type = PROTOCOLID_ISCSI;
> + else if (p_hwfn->hw_info.personality == QED_PCI_NVMETCP)
> + p_ramrod->conn_type = PROTOCOLID_NVMETCP;
> else
> p_ramrod->conn_type = PROTOCOLID_IWARP;
> break;
> @@ -1634,7 +1637,8 @@ int qed_ll2_establish_connection(void *cxt, u8 connection_handle)
> if (rc)
> goto out;
>
> - if (!QED_IS_RDMA_PERSONALITY(p_hwfn))
> + if (!QED_IS_RDMA_PERSONALITY(p_hwfn) &&
> + !QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> qed_wr(p_hwfn, p_ptt, PRS_REG_USE_LIGHT_L2, 1);
>
> qed_ll2_establish_connection_ooo(p_hwfn, p_ll2_conn);
> @@ -2376,7 +2380,8 @@ static int qed_ll2_start_ooo(struct qed_hwfn *p_hwfn,
> static bool qed_ll2_is_storage_eng1(struct qed_dev *cdev)
> {
> return (QED_IS_FCOE_PERSONALITY(QED_LEADING_HWFN(cdev)) ||
> - QED_IS_ISCSI_PERSONALITY(QED_LEADING_HWFN(cdev))) &&
> + QED_IS_ISCSI_PERSONALITY(QED_LEADING_HWFN(cdev)) ||
> + QED_IS_NVMETCP_PERSONALITY(QED_LEADING_HWFN(cdev))) &&
> (QED_AFFIN_HWFN(cdev) != QED_LEADING_HWFN(cdev));
> }
>
> @@ -2402,11 +2407,13 @@ static int qed_ll2_stop(struct qed_dev *cdev)
>
> if (cdev->ll2->handle == QED_LL2_UNUSED_HANDLE)
> return 0;
> + if (!QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> + qed_llh_remove_mac_filter(cdev, 0, cdev->ll2_mac_address);
>
> qed_llh_remove_mac_filter(cdev, 0, cdev->ll2_mac_address);
> eth_zero_addr(cdev->ll2_mac_address);
>
> - if (QED_IS_ISCSI_PERSONALITY(p_hwfn))
> + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> qed_ll2_stop_ooo(p_hwfn);
>
> /* In CMT mode, LL2 is always started on engine 0 for a storage PF */
> @@ -2442,6 +2449,7 @@ static int __qed_ll2_start(struct qed_hwfn *p_hwfn,
> conn_type = QED_LL2_TYPE_FCOE;
> break;
> case QED_PCI_ISCSI:
> + case QED_PCI_NVMETCP:
> conn_type = QED_LL2_TYPE_ISCSI;
> break;
> case QED_PCI_ETH_ROCE:
> @@ -2567,7 +2575,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> }
> }
>
> - if (QED_IS_ISCSI_PERSONALITY(p_hwfn)) {
> + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn)) {
> DP_VERBOSE(cdev, QED_MSG_STORAGE, "Starting OOO LL2 queue\n");
> rc = qed_ll2_start_ooo(p_hwfn, params);
> if (rc) {
> @@ -2576,10 +2584,13 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> }
> }
>
> - rc = qed_llh_add_mac_filter(cdev, 0, params->ll2_mac_address);
> - if (rc) {
> - DP_NOTICE(cdev, "Failed to add an LLH filter\n");
> - goto err3;
> + if (!QED_IS_NVMETCP_PERSONALITY(p_hwfn)) {
> + rc = qed_llh_add_mac_filter(cdev, 0, params->ll2_mac_address);
> + if (rc) {
> + DP_NOTICE(cdev, "Failed to add an LLH filter\n");
> + goto err3;
> + }
> +
> }
>
> ether_addr_copy(cdev->ll2_mac_address, params->ll2_mac_address);
> @@ -2587,7 +2598,7 @@ static int qed_ll2_start(struct qed_dev *cdev, struct qed_ll2_params *params)
> return 0;
>
> err3:
> - if (QED_IS_ISCSI_PERSONALITY(p_hwfn))
> + if (QED_IS_ISCSI_PERSONALITY(p_hwfn) || QED_IS_NVMETCP_PERSONALITY(p_hwfn))
> qed_ll2_stop_ooo(p_hwfn);
> err2:
> if (b_is_storage_eng1)
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
> index cd882c453394..4387292c37e2 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
> @@ -2446,6 +2446,9 @@ qed_mcp_get_shmem_proto(struct qed_hwfn *p_hwfn,
> case FUNC_MF_CFG_PROTOCOL_ISCSI:
> *p_proto = QED_PCI_ISCSI;
> break;
> + case FUNC_MF_CFG_PROTOCOL_NVMETCP:
> + *p_proto = QED_PCI_NVMETCP;
> + break;
> case FUNC_MF_CFG_PROTOCOL_FCOE:
> *p_proto = QED_PCI_FCOE;
> break;
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c b/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c
> index 3e3192a3ad9b..6190adf965bc 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_mng_tlv.c
> @@ -1306,7 +1306,8 @@ int qed_mfw_process_tlv_req(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt)
> }
>
> if ((tlv_group & QED_MFW_TLV_ISCSI) &&
> - p_hwfn->hw_info.personality != QED_PCI_ISCSI) {
> + p_hwfn->hw_info.personality != QED_PCI_ISCSI &&
> + p_hwfn->hw_info.personality != QED_PCI_NVMETCP) {
> DP_VERBOSE(p_hwfn, QED_MSG_SP,
> "Skipping iSCSI TLVs for non-iSCSI function\n");
> tlv_group &= ~QED_MFW_TLV_ISCSI;
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_ooo.c b/drivers/net/ethernet/qlogic/qed/qed_ooo.c
> index 88353aa404dc..d37bb2463f98 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_ooo.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_ooo.c
> @@ -16,7 +16,7 @@
> #include "qed_ll2.h"
> #include "qed_ooo.h"
> #include "qed_cxt.h"
> -
> +#include "qed_nvmetcp.h"
> static struct qed_ooo_archipelago
> *qed_ooo_seek_archipelago(struct qed_hwfn *p_hwfn,
> struct qed_ooo_info
> @@ -85,6 +85,9 @@ int qed_ooo_alloc(struct qed_hwfn *p_hwfn)
> case QED_PCI_ISCSI:
> proto = PROTOCOLID_ISCSI;
> break;
> + case QED_PCI_NVMETCP:
> + proto = PROTOCOLID_NVMETCP;
> + break;
> case QED_PCI_ETH_RDMA:
> case QED_PCI_ETH_IWARP:
> proto = PROTOCOLID_IWARP;
> diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
> index aa71adcf31ee..60b3876387a9 100644
> --- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
> +++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
> @@ -385,6 +385,7 @@ int qed_sp_pf_start(struct qed_hwfn *p_hwfn,
> p_ramrod->personality = PERSONALITY_FCOE;
> break;
> case QED_PCI_ISCSI:
> + case QED_PCI_NVMETCP:
> p_ramrod->personality = PERSONALITY_ISCSI;
> break;
> case QED_PCI_ETH_ROCE:
>
As indicated, I do find this mix of 'nvmetcp is nearly iscsi' a bit
strange. I would have preferred to have distinct types for nvmetcp.
Cheers,
Hannes
--
Dr. Hannes Reinecke Kernel Storage Architect
hare at suse.de +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer
More information about the Linux-nvme
mailing list