[dpdk-dev] [PATCH v21 4/7] dmadev: introduce DMA device library implementation

fengchengwen fengchengwen at huawei.com
Thu Sep 9 15:25:30 CEST 2021


For the dmadev which only support one vchan, it's OK to ignore vchan parameters.
I don't think that logic needs to be added.

On 2021/9/8 17:54, Walsh, Conor wrote:
> <snip>
> 
> Hi Chengwen,
> 
> While testing the IOAT driver I realised that we hadn't implemented the new RTE_DMADEV_ALL_VCHAN
> flag for stats. Rather than every driver that only supports 1 vchan enabling support for this flag it would
> probably be better to catch it in the library as shown below.
> 
> Thanks,
> Conor.
> 
>> +int
>> +rte_dmadev_stats_get(uint16_t dev_id, uint16_t vchan,
>> +		     struct rte_dmadev_stats *stats)
>> +{
>> +	const struct rte_dmadev *dev = &rte_dmadevices[dev_id];
>> +
>> +	RTE_DMADEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);
>> +	if (stats == NULL)
>> +		return -EINVAL;
>> +	if (vchan >= dev->data->dev_conf.nb_vchans &&
>> +	    vchan != RTE_DMADEV_ALL_VCHAN) {
>> +		RTE_DMADEV_LOG(ERR,
>> +			"Device %u vchan %u out of range", dev_id, vchan);
>> +		return -EINVAL;
>> +	}
> 	if (vchan == RTE_DMADEV_ALL_VCHAN && dev->data->dev_conf.nb_vchans == 1)
> 		vchan = 0;
>> +
>> +	RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_get, -
>> ENOTSUP);
>> +	memset(stats, 0, sizeof(struct rte_dmadev_stats));
>> +	return (*dev->dev_ops->stats_get)(dev, vchan, stats,
>> +					  sizeof(struct rte_dmadev_stats));
>> +}
>> +
>> +int
>> +rte_dmadev_stats_reset(uint16_t dev_id, uint16_t vchan)
>> +{
>> +	struct rte_dmadev *dev = &rte_dmadevices[dev_id];
>> +
>> +	RTE_DMADEV_VALID_DEV_ID_OR_ERR_RET(dev_id, -EINVAL);
>> +	if (vchan >= dev->data->dev_conf.nb_vchans &&
>> +	    vchan != RTE_DMADEV_ALL_VCHAN) {
>> +		RTE_DMADEV_LOG(ERR,
>> +			"Device %u vchan %u out of range", dev_id, vchan);
>> +		return -EINVAL;
>> +	}
> 	if (vchan == RTE_DMADEV_ALL_VCHAN && dev->data->dev_conf.nb_vchans == 1)
> 		vchan = 0;
>> +
>> +	RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->stats_reset, -
>> ENOTSUP);
>> +	return (*dev->dev_ops->stats_reset)(dev, vchan);
>> +}
> 
> <snip>
> 


More information about the dev mailing list