Re: Re: [PATCH] regmap: add iopoll-like atomic polling macro

From: Sameer Pujar
Date: Tue Jan 07 2020 - 23:51:03 EST



On 1/7/2020 5:39 PM, Mark Brown wrote:
On Tue, Jan 07, 2020 at 03:58:09PM +0530, Sameer Pujar wrote:
This patch adds a macro 'regmap_read_poll_timeout_atomic' that works
similar to 'readx_poll_timeout_atomic' defined in linux/iopoll.h; This
is atomic version of already available 'regmap_read_poll_timeout' macro.
In general regmap really can't be used in atomic contexts - we do have
options to configure a regmap so it can be used there but they're not
the default. It'd be better if the comment mentioned this and warned
against use with normal regmaps so people are less likely to try to use
this in an atomic context when the regmap doesn't support that.

Oh I see.

While using regmap_read_poll_timeout() in snd_soc_dai_ops trigger callback, I was hitting below print.
"BUG: scheduling while atomic" and kernel panic there after.

While checking the documentation on snd_soc_dai_ops, it appears trigger() is in atomic context.
This means I cannot use regmap interface (with default configuration) in trigger().
The above issue went away with usage of regmap_read_poll_timeout_atomic() and now I think I just got lucky.

Also, with the limited testing, I did not see the issue in current linux-next, where as I hit above issue in
older kernel. Has anything changed with respect to above?

Though I need to test this, I guess there is a way to use non-atomic versions of PCM operations by setting
'nonatomic' flag in snd_pcm and continue to use regmap_read_poll_timeout(). In that case new macro may not
be necessary.