Loading drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +7 −0 Original line number Diff line number Diff line Loading @@ -2782,6 +2782,7 @@ static int slave_configure_v3_hw(struct scsi_device *sdev) struct hisi_hba *hisi_hba = shost_priv(shost); struct device *dev = hisi_hba->dev; int ret = sas_slave_configure(sdev); unsigned int max_sectors; if (ret) return ret; Loading @@ -2799,6 +2800,12 @@ static int slave_configure_v3_hw(struct scsi_device *sdev) } } /* Set according to IOMMU IOVA caching limit */ max_sectors = min_t(size_t, queue_max_hw_sectors(sdev->request_queue), (PAGE_SIZE * 32) >> SECTOR_SHIFT); blk_queue_max_hw_sectors(sdev->request_queue, max_sectors); return 0; } Loading drivers/scsi/ibmvscsi/ibmvfc.c +64 −18 Original line number Diff line number Diff line Loading @@ -160,8 +160,8 @@ static void ibmvfc_npiv_logout(struct ibmvfc_host *); static void ibmvfc_tgt_implicit_logout_and_del(struct ibmvfc_target *); static void ibmvfc_tgt_move_login(struct ibmvfc_target *); static void ibmvfc_release_sub_crqs(struct ibmvfc_host *); static void ibmvfc_init_sub_crqs(struct ibmvfc_host *); static void ibmvfc_dereg_sub_crqs(struct ibmvfc_host *); static void ibmvfc_reg_sub_crqs(struct ibmvfc_host *); static const char *unknown_error = "unknown error"; Loading Loading @@ -917,7 +917,7 @@ static int ibmvfc_reenable_crq_queue(struct ibmvfc_host *vhost) struct vio_dev *vdev = to_vio_dev(vhost->dev); unsigned long flags; ibmvfc_release_sub_crqs(vhost); ibmvfc_dereg_sub_crqs(vhost); /* Re-enable the CRQ */ do { Loading @@ -936,7 +936,7 @@ static int ibmvfc_reenable_crq_queue(struct ibmvfc_host *vhost) spin_unlock(vhost->crq.q_lock); spin_unlock_irqrestore(vhost->host->host_lock, flags); ibmvfc_init_sub_crqs(vhost); ibmvfc_reg_sub_crqs(vhost); return rc; } Loading @@ -955,7 +955,7 @@ static int ibmvfc_reset_crq(struct ibmvfc_host *vhost) struct vio_dev *vdev = to_vio_dev(vhost->dev); struct ibmvfc_queue *crq = &vhost->crq; ibmvfc_release_sub_crqs(vhost); ibmvfc_dereg_sub_crqs(vhost); /* Close the CRQ */ do { Loading Loading @@ -988,7 +988,7 @@ static int ibmvfc_reset_crq(struct ibmvfc_host *vhost) spin_unlock(vhost->crq.q_lock); spin_unlock_irqrestore(vhost->host->host_lock, flags); ibmvfc_init_sub_crqs(vhost); ibmvfc_reg_sub_crqs(vhost); return rc; } Loading Loading @@ -5682,6 +5682,8 @@ static int ibmvfc_alloc_queue(struct ibmvfc_host *vhost, queue->cur = 0; queue->fmt = fmt; queue->size = PAGE_SIZE / fmt_size; queue->vhost = vhost; return 0; } Loading Loading @@ -5757,9 +5759,6 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, ENTER; if (ibmvfc_alloc_queue(vhost, scrq, IBMVFC_SUB_CRQ_FMT)) return -ENOMEM; rc = h_reg_sub_crq(vdev->unit_address, scrq->msg_token, PAGE_SIZE, &scrq->cookie, &scrq->hw_irq); Loading Loading @@ -5790,7 +5789,6 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, } scrq->hwq_id = index; scrq->vhost = vhost; LEAVE; return 0; Loading @@ -5800,7 +5798,6 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, rc = plpar_hcall_norets(H_FREE_SUB_CRQ, vdev->unit_address, scrq->cookie); } while (rtas_busy_delay(rc)); reg_failed: ibmvfc_free_queue(vhost, scrq); LEAVE; return rc; } Loading @@ -5826,12 +5823,50 @@ static void ibmvfc_deregister_scsi_channel(struct ibmvfc_host *vhost, int index) if (rc) dev_err(dev, "Failed to free sub-crq[%d]: rc=%ld\n", index, rc); ibmvfc_free_queue(vhost, scrq); /* Clean out the queue */ memset(scrq->msgs.crq, 0, PAGE_SIZE); scrq->cur = 0; LEAVE; } static void ibmvfc_reg_sub_crqs(struct ibmvfc_host *vhost) { int i, j; ENTER; if (!vhost->mq_enabled || !vhost->scsi_scrqs.scrqs) return; for (i = 0; i < nr_scsi_hw_queues; i++) { if (ibmvfc_register_scsi_channel(vhost, i)) { for (j = i; j > 0; j--) ibmvfc_deregister_scsi_channel(vhost, j - 1); vhost->do_enquiry = 0; return; } } LEAVE; } static void ibmvfc_dereg_sub_crqs(struct ibmvfc_host *vhost) { int i; ENTER; if (!vhost->mq_enabled || !vhost->scsi_scrqs.scrqs) return; for (i = 0; i < nr_scsi_hw_queues; i++) ibmvfc_deregister_scsi_channel(vhost, i); LEAVE; } static void ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost) { struct ibmvfc_queue *scrq; int i, j; ENTER; Loading @@ -5847,30 +5882,41 @@ static void ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost) } for (i = 0; i < nr_scsi_hw_queues; i++) { if (ibmvfc_register_scsi_channel(vhost, i)) { for (j = i; j > 0; j--) ibmvfc_deregister_scsi_channel(vhost, j - 1); scrq = &vhost->scsi_scrqs.scrqs[i]; if (ibmvfc_alloc_queue(vhost, scrq, IBMVFC_SUB_CRQ_FMT)) { for (j = i; j > 0; j--) { scrq = &vhost->scsi_scrqs.scrqs[j - 1]; ibmvfc_free_queue(vhost, scrq); } kfree(vhost->scsi_scrqs.scrqs); vhost->scsi_scrqs.scrqs = NULL; vhost->scsi_scrqs.active_queues = 0; vhost->do_enquiry = 0; break; vhost->mq_enabled = 0; return; } } ibmvfc_reg_sub_crqs(vhost); LEAVE; } static void ibmvfc_release_sub_crqs(struct ibmvfc_host *vhost) { struct ibmvfc_queue *scrq; int i; ENTER; if (!vhost->scsi_scrqs.scrqs) return; for (i = 0; i < nr_scsi_hw_queues; i++) ibmvfc_deregister_scsi_channel(vhost, i); ibmvfc_dereg_sub_crqs(vhost); for (i = 0; i < nr_scsi_hw_queues; i++) { scrq = &vhost->scsi_scrqs.scrqs[i]; ibmvfc_free_queue(vhost, scrq); } kfree(vhost->scsi_scrqs.scrqs); vhost->scsi_scrqs.scrqs = NULL; Loading drivers/scsi/ibmvscsi/ibmvfc.h +1 −1 Original line number Diff line number Diff line Loading @@ -789,6 +789,7 @@ struct ibmvfc_queue { spinlock_t _lock; spinlock_t *q_lock; struct ibmvfc_host *vhost; struct ibmvfc_event_pool evt_pool; struct list_head sent; struct list_head free; Loading @@ -797,7 +798,6 @@ struct ibmvfc_queue { union ibmvfc_iu cancel_rsp; /* Sub-CRQ fields */ struct ibmvfc_host *vhost; unsigned long cookie; unsigned long vios_cookie; unsigned long hw_irq; Loading drivers/scsi/ipr.c +2 −2 Original line number Diff line number Diff line Loading @@ -9795,7 +9795,7 @@ static int ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg) GFP_KERNEL); if (!ioa_cfg->hrrq[i].host_rrq) { while (--i > 0) while (--i >= 0) dma_free_coherent(&pdev->dev, sizeof(u32) * ioa_cfg->hrrq[i].size, ioa_cfg->hrrq[i].host_rrq, Loading Loading @@ -10068,7 +10068,7 @@ static int ipr_request_other_msi_irqs(struct ipr_ioa_cfg *ioa_cfg, ioa_cfg->vectors_info[i].desc, &ioa_cfg->hrrq[i]); if (rc) { while (--i >= 0) while (--i > 0) free_irq(pci_irq_vector(pdev, i), &ioa_cfg->hrrq[i]); return rc; Loading drivers/scsi/lpfc/lpfc_crtn.h +1 −3 Original line number Diff line number Diff line Loading @@ -420,8 +420,6 @@ int lpfc_sli_issue_iocb_wait(struct lpfc_hba *, uint32_t, uint32_t); void lpfc_sli_abort_fcp_cmpl(struct lpfc_hba *, struct lpfc_iocbq *, struct lpfc_iocbq *); void lpfc_sli4_abort_fcp_cmpl(struct lpfc_hba *h, struct lpfc_iocbq *i, struct lpfc_wcqe_complete *w); void lpfc_sli_free_hbq(struct lpfc_hba *, struct hbq_dmabuf *); Loading Loading @@ -630,7 +628,7 @@ void lpfc_nvmet_invalidate_host(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp); void lpfc_nvme_abort_fcreq_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, struct lpfc_wcqe_complete *abts_cmpl); struct lpfc_iocbq *rspiocb); void lpfc_create_multixri_pools(struct lpfc_hba *phba); void lpfc_create_destroy_pools(struct lpfc_hba *phba); void lpfc_move_xri_pvt_to_pbl(struct lpfc_hba *phba, u32 hwqid); Loading Loading
drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +7 −0 Original line number Diff line number Diff line Loading @@ -2782,6 +2782,7 @@ static int slave_configure_v3_hw(struct scsi_device *sdev) struct hisi_hba *hisi_hba = shost_priv(shost); struct device *dev = hisi_hba->dev; int ret = sas_slave_configure(sdev); unsigned int max_sectors; if (ret) return ret; Loading @@ -2799,6 +2800,12 @@ static int slave_configure_v3_hw(struct scsi_device *sdev) } } /* Set according to IOMMU IOVA caching limit */ max_sectors = min_t(size_t, queue_max_hw_sectors(sdev->request_queue), (PAGE_SIZE * 32) >> SECTOR_SHIFT); blk_queue_max_hw_sectors(sdev->request_queue, max_sectors); return 0; } Loading
drivers/scsi/ibmvscsi/ibmvfc.c +64 −18 Original line number Diff line number Diff line Loading @@ -160,8 +160,8 @@ static void ibmvfc_npiv_logout(struct ibmvfc_host *); static void ibmvfc_tgt_implicit_logout_and_del(struct ibmvfc_target *); static void ibmvfc_tgt_move_login(struct ibmvfc_target *); static void ibmvfc_release_sub_crqs(struct ibmvfc_host *); static void ibmvfc_init_sub_crqs(struct ibmvfc_host *); static void ibmvfc_dereg_sub_crqs(struct ibmvfc_host *); static void ibmvfc_reg_sub_crqs(struct ibmvfc_host *); static const char *unknown_error = "unknown error"; Loading Loading @@ -917,7 +917,7 @@ static int ibmvfc_reenable_crq_queue(struct ibmvfc_host *vhost) struct vio_dev *vdev = to_vio_dev(vhost->dev); unsigned long flags; ibmvfc_release_sub_crqs(vhost); ibmvfc_dereg_sub_crqs(vhost); /* Re-enable the CRQ */ do { Loading @@ -936,7 +936,7 @@ static int ibmvfc_reenable_crq_queue(struct ibmvfc_host *vhost) spin_unlock(vhost->crq.q_lock); spin_unlock_irqrestore(vhost->host->host_lock, flags); ibmvfc_init_sub_crqs(vhost); ibmvfc_reg_sub_crqs(vhost); return rc; } Loading @@ -955,7 +955,7 @@ static int ibmvfc_reset_crq(struct ibmvfc_host *vhost) struct vio_dev *vdev = to_vio_dev(vhost->dev); struct ibmvfc_queue *crq = &vhost->crq; ibmvfc_release_sub_crqs(vhost); ibmvfc_dereg_sub_crqs(vhost); /* Close the CRQ */ do { Loading Loading @@ -988,7 +988,7 @@ static int ibmvfc_reset_crq(struct ibmvfc_host *vhost) spin_unlock(vhost->crq.q_lock); spin_unlock_irqrestore(vhost->host->host_lock, flags); ibmvfc_init_sub_crqs(vhost); ibmvfc_reg_sub_crqs(vhost); return rc; } Loading Loading @@ -5682,6 +5682,8 @@ static int ibmvfc_alloc_queue(struct ibmvfc_host *vhost, queue->cur = 0; queue->fmt = fmt; queue->size = PAGE_SIZE / fmt_size; queue->vhost = vhost; return 0; } Loading Loading @@ -5757,9 +5759,6 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, ENTER; if (ibmvfc_alloc_queue(vhost, scrq, IBMVFC_SUB_CRQ_FMT)) return -ENOMEM; rc = h_reg_sub_crq(vdev->unit_address, scrq->msg_token, PAGE_SIZE, &scrq->cookie, &scrq->hw_irq); Loading Loading @@ -5790,7 +5789,6 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, } scrq->hwq_id = index; scrq->vhost = vhost; LEAVE; return 0; Loading @@ -5800,7 +5798,6 @@ static int ibmvfc_register_scsi_channel(struct ibmvfc_host *vhost, rc = plpar_hcall_norets(H_FREE_SUB_CRQ, vdev->unit_address, scrq->cookie); } while (rtas_busy_delay(rc)); reg_failed: ibmvfc_free_queue(vhost, scrq); LEAVE; return rc; } Loading @@ -5826,12 +5823,50 @@ static void ibmvfc_deregister_scsi_channel(struct ibmvfc_host *vhost, int index) if (rc) dev_err(dev, "Failed to free sub-crq[%d]: rc=%ld\n", index, rc); ibmvfc_free_queue(vhost, scrq); /* Clean out the queue */ memset(scrq->msgs.crq, 0, PAGE_SIZE); scrq->cur = 0; LEAVE; } static void ibmvfc_reg_sub_crqs(struct ibmvfc_host *vhost) { int i, j; ENTER; if (!vhost->mq_enabled || !vhost->scsi_scrqs.scrqs) return; for (i = 0; i < nr_scsi_hw_queues; i++) { if (ibmvfc_register_scsi_channel(vhost, i)) { for (j = i; j > 0; j--) ibmvfc_deregister_scsi_channel(vhost, j - 1); vhost->do_enquiry = 0; return; } } LEAVE; } static void ibmvfc_dereg_sub_crqs(struct ibmvfc_host *vhost) { int i; ENTER; if (!vhost->mq_enabled || !vhost->scsi_scrqs.scrqs) return; for (i = 0; i < nr_scsi_hw_queues; i++) ibmvfc_deregister_scsi_channel(vhost, i); LEAVE; } static void ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost) { struct ibmvfc_queue *scrq; int i, j; ENTER; Loading @@ -5847,30 +5882,41 @@ static void ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost) } for (i = 0; i < nr_scsi_hw_queues; i++) { if (ibmvfc_register_scsi_channel(vhost, i)) { for (j = i; j > 0; j--) ibmvfc_deregister_scsi_channel(vhost, j - 1); scrq = &vhost->scsi_scrqs.scrqs[i]; if (ibmvfc_alloc_queue(vhost, scrq, IBMVFC_SUB_CRQ_FMT)) { for (j = i; j > 0; j--) { scrq = &vhost->scsi_scrqs.scrqs[j - 1]; ibmvfc_free_queue(vhost, scrq); } kfree(vhost->scsi_scrqs.scrqs); vhost->scsi_scrqs.scrqs = NULL; vhost->scsi_scrqs.active_queues = 0; vhost->do_enquiry = 0; break; vhost->mq_enabled = 0; return; } } ibmvfc_reg_sub_crqs(vhost); LEAVE; } static void ibmvfc_release_sub_crqs(struct ibmvfc_host *vhost) { struct ibmvfc_queue *scrq; int i; ENTER; if (!vhost->scsi_scrqs.scrqs) return; for (i = 0; i < nr_scsi_hw_queues; i++) ibmvfc_deregister_scsi_channel(vhost, i); ibmvfc_dereg_sub_crqs(vhost); for (i = 0; i < nr_scsi_hw_queues; i++) { scrq = &vhost->scsi_scrqs.scrqs[i]; ibmvfc_free_queue(vhost, scrq); } kfree(vhost->scsi_scrqs.scrqs); vhost->scsi_scrqs.scrqs = NULL; Loading
drivers/scsi/ibmvscsi/ibmvfc.h +1 −1 Original line number Diff line number Diff line Loading @@ -789,6 +789,7 @@ struct ibmvfc_queue { spinlock_t _lock; spinlock_t *q_lock; struct ibmvfc_host *vhost; struct ibmvfc_event_pool evt_pool; struct list_head sent; struct list_head free; Loading @@ -797,7 +798,6 @@ struct ibmvfc_queue { union ibmvfc_iu cancel_rsp; /* Sub-CRQ fields */ struct ibmvfc_host *vhost; unsigned long cookie; unsigned long vios_cookie; unsigned long hw_irq; Loading
drivers/scsi/ipr.c +2 −2 Original line number Diff line number Diff line Loading @@ -9795,7 +9795,7 @@ static int ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg) GFP_KERNEL); if (!ioa_cfg->hrrq[i].host_rrq) { while (--i > 0) while (--i >= 0) dma_free_coherent(&pdev->dev, sizeof(u32) * ioa_cfg->hrrq[i].size, ioa_cfg->hrrq[i].host_rrq, Loading Loading @@ -10068,7 +10068,7 @@ static int ipr_request_other_msi_irqs(struct ipr_ioa_cfg *ioa_cfg, ioa_cfg->vectors_info[i].desc, &ioa_cfg->hrrq[i]); if (rc) { while (--i >= 0) while (--i > 0) free_irq(pci_irq_vector(pdev, i), &ioa_cfg->hrrq[i]); return rc; Loading
drivers/scsi/lpfc/lpfc_crtn.h +1 −3 Original line number Diff line number Diff line Loading @@ -420,8 +420,6 @@ int lpfc_sli_issue_iocb_wait(struct lpfc_hba *, uint32_t, uint32_t); void lpfc_sli_abort_fcp_cmpl(struct lpfc_hba *, struct lpfc_iocbq *, struct lpfc_iocbq *); void lpfc_sli4_abort_fcp_cmpl(struct lpfc_hba *h, struct lpfc_iocbq *i, struct lpfc_wcqe_complete *w); void lpfc_sli_free_hbq(struct lpfc_hba *, struct hbq_dmabuf *); Loading Loading @@ -630,7 +628,7 @@ void lpfc_nvmet_invalidate_host(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp); void lpfc_nvme_abort_fcreq_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, struct lpfc_wcqe_complete *abts_cmpl); struct lpfc_iocbq *rspiocb); void lpfc_create_multixri_pools(struct lpfc_hba *phba); void lpfc_create_destroy_pools(struct lpfc_hba *phba); void lpfc_move_xri_pvt_to_pbl(struct lpfc_hba *phba, u32 hwqid); Loading