mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
SCSI fixes on 20190118
A set of 17 fixes. Most of these are minor or trivial. The one fix that may be serious is the isci one: the bug can cause hba parameters to be set from uninitialized memory. I don't think it's exploitable, but you never know. Signed-off-by: James E.J. Bottomley <[email protected]> -----BEGIN PGP SIGNATURE----- iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCXEKL0SYcamFtZXMuYm90 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pishVZpAQCwuPTk fqOt4v4hJ0oUHtEBsQK3VMXSdUvWdb5Lbn3WeQD/RFYTyNxcIF7ADSWw71b+IigT ejUrMzI8ig+nZ1jbFZ4= =BdS/ -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "A set of 17 fixes. Most of these are minor or trivial. The one fix that may be serious is the isci one: the bug can cause hba parameters to be set from uninitialized memory. I don't think it's exploitable, but you never know" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: cxgb4i: add wait_for_completion() scsi: qla1280: set 64bit coherent mask scsi: ufs: Fix geometry descriptor size scsi: megaraid_sas: Retry reads of outbound_intr_status reg scsi: qedi: Add ep_state for login completion on un-reachable targets scsi: ufs: Fix system suspend status scsi: qla2xxx: Use correct number of vectors for online CPUs scsi: hisi_sas: Set protection parameters prior to adding SCSI host scsi: tcmu: avoid cmd/qfull timers updated whenever a new cmd comes scsi: isci: initialize shost fully before calling scsi_add_host() scsi: lpfc: lpfc_sli: Mark expected switch fall-throughs scsi: smartpqi_init: fix boolean expression in pqi_device_remove_start scsi: core: Synchronize request queue PM status only on successful resume scsi: pm80xx: reduce indentation scsi: qla4xxx: check return code of qla4xxx_copy_from_fwddb_param scsi: megaraid_sas: correct an info message scsi: target/iscsi: fix error msg typo when create lio_qr_cache failed scsi: sd: Fix cache_type_store()
This commit is contained in:
commit
4d5f6e0201
24 changed files with 157 additions and 86 deletions
|
|
@ -1144,7 +1144,7 @@ static void ddp_clear_map(struct cxgbi_device *cdev, struct cxgbi_ppm *ppm,
|
|||
}
|
||||
|
||||
static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk,
|
||||
unsigned int tid, int pg_idx, bool reply)
|
||||
unsigned int tid, int pg_idx)
|
||||
{
|
||||
struct sk_buff *skb = alloc_wr(sizeof(struct cpl_set_tcb_field), 0,
|
||||
GFP_KERNEL);
|
||||
|
|
@ -1160,7 +1160,7 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk,
|
|||
req = (struct cpl_set_tcb_field *)skb->head;
|
||||
req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
|
||||
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, tid));
|
||||
req->reply = V_NO_REPLY(reply ? 0 : 1);
|
||||
req->reply = V_NO_REPLY(1);
|
||||
req->cpu_idx = 0;
|
||||
req->word = htons(31);
|
||||
req->mask = cpu_to_be64(0xF0000000);
|
||||
|
|
@ -1177,11 +1177,10 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk,
|
|||
* @tid: connection id
|
||||
* @hcrc: header digest enabled
|
||||
* @dcrc: data digest enabled
|
||||
* @reply: request reply from h/w
|
||||
* set up the iscsi digest settings for a connection identified by tid
|
||||
*/
|
||||
static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,
|
||||
int hcrc, int dcrc, int reply)
|
||||
int hcrc, int dcrc)
|
||||
{
|
||||
struct sk_buff *skb = alloc_wr(sizeof(struct cpl_set_tcb_field), 0,
|
||||
GFP_KERNEL);
|
||||
|
|
@ -1197,7 +1196,7 @@ static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,
|
|||
req = (struct cpl_set_tcb_field *)skb->head;
|
||||
req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD));
|
||||
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, tid));
|
||||
req->reply = V_NO_REPLY(reply ? 0 : 1);
|
||||
req->reply = V_NO_REPLY(1);
|
||||
req->cpu_idx = 0;
|
||||
req->word = htons(31);
|
||||
req->mask = cpu_to_be64(0x0F000000);
|
||||
|
|
|
|||
|
|
@ -1548,16 +1548,22 @@ static void do_set_tcb_rpl(struct cxgbi_device *cdev, struct sk_buff *skb)
|
|||
struct cxgbi_sock *csk;
|
||||
|
||||
csk = lookup_tid(t, tid);
|
||||
if (!csk)
|
||||
if (!csk) {
|
||||
pr_err("can't find conn. for tid %u.\n", tid);
|
||||
return;
|
||||
}
|
||||
|
||||
log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
|
||||
"csk 0x%p,%u,%lx,%u, status 0x%x.\n",
|
||||
csk, csk->state, csk->flags, csk->tid, rpl->status);
|
||||
|
||||
if (rpl->status != CPL_ERR_NONE)
|
||||
if (rpl->status != CPL_ERR_NONE) {
|
||||
pr_err("csk 0x%p,%u, SET_TCB_RPL status %u.\n",
|
||||
csk, tid, rpl->status);
|
||||
csk->err = -EINVAL;
|
||||
}
|
||||
|
||||
complete(&csk->cmpl);
|
||||
|
||||
__kfree_skb(skb);
|
||||
}
|
||||
|
|
@ -1983,7 +1989,7 @@ static int ddp_set_map(struct cxgbi_ppm *ppm, struct cxgbi_sock *csk,
|
|||
}
|
||||
|
||||
static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid,
|
||||
int pg_idx, bool reply)
|
||||
int pg_idx)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct cpl_set_tcb_field *req;
|
||||
|
|
@ -1999,7 +2005,7 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid,
|
|||
req = (struct cpl_set_tcb_field *)skb->head;
|
||||
INIT_TP_WR(req, csk->tid);
|
||||
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, csk->tid));
|
||||
req->reply_ctrl = htons(NO_REPLY_V(reply) | QUEUENO_V(csk->rss_qid));
|
||||
req->reply_ctrl = htons(NO_REPLY_V(0) | QUEUENO_V(csk->rss_qid));
|
||||
req->word_cookie = htons(0);
|
||||
req->mask = cpu_to_be64(0x3 << 8);
|
||||
req->val = cpu_to_be64(pg_idx << 8);
|
||||
|
|
@ -2008,12 +2014,15 @@ static int ddp_setup_conn_pgidx(struct cxgbi_sock *csk, unsigned int tid,
|
|||
log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
|
||||
"csk 0x%p, tid 0x%x, pg_idx %u.\n", csk, csk->tid, pg_idx);
|
||||
|
||||
reinit_completion(&csk->cmpl);
|
||||
cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
|
||||
return 0;
|
||||
wait_for_completion(&csk->cmpl);
|
||||
|
||||
return csk->err;
|
||||
}
|
||||
|
||||
static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,
|
||||
int hcrc, int dcrc, int reply)
|
||||
int hcrc, int dcrc)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
struct cpl_set_tcb_field *req;
|
||||
|
|
@ -2031,7 +2040,7 @@ static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,
|
|||
req = (struct cpl_set_tcb_field *)skb->head;
|
||||
INIT_TP_WR(req, tid);
|
||||
OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_SET_TCB_FIELD, tid));
|
||||
req->reply_ctrl = htons(NO_REPLY_V(reply) | QUEUENO_V(csk->rss_qid));
|
||||
req->reply_ctrl = htons(NO_REPLY_V(0) | QUEUENO_V(csk->rss_qid));
|
||||
req->word_cookie = htons(0);
|
||||
req->mask = cpu_to_be64(0x3 << 4);
|
||||
req->val = cpu_to_be64(((hcrc ? ULP_CRC_HEADER : 0) |
|
||||
|
|
@ -2041,8 +2050,11 @@ static int ddp_setup_conn_digest(struct cxgbi_sock *csk, unsigned int tid,
|
|||
log_debug(1 << CXGBI_DBG_TOE | 1 << CXGBI_DBG_SOCK,
|
||||
"csk 0x%p, tid 0x%x, crc %d,%d.\n", csk, csk->tid, hcrc, dcrc);
|
||||
|
||||
reinit_completion(&csk->cmpl);
|
||||
cxgb4_ofld_send(csk->cdev->ports[csk->port_id], skb);
|
||||
return 0;
|
||||
wait_for_completion(&csk->cmpl);
|
||||
|
||||
return csk->err;
|
||||
}
|
||||
|
||||
static struct cxgbi_ppm *cdev2ppm(struct cxgbi_device *cdev)
|
||||
|
|
|
|||
|
|
@ -573,6 +573,7 @@ static struct cxgbi_sock *cxgbi_sock_create(struct cxgbi_device *cdev)
|
|||
skb_queue_head_init(&csk->receive_queue);
|
||||
skb_queue_head_init(&csk->write_queue);
|
||||
timer_setup(&csk->retry_timer, NULL, 0);
|
||||
init_completion(&csk->cmpl);
|
||||
rwlock_init(&csk->callback_lock);
|
||||
csk->cdev = cdev;
|
||||
csk->flags = 0;
|
||||
|
|
@ -2251,14 +2252,14 @@ int cxgbi_set_conn_param(struct iscsi_cls_conn *cls_conn,
|
|||
if (!err && conn->hdrdgst_en)
|
||||
err = csk->cdev->csk_ddp_setup_digest(csk, csk->tid,
|
||||
conn->hdrdgst_en,
|
||||
conn->datadgst_en, 0);
|
||||
conn->datadgst_en);
|
||||
break;
|
||||
case ISCSI_PARAM_DATADGST_EN:
|
||||
err = iscsi_set_param(cls_conn, param, buf, buflen);
|
||||
if (!err && conn->datadgst_en)
|
||||
err = csk->cdev->csk_ddp_setup_digest(csk, csk->tid,
|
||||
conn->hdrdgst_en,
|
||||
conn->datadgst_en, 0);
|
||||
conn->datadgst_en);
|
||||
break;
|
||||
case ISCSI_PARAM_MAX_R2T:
|
||||
return iscsi_tcp_set_max_r2t(conn, buf);
|
||||
|
|
@ -2384,7 +2385,7 @@ int cxgbi_bind_conn(struct iscsi_cls_session *cls_session,
|
|||
|
||||
ppm = csk->cdev->cdev2ppm(csk->cdev);
|
||||
err = csk->cdev->csk_ddp_setup_pgidx(csk, csk->tid,
|
||||
ppm->tformat.pgsz_idx_dflt, 0);
|
||||
ppm->tformat.pgsz_idx_dflt);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ struct cxgbi_sock {
|
|||
struct sk_buff_head receive_queue;
|
||||
struct sk_buff_head write_queue;
|
||||
struct timer_list retry_timer;
|
||||
struct completion cmpl;
|
||||
int err;
|
||||
rwlock_t callback_lock;
|
||||
void *user_data;
|
||||
|
|
@ -490,9 +491,9 @@ struct cxgbi_device {
|
|||
struct cxgbi_ppm *,
|
||||
struct cxgbi_task_tag_info *);
|
||||
int (*csk_ddp_setup_digest)(struct cxgbi_sock *,
|
||||
unsigned int, int, int, int);
|
||||
unsigned int, int, int);
|
||||
int (*csk_ddp_setup_pgidx)(struct cxgbi_sock *,
|
||||
unsigned int, int, bool);
|
||||
unsigned int, int);
|
||||
|
||||
void (*csk_release_offload_resources)(struct cxgbi_sock *);
|
||||
int (*csk_rx_pdu_ready)(struct cxgbi_sock *, struct sk_buff *);
|
||||
|
|
|
|||
|
|
@ -2507,6 +2507,12 @@ hisi_sas_v3_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
sha->sas_port[i] = &hisi_hba->port[i].sas_port;
|
||||
}
|
||||
|
||||
if (hisi_hba->prot_mask) {
|
||||
dev_info(dev, "Registering for DIF/DIX prot_mask=0x%x\n",
|
||||
prot_mask);
|
||||
scsi_host_set_prot(hisi_hba->shost, prot_mask);
|
||||
}
|
||||
|
||||
rc = scsi_add_host(shost, dev);
|
||||
if (rc)
|
||||
goto err_out_ha;
|
||||
|
|
@ -2519,12 +2525,6 @@ hisi_sas_v3_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
if (rc)
|
||||
goto err_out_register_ha;
|
||||
|
||||
if (hisi_hba->prot_mask) {
|
||||
dev_info(dev, "Registering for DIF/DIX prot_mask=0x%x\n",
|
||||
prot_mask);
|
||||
scsi_host_set_prot(hisi_hba->shost, prot_mask);
|
||||
}
|
||||
|
||||
scsi_scan_host(shost);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -576,6 +576,13 @@ static struct isci_host *isci_host_alloc(struct pci_dev *pdev, int id)
|
|||
shost->max_lun = ~0;
|
||||
shost->max_cmd_len = MAX_COMMAND_SIZE;
|
||||
|
||||
/* turn on DIF support */
|
||||
scsi_host_set_prot(shost,
|
||||
SHOST_DIF_TYPE1_PROTECTION |
|
||||
SHOST_DIF_TYPE2_PROTECTION |
|
||||
SHOST_DIF_TYPE3_PROTECTION);
|
||||
scsi_host_set_guard(shost, SHOST_DIX_GUARD_CRC);
|
||||
|
||||
err = scsi_add_host(shost, &pdev->dev);
|
||||
if (err)
|
||||
goto err_shost;
|
||||
|
|
@ -663,13 +670,6 @@ static int isci_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
goto err_host_alloc;
|
||||
}
|
||||
pci_info->hosts[i] = h;
|
||||
|
||||
/* turn on DIF support */
|
||||
scsi_host_set_prot(to_shost(h),
|
||||
SHOST_DIF_TYPE1_PROTECTION |
|
||||
SHOST_DIF_TYPE2_PROTECTION |
|
||||
SHOST_DIF_TYPE3_PROTECTION);
|
||||
scsi_host_set_guard(to_shost(h), SHOST_DIX_GUARD_CRC);
|
||||
}
|
||||
|
||||
err = isci_setup_interrupts(pdev);
|
||||
|
|
|
|||
|
|
@ -9407,6 +9407,7 @@ lpfc_sli4_iocb2wqe(struct lpfc_hba *phba, struct lpfc_iocbq *iocbq,
|
|||
cmnd = CMD_XMIT_SEQUENCE64_CR;
|
||||
if (phba->link_flag & LS_LOOPBACK_MODE)
|
||||
bf_set(wqe_xo, &wqe->xmit_sequence.wge_ctl, 1);
|
||||
/* fall through */
|
||||
case CMD_XMIT_SEQUENCE64_CR:
|
||||
/* word3 iocb=io_tag32 wqe=reserved */
|
||||
wqe->xmit_sequence.rsvd3 = 0;
|
||||
|
|
@ -13528,6 +13529,7 @@ lpfc_sli4_sp_handle_rcqe(struct lpfc_hba *phba, struct lpfc_rcqe *rcqe)
|
|||
case FC_STATUS_RQ_BUF_LEN_EXCEEDED:
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"2537 Receive Frame Truncated!!\n");
|
||||
/* fall through */
|
||||
case FC_STATUS_RQ_SUCCESS:
|
||||
spin_lock_irqsave(&phba->hbalock, iflags);
|
||||
lpfc_sli4_rq_release(hrq, drq);
|
||||
|
|
@ -13937,7 +13939,7 @@ lpfc_sli4_nvmet_handle_rcqe(struct lpfc_hba *phba, struct lpfc_queue *cq,
|
|||
case FC_STATUS_RQ_BUF_LEN_EXCEEDED:
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"6126 Receive Frame Truncated!!\n");
|
||||
/* Drop thru */
|
||||
/* fall through */
|
||||
case FC_STATUS_RQ_SUCCESS:
|
||||
spin_lock_irqsave(&phba->hbalock, iflags);
|
||||
lpfc_sli4_rq_release(hrq, drq);
|
||||
|
|
@ -14849,7 +14851,7 @@ lpfc_eq_create(struct lpfc_hba *phba, struct lpfc_queue *eq, uint32_t imax)
|
|||
eq->entry_count);
|
||||
if (eq->entry_count < 256)
|
||||
return -EINVAL;
|
||||
/* otherwise default to smallest count (drop through) */
|
||||
/* fall through - otherwise default to smallest count */
|
||||
case 256:
|
||||
bf_set(lpfc_eq_context_count, &eq_create->u.request.context,
|
||||
LPFC_EQ_CNT_256);
|
||||
|
|
@ -14980,7 +14982,7 @@ lpfc_cq_create(struct lpfc_hba *phba, struct lpfc_queue *cq,
|
|||
LPFC_CQ_CNT_WORD7);
|
||||
break;
|
||||
}
|
||||
/* Fall Thru */
|
||||
/* fall through */
|
||||
default:
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"0361 Unsupported CQ count: "
|
||||
|
|
@ -14991,7 +14993,7 @@ lpfc_cq_create(struct lpfc_hba *phba, struct lpfc_queue *cq,
|
|||
status = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
/* otherwise default to smallest count (drop through) */
|
||||
/* fall through - otherwise default to smallest count */
|
||||
case 256:
|
||||
bf_set(lpfc_cq_context_count, &cq_create->u.request.context,
|
||||
LPFC_CQ_CNT_256);
|
||||
|
|
@ -15151,7 +15153,7 @@ lpfc_cq_create_set(struct lpfc_hba *phba, struct lpfc_queue **cqp,
|
|||
LPFC_CQ_CNT_WORD7);
|
||||
break;
|
||||
}
|
||||
/* Fall Thru */
|
||||
/* fall through */
|
||||
default:
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_SLI,
|
||||
"3118 Bad CQ count. (%d)\n",
|
||||
|
|
@ -15160,7 +15162,7 @@ lpfc_cq_create_set(struct lpfc_hba *phba, struct lpfc_queue **cqp,
|
|||
status = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
/* otherwise default to smallest (drop thru) */
|
||||
/* fall through - otherwise default to smallest */
|
||||
case 256:
|
||||
bf_set(lpfc_mbx_cq_create_set_cqe_cnt,
|
||||
&cq_set->u.request, LPFC_CQ_CNT_256);
|
||||
|
|
@ -15432,7 +15434,7 @@ lpfc_mq_create(struct lpfc_hba *phba, struct lpfc_queue *mq,
|
|||
status = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
/* otherwise default to smallest count (drop through) */
|
||||
/* fall through - otherwise default to smallest count */
|
||||
case 16:
|
||||
bf_set(lpfc_mq_context_ring_size,
|
||||
&mq_create_ext->u.request.context,
|
||||
|
|
@ -15851,7 +15853,7 @@ lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
|
|||
status = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
/* otherwise default to smallest count (drop through) */
|
||||
/* fall through - otherwise default to smallest count */
|
||||
case 512:
|
||||
bf_set(lpfc_rq_context_rqe_count,
|
||||
&rq_create->u.request.context,
|
||||
|
|
@ -15988,7 +15990,7 @@ lpfc_rq_create(struct lpfc_hba *phba, struct lpfc_queue *hrq,
|
|||
status = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
/* otherwise default to smallest count (drop through) */
|
||||
/* fall through - otherwise default to smallest count */
|
||||
case 512:
|
||||
bf_set(lpfc_rq_context_rqe_count,
|
||||
&rq_create->u.request.context,
|
||||
|
|
|
|||
|
|
@ -6236,7 +6236,7 @@ megasas_set_dma_mask(struct megasas_instance *instance)
|
|||
instance->consistent_mask_64bit = true;
|
||||
|
||||
dev_info(&pdev->dev, "%s bit DMA mask and %s bit consistent mask\n",
|
||||
((*pdev->dev.dma_mask == DMA_BIT_MASK(64)) ? "63" : "32"),
|
||||
((*pdev->dev.dma_mask == DMA_BIT_MASK(63)) ? "63" : "32"),
|
||||
(instance->consistent_mask_64bit ? "63" : "32"));
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -175,7 +175,8 @@ megasas_clear_intr_fusion(struct megasas_instance *instance)
|
|||
/*
|
||||
* Check if it is our interrupt
|
||||
*/
|
||||
status = readl(®s->outbound_intr_status);
|
||||
status = megasas_readl(instance,
|
||||
®s->outbound_intr_status);
|
||||
|
||||
if (status & 1) {
|
||||
writel(status, ®s->outbound_intr_status);
|
||||
|
|
|
|||
|
|
@ -657,7 +657,7 @@ static int pm8001_dev_found_notify(struct domain_device *dev)
|
|||
if (dev->dev_type == SAS_SATA_DEV) {
|
||||
pm8001_device->attached_phy =
|
||||
dev->rphy->identify.phy_identifier;
|
||||
flag = 1; /* directly sata*/
|
||||
flag = 1; /* directly sata */
|
||||
}
|
||||
} /*register this device to HBA*/
|
||||
PM8001_DISC_DBG(pm8001_ha, pm8001_printk("Found device\n"));
|
||||
|
|
|
|||
|
|
@ -953,6 +953,7 @@ static int qedi_ep_poll(struct iscsi_endpoint *ep, int timeout_ms)
|
|||
|
||||
qedi_ep = ep->dd_data;
|
||||
if (qedi_ep->state == EP_STATE_IDLE ||
|
||||
qedi_ep->state == EP_STATE_OFLDCONN_NONE ||
|
||||
qedi_ep->state == EP_STATE_OFLDCONN_FAILED)
|
||||
return -1;
|
||||
|
||||
|
|
@ -1035,6 +1036,7 @@ static void qedi_ep_disconnect(struct iscsi_endpoint *ep)
|
|||
|
||||
switch (qedi_ep->state) {
|
||||
case EP_STATE_OFLDCONN_START:
|
||||
case EP_STATE_OFLDCONN_NONE:
|
||||
goto ep_release_conn;
|
||||
case EP_STATE_OFLDCONN_FAILED:
|
||||
break;
|
||||
|
|
@ -1225,6 +1227,7 @@ static int qedi_set_path(struct Scsi_Host *shost, struct iscsi_path *path_data)
|
|||
|
||||
if (!is_valid_ether_addr(&path_data->mac_addr[0])) {
|
||||
QEDI_NOTICE(&qedi->dbg_ctx, "dst mac NOT VALID\n");
|
||||
qedi_ep->state = EP_STATE_OFLDCONN_NONE;
|
||||
ret = -EIO;
|
||||
goto set_path_exit;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ enum {
|
|||
EP_STATE_OFLDCONN_FAILED = 0x2000,
|
||||
EP_STATE_CONNECT_FAILED = 0x4000,
|
||||
EP_STATE_DISCONN_TIMEDOUT = 0x8000,
|
||||
EP_STATE_OFLDCONN_NONE = 0x10000,
|
||||
};
|
||||
|
||||
struct qedi_conn;
|
||||
|
|
|
|||
|
|
@ -4248,7 +4248,7 @@ qla1280_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
ha->devnum = devnum; /* specifies microcode load address */
|
||||
|
||||
#ifdef QLA_64BIT_PTR
|
||||
if (dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(64))) {
|
||||
if (dma_set_mask_and_coherent(&ha->pdev->dev, DMA_BIT_MASK(64))) {
|
||||
if (dma_set_mask(&ha->pdev->dev, DMA_BIT_MASK(32))) {
|
||||
printk(KERN_WARNING "scsi(%li): Unable to set a "
|
||||
"suitable DMA mask - aborting\n", ha->host_no);
|
||||
|
|
|
|||
|
|
@ -4394,6 +4394,8 @@ typedef struct scsi_qla_host {
|
|||
uint16_t n2n_id;
|
||||
struct list_head gpnid_list;
|
||||
struct fab_scan scan;
|
||||
|
||||
unsigned int irq_offset;
|
||||
} scsi_qla_host_t;
|
||||
|
||||
struct qla27xx_image_status {
|
||||
|
|
|
|||
|
|
@ -3446,6 +3446,7 @@ qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp)
|
|||
"Adjusted Max no of queues pairs: %d.\n", ha->max_qpairs);
|
||||
}
|
||||
}
|
||||
vha->irq_offset = desc.pre_vectors;
|
||||
ha->msix_entries = kcalloc(ha->msix_count,
|
||||
sizeof(struct qla_msix_entry),
|
||||
GFP_KERNEL);
|
||||
|
|
|
|||
|
|
@ -6939,7 +6939,7 @@ static int qla2xxx_map_queues(struct Scsi_Host *shost)
|
|||
if (USER_CTRL_IRQ(vha->hw))
|
||||
rc = blk_mq_map_queues(qmap);
|
||||
else
|
||||
rc = blk_mq_pci_map_queues(qmap, vha->hw->pdev, 0);
|
||||
rc = blk_mq_pci_map_queues(qmap, vha->hw->pdev, vha->irq_offset);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7232,6 +7232,8 @@ static int qla4xxx_sysfs_ddb_tgt_create(struct scsi_qla_host *ha,
|
|||
|
||||
rc = qla4xxx_copy_from_fwddb_param(fnode_sess, fnode_conn,
|
||||
fw_ddb_entry);
|
||||
if (rc)
|
||||
goto free_sess;
|
||||
|
||||
ql4_printk(KERN_INFO, ha, "%s: sysfs entry %s created\n",
|
||||
__func__, fnode_sess->dev.kobj.name);
|
||||
|
|
|
|||
|
|
@ -80,8 +80,22 @@ static int scsi_dev_type_resume(struct device *dev,
|
|||
|
||||
if (err == 0) {
|
||||
pm_runtime_disable(dev);
|
||||
pm_runtime_set_active(dev);
|
||||
err = pm_runtime_set_active(dev);
|
||||
pm_runtime_enable(dev);
|
||||
|
||||
/*
|
||||
* Forcibly set runtime PM status of request queue to "active"
|
||||
* to make sure we can again get requests from the queue
|
||||
* (see also blk_pm_peek_request()).
|
||||
*
|
||||
* The resume hook will correct runtime PM status of the disk.
|
||||
*/
|
||||
if (!err && scsi_is_sdev_device(dev)) {
|
||||
struct scsi_device *sdev = to_scsi_device(dev);
|
||||
|
||||
if (sdev->request_queue->dev)
|
||||
blk_set_runtime_active(sdev->request_queue);
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
|
|
@ -140,16 +154,6 @@ static int scsi_bus_resume_common(struct device *dev,
|
|||
else
|
||||
fn = NULL;
|
||||
|
||||
/*
|
||||
* Forcibly set runtime PM status of request queue to "active" to
|
||||
* make sure we can again get requests from the queue (see also
|
||||
* blk_pm_peek_request()).
|
||||
*
|
||||
* The resume hook will correct runtime PM status of the disk.
|
||||
*/
|
||||
if (scsi_is_sdev_device(dev) && pm_runtime_suspended(dev))
|
||||
blk_set_runtime_active(to_scsi_device(dev)->request_queue);
|
||||
|
||||
if (fn) {
|
||||
async_schedule_domain(fn, dev, &scsi_sd_pm_domain);
|
||||
|
||||
|
|
|
|||
|
|
@ -206,6 +206,12 @@ cache_type_store(struct device *dev, struct device_attribute *attr,
|
|||
sp = buffer_data[0] & 0x80 ? 1 : 0;
|
||||
buffer_data[0] &= ~0x80;
|
||||
|
||||
/*
|
||||
* Ensure WP, DPOFUA, and RESERVED fields are cleared in
|
||||
* received mode parameter buffer before doing MODE SELECT.
|
||||
*/
|
||||
data.device_specific = 0;
|
||||
|
||||
if (scsi_mode_select(sdp, 1, sp, 8, buffer_data, len, SD_TIMEOUT,
|
||||
SD_MAX_RETRIES, &data, &sshdr)) {
|
||||
if (scsi_sense_valid(&sshdr))
|
||||
|
|
|
|||
|
|
@ -323,7 +323,7 @@ static inline void pqi_device_remove_start(struct pqi_scsi_dev *device)
|
|||
static inline bool pqi_device_in_remove(struct pqi_ctrl_info *ctrl_info,
|
||||
struct pqi_scsi_dev *device)
|
||||
{
|
||||
return device->in_remove & !ctrl_info->in_shutdown;
|
||||
return device->in_remove && !ctrl_info->in_shutdown;
|
||||
}
|
||||
|
||||
static inline void pqi_schedule_rescan_worker_with_delay(
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ enum ufs_desc_def_size {
|
|||
QUERY_DESC_CONFIGURATION_DEF_SIZE = 0x90,
|
||||
QUERY_DESC_UNIT_DEF_SIZE = 0x23,
|
||||
QUERY_DESC_INTERCONNECT_DEF_SIZE = 0x06,
|
||||
QUERY_DESC_GEOMETRY_DEF_SIZE = 0x44,
|
||||
QUERY_DESC_GEOMETRY_DEF_SIZE = 0x48,
|
||||
QUERY_DESC_POWER_DEF_SIZE = 0x62,
|
||||
QUERY_DESC_HEALTH_DEF_SIZE = 0x25,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -8001,6 +8001,8 @@ out:
|
|||
trace_ufshcd_system_resume(dev_name(hba->dev), ret,
|
||||
ktime_to_us(ktime_sub(ktime_get(), start)),
|
||||
hba->curr_dev_pwr_mode, hba->uic_link_state);
|
||||
if (!ret)
|
||||
hba->is_sys_suspended = false;
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(ufshcd_system_resume);
|
||||
|
|
|
|||
Loading…
Reference in a new issue