drivers/dma/mxs-dma.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
To avoid the failure of dma_set_max_seg_size(), we should check the
return value of the dma_set_max_seg_size().
Signed-off-by: Ma Ke <make_ruc2021@163.com>
---
drivers/dma/mxs-dma.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c
index cfb9962417ef..90cbb9b04b02 100644
--- a/drivers/dma/mxs-dma.c
+++ b/drivers/dma/mxs-dma.c
@@ -798,7 +798,9 @@ static int mxs_dma_probe(struct platform_device *pdev)
mxs_dma->dma_device.dev = &pdev->dev;
/* mxs_dma gets 65535 bytes maximum sg size */
- dma_set_max_seg_size(mxs_dma->dma_device.dev, MAX_XFER_BYTES);
+ ret = dma_set_max_seg_size(mxs_dma->dma_device.dev, MAX_XFER_BYTES);
+ if (ret)
+ return ret;
mxs_dma->dma_device.device_alloc_chan_resources = mxs_dma_alloc_chan_resources;
mxs_dma->dma_device.device_free_chan_resources = mxs_dma_free_chan_resources;
--
2.37.2
On Tue, Apr 23, 2024 at 10:32:05PM +0800, Ma Ke wrote: > To avoid the failure of dma_set_max_seg_size(), we should check the > return value of the dma_set_max_seg_size(). Check return value of dma_set_max_seg_size() in case it return error. > > Signed-off-by: Ma Ke <make_ruc2021@163.com> > --- > drivers/dma/mxs-dma.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c > index cfb9962417ef..90cbb9b04b02 100644 > --- a/drivers/dma/mxs-dma.c > +++ b/drivers/dma/mxs-dma.c > @@ -798,7 +798,9 @@ static int mxs_dma_probe(struct platform_device *pdev) > mxs_dma->dma_device.dev = &pdev->dev; > > /* mxs_dma gets 65535 bytes maximum sg size */ > - dma_set_max_seg_size(mxs_dma->dma_device.dev, MAX_XFER_BYTES); > + ret = dma_set_max_seg_size(mxs_dma->dma_device.dev, MAX_XFER_BYTES); > + if (ret) > + return ret; How error happen? static inline int dma_set_max_seg_size(struct device *dev, unsigned int size) { if (dev->dma_parms) { dev->dma_parms->max_segment_size = size; return 0; } return -EIO; } Only possible dev->dma_parms is null. but mxs-dma is platform device, it point to platform's dma_parms field. Look like impossible it is null. Frank > > mxs_dma->dma_device.device_alloc_chan_resources = mxs_dma_alloc_chan_resources; > mxs_dma->dma_device.device_free_chan_resources = mxs_dma_free_chan_resources; > -- > 2.37.2 >
On 24-04-24, 00:07, Frank Li wrote: > On Tue, Apr 23, 2024 at 10:32:05PM +0800, Ma Ke wrote: > > - dma_set_max_seg_size(mxs_dma->dma_device.dev, MAX_XFER_BYTES); > > + ret = dma_set_max_seg_size(mxs_dma->dma_device.dev, MAX_XFER_BYTES); > > + if (ret) > > + return ret; > > How error happen? > > static inline int dma_set_max_seg_size(struct device *dev, unsigned int size) > { > if (dev->dma_parms) { > dev->dma_parms->max_segment_size = size; > return 0; > } > return -EIO; > } > > Only possible dev->dma_parms is null. but mxs-dma is platform device, it > point to platform's dma_parms field. Look like impossible it is null. Yep, checking for the sake of checking is bad. It needs to be logical -- ~Vinod
© 2016 - 2024 Red Hat, Inc.