Re: [PATCH] ASoC: xilinx: formatter_pcm: pass aud_drv_data to irq handlers

Michal Simek <[email protected]>
Newsgroups gmane.linux.sound,gmane.linux.ports.arm.kernel,gmane.linux.kernel
Message-ID <[email protected]>

On 8/7/26 01:32, Rosen Penev wrote:
> The irq handlers take a struct device pointer and call
> dev_get_drvdata() to obtain the driver data.  However, the driver
> data is only set at the end of probe, after devm_request_irq(),
> so an interrupt taken in between causes the handlers to pass a
> NULL pointer to readl() and crash.
> 
> Pass the private data directly as the devm_request_irq() argument
> instead of the device pointer, matching what the handlers expect.
> 
> Fixes: 6f6c3c36f091 ("ASoC: xlnx: add pcm formatter platform driver")
> Assisted-by: opencode:deepseek-v4-flash-free
> Signed-off-by: Rosen Penev <[email protected]>
> ---
>   sound/soc/xilinx/xlnx_formatter_pcm.c | 10 ++++------
>   1 file changed, 4 insertions(+), 6 deletions(-)
> 
> diff --git a/sound/soc/xilinx/xlnx_formatter_pcm.c b/sound/soc/xilinx/xlnx_formatter_pcm.c
> index 7eba3a0205f1..b50306b0fc06 100644
> --- a/sound/soc/xilinx/xlnx_formatter_pcm.c
> +++ b/sound/soc/xilinx/xlnx_formatter_pcm.c
> @@ -280,8 +280,7 @@ static irqreturn_t xlnx_mm2s_irq_handler(int irq, void *arg)
>   {
>   	u32 val;
>   	void __iomem *reg;
> -	struct device *dev = arg;
> -	struct xlnx_pcm_drv_data *adata = dev_get_drvdata(dev);
> +	struct xlnx_pcm_drv_data *adata = arg;
>   
>   	reg = adata->mmio + XLNX_MM2S_OFFSET + XLNX_AUD_STS;
>   	val = readl(reg);
> @@ -299,8 +298,7 @@ static irqreturn_t xlnx_s2mm_irq_handler(int irq, void *arg)
>   {
>   	u32 val;
>   	void __iomem *reg;
> -	struct device *dev = arg;
> -	struct xlnx_pcm_drv_data *adata = dev_get_drvdata(dev);
> +	struct xlnx_pcm_drv_data *adata = arg;
>   
>   	reg = adata->mmio + XLNX_S2MM_OFFSET + XLNX_AUD_STS;
>   	val = readl(reg);
> @@ -636,7 +634,7 @@ static int xlnx_formatter_pcm_probe(struct platform_device *pdev)
>   		}
>   		ret = devm_request_irq(dev, aud_drv_data->mm2s_irq,
>   				       xlnx_mm2s_irq_handler, 0,
> -				       "xlnx_formatter_pcm_mm2s_irq", dev);
> +				       "xlnx_formatter_pcm_mm2s_irq", aud_drv_data);
>   		if (ret) {
>   			dev_err(dev, "xlnx audio mm2s irq request failed\n");
>   			goto clk_err;
> @@ -663,7 +661,7 @@ static int xlnx_formatter_pcm_probe(struct platform_device *pdev)
>   		ret = devm_request_irq(dev, aud_drv_data->s2mm_irq,
>   				       xlnx_s2mm_irq_handler, 0,
>   				       "xlnx_formatter_pcm_s2mm_irq",
> -				       dev);
> +				       aud_drv_data);
>   		if (ret) {
>   			dev_err(dev, "xlnx audio s2mm irq request failed\n");
>   			goto clk_err;

Reviewed-by: Michal Simek <[email protected]>

Thanks,
Michal
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.