public inbox for cip-dev@lists.cip-project.org
 help / color / mirror / Atom feed
From: Pavel Machek <pavel@denx.de>
To: Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>
Cc: Pavel Machek <pavel@denx.de>,
	"cip-dev@lists.cip-project.org" <cip-dev@lists.cip-project.org>,
	Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>,
	Biju Das <biju.das.jz@bp.renesas.com>
Subject: Re: [PATCH 5.10.y-cip 03/31] ASoC: sh: Add RZ/G2L SSIF-2 driver
Date: Thu, 30 Dec 2021 21:07:19 +0100	[thread overview]
Message-ID: <20211230200719.GA24469@duo.ucw.cz> (raw)
In-Reply-To: <OSZPR01MB7019B90F14E42871D896F12BAA459@OSZPR01MB7019.jpnprd01.prod.outlook.com>

[-- Attachment #1: Type: text/plain, Size: 3470 bytes --]

Hi!

> > > +static int rz_ssi_pio_send(struct rz_ssi_priv *ssi, struct
> > > +rz_ssi_stream *strm) {
> > > +	struct snd_pcm_substream *substream = strm->substream;
> > > +	struct snd_pcm_runtime *runtime = substream->runtime;
> > > +	int sample_space;
> > > +	int samples = 0;
> > > +	int frames_left;
> > > +	int i;
> > > +	u32 ssifsr;
> > > +	u16 *buf;
> > > +
> > > +	if (!rz_ssi_stream_is_valid(ssi, strm))
> > > +		return -EINVAL;
> > 
> > Access without locking before verifying that stream is valid with the lock. This is wrong.
> > 
> rz_ssi_stream_is_valid() does lock/unlock to check stream validity.

Yes, but "struct snd_pcm_runtime *runtime = substream->runtime" above
already accessed that data without locking.

> > > +static int rz_ssi_probe(struct platform_device *pdev) {
> > ...
> > > +	/* Error Interrupt */
> > > +	ssi->irq_int = platform_get_irq_byname(pdev, "int_req");
> > > +	if (ssi->irq_int < 0)
> > > +		return dev_err_probe(&pdev->dev, -ENODEV,
> > > +				     "Unable to get SSI int_req IRQ\n");
> > > +
> > > +	ret = devm_request_irq(&pdev->dev, ssi->irq_int, &rz_ssi_interrupt,
> > > +			       0, dev_name(&pdev->dev), ssi);
> > > +	if (ret < 0)
> > > +		return dev_err_probe(&pdev->dev, ret,
> > > +				     "irq request error (int_req)\n");
> > > +
> > > +	/* Tx and Rx interrupts (pio only) */
> > > +	ssi->irq_tx = platform_get_irq_byname(pdev, "dma_tx");
> > > +	if (ssi->irq_tx < 0)
> > > +		return dev_err_probe(&pdev->dev, -ENODEV,
> > > +				     "Unable to get SSI dma_tx IRQ\n");
> > ...
> > 
> > So you registered interrupt handlers...
> > 
> > > +
> > > +	ret = devm_request_irq(&pdev->dev, ssi->irq_tx, &rz_ssi_interrupt, 0,
> > > +			       dev_name(&pdev->dev), ssi);
> > > +	if (ret < 0)
> > > +		return dev_err_probe(&pdev->dev, ret,
> > > +				     "irq request error (dma_tx)\n");
> > > +
> > > +	ssi->irq_rx = platform_get_irq_byname(pdev, "dma_rx");
> > > +	if (ssi->irq_rx < 0)
> > > +		return dev_err_probe(&pdev->dev, -ENODEV,
> > > +				     "Unable to get SSI dma_rx IRQ\n");
> > > +
> > > +	ret = devm_request_irq(&pdev->dev, ssi->irq_rx, &rz_ssi_interrupt, 0,
> > > +			       dev_name(&pdev->dev), ssi);
> > > +	if (ret < 0)
> > > +		return dev_err_probe(&pdev->dev, ret,
> > > +				     "irq request error (dma_rx)\n");
> > > +
> > > +	ssi->rstc = devm_reset_control_get_exclusive(&pdev->dev, NULL);
> > > +	if (IS_ERR(ssi->rstc))
> > > +		return PTR_ERR(ssi->rstc);
> > > +
> > > +	reset_control_deassert(ssi->rstc);
> > > +	pm_runtime_enable(&pdev->dev);
> > > +	pm_runtime_resume_and_get(&pdev->dev);
> > > +
> > > +	spin_lock_init(&ssi->lock);
> > > +	dev_set_drvdata(&pdev->dev, ssi);
> > 
> > But only here you have data structures ready to handle the interrupts. You won't see obvious problems
> > w/o shared interrupts, but I believe there are debugging modes that trigger this intentionally.
> > 
> But the devm_snd_soc_register_component() is after this so it should be OK I believe unless there is a spurious interrupt which will trigger the handler.
>

I believe your code will do fine in usual configurations. But
reordering it should be quite easy, and there are kernel options like
"irqpoll", "irqfixup" and CONFIG_DEBUG_SHIRQ.

Best regards,
								Pavel
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

  reply	other threads:[~2021-12-30 20:07 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-29 10:14 [PATCH 5.10.y-cip 00/31] Add sound/adc support for RZ/G2L Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 01/31] ASoC: dt-bindings: Document RZ/G2L bindings Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 02/31] ASoC: dt-bindings: sound: renesas,rz-ssi: Document DMA support Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 03/31] ASoC: sh: Add RZ/G2L SSIF-2 driver Lad Prabhakar
2021-12-30 11:15   ` Pavel Machek
2021-12-30 14:18     ` Prabhakar Mahadev Lad
2021-12-30 20:07       ` Pavel Machek [this message]
2021-12-29 10:15 ` [PATCH 5.10.y-cip 04/31] ASoC: dt-bindings: renesas,rz-ssi: Update slave dma channel configuration parameter Lad Prabhakar
2021-12-30 10:55   ` Pavel Machek
2021-12-30 13:36     ` Prabhakar Mahadev Lad
2022-01-04 10:25     ` Biju Das
2021-12-29 10:15 ` [PATCH 5.10.y-cip 05/31] ASoC: sh: rz-ssi: Add SSI DMAC support Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 06/31] ASoC: sh: rz-ssi: Fix dereference of noderef expression warning Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 07/31] ASoC: sh: rz-ssi: Fix wrong operator used issue Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 08/31] ASoC: sh: rz-ssi: Improve error handling in rz_ssi_dma_request function Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 09/31] dt-bindings: iio: adc: Add binding documentation for Renesas RZ/G2L A/D converter Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 10/31] iio: adc: Add driver " Lad Prabhakar
2021-12-30 11:00   ` Pavel Machek
2021-12-30 13:39     ` Prabhakar Mahadev Lad
2021-12-29 10:15 ` [PATCH 5.10.y-cip 11/31] iio: adc: rzg2l_adc: Fix -EBUSY timeout error return Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 12/31] iio: adc: rzg2l_adc: add missing clk_disable_unprepare() in rzg2l_adc_pm_runtime_resume() Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 13/31] clk: renesas: r9a07g044: Add SSIF-2 clock and reset entries Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 14/31] clk: renesas: r9a07g044: Add clock and reset entries for ADC Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 15/31] arm64: dts: renesas: r9a07g044: Add ADC node Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 16/31] arm64: dts: renesas: r9a07g044: Add external audio clock nodes Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 17/31] arm64: dts: renesas: r9a07g044: Add SSI support Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 18/31] arm64: dts: renesas: r9a07g044: Add DMA support to SSI Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 19/31] arm64: dts: renesas: rzg2l-smarc: Enable I2C{0,1,3} support Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 20/31] arm64: dts: renesas: rzg2l-smarc: Add WM8978 sound codec Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 21/31] arm64: dts: renesas: rzg2l-smarc: Enable audio Lad Prabhakar
2021-12-30 11:02   ` Pavel Machek
2021-12-30 13:40     ` Prabhakar Mahadev Lad
2021-12-29 10:15 ` [PATCH 5.10.y-cip 22/31] arm64: dts: renesas: rzg2l-smarc: Add Mic routing Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 23/31] arm64: dts: renesas: rzg2l-smarc-som: Move extal and memory nodes to SOM DTSI Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 24/31] arm64: dts: renesas: rzg2l-smarc-som: Enable ADC on SMARC platform Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 25/31] arm64: dts: renesas: rzg2l-smarc: Enable CANFD Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 26/31] arm64: defconfig: Enable SOUND_SOC_RZ Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 27/31] arm64: defconfig: Enable SND_SOC_WM8978 Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 28/31] arm64: defconfig: Enable RZG2L_ADC Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 29/31] clk: renesas: r9a07g044: Mark IA55_CLK and DMAC_ACLK critical Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 30/31] i2c: riic: Add RZ/G2L support Lad Prabhakar
2021-12-29 10:15 ` [PATCH 5.10.y-cip 31/31] arm64: defconfig: Enable RIIC Lad Prabhakar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211230200719.GA24469@duo.ucw.cz \
    --to=pavel@denx.de \
    --cc=biju.das.jz@bp.renesas.com \
    --cc=cip-dev@lists.cip-project.org \
    --cc=nobuhiro1.iwamatsu@toshiba.co.jp \
    --cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox