Revert "nvme-tcp-offload: ULP Series"
This reverts commits: -7624115420
nvme: NVME_TCP_OFFLOAD should not default to m -5ff5622ea1
: Merge branch 'NVMeTCP-Offload-ULP' As requested on the mailing-list: https://lore.kernel.org/netdev/SJ0PR18MB3882C20793EA35A3E8DAE300CC379@SJ0PR18MB3882.namprd18.prod.outlook.com/ This patch will revert the nvme-tcp-offload ULP from net-next. The nvme-tcp-offload ULP series will continue to be considered only on linux-nvme@lists.infradead.org. Signed-off-by: Prabhakar Kushwaha <pkushwaha@marvell.com> Signed-off-by: Michal Kalderon <mkalderon@marvell.com> Signed-off-by: Ariel Elior <aelior@marvell.com> Signed-off-by: Shai Malin <smalin@marvell.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c6be5a22fd
commit
daf6e8c9ca
@ -13107,14 +13107,6 @@ F: drivers/nvme/host/
|
||||
F: include/linux/nvme.h
|
||||
F: include/uapi/linux/nvme_ioctl.h
|
||||
|
||||
NVM EXPRESS TCP OFFLOAD TRANSPORT DRIVERS
|
||||
M: Shai Malin <smalin@marvell.com>
|
||||
M: Ariel Elior <aelior@marvell.com>
|
||||
L: linux-nvme@lists.infradead.org
|
||||
S: Supported
|
||||
F: drivers/nvme/host/tcp-offload.c
|
||||
F: drivers/nvme/host/tcp-offload.h
|
||||
|
||||
NVM EXPRESS FC TRANSPORT DRIVERS
|
||||
M: James Smart <james.smart@broadcom.com>
|
||||
L: linux-nvme@lists.infradead.org
|
||||
|
@ -84,19 +84,3 @@ config NVME_TCP
|
||||
from https://github.com/linux-nvme/nvme-cli.
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config NVME_TCP_OFFLOAD
|
||||
tristate "NVM Express over Fabrics TCP offload common layer"
|
||||
depends on BLOCK
|
||||
depends on INET
|
||||
select NVME_CORE
|
||||
select NVME_FABRICS
|
||||
help
|
||||
This provides support for the NVMe over Fabrics protocol using
|
||||
the TCP offload transport. This allows you to use remote block devices
|
||||
exported using the NVMe protocol set.
|
||||
|
||||
To configure a NVMe over Fabrics controller use the nvme-cli tool
|
||||
from https://github.com/linux-nvme/nvme-cli.
|
||||
|
||||
If unsure, say N.
|
||||
|
@ -8,7 +8,6 @@ obj-$(CONFIG_NVME_FABRICS) += nvme-fabrics.o
|
||||
obj-$(CONFIG_NVME_RDMA) += nvme-rdma.o
|
||||
obj-$(CONFIG_NVME_FC) += nvme-fc.o
|
||||
obj-$(CONFIG_NVME_TCP) += nvme-tcp.o
|
||||
obj-$(CONFIG_NVME_TCP_OFFLOAD) += nvme-tcp-offload.o
|
||||
|
||||
nvme-core-y := core.o ioctl.o
|
||||
nvme-core-$(CONFIG_TRACING) += trace.o
|
||||
@ -27,5 +26,3 @@ nvme-rdma-y += rdma.o
|
||||
nvme-fc-y += fc.o
|
||||
|
||||
nvme-tcp-y += tcp.o
|
||||
|
||||
nvme-tcp-offload-y += tcp-offload.o
|
||||
|
@ -860,8 +860,8 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int nvmf_check_required_opts(struct nvmf_ctrl_options *opts,
|
||||
unsigned int required_opts)
|
||||
static int nvmf_check_required_opts(struct nvmf_ctrl_options *opts,
|
||||
unsigned int required_opts)
|
||||
{
|
||||
if ((opts->mask & required_opts) != required_opts) {
|
||||
int i;
|
||||
@ -879,7 +879,6 @@ int nvmf_check_required_opts(struct nvmf_ctrl_options *opts,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvmf_check_required_opts);
|
||||
|
||||
bool nvmf_ip_options_match(struct nvme_ctrl *ctrl,
|
||||
struct nvmf_ctrl_options *opts)
|
||||
@ -943,6 +942,13 @@ void nvmf_free_options(struct nvmf_ctrl_options *opts)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvmf_free_options);
|
||||
|
||||
#define NVMF_REQUIRED_OPTS (NVMF_OPT_TRANSPORT | NVMF_OPT_NQN)
|
||||
#define NVMF_ALLOWED_OPTS (NVMF_OPT_QUEUE_SIZE | NVMF_OPT_NR_IO_QUEUES | \
|
||||
NVMF_OPT_KATO | NVMF_OPT_HOSTNQN | \
|
||||
NVMF_OPT_HOST_ID | NVMF_OPT_DUP_CONNECT |\
|
||||
NVMF_OPT_DISABLE_SQFLOW |\
|
||||
NVMF_OPT_FAIL_FAST_TMO)
|
||||
|
||||
static struct nvme_ctrl *
|
||||
nvmf_create_ctrl(struct device *dev, const char *buf)
|
||||
{
|
||||
|
@ -68,13 +68,6 @@ enum {
|
||||
NVMF_OPT_FAIL_FAST_TMO = 1 << 20,
|
||||
};
|
||||
|
||||
#define NVMF_REQUIRED_OPTS (NVMF_OPT_TRANSPORT | NVMF_OPT_NQN)
|
||||
#define NVMF_ALLOWED_OPTS (NVMF_OPT_QUEUE_SIZE | NVMF_OPT_NR_IO_QUEUES | \
|
||||
NVMF_OPT_KATO | NVMF_OPT_HOSTNQN | \
|
||||
NVMF_OPT_HOST_ID | NVMF_OPT_DUP_CONNECT |\
|
||||
NVMF_OPT_DISABLE_SQFLOW |\
|
||||
NVMF_OPT_FAIL_FAST_TMO)
|
||||
|
||||
/**
|
||||
* struct nvmf_ctrl_options - Used to hold the options specified
|
||||
* with the parsing opts enum.
|
||||
@ -193,7 +186,5 @@ int nvmf_get_address(struct nvme_ctrl *ctrl, char *buf, int size);
|
||||
bool nvmf_should_reconnect(struct nvme_ctrl *ctrl);
|
||||
bool nvmf_ip_options_match(struct nvme_ctrl *ctrl,
|
||||
struct nvmf_ctrl_options *opts);
|
||||
int nvmf_check_required_opts(struct nvmf_ctrl_options *opts,
|
||||
unsigned int required_opts);
|
||||
|
||||
#endif /* _NVME_FABRICS_H */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,206 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright 2021 Marvell. All rights reserved.
|
||||
*/
|
||||
|
||||
/* Linux includes */
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/scatterlist.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/nvme-tcp.h>
|
||||
|
||||
/* Driver includes */
|
||||
#include "nvme.h"
|
||||
#include "fabrics.h"
|
||||
|
||||
/* Forward declarations */
|
||||
struct nvme_tcp_ofld_ops;
|
||||
|
||||
/* Representation of a vendor-specific device. This is the struct used to
|
||||
* register to the offload layer by the vendor-specific driver during its probe
|
||||
* function.
|
||||
* Allocated by vendor-specific driver.
|
||||
*/
|
||||
struct nvme_tcp_ofld_dev {
|
||||
struct list_head entry;
|
||||
struct net_device *ndev;
|
||||
struct nvme_tcp_ofld_ops *ops;
|
||||
|
||||
/* Vendor specific driver context */
|
||||
int num_hw_vectors;
|
||||
};
|
||||
|
||||
/* Per IO struct holding the nvme_request and command
|
||||
* Allocated by blk-mq.
|
||||
*/
|
||||
struct nvme_tcp_ofld_req {
|
||||
struct nvme_request req;
|
||||
struct nvme_command nvme_cmd;
|
||||
struct list_head queue_entry;
|
||||
struct nvme_tcp_ofld_queue *queue;
|
||||
|
||||
/* Vendor specific driver context */
|
||||
void *private_data;
|
||||
|
||||
/* async flag is used to distinguish between async and IO flow
|
||||
* in common send_req() of nvme_tcp_ofld_ops.
|
||||
*/
|
||||
bool async;
|
||||
|
||||
void (*done)(struct nvme_tcp_ofld_req *req,
|
||||
union nvme_result *result,
|
||||
__le16 status);
|
||||
};
|
||||
|
||||
enum nvme_tcp_ofld_queue_flags {
|
||||
NVME_TCP_OFLD_Q_ALLOCATED = 0,
|
||||
NVME_TCP_OFLD_Q_LIVE = 1,
|
||||
};
|
||||
|
||||
/* Allocated by nvme_tcp_ofld */
|
||||
struct nvme_tcp_ofld_queue {
|
||||
/* Offload device associated to this queue */
|
||||
struct nvme_tcp_ofld_dev *dev;
|
||||
struct nvme_tcp_ofld_ctrl *ctrl;
|
||||
unsigned long flags;
|
||||
size_t cmnd_capsule_len;
|
||||
|
||||
/* mutex used during stop_queue */
|
||||
struct mutex queue_lock;
|
||||
|
||||
u8 hdr_digest;
|
||||
u8 data_digest;
|
||||
u8 tos;
|
||||
|
||||
/* Vendor specific driver context */
|
||||
void *private_data;
|
||||
|
||||
/* Error callback function */
|
||||
int (*report_err)(struct nvme_tcp_ofld_queue *queue);
|
||||
};
|
||||
|
||||
/* Connectivity (routing) params used for establishing a connection */
|
||||
struct nvme_tcp_ofld_ctrl_con_params {
|
||||
struct sockaddr_storage remote_ip_addr;
|
||||
|
||||
/* If NVMF_OPT_HOST_TRADDR is provided it will be set in local_ip_addr
|
||||
* in nvme_tcp_ofld_create_ctrl().
|
||||
* If NVMF_OPT_HOST_TRADDR is not provided the local_ip_addr will be
|
||||
* initialized by claim_dev().
|
||||
*/
|
||||
struct sockaddr_storage local_ip_addr;
|
||||
};
|
||||
|
||||
/* Allocated by nvme_tcp_ofld */
|
||||
struct nvme_tcp_ofld_ctrl {
|
||||
struct nvme_ctrl nctrl;
|
||||
struct list_head list;
|
||||
struct nvme_tcp_ofld_dev *dev;
|
||||
|
||||
/* admin and IO queues */
|
||||
struct blk_mq_tag_set tag_set;
|
||||
struct blk_mq_tag_set admin_tag_set;
|
||||
struct nvme_tcp_ofld_queue *queues;
|
||||
|
||||
struct work_struct err_work;
|
||||
struct delayed_work connect_work;
|
||||
|
||||
/*
|
||||
* Each entry in the array indicates the number of queues of
|
||||
* corresponding type.
|
||||
*/
|
||||
u32 io_queues[HCTX_MAX_TYPES];
|
||||
|
||||
/* Connectivity params */
|
||||
struct nvme_tcp_ofld_ctrl_con_params conn_params;
|
||||
|
||||
struct nvme_tcp_ofld_req async_req;
|
||||
|
||||
/* Vendor specific driver context */
|
||||
void *private_data;
|
||||
};
|
||||
|
||||
struct nvme_tcp_ofld_ops {
|
||||
const char *name;
|
||||
struct module *module;
|
||||
|
||||
/* For vendor-specific driver to report what opts it supports.
|
||||
* It could be different than the ULP supported opts due to hardware
|
||||
* limitations. Also it could be different among different vendor
|
||||
* drivers.
|
||||
*/
|
||||
int required_opts; /* bitmap using enum nvmf_parsing_opts */
|
||||
int allowed_opts; /* bitmap using enum nvmf_parsing_opts */
|
||||
|
||||
/* For vendor-specific max num of segments and IO sizes */
|
||||
u32 max_hw_sectors;
|
||||
u32 max_segments;
|
||||
|
||||
/**
|
||||
* claim_dev: Return True if addr is reachable via offload device.
|
||||
* @dev: The offload device to check.
|
||||
* @ctrl: The offload ctrl have the conn_params field. The
|
||||
* conn_params is to be filled with routing params by the lower
|
||||
* driver.
|
||||
*/
|
||||
int (*claim_dev)(struct nvme_tcp_ofld_dev *dev,
|
||||
struct nvme_tcp_ofld_ctrl *ctrl);
|
||||
|
||||
/**
|
||||
* setup_ctrl: Setup device specific controller structures.
|
||||
* @ctrl: The offload ctrl.
|
||||
*/
|
||||
int (*setup_ctrl)(struct nvme_tcp_ofld_ctrl *ctrl);
|
||||
|
||||
/**
|
||||
* release_ctrl: Release/Free device specific controller structures.
|
||||
* @ctrl: The offload ctrl.
|
||||
*/
|
||||
int (*release_ctrl)(struct nvme_tcp_ofld_ctrl *ctrl);
|
||||
|
||||
/**
|
||||
* create_queue: Create offload queue and establish TCP + NVMeTCP
|
||||
* (icreq+icresp) connection. Return true on successful connection.
|
||||
* Based on nvme_tcp_alloc_queue.
|
||||
* @queue: The queue itself - used as input and output.
|
||||
* @qid: The queue ID associated with the requested queue.
|
||||
* @q_size: The queue depth.
|
||||
*/
|
||||
int (*create_queue)(struct nvme_tcp_ofld_queue *queue, int qid,
|
||||
size_t queue_size);
|
||||
|
||||
/**
|
||||
* drain_queue: Drain a given queue - blocking function call.
|
||||
* Return from this function ensures that no additional
|
||||
* completions will arrive on this queue and that the HW will
|
||||
* not access host memory.
|
||||
* @queue: The queue to drain.
|
||||
*/
|
||||
void (*drain_queue)(struct nvme_tcp_ofld_queue *queue);
|
||||
|
||||
/**
|
||||
* destroy_queue: Close the TCP + NVMeTCP connection of a given queue
|
||||
* and make sure its no longer active (no completions will arrive on the
|
||||
* queue).
|
||||
* @queue: The queue to destroy.
|
||||
*/
|
||||
void (*destroy_queue)(struct nvme_tcp_ofld_queue *queue);
|
||||
|
||||
/**
|
||||
* poll_queue: Poll a given queue for completions.
|
||||
* @queue: The queue to poll.
|
||||
*/
|
||||
int (*poll_queue)(struct nvme_tcp_ofld_queue *queue);
|
||||
|
||||
/**
|
||||
* send_req: Dispatch a request. Returns the execution status.
|
||||
* @req: Ptr to request to be sent.
|
||||
*/
|
||||
int (*send_req)(struct nvme_tcp_ofld_req *req);
|
||||
};
|
||||
|
||||
/* Exported functions for lower vendor specific offload drivers */
|
||||
int nvme_tcp_ofld_register_dev(struct nvme_tcp_ofld_dev *dev);
|
||||
void nvme_tcp_ofld_unregister_dev(struct nvme_tcp_ofld_dev *dev);
|
||||
void nvme_tcp_ofld_error_recovery(struct nvme_ctrl *nctrl);
|
||||
inline size_t nvme_tcp_ofld_inline_data_size(struct nvme_tcp_ofld_queue *queue);
|
Loading…
Reference in New Issue
Block a user