Commit dc718994 authored by Martin K. Petersen's avatar Martin K. Petersen
Browse files

Merge patch series "ibmvfc: fixes and generic prep work for NVMeoF support"

Tyrel Datwyler <tyreld@linux.ibm.com> says:

This series includes a couple minor fixes, generalization of some code
that is not protocol specific, and a reworking of the way event pool
buffers are accounted for by the driver. This is a precursor to a
series to follow that introduces support for NVMeoF protocol with
ibmvfc.

Link: https://lore.kernel.org/r/20230921225435.3537728-1-tyreld@linux.ibm.com


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parents 5ef104b7 02e2d8f4
Loading
Loading
Loading
Loading
+326 −121

File changed.

Preview size limit exceeded, changes collapsed.

+34 −16
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#define IBMVFC_ABORT_TIMEOUT		8
#define IBMVFC_ABORT_WAIT_TIMEOUT	40
#define IBMVFC_MAX_REQUESTS_DEFAULT	100
#define IBMVFC_SCSI_QDEPTH		128

#define IBMVFC_DEBUG			0
#define IBMVFC_MAX_TARGETS		1024
@@ -57,6 +58,8 @@
 * 2 for each discovery thread
 */
#define IBMVFC_NUM_INTERNAL_REQ	(1 + 1 + 1 + 2 + (disc_threads * 2))
/* Reserved suset of events for cancelling channelized IO commands */
#define IBMVFC_NUM_INTERNAL_SUBQ_REQ 4

#define IBMVFC_MAD_SUCCESS		0x00
#define IBMVFC_MAD_NOT_SUPPORTED	0xF1
@@ -713,9 +716,15 @@ enum ibmvfc_target_action {
	IBMVFC_TGT_ACTION_LOGOUT_DELETED_RPORT,
};

enum ibmvfc_protocol {
	IBMVFC_PROTO_SCSI = 0,
	IBMVFC_PROTO_NVME = 1,
};

struct ibmvfc_target {
	struct list_head queue;
	struct ibmvfc_host *vhost;
	enum ibmvfc_protocol protocol;
	u64 scsi_id;
	u64 wwpn;
	u64 new_scsi_id;
@@ -758,6 +767,7 @@ struct ibmvfc_event {
	struct completion *eh_comp;
	struct timer_list timer;
	u16 hwq;
	u8 reserved;
};

/* a pool of event structs for use */
@@ -793,6 +803,11 @@ struct ibmvfc_queue {
	struct ibmvfc_event_pool evt_pool;
	struct list_head sent;
	struct list_head free;
	u16 total_depth;
	u16 evt_depth;
	u16 reserved_depth;
	u16 evt_free;
	u16 reserved_free;
	spinlock_t l_lock;

	union ibmvfc_iu cancel_rsp;
@@ -804,11 +819,18 @@ struct ibmvfc_queue {
	unsigned long irq;
	unsigned long hwq_id;
	char name[32];
	irq_handler_t handler;
};

struct ibmvfc_scsi_channels {
struct ibmvfc_channels {
	struct ibmvfc_queue *scrqs;
	enum ibmvfc_protocol protocol;
	unsigned int active_queues;
	unsigned int desired_queues;
	unsigned int max_queues;
	int disc_buf_sz;
	struct ibmvfc_discover_targets_entry *disc_buf;
	dma_addr_t disc_buf_dma;
};

enum ibmvfc_host_action {
@@ -857,37 +879,33 @@ struct ibmvfc_host {
	mempool_t *tgt_pool;
	struct ibmvfc_queue crq;
	struct ibmvfc_queue async_crq;
	struct ibmvfc_scsi_channels scsi_scrqs;
	struct ibmvfc_channels scsi_scrqs;
	struct ibmvfc_npiv_login login_info;
	union ibmvfc_npiv_login_data *login_buf;
	dma_addr_t login_buf_dma;
	struct ibmvfc_channel_setup *channel_setup_buf;
	dma_addr_t channel_setup_dma;
	int disc_buf_sz;
	int log_level;
	struct ibmvfc_discover_targets_entry *disc_buf;
	struct mutex passthru_mutex;
	int max_vios_scsi_channels;
	unsigned int max_vios_scsi_channels;
	int task_set;
	int init_retries;
	int discovery_threads;
	int abort_threads;
	int client_migrated;
	int reinit;
	int delay_init;
	int scan_complete;
	int client_migrated:1;
	int reinit:1;
	int delay_init:1;
	int logged_in:1;
	int mq_enabled:1;
	int using_channels:1;
	int do_enquiry:1;
	int aborting_passthru:1;
	int scan_complete:1;
	int scan_timeout;
	int logged_in;
	int mq_enabled;
	int using_channels;
	int do_enquiry;
	int client_scsi_channels;
	int aborting_passthru;
	int events_to_log;
#define IBMVFC_AE_LINKUP	0x0001
#define IBMVFC_AE_LINKDOWN	0x0002
#define IBMVFC_AE_RSCN		0x0004
	dma_addr_t disc_buf_dma;
	unsigned int partition_number;
	char partition_name[97];
	void (*job_step) (struct ibmvfc_host *);