Merge tag 'dmaengine-fix-5.6-rc1' of git://git.infradead.org/users/vkoul/slave-dma
Pull dmaengine fixes from Vinod Koul: "Fixes for: - Documentation build error fix - Fix dma_request_chan() error return - Remove unneeded conversion in idxd driver - Fix pointer check for dma_async_device_channel_register() - Fix slave-channel symlink cleanup" * tag 'dmaengine-fix-5.6-rc1' of git://git.infradead.org/users/vkoul/slave-dma: dmaengine: Cleanups for the slave <-> channel symlink support dmaengine: fix null ptr check for __dma_async_device_channel_register() dmaengine: idxd: fix boolconv.cocci warnings dmaengine: Fix return value for dma_request_chan() in case of failure dmaengine: doc: Properly indent metadata title
This commit is contained in:
@@ -151,8 +151,8 @@ The details of these operations are:
|
||||
Note that callbacks will always be invoked from the DMA
|
||||
engines tasklet, never from interrupt context.
|
||||
|
||||
Optional: per descriptor metadata
|
||||
---------------------------------
|
||||
Optional: per descriptor metadata
|
||||
---------------------------------
|
||||
DMAengine provides two ways for metadata support.
|
||||
|
||||
DESC_METADATA_CLIENT
|
||||
|
||||
@@ -756,22 +756,21 @@ struct dma_chan *dma_request_chan(struct device *dev, const char *name)
|
||||
}
|
||||
mutex_unlock(&dma_list_mutex);
|
||||
|
||||
if (!IS_ERR_OR_NULL(chan))
|
||||
goto found;
|
||||
|
||||
return ERR_PTR(-EPROBE_DEFER);
|
||||
if (IS_ERR_OR_NULL(chan))
|
||||
return chan ? chan : ERR_PTR(-EPROBE_DEFER);
|
||||
|
||||
found:
|
||||
chan->slave = dev;
|
||||
chan->name = kasprintf(GFP_KERNEL, "dma:%s", name);
|
||||
if (!chan->name)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
return chan;
|
||||
chan->slave = dev;
|
||||
|
||||
if (sysfs_create_link(&chan->dev->device.kobj, &dev->kobj,
|
||||
DMA_SLAVE_NAME))
|
||||
dev_err(dev, "Cannot create DMA %s symlink\n", DMA_SLAVE_NAME);
|
||||
dev_warn(dev, "Cannot create DMA %s symlink\n", DMA_SLAVE_NAME);
|
||||
if (sysfs_create_link(&dev->kobj, &chan->dev->device.kobj, chan->name))
|
||||
dev_err(dev, "Cannot create DMA %s symlink\n", chan->name);
|
||||
dev_warn(dev, "Cannot create DMA %s symlink\n", chan->name);
|
||||
|
||||
return chan;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dma_request_chan);
|
||||
@@ -830,13 +829,14 @@ void dma_release_channel(struct dma_chan *chan)
|
||||
/* drop PRIVATE cap enabled by __dma_request_channel() */
|
||||
if (--chan->device->privatecnt == 0)
|
||||
dma_cap_clear(DMA_PRIVATE, chan->device->cap_mask);
|
||||
|
||||
if (chan->slave) {
|
||||
sysfs_remove_link(&chan->dev->device.kobj, DMA_SLAVE_NAME);
|
||||
sysfs_remove_link(&chan->slave->kobj, chan->name);
|
||||
kfree(chan->name);
|
||||
chan->name = NULL;
|
||||
chan->slave = NULL;
|
||||
}
|
||||
sysfs_remove_link(&chan->dev->device.kobj, DMA_SLAVE_NAME);
|
||||
mutex_unlock(&dma_list_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dma_release_channel);
|
||||
@@ -962,6 +962,9 @@ static int __dma_async_device_channel_register(struct dma_device *device,
|
||||
|
||||
tchan = list_first_entry_or_null(&device->channels,
|
||||
struct dma_chan, device_node);
|
||||
if (!tchan)
|
||||
return -ENODEV;
|
||||
|
||||
if (tchan->dev) {
|
||||
idr_ref = tchan->dev->idr_ref;
|
||||
} else {
|
||||
|
||||
@@ -66,7 +66,7 @@ static inline bool is_idxd_wq_dmaengine(struct idxd_wq *wq)
|
||||
|
||||
static inline bool is_idxd_wq_cdev(struct idxd_wq *wq)
|
||||
{
|
||||
return wq->type == IDXD_WQT_USER ? true : false;
|
||||
return wq->type == IDXD_WQT_USER;
|
||||
}
|
||||
|
||||
static int idxd_config_bus_match(struct device *dev,
|
||||
|
||||
Reference in New Issue
Block a user