On 11/9/22 11:41, Asutosh Das wrote:
+static int ufshcd_mcq_config_nr_queues(struct ufs_hba *hba) +{ + int i; + u32 hba_maxq, rem, tot_queues; + struct Scsi_Host *host = hba->host; + + hba_maxq = FIELD_GET(GENMASK(7, 0), hba->mcq_capabilities); + + if (!rw_queues) + rw_queues = num_possible_cpus(); + + tot_queues = UFS_MCQ_NUM_DEV_CMD_QUEUES + read_queues + poll_queues + + rw_queues; + + if (hba_maxq < tot_queues) { + dev_err(hba->dev, "Total queues (%d) exceeds HC capacity (%d)\n", + tot_queues, hba_maxq); + return -EOPNOTSUPP; + }
This function can fail with default kernel module parameters, e.g. num_possible_cpus() == 8 and hba_maxq == 4. This is not acceptable. A better solution is required, e.g. reducing rw_queues if the user has not set this kernel module parameter.
Thanks, Bart.