qla2x00t-32gbit: Backport to RHEL 7

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@8103 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2019-03-29 01:41:13 +00:00
parent 3738fc934d
commit 1ccf739c01
10 changed files with 315 additions and 71 deletions
+171 -58
View File
@@ -11,12 +11,36 @@
#include <linux/delay.h>
#include <linux/bsg-lib.h>
#ifndef NEW_LIBFC_API
static inline struct Scsi_Host *fc_bsg_to_shost(struct fc_bsg_job *job)
{
return job->shost;
}
static inline struct fc_rport *fc_bsg_to_rport(struct fc_bsg_job *job)
{
return job->rport;
}
static inline void bsg_job_done_backport(struct fc_bsg_job *job, int result,
unsigned int reply_payload_rcv_len)
{
job->job_done(job);
}
#define bsg_job_done bsg_job_done_backport
#endif
/* BSG support for ELS/CT pass through */
void
qla2x00_bsg_job_done(void *ptr, int res)
{
srb_t *sp = ptr;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = sp->u.bsg_job;
#else
struct bsg_job *bsg_job = sp->u.bsg_job;
#endif
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
bsg_reply->result = res;
@@ -30,7 +54,11 @@ qla2x00_bsg_sp_free(void *ptr)
{
srb_t *sp = ptr;
struct qla_hw_data *ha = sp->vha->hw;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = sp->u.bsg_job;
#else
struct bsg_job *bsg_job = sp->u.bsg_job;
#endif
struct fc_bsg_request *bsg_request = bsg_job->request;
struct qla_mt_iocb_rqst_fx00 *piocb_rqst;
@@ -117,8 +145,11 @@ qla24xx_fcp_prio_cfg_valid(scsi_qla_host_t *vha,
return ret;
}
static int
qla24xx_proc_fcp_prio_cfg_cmd(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla24xx_proc_fcp_prio_cfg_cmd(struct fc_bsg_job *bsg_job)
#else
static int qla24xx_proc_fcp_prio_cfg_cmd(struct bsg_job *bsg_job)
#endif
{
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
struct fc_bsg_request *bsg_request = bsg_job->request;
@@ -246,8 +277,11 @@ exit_fcp_prio_cfg:
return ret;
}
static int
qla2x00_process_els(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_process_els(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_process_els(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_rport *rport;
@@ -425,8 +459,11 @@ qla24xx_calc_ct_iocbs(uint16_t dsds)
return iocbs;
}
static int
qla2x00_process_ct(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_process_ct(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_process_ct(struct bsg_job *bsg_job)
#endif
{
srb_t *sp;
struct fc_bsg_request *bsg_request = bsg_job->request;
@@ -703,8 +740,11 @@ done_set_internal:
return rval;
}
static int
qla2x00_process_loopback(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_process_loopback(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_process_loopback(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
@@ -919,7 +959,7 @@ qla2x00_process_loopback(struct bsg_job *bsg_job)
bsg_job->reply_len = sizeof(struct fc_bsg_reply) +
sizeof(response) + sizeof(uint8_t);
fw_sts_ptr = bsg_job->reply + sizeof(struct fc_bsg_reply);
fw_sts_ptr = bsg_job_sense(bsg_job) + sizeof(struct fc_bsg_reply);
memcpy(bsg_job->reply + sizeof(struct fc_bsg_reply), response,
sizeof(response));
fw_sts_ptr += sizeof(response);
@@ -945,8 +985,11 @@ done_unmap_req_sg:
return rval;
}
static int
qla84xx_reset(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla84xx_reset(struct fc_bsg_job *bsg_job)
#else
static int qla84xx_reset(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -981,8 +1024,11 @@ qla84xx_reset(struct bsg_job *bsg_job)
return rval;
}
static int
qla84xx_updatefw(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla84xx_updatefw(struct fc_bsg_job *bsg_job)
#else
static int qla84xx_updatefw(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
@@ -1092,8 +1138,11 @@ done_unmap_sg:
return rval;
}
static int
qla84xx_mgmt_cmd(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla84xx_mgmt_cmd(struct fc_bsg_job *bsg_job)
#else
static int qla84xx_mgmt_cmd(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
@@ -1289,8 +1338,11 @@ exit_mgmt:
return rval;
}
static int
qla24xx_iidma(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla24xx_iidma(struct fc_bsg_job *bsg_job)
#else
static int qla24xx_iidma(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
@@ -1378,9 +1430,13 @@ qla24xx_iidma(struct bsg_job *bsg_job)
return rval;
}
static int
qla2x00_optrom_setup(struct bsg_job *bsg_job, scsi_qla_host_t *vha,
uint8_t is_update)
#ifndef NEW_LIBFC_API
static int qla2x00_optrom_setup(struct fc_bsg_job *bsg_job,
scsi_qla_host_t *vha, uint8_t is_update)
#else
static int qla2x00_optrom_setup(struct bsg_job *bsg_job,
scsi_qla_host_t *vha, uint8_t is_update)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
uint32_t start = 0;
@@ -1447,8 +1503,11 @@ qla2x00_optrom_setup(struct bsg_job *bsg_job, scsi_qla_host_t *vha,
return 0;
}
static int
qla2x00_read_optrom(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_read_optrom(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_read_optrom(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1484,8 +1543,11 @@ qla2x00_read_optrom(struct bsg_job *bsg_job)
return rval;
}
static int
qla2x00_update_optrom(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_update_optrom(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_update_optrom(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1520,8 +1582,11 @@ qla2x00_update_optrom(struct bsg_job *bsg_job)
return rval;
}
static int
qla2x00_update_fru_versions(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_update_fru_versions(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_update_fru_versions(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1572,8 +1637,11 @@ done:
return 0;
}
static int
qla2x00_read_fru_status(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_read_fru_status(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_read_fru_status(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1622,8 +1690,11 @@ done:
return 0;
}
static int
qla2x00_write_fru_status(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_write_fru_status(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_write_fru_status(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1668,8 +1739,11 @@ done:
return 0;
}
static int
qla2x00_write_i2c(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_write_i2c(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_write_i2c(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1713,8 +1787,11 @@ done:
return 0;
}
static int
qla2x00_read_i2c(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_read_i2c(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_read_i2c(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1762,8 +1839,11 @@ done:
return 0;
}
static int
qla24xx_process_bidir_cmd(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla24xx_process_bidir_cmd(struct fc_bsg_job *bsg_job)
#else
static int qla24xx_process_bidir_cmd(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -1941,8 +2021,11 @@ done:
return 0;
}
static int
qlafx00_mgmt_cmd(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qlafx00_mgmt_cmd(struct fc_bsg_job *bsg_job)
#else
static int qlafx00_mgmt_cmd(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2064,8 +2147,11 @@ done:
return rval;
}
static int
qla26xx_serdes_op(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla26xx_serdes_op(struct fc_bsg_job *bsg_job)
#else
static int qla26xx_serdes_op(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2106,8 +2192,11 @@ qla26xx_serdes_op(struct bsg_job *bsg_job)
return 0;
}
static int
qla8044_serdes_op(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla8044_serdes_op(struct fc_bsg_job *bsg_job)
#else
static int qla8044_serdes_op(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2148,8 +2237,11 @@ qla8044_serdes_op(struct bsg_job *bsg_job)
return 0;
}
static int
qla27xx_get_flash_upd_cap(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla27xx_get_flash_upd_cap(struct fc_bsg_job *bsg_job)
#else
static int qla27xx_get_flash_upd_cap(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2180,8 +2272,11 @@ qla27xx_get_flash_upd_cap(struct bsg_job *bsg_job)
return 0;
}
static int
qla27xx_set_flash_upd_cap(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla27xx_set_flash_upd_cap(struct fc_bsg_job *bsg_job)
#else
static int qla27xx_set_flash_upd_cap(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2226,8 +2321,11 @@ qla27xx_set_flash_upd_cap(struct bsg_job *bsg_job)
return 0;
}
static int
qla27xx_get_bbcr_data(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla27xx_get_bbcr_data(struct fc_bsg_job *bsg_job)
#else
static int qla27xx_get_bbcr_data(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2285,8 +2383,11 @@ done:
return 0;
}
static int
qla2x00_get_priv_stats(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_get_priv_stats(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_get_priv_stats(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
@@ -2344,8 +2445,11 @@ qla2x00_get_priv_stats(struct bsg_job *bsg_job)
return 0;
}
static int
qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_do_dport_diagnostics(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
struct Scsi_Host *host = fc_bsg_to_shost(bsg_job);
@@ -2387,8 +2491,11 @@ qla2x00_do_dport_diagnostics(struct bsg_job *bsg_job)
return 0;
}
static int
qla2x00_process_vendor_specific(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
static int qla2x00_process_vendor_specific(struct fc_bsg_job *bsg_job)
#else
static int qla2x00_process_vendor_specific(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
@@ -2465,8 +2572,11 @@ qla2x00_process_vendor_specific(struct bsg_job *bsg_job)
}
}
int
qla24xx_bsg_request(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
int qla24xx_bsg_request(struct fc_bsg_job *bsg_job)
#else
int qla24xx_bsg_request(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_request *bsg_request = bsg_job->request;
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
@@ -2518,8 +2628,11 @@ qla24xx_bsg_request(struct bsg_job *bsg_job)
return ret;
}
int
qla24xx_bsg_timeout(struct bsg_job *bsg_job)
#ifndef NEW_LIBFC_API
int qla24xx_bsg_timeout(struct fc_bsg_job *bsg_job)
#else
int qla24xx_bsg_timeout(struct bsg_job *bsg_job)
#endif
{
struct fc_bsg_reply *bsg_reply = bsg_job->reply;
scsi_qla_host_t *vha = shost_priv(fc_bsg_to_shost(bsg_job));
+11
View File
@@ -26,6 +26,7 @@
#include <linux/aer.h>
#include <linux/mutex.h>
#include <linux/btree.h>
#include <linux/version.h>
#include <scsi/scsi.h>
#include <scsi/scsi_host.h>
@@ -34,6 +35,12 @@
#include <scsi/scsi_transport_fc.h>
#include <scsi/scsi_bsg_fc.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) || \
defined(CONFIG_SUSE_KERNEL) && \
LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)
#define NEW_LIBFC_API
#endif
#include "qla_bsg.h"
#include "qla_nx.h"
#include "qla_nx2.h"
@@ -548,7 +555,11 @@ typedef struct srb {
struct completion comp;
union {
struct srb_iocb iocb_cmd;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job;
#else
struct bsg_job *bsg_job;
#endif
struct srb_cmd scmd;
} u;
void (*done)(void *, int);
+5
View File
@@ -833,8 +833,13 @@ extern int qla8044_read_temperature(scsi_qla_host_t *);
extern int qla2x00_read_sfp_dev(struct scsi_qla_host *, char *, int);
/* BSG related functions */
#ifndef NEW_LIBFC_API
extern int qla24xx_bsg_request(struct fc_bsg_job *);
extern int qla24xx_bsg_timeout(struct fc_bsg_job *);
#else
extern int qla24xx_bsg_request(struct bsg_job *);
extern int qla24xx_bsg_timeout(struct bsg_job *);
#endif
extern int qla84xx_reset_chip(scsi_qla_host_t *, uint16_t);
extern int qla2x00_issue_iocb_timeout(scsi_qla_host_t *, void *,
dma_addr_t, size_t, uint32_t);
+16
View File
@@ -2949,7 +2949,11 @@ done:
static void
qla24xx_els_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
{
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = sp->u.bsg_job;
#else
struct bsg_job *bsg_job = sp->u.bsg_job;
#endif
struct fc_bsg_request *bsg_request = bsg_job->request;
els_iocb->entry_type = ELS_IOCB_TYPE;
@@ -3003,7 +3007,11 @@ qla2x00_ct_iocb(srb_t *sp, ms_iocb_entry_t *ct_iocb)
uint16_t tot_dsds;
scsi_qla_host_t *vha = sp->vha;
struct qla_hw_data *ha = vha->hw;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = sp->u.bsg_job;
#else
struct bsg_job *bsg_job = sp->u.bsg_job;
#endif
int loop_iterartion = 0;
int entry_count = 1;
@@ -3080,7 +3088,11 @@ qla24xx_ct_iocb(srb_t *sp, struct ct_entry_24xx *ct_iocb)
uint16_t cmd_dsds, rsp_dsds;
scsi_qla_host_t *vha = sp->vha;
struct qla_hw_data *ha = vha->hw;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = sp->u.bsg_job;
#else
struct bsg_job *bsg_job = sp->u.bsg_job;
#endif
int entry_count = 1;
cont_a64_entry_t *cont_pkt = NULL;
@@ -3743,7 +3755,11 @@ qla25xx_build_bidir_iocb(srb_t *sp, struct scsi_qla_host *vha,
struct scatterlist *sg;
int index;
int entry_count = 1;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = sp->u.bsg_job;
#else
struct bsg_job *bsg_job = sp->u.bsg_job;
#endif
/*Update entry type to indicate bidir command */
*((uint32_t *)(&cmd_pkt->entry_type)) =
+25 -3
View File
@@ -10,7 +10,17 @@
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/cpu.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 18, 0)
#include <linux/t10-pi.h>
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
/*
* From commit 128b6f9fdd9a ("t10-pi: Move opencoded contants to common header")
* # v4.13.
*/
#define T10_PI_APP_ESCAPE cpu_to_be16(0xffff)
#define T10_PI_REF_ESCAPE cpu_to_be32(0xffffffff)
#endif
#include <scsi/scsi_tcq.h>
#include <scsi/scsi_bsg_fc.h>
#include <scsi/scsi_eh.h>
@@ -1473,7 +1483,11 @@ qla2x00_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
const char func[] = "CT_IOCB";
const char *type;
srb_t *sp;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job;
#else
struct bsg_job *bsg_job;
#endif
struct fc_bsg_reply *bsg_reply;
uint16_t comp_status;
int res = 0;
@@ -1545,7 +1559,11 @@ qla24xx_els_ct_entry(scsi_qla_host_t *vha, struct req_que *req,
const char func[] = "ELS_CT_IOCB";
const char *type;
srb_t *sp;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job;
#else
struct bsg_job *bsg_job;
#endif
struct fc_bsg_reply *bsg_reply;
uint16_t comp_status;
uint32_t fw_status[3];
@@ -2082,7 +2100,7 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
if (sense_len) {
ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x301c,
"Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n",
sp->vha->host_no, cp->device->id, cp->device->lun,
sp->vha->host_no, cp->device->id, (u64)cp->device->lun,
cp);
ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x302b,
cp->sense_buffer, sense_len);
@@ -2233,7 +2251,11 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt,
uint16_t scsi_status;
uint16_t thread_id;
uint32_t rval = EXT_STATUS_OK;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job = NULL;
#else
struct bsg_job *bsg_job = NULL;
#endif
struct fc_bsg_request *bsg_request;
struct fc_bsg_reply *bsg_reply;
sts_entry_t *sts;
@@ -2739,7 +2761,7 @@ check_scsi_status:
ql_log(ql_log_info, fcport->vha, 0x3022,
"CS_DMA error: 0x%x-0x%x (0x%x) nexus=%ld:%d:%llu portid=%06x oxid=0x%x cdb=%10phN len=0x%x rsp_info=0x%x resid=0x%x fw_resid=0x%x sp=%p cp=%p.\n",
comp_status, scsi_status, res, vha->host_no,
cp->device->id, cp->device->lun, fcport->d_id.b24,
cp->device->id, (u64)cp->device->lun, fcport->d_id.b24,
ox_id, cp->cmnd, scsi_bufflen(cp), rsp_info_len,
resid_len, fw_resid_len, sp, cp);
ql_dump_buffer(ql_dbg_tgt + ql_dbg_verbose, vha, 0xe0ee,
@@ -2758,7 +2780,7 @@ out:
"portid=%02x%02x%02x oxid=0x%x cdb=%10phN len=0x%x "
"rsp_info=0x%x resid=0x%x fw_resid=0x%x sp=%p cp=%p.\n",
comp_status, scsi_status, res, vha->host_no,
cp->device->id, cp->device->lun, fcport->d_id.b.domain,
cp->device->id, (u64)cp->device->lun, fcport->d_id.b.domain,
fcport->d_id.b.area, fcport->d_id.b.al_pa, ox_id,
cp->cmnd, scsi_bufflen(cp), rsp_info_len,
resid_len, fw_resid_len, sp, cp);
+22 -3
View File
@@ -1804,6 +1804,16 @@ qla2x00_fxdisc_sp_done(void *ptr, int res)
complete(&lio->u.fxiocb.fxiocb_comp);
}
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
static u64 ktime_get_real_seconds(void)
{
struct timeval tv;
do_gettimeofday(&tv);
return tv.tv_sec;
}
#endif
int
qlafx00_fx_disc(scsi_qla_host_t *vha, fc_port_t *fcport, uint16_t fx_type)
{
@@ -2164,7 +2174,7 @@ qlafx00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len,
if (sense_len) {
ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x3039,
"Check condition Sense data, nexus%ld:%d:%llu cmd=%p.\n",
sp->vha->host_no, cp->device->id, cp->device->lun,
sp->vha->host_no, cp->device->id, (u64)cp->device->lun,
cp);
ql_dump_buffer(ql_dbg_io + ql_dbg_buffer, vha, 0x3049,
cp->sense_buffer, sense_len);
@@ -2209,7 +2219,11 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req,
{
const char func[] = "IOSB_IOCB";
srb_t *sp;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job;
#else
struct bsg_job *bsg_job;
#endif
struct fc_bsg_reply *bsg_reply;
struct srb_iocb *iocb_job;
int res = 0;
@@ -2246,7 +2260,8 @@ qlafx00_ioctl_iosb_entry(scsi_qla_host_t *vha, struct req_que *req,
memcpy(fstatus.reserved_3,
pkt->reserved_2, 20 * sizeof(uint8_t));
fw_sts_ptr = bsg_job->reply + sizeof(struct fc_bsg_reply);
fw_sts_ptr = bsg_job_sense(bsg_job) +
sizeof(struct fc_bsg_reply);
memcpy(fw_sts_ptr, (uint8_t *)&fstatus,
sizeof(struct qla_mt_iocb_rsp_fx00));
@@ -2533,7 +2548,7 @@ check_scsi_status:
"rsp_info=%p resid=0x%x fw_resid=0x%x sense_len=0x%x, "
"par_sense_len=0x%x, rsp_info_len=0x%x\n",
comp_status, scsi_status, res, vha->host_no,
cp->device->id, cp->device->lun, fcport->tgt_id,
cp->device->id, (u64)cp->device->lun, fcport->tgt_id,
lscsi_status, cp->cmnd, scsi_bufflen(cp),
rsp_info, resid_len, fw_resid_len, sense_len,
par_sense_len, rsp_info_len);
@@ -3259,7 +3274,11 @@ qlafx00_fxdisc_iocb(srb_t *sp, struct fxdisc_entry_fx00 *pfxiocb)
{
struct srb_iocb *fxio = &sp->u.iocb_cmd;
struct qla_mt_iocb_rqst_fx00 *piocb_rqst;
#ifndef NEW_LIBFC_API
struct fc_bsg_job *bsg_job;
#else
struct bsg_job *bsg_job;
#endif
struct fc_bsg_request *bsg_request;
struct fxdisc_entry_fx00 fx_iocb;
uint8_t entry_cnt = 1;
+2 -1
View File
@@ -4,11 +4,12 @@
*
* See LICENSE.qla2xxx for copyright and licensing details.
*/
#include "qla_nvme.h"
#include <linux/scatterlist.h>
#include <linux/delay.h>
#include <linux/nvme.h>
#include <linux/nvme-fc.h>
#include "qla_nvme.h"
static struct nvme_fc_port_template qla_nvme_fc_transport;
+7
View File
@@ -7,7 +7,14 @@
#ifndef __QLA_NX_H
#define __QLA_NX_H
#include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)
/*
* See also commit 2f8e2c877784 ("move io-64-nonatomic*.h out of asm-generic")
* # v4.4.
*/
#include <linux/io-64-nonatomic-lo-hi.h>
#endif
/*
* Following are the states of the Phantom. Phantom will set them and
+55 -6
View File
@@ -322,9 +322,15 @@ static int qla2xxx_eh_target_reset(struct scsi_cmnd *);
static int qla2xxx_eh_bus_reset(struct scsi_cmnd *);
static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
static int
qla2x00_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason);
#endif
static void qla2x00_clear_drv_active(struct qla_hw_data *);
static void qla2x00_free_device(scsi_qla_host_t *);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
static int qla2xxx_map_queues(struct Scsi_Host *shost);
#endif
static void qla2x00_destroy_deferred_work(struct qla_hw_data *);
@@ -333,7 +339,9 @@ struct scsi_host_template qla2xxx_driver_template = {
.name = QLA2XXX_DRIVER_NAME,
.queuecommand = qla2xxx_queuecommand,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
.eh_timed_out = fc_eh_timed_out,
#endif
.eh_abort_handler = qla2xxx_eh_abort,
.eh_device_reset_handler = qla2xxx_eh_device_reset,
.eh_target_reset_handler = qla2xxx_eh_target_reset,
@@ -346,8 +354,14 @@ struct scsi_host_template qla2xxx_driver_template = {
.slave_destroy = qla2xxx_slave_destroy,
.scan_finished = qla2xxx_scan_finished,
.scan_start = qla2xxx_scan_start,
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
.change_queue_depth = qla2x00_change_queue_depth,
#else
.change_queue_depth = scsi_change_queue_depth,
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
.map_queues = qla2xxx_map_queues,
#endif
.this_id = -1,
.cmd_per_lun = 3,
.sg_tablesize = SG_ALL,
@@ -356,7 +370,9 @@ struct scsi_host_template qla2xxx_driver_template = {
.shost_attrs = qla2x00_host_attrs,
.supported_mode = MODE_INITIATOR,
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
.track_queue_depth = 1,
#endif
};
static struct scsi_transport_template *qla2xxx_transport_template = NULL;
@@ -1509,7 +1525,7 @@ __qla2xxx_eh_generic_reset(char *name, enum nexus_wait_type type,
ql_log(ql_log_info, vha, 0x8009,
"%s RESET ISSUED nexus=%ld:%d:%llu cmd=%p.\n", name, vha->host_no,
cmd->device->id, cmd->device->lun, cmd);
cmd->device->id, (u64)cmd->device->lun, cmd);
err = 0;
if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) {
@@ -1534,15 +1550,15 @@ __qla2xxx_eh_generic_reset(char *name, enum nexus_wait_type type,
ql_log(ql_log_info, vha, 0x800e,
"%s RESET SUCCEEDED nexus:%ld:%d:%llu cmd=%p.\n", name,
vha->host_no, cmd->device->id, cmd->device->lun, cmd);
vha->host_no, cmd->device->id, (u64)cmd->device->lun, cmd);
return SUCCESS;
eh_reset_failed:
ql_log(ql_log_info, vha, 0x800f,
"%s RESET FAILED: %s nexus=%ld:%d:%llu cmd=%p.\n", name,
reset_errors[err], vha->host_no, cmd->device->id, cmd->device->lun,
cmd);
reset_errors[err], vha->host_no, cmd->device->id,
(u64)cmd->device->lun, cmd);
return FAILED;
}
@@ -1932,7 +1948,11 @@ qla2xxx_slave_configure(struct scsi_device *sdev)
if (IS_T10_PI_CAPABLE(vha->hw))
blk_queue_update_dma_alignment(sdev->request_queue, 0x7);
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
scsi_adjust_queue_depth(sdev, 0, req->max_q_depth);
#else
scsi_change_queue_depth(sdev, req->max_q_depth);
#endif
return 0;
}
@@ -3194,7 +3214,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
"cmd_per_len=%d unique_id=%d max_cmd_len=%d max_channel=%d "
"max_lun=%llu transportt=%p, vendor_id=%llu.\n", host->max_id,
host->this_id, host->cmd_per_lun, host->unique_id,
host->max_cmd_len, host->max_channel, host->max_lun,
host->max_cmd_len, host->max_channel, (u64)host->max_lun,
host->transportt, sht->vendor_id);
INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn);
@@ -6153,7 +6173,7 @@ qla2x00_do_dpc(void *data)
ha = (struct qla_hw_data *)data;
base_vha = pci_get_drvdata(ha->pdev);
set_user_nice(current, MIN_NICE);
set_user_nice(current, -20);
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
@@ -7125,6 +7145,7 @@ qla2xxx_pci_resume(struct pci_dev *pdev)
ha->flags.eeh_busy = 0;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)
static void
qla_pci_reset_prepare(struct pci_dev *pdev)
{
@@ -7175,7 +7196,18 @@ qla_pci_reset_done(struct pci_dev *pdev)
ha->isp_ops->abort_isp(base_vha);
clear_bit(ABORT_ISP_ACTIVE, &base_vha->dpc_flags);
}
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
static int
qla2x00_change_queue_depth(struct scsi_device *sdev, int qdepth, int reason)
{
scsi_adjust_queue_depth(sdev, 0, qdepth);
return sdev->queue_depth;
}
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
static int qla2xxx_map_queues(struct Scsi_Host *shost)
{
int rc;
@@ -7203,14 +7235,31 @@ static int qla2xxx_map_queues(struct Scsi_Host *shost)
#endif
return rc;
}
#endif
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) && \
LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
static void qla_pci_reset_notify(struct pci_dev *dev, bool prepare)
{
if (prepare)
qla_pci_reset_prepare(dev);
else
qla_pci_reset_done(dev);
}
#endif
static const struct pci_error_handlers qla2xxx_err_handler = {
.error_detected = qla2xxx_pci_error_detected,
.mmio_enabled = qla2xxx_pci_mmio_enabled,
.slot_reset = qla2xxx_pci_slot_reset,
.resume = qla2xxx_pci_resume,
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 16, 0)
#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 13, 0)
.reset_notify = qla_pci_reset_notify,
#else
.reset_prepare = qla_pci_reset_prepare,
.reset_done = qla_pci_reset_done,
#endif
};
static struct pci_device_id qla2xxx_pci_tbl[] = {
+1
View File
@@ -28,6 +28,7 @@
#ifndef __QLA_TARGET_H
#define __QLA_TARGET_H
#include <asm/unaligned.h>
#include "qla_def.h"
/*