Re: [PATCH v4 05/16] ufs: core: mcq: Add Multi Circular Queue support

From: Bart Van Assche
Date: Wed Nov 09 2022 - 16:16:28 EST


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.