Message ID | 20241120062522.917157-1-gwendal@chromium.org |
---|---|
State | New |
Headers | show |
Series | scsi: ufs: core: sysfs: Prevent div by zero | expand |
On 11/19/24 10:25 PM, Gwendal Grignou wrote: > Prevent a division by 0 when monitoring is not enabled. > > Fixes: 1d8613a23f3c ("scsi: ufs: core: Introduce HBA performance monitor sysfs nodes") > > Cc: stable@vger.kernel.org > Signed-off-by: Gwendal Grignou <gwendal@chromium.org> > --- > drivers/ufs/core/ufs-sysfs.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c > index c95906443d5f9..3692b39b35e78 100644 > --- a/drivers/ufs/core/ufs-sysfs.c > +++ b/drivers/ufs/core/ufs-sysfs.c > @@ -485,6 +485,9 @@ static ssize_t read_req_latency_avg_show(struct device *dev, > struct ufs_hba *hba = dev_get_drvdata(dev); > struct ufs_hba_monitor *m = &hba->monitor; > > + if (!m->nr_req[READ]) > + return sysfs_emit(buf, "0\n"); > + > return sysfs_emit(buf, "%llu\n", div_u64(ktime_to_us(m->lat_sum[READ]), > m->nr_req[READ])); > } > @@ -552,6 +555,9 @@ static ssize_t write_req_latency_avg_show(struct device *dev, > struct ufs_hba *hba = dev_get_drvdata(dev); > struct ufs_hba_monitor *m = &hba->monitor; > > + if (!m->nr_req[WRITE]) > + return sysfs_emit(buf, "0\n"); > + > return sysfs_emit(buf, "%llu\n", div_u64(ktime_to_us(m->lat_sum[WRITE]), > m->nr_req[WRITE])); > } Is anyone using the UFS monitor infrastructure or can it perhaps be removed? Thanks, Bart.
On 11/20/2024 2:25 PM, Gwendal Grignou wrote: > Prevent a division by 0 when monitoring is not enabled. > > Fixes: 1d8613a23f3c ("scsi: ufs: core: Introduce HBA performance monitor sysfs nodes") > > Cc: stable@vger.kernel.org > Signed-off-by: Gwendal Grignou <gwendal@chromium.org> > --- > drivers/ufs/core/ufs-sysfs.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c > index c95906443d5f9..3692b39b35e78 100644 > --- a/drivers/ufs/core/ufs-sysfs.c > +++ b/drivers/ufs/core/ufs-sysfs.c > @@ -485,6 +485,9 @@ static ssize_t read_req_latency_avg_show(struct device *dev, > struct ufs_hba *hba = dev_get_drvdata(dev); > struct ufs_hba_monitor *m = &hba->monitor; > > + if (!m->nr_req[READ]) > + return sysfs_emit(buf, "0\n"); > + > return sysfs_emit(buf, "%llu\n", div_u64(ktime_to_us(m->lat_sum[READ]), > m->nr_req[READ])); > } > @@ -552,6 +555,9 @@ static ssize_t write_req_latency_avg_show(struct device *dev, > struct ufs_hba *hba = dev_get_drvdata(dev); > struct ufs_hba_monitor *m = &hba->monitor; > > + if (!m->nr_req[WRITE]) > + return sysfs_emit(buf, "0\n"); > + > return sysfs_emit(buf, "%llu\n", div_u64(ktime_to_us(m->lat_sum[WRITE]), > m->nr_req[WRITE])); > } Thanks for the fix! Reviewed-by: Can Guo <quic_cang@quicinc.com>
Hi Bart, On 11/22/2024 4:24 AM, Bart Van Assche wrote: > On 11/19/24 10:25 PM, Gwendal Grignou wrote: >> Prevent a division by 0 when monitoring is not enabled. >> >> Fixes: 1d8613a23f3c ("scsi: ufs: core: Introduce HBA performance >> monitor sysfs nodes") >> >> Cc: stable@vger.kernel.org >> Signed-off-by: Gwendal Grignou <gwendal@chromium.org> >> --- >> drivers/ufs/core/ufs-sysfs.c | 6 ++++++ >> 1 file changed, 6 insertions(+) >> >> diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c >> index c95906443d5f9..3692b39b35e78 100644 >> --- a/drivers/ufs/core/ufs-sysfs.c >> +++ b/drivers/ufs/core/ufs-sysfs.c >> @@ -485,6 +485,9 @@ static ssize_t read_req_latency_avg_show(struct >> device *dev, >> struct ufs_hba *hba = dev_get_drvdata(dev); >> struct ufs_hba_monitor *m = &hba->monitor; >> + if (!m->nr_req[READ]) >> + return sysfs_emit(buf, "0\n"); >> + >> return sysfs_emit(buf, "%llu\n", >> div_u64(ktime_to_us(m->lat_sum[READ]), >> m->nr_req[READ])); >> } >> @@ -552,6 +555,9 @@ static ssize_t write_req_latency_avg_show(struct >> device *dev, >> struct ufs_hba *hba = dev_get_drvdata(dev); >> struct ufs_hba_monitor *m = &hba->monitor; >> + if (!m->nr_req[WRITE]) >> + return sysfs_emit(buf, "0\n"); >> + >> return sysfs_emit(buf, "%llu\n", >> div_u64(ktime_to_us(m->lat_sum[WRITE]), >> m->nr_req[WRITE])); >> } > > Is anyone using the UFS monitor infrastructure or can it perhaps be > removed? We are the user of the UFS monitor. And we are about to integrate UFS queue depth monitoring in it. Thanks, Can Guo. > > Thanks, > > Bart.
On 11/21/24 6:12 PM, Can Guo wrote: > We are the user of the UFS monitor. And we are about to integrate UFS > queue depth monitoring in it. Shouldn't such functionality be integrated in the block layer or SCSI core instead of in the UFS driver such that this functionality becomes available to all block drivers? Thanks, Bart.
diff --git a/drivers/ufs/core/ufs-sysfs.c b/drivers/ufs/core/ufs-sysfs.c index c95906443d5f9..3692b39b35e78 100644 --- a/drivers/ufs/core/ufs-sysfs.c +++ b/drivers/ufs/core/ufs-sysfs.c @@ -485,6 +485,9 @@ static ssize_t read_req_latency_avg_show(struct device *dev, struct ufs_hba *hba = dev_get_drvdata(dev); struct ufs_hba_monitor *m = &hba->monitor; + if (!m->nr_req[READ]) + return sysfs_emit(buf, "0\n"); + return sysfs_emit(buf, "%llu\n", div_u64(ktime_to_us(m->lat_sum[READ]), m->nr_req[READ])); } @@ -552,6 +555,9 @@ static ssize_t write_req_latency_avg_show(struct device *dev, struct ufs_hba *hba = dev_get_drvdata(dev); struct ufs_hba_monitor *m = &hba->monitor; + if (!m->nr_req[WRITE]) + return sysfs_emit(buf, "0\n"); + return sysfs_emit(buf, "%llu\n", div_u64(ktime_to_us(m->lat_sum[WRITE]), m->nr_req[WRITE])); }
Prevent a division by 0 when monitoring is not enabled. Fixes: 1d8613a23f3c ("scsi: ufs: core: Introduce HBA performance monitor sysfs nodes") Cc: stable@vger.kernel.org Signed-off-by: Gwendal Grignou <gwendal@chromium.org> --- drivers/ufs/core/ufs-sysfs.c | 6 ++++++ 1 file changed, 6 insertions(+)