Message ID | 20240824034925.1163244-2-hch@lst.de |
---|---|
State | Accepted |
Commit | b5a73bf4d1de95e620bf5f592557b81f71c76f0e |
Headers | show |
Series | [1/4] scsi: check that busses support the DMA API before setting dma parameters | expand |
On 24/08/2024 4:49 am, Christoph Hellwig wrote: > We'll start throwing warnings soon when dma_set_seg_boundary and > dma_set_max_seg_size are called on devices for buses that don't fully > support the DMA API. Prepare for that by making the calls in the SCSI > midlayer conditional. Just thinking ahead, might it be worth a logical "are SG segment limits relevant?" wrapper around the dev->dma_parms reference? Not a big deal for now if we think this site is the only user, so either way, Reviewed-by: Robin Murphy <robin.murphy@arm.com> > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > drivers/scsi/scsi_lib.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c > index 3958a6d14bf457..7f0394c4492033 100644 > --- a/drivers/scsi/scsi_lib.c > +++ b/drivers/scsi/scsi_lib.c > @@ -1988,8 +1988,15 @@ void scsi_init_limits(struct Scsi_Host *shost, struct queue_limits *lim) > if (shost->no_highmem) > lim->features |= BLK_FEAT_BOUNCE_HIGH; > > - dma_set_seg_boundary(dev, shost->dma_boundary); > - dma_set_max_seg_size(dev, shost->max_segment_size); > + /* > + * Propagate the DMA formation properties to the dma-mapping layer as > + * a courtesy service to the LLDDs. This needs to check that the buses > + * actually support the DMA API first, though. > + */ > + if (dev->dma_parms) { > + dma_set_seg_boundary(dev, shost->dma_boundary); > + dma_set_max_seg_size(dev, shost->max_segment_size); > + } > } > EXPORT_SYMBOL_GPL(scsi_init_limits); >
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index 3958a6d14bf457..7f0394c4492033 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -1988,8 +1988,15 @@ void scsi_init_limits(struct Scsi_Host *shost, struct queue_limits *lim) if (shost->no_highmem) lim->features |= BLK_FEAT_BOUNCE_HIGH; - dma_set_seg_boundary(dev, shost->dma_boundary); - dma_set_max_seg_size(dev, shost->max_segment_size); + /* + * Propagate the DMA formation properties to the dma-mapping layer as + * a courtesy service to the LLDDs. This needs to check that the buses + * actually support the DMA API first, though. + */ + if (dev->dma_parms) { + dma_set_seg_boundary(dev, shost->dma_boundary); + dma_set_max_seg_size(dev, shost->max_segment_size); + } } EXPORT_SYMBOL_GPL(scsi_init_limits);
We'll start throwing warnings soon when dma_set_seg_boundary and dma_set_max_seg_size are called on devices for buses that don't fully support the DMA API. Prepare for that by making the calls in the SCSI midlayer conditional. Signed-off-by: Christoph Hellwig <hch@lst.de> --- drivers/scsi/scsi_lib.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)