Message ID | 20170825100407.5640-1-tiwai@suse.de (mailing list archive) |
---|---|
State | Accepted |
Commit | 5d61f0ba6524dcbad198126e5793157c8afdea91 |
Headers | show |
Hi Mark > When ASoC driver is unbound dynamically during its operation (i.e. a > kind of hot-unplug), we may hit Oops due to the resource access after > the release by a delayed work, something like: > > Unable to handle kernel paging request at virtual address dead000000000220 > .... > PC is at soc_dapm_dai_stream_event.isra.14+0x20/0xd0 > LR is at snd_soc_dapm_stream_event+0x74/0xa8 > .... > [<ffff000008715610>] soc_dapm_dai_stream_event.isra.14+0x20/0xd0 > [<ffff00000871989c>] snd_soc_dapm_stream_event+0x74/0xa8 > [<ffff00000871b23c>] close_delayed_work+0x3c/0x50 > [<ffff0000080bbd6c>] process_one_work+0x1ac/0x318 > [<ffff0000080bbf20>] worker_thread+0x48/0x420 > [<ffff0000080c201c>] kthread+0xfc/0x128 > [<ffff0000080842f0>] ret_from_fork+0x10/0x18 > > For fixing the race, this patch adds a sync-point in pcm private_free > callback to finish the delayed work before actually releasing the > resources. > > Reported-by: Hiep Cao Minh <cm-hiep@jinso.co.jp> > Reported-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > Signed-off-by: Takashi Iwai <tiwai@suse.de> > --- This patch solved my issue, can you consider this ? Best regards --- Kuninori Morimoto
On Tue, Sep 26, 2017 at 12:39:14AM +0000, Kuninori Morimoto wrote:
> This patch solved my issue, can you consider this ?
Please don't send content free pings and please allow a reasonable time
for review. People get busy, go on holiday, attend conferences and so
on so unless there is some reason for urgency (like critical bug fixes)
please allow at least a couple of weeks for review. If there have been
review comments then people may be waiting for those to be addressed.
Sending content free pings just adds to the mail volume (if they are
seen at all) and if something has gone wrong you'll have to resend the
patches anyway.
Hi Mark > > This patch solved my issue, can you consider this ? > > Please don't send content free pings and please allow a reasonable time > for review. People get busy, go on holiday, attend conferences and so > on so unless there is some reason for urgency (like critical bug fixes) > please allow at least a couple of weeks for review. If there have been > review comments then people may be waiting for those to be addressed. > Sending content free pings just adds to the mail volume (if they are > seen at all) and if something has gone wrong you'll have to resend the > patches anyway. Sorry for my noise. I will wait more Best regards --- Kuninori Morimoto
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 94b88b897c3b..c0f0b09cb433 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -2632,6 +2632,17 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream) return ret; } +static void soc_pcm_private_free(struct snd_pcm *pcm) +{ + struct snd_soc_pcm_runtime *rtd = pcm->private_data; + struct snd_soc_platform *platform = rtd->platform; + + /* need to sync the delayed work before releasing resources */ + flush_delayed_work(&rtd->delayed_work); + if (platform->driver->pcm_free) + platform->driver->pcm_free(pcm); +} + /* create a new pcm */ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) { @@ -2757,7 +2768,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) } } - pcm->private_free = platform->driver->pcm_free; + pcm->private_free = soc_pcm_private_free; out: dev_info(rtd->card->dev, "%s <-> %s mapping ok\n", (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,