lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Tue, 15 Aug 2023 09:04:06 -0700
From:   Dave Jiang <dave.jiang@...el.com>
To:     Yajun Deng <yajun.deng@...ux.dev>, <vkoul@...nel.org>
CC:     <dmaengine@...r.kernel.org>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH] dmaengine: Simplify dma_async_device_register()



On 8/15/23 00:23, Yajun Deng wrote:
> There are a lot of duplicate codes for checking if the dma has some
> capability.
> 
> Define a temporary macro that is used to check if the dma claims some
> capability and if the corresponding function is implemented.
> 
> Signed-off-by: Yajun Deng <yajun.deng@...ux.dev>

Reviewed-by: Dave Jiang <dave.jiang@...el.com>
> ---
>   drivers/dma/dmaengine.c | 82 ++++++++++-------------------------------
>   1 file changed, 20 insertions(+), 62 deletions(-)
> 
> diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
> index 826b98284fa1..b7388ae62d7f 100644
> --- a/drivers/dma/dmaengine.c
> +++ b/drivers/dma/dmaengine.c
> @@ -1147,69 +1147,27 @@ int dma_async_device_register(struct dma_device *device)
>   
>   	device->owner = device->dev->driver->owner;
>   
> -	if (dma_has_cap(DMA_MEMCPY, device->cap_mask) && !device->device_prep_dma_memcpy) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_MEMCPY");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_XOR, device->cap_mask) && !device->device_prep_dma_xor) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_XOR");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_XOR_VAL, device->cap_mask) && !device->device_prep_dma_xor_val) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_XOR_VAL");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_PQ, device->cap_mask) && !device->device_prep_dma_pq) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_PQ");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_PQ_VAL, device->cap_mask) && !device->device_prep_dma_pq_val) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_PQ_VAL");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_MEMSET, device->cap_mask) && !device->device_prep_dma_memset) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_MEMSET");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_INTERRUPT, device->cap_mask) && !device->device_prep_dma_interrupt) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_INTERRUPT");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_CYCLIC, device->cap_mask) && !device->device_prep_dma_cyclic) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_CYCLIC");
> -		return -EIO;
> -	}
> -
> -	if (dma_has_cap(DMA_INTERLEAVE, device->cap_mask) && !device->device_prep_interleaved_dma) {
> -		dev_err(device->dev,
> -			"Device claims capability %s, but op is not defined\n",
> -			"DMA_INTERLEAVE");
> -		return -EIO;
> -	}
> +#define CHECK_CAP(_name, _type)								\
> +{											\
> +	if (dma_has_cap(_type, device->cap_mask) && !device->device_prep_##_name) {	\
> +		dev_err(device->dev,							\
> +			"Device claims capability %s, but op is not defined\n",		\
> +			__stringify(_type));						\
> +		return -EIO;								\
> +	}										\
> +}
>   
> +	CHECK_CAP(dma_memcpy,      DMA_MEMCPY);
> +	CHECK_CAP(dma_xor,         DMA_XOR);
> +	CHECK_CAP(dma_xor_val,     DMA_XOR_VAL);
> +	CHECK_CAP(dma_pq,          DMA_PQ);
> +	CHECK_CAP(dma_pq_val,      DMA_PQ_VAL);
> +	CHECK_CAP(dma_memset,      DMA_MEMSET);
> +	CHECK_CAP(dma_interrupt,   DMA_INTERRUPT);
> +	CHECK_CAP(dma_cyclic,      DMA_CYCLIC);
> +	CHECK_CAP(interleaved_dma, DMA_INTERLEAVE);
> +
> +#undef CHECK_CAP
>   
>   	if (!device->device_tx_status) {
>   		dev_err(device->dev, "Device tx_status is not defined\n");

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ