]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
scsi: qedi: Limit number for CQ queues.
authorManish Rangankar <manish.rangankar@cavium.com>
Thu, 10 Aug 2017 13:32:17 +0000 (06:32 -0700)
committerChuck Anderson <chuck.anderson@oracle.com>
Tue, 19 Sep 2017 05:32:53 +0000 (22:32 -0700)
Orabug: 26759520

[qed_sp_iscsi_func_start:189(host_7-0)]Cannot satisfy CQ amount. Queues
requested 8, CQs available 4. Aborting function start

Above condition will resolve as management firmware is capable of
telling us the number of CQs available for a given PF, qed will
communicate the same number to qedi, So that qedi will know how much CQs
are allowed.

Signed-off-by: Manish Rangankar <manish.rangankar@cavium.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/scsi/qedi/qedi.h
drivers/scsi/qedi/qedi_iscsi.c
drivers/scsi/qedi/qedi_main.c

index 91d2f51c351b4d6940d04a1e4a261f2d816e7b04..b8b22ce60ecc1d2ad626dd79732948904a2a758f 100644 (file)
@@ -54,8 +54,8 @@ struct qedi_endpoint;
 /* MAX Length for cached SGL */
 #define MAX_SGLEN_FOR_CACHESGL ((1U << 16) - 1)
 
-#define MAX_NUM_MSIX_PF         8
-#define MIN_NUM_CPUS_MSIX(x)   min((x)->msix_count, num_online_cpus())
+#define MIN_NUM_CPUS_MSIX(x)   min_t(u32, x->dev_info.num_cqs, \
+                                       num_online_cpus())
 
 #define QEDI_LOCAL_PORT_MIN     60000
 #define QEDI_LOCAL_PORT_MAX     61024
@@ -301,7 +301,6 @@ struct qedi_ctx {
        u16 bdq_prod_idx;
        u16 rq_num_entries;
 
-       u32 msix_count;
        u32 max_sqes;
        u8 num_queues;
        u32 max_active_conns;
index cd7d750c8b04e4492921ba1523c75899ab3abe3c..18dd659077a5617eb005121610a03f9730cc6d62 100644 (file)
@@ -533,7 +533,7 @@ static int qedi_iscsi_offload_conn(struct qedi_endpoint *qedi_ep)
        SET_FIELD(conn_info->tcp_flags, TCP_OFFLOAD_PARAMS_DA_CNT_EN, 1);
        SET_FIELD(conn_info->tcp_flags, TCP_OFFLOAD_PARAMS_KA_EN, 1);
 
-       conn_info->default_cq = (qedi_ep->fw_cid % 8);
+       conn_info->default_cq = (qedi_ep->fw_cid % qedi->num_queues);
 
        conn_info->ka_max_probe_cnt = DEF_KA_MAX_PROBE_COUNT;
        conn_info->dup_ack_theshold = 3;
index 6d6e4b0f1099764c9b9a7670ec3b75d668e85ea2..29f220b7beb30aa50c9915c99ffed5d91b8111aa 100644 (file)
@@ -794,13 +794,14 @@ static int qedi_set_iscsi_pf_param(struct qedi_ctx *qedi)
        u32 log_page_size;
        int rval = 0;
 
-       QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, "Min number of MSIX %d\n",
-                 MIN_NUM_CPUS_MSIX(qedi));
 
        num_sq_pages = (MAX_OUSTANDING_TASKS_PER_CON * 8) / PAGE_SIZE;
 
        qedi->num_queues = MIN_NUM_CPUS_MSIX(qedi);
 
+       QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO,
+                 "Number of CQ count is %d\n", qedi->num_queues);
+
        memset(&qedi->pf_params.iscsi_pf_params, 0,
               sizeof(qedi->pf_params.iscsi_pf_params));
 
@@ -2206,9 +2207,12 @@ static int __qedi_probe(struct pci_dev *pdev, int mode)
                goto free_host;
        }
 
-       qedi->msix_count = MAX_NUM_MSIX_PF;
        atomic_set(&qedi->link_state, QEDI_LINK_DOWN);
 
+       rc = qedi_ops->fill_dev_info(qedi->cdev, &qedi->dev_info);
+       if (rc)
+               goto free_host;
+
        if (mode != QEDI_MODE_RECOVERY) {
                rc = qedi_set_iscsi_pf_param(qedi);
                if (rc) {