dmaengine fixes for v5.6-rc1

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
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAl463NAACgkQfBQHDyUj
 g0eUOA//SZBP/bMgKujbOb976fVbTQrmVs+WnX+h3swkReG6SIkXZ4SWLvDDBiZ3
 JVGHbibHdMDD6zYxhXwv/uFlU9hCdBlkinRBSvADQFi90cvN5GQNHwPTre7IxqWv
 eg1liuUmoVtR/F26BxUmvEoT5tIUwxPxAQOjnoLNlBBdfMjnJUcN+xI44DQvI29J
 xvKc3CiUiAebsOVcIb01I26z4CRYCTnTKnWT5Qh+3Dgb8r1oJUGb0i7fVb9+gFHM
 RpeWH73bVFRk8/Z89hIxLC87ZNX0HB6THLdf43ADSGVaEogN950mxV/FqDX/0K5D
 Kkao5kRyZrvdoHFF87kBIdv37nD5/jXqJ33uiloCZUFO+FiKvimvcw2rRVpGrMOl
 76+5rjQ7X713hpeifa4w+3gZFMayEHpi7lpsUtYWM0VKYEf3Z1o1DPVkW8h0jwqF
 qfk+sxap2GYbkNcIDxva86O1rYDvqmy9OKQN61xpVdaaIC8uXqR9HT5gVAyinqgA
 t010v7C4LxIouC3/UoGHG9Xl/dzcBQIFsHTfgPuZeSHbSceLGk6aUZ/X4nOiWpru
 EgyClJxtYpRZlLQJiH+z8DYxCfBFa29MCd0U9N4vYvtKtqIDVaoK0+ejBksF0yaO
 Z4HqPkwD5OYBJ/jftKsPuukxCnSS8uStyDHeWsQBtpziQBp6lro=
 =5tXW
 -----END PGP SIGNATURE-----

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:
Linus Torvalds 2020-02-05 18:07:39 +00:00
commit 18ea671ba4
3 changed files with 15 additions and 12 deletions

View File

@ -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

View File

@ -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 {

View File

@ -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,