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 Note that callbacks will always be invoked from the DMA
engines tasklet, never from interrupt context. engines tasklet, never from interrupt context.
Optional: per descriptor metadata Optional: per descriptor metadata
--------------------------------- ---------------------------------
DMAengine provides two ways for metadata support. DMAengine provides two ways for metadata support.
DESC_METADATA_CLIENT 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); mutex_unlock(&dma_list_mutex);
if (!IS_ERR_OR_NULL(chan)) if (IS_ERR_OR_NULL(chan))
goto found; return chan ? chan : ERR_PTR(-EPROBE_DEFER);
return ERR_PTR(-EPROBE_DEFER);
found: found:
chan->slave = dev;
chan->name = kasprintf(GFP_KERNEL, "dma:%s", name); chan->name = kasprintf(GFP_KERNEL, "dma:%s", name);
if (!chan->name) if (!chan->name)
return ERR_PTR(-ENOMEM); return chan;
chan->slave = dev;
if (sysfs_create_link(&chan->dev->device.kobj, &dev->kobj, if (sysfs_create_link(&chan->dev->device.kobj, &dev->kobj,
DMA_SLAVE_NAME)) 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)) 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; return chan;
} }
EXPORT_SYMBOL_GPL(dma_request_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() */ /* drop PRIVATE cap enabled by __dma_request_channel() */
if (--chan->device->privatecnt == 0) if (--chan->device->privatecnt == 0)
dma_cap_clear(DMA_PRIVATE, chan->device->cap_mask); dma_cap_clear(DMA_PRIVATE, chan->device->cap_mask);
if (chan->slave) { if (chan->slave) {
sysfs_remove_link(&chan->dev->device.kobj, DMA_SLAVE_NAME);
sysfs_remove_link(&chan->slave->kobj, chan->name); sysfs_remove_link(&chan->slave->kobj, chan->name);
kfree(chan->name); kfree(chan->name);
chan->name = NULL; chan->name = NULL;
chan->slave = NULL; chan->slave = NULL;
} }
sysfs_remove_link(&chan->dev->device.kobj, DMA_SLAVE_NAME);
mutex_unlock(&dma_list_mutex); mutex_unlock(&dma_list_mutex);
} }
EXPORT_SYMBOL_GPL(dma_release_channel); 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, tchan = list_first_entry_or_null(&device->channels,
struct dma_chan, device_node); struct dma_chan, device_node);
if (!tchan)
return -ENODEV;
if (tchan->dev) { if (tchan->dev) {
idr_ref = tchan->dev->idr_ref; idr_ref = tchan->dev->idr_ref;
} else { } 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) 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, static int idxd_config_bus_match(struct device *dev,