On 13-12-23, 18:40, Amelie Delaunay wrote: > Channel device name is used for sysfs, but also by dmatest filter function. > > With dynamic channel registration, channels can be registered after dma > controller registration. Users may want to have specific channel names. > > If name is NULL, the channel name relies on previous implementation, > dma<controller_device_id>chan<channel_device_id>. lgtm, where is the user for this..? > > Signed-off-by: Amelie Delaunay <amelie.delaunay@xxxxxxxxxxx> > --- > drivers/dma/dmaengine.c | 16 ++++++++++------ > drivers/dma/idxd/dma.c | 2 +- > include/linux/dmaengine.h | 3 ++- > 3 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c > index b7388ae62d7f..7848428da2d6 100644 > --- a/drivers/dma/dmaengine.c > +++ b/drivers/dma/dmaengine.c > @@ -1037,7 +1037,8 @@ static int get_dma_id(struct dma_device *device) > } > > static int __dma_async_device_channel_register(struct dma_device *device, > - struct dma_chan *chan) > + struct dma_chan *chan, > + const char *name) > { > int rc; > > @@ -1066,8 +1067,10 @@ static int __dma_async_device_channel_register(struct dma_device *device, > chan->dev->device.parent = device->dev; > chan->dev->chan = chan; > chan->dev->dev_id = device->dev_id; > - dev_set_name(&chan->dev->device, "dma%dchan%d", > - device->dev_id, chan->chan_id); > + if (!name) > + dev_set_name(&chan->dev->device, "dma%dchan%d", device->dev_id, chan->chan_id); > + else > + dev_set_name(&chan->dev->device, name); > rc = device_register(&chan->dev->device); > if (rc) > goto err_out_ida; > @@ -1087,11 +1090,12 @@ static int __dma_async_device_channel_register(struct dma_device *device, > } > > int dma_async_device_channel_register(struct dma_device *device, > - struct dma_chan *chan) > + struct dma_chan *chan, > + const char *name) > { > int rc; > > - rc = __dma_async_device_channel_register(device, chan); > + rc = __dma_async_device_channel_register(device, chan, name); > if (rc < 0) > return rc; > > @@ -1200,7 +1204,7 @@ int dma_async_device_register(struct dma_device *device) > > /* represent channels in sysfs. Probably want devs too */ > list_for_each_entry(chan, &device->channels, device_node) { > - rc = __dma_async_device_channel_register(device, chan); > + rc = __dma_async_device_channel_register(device, chan, NULL); > if (rc < 0) > goto err_out; > } > diff --git a/drivers/dma/idxd/dma.c b/drivers/dma/idxd/dma.c > index 47a01893cfdb..101a265567a9 100644 > --- a/drivers/dma/idxd/dma.c > +++ b/drivers/dma/idxd/dma.c > @@ -269,7 +269,7 @@ static int idxd_register_dma_channel(struct idxd_wq *wq) > desc->txd.tx_submit = idxd_dma_tx_submit; > } > > - rc = dma_async_device_channel_register(dma, chan); > + rc = dma_async_device_channel_register(dma, chan, NULL); > if (rc < 0) { > kfree(idxd_chan); > return rc; > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h > index 3df70d6131c8..cbad92cc3e0b 100644 > --- a/include/linux/dmaengine.h > +++ b/include/linux/dmaengine.h > @@ -1574,7 +1574,8 @@ int dma_async_device_register(struct dma_device *device); > int dmaenginem_async_device_register(struct dma_device *device); > void dma_async_device_unregister(struct dma_device *device); > int dma_async_device_channel_register(struct dma_device *device, > - struct dma_chan *chan); > + struct dma_chan *chan, > + const char *name); > void dma_async_device_channel_unregister(struct dma_device *device, > struct dma_chan *chan); > void dma_run_dependencies(struct dma_async_tx_descriptor *tx); > -- > 2.25.1 -- ~Vinod