On Tue, 03 Nov 2026 08:34:52 +0100, Christian Zigotzky wrote: > > On 01 November 2026 at 04:26 pm, Takashi Iwai <[email protected]> wrote: > > Hm, could you verify whether the below oneliner recovers from your > problem or not? > > -- 8< -- > --- a/sound/core/pcm_native.c > +++ b/sound/core/pcm_native.c > @@ -965,7 +965,8 @@ static int snd_pcm_hw_refine_user(struct > snd_pcm_substream *substream, > if (IS_ERR(params)) > return PTR_ERR(params); > > - err = snd_pcm_hw_refine_with_lock(substream, params); > + //err = snd_pcm_hw_refine_with_lock(substream, params); > + err = snd_pcm_hw_refine(substream, params); > if (err < 0) > return err; > > -- 8< -- > > If this works, clear this change again, and figure out which check in > snd_pcm_hw_refine_with_lock() gives the error. The function has three > preliminary checks: PCM_RUNTIME_CHECK(), snd_pcm_buffer_access_lock() > (& unlock()), and hw_parms_state_check. The first one must be > harmless, and the real problem must be either > snd_pcm_buffer_access_lock() or hw_params_state_check(). > > ``` > static int snd_pcm_hw_refine_with_lock(struct snd_pcm_substream *substream, > struct snd_pcm_hw_params *params) > { > struct snd_pcm_runtime *runtime; > int err; > > if (PCM_RUNTIME_CHECK(substream)) > return -ENXIO; > runtime = substream->runtime; > err = snd_pcm_buffer_access_lock(runtime); > if (err < 0) > return err; > err = hw_params_state_check(substream); > if (err) > goto unlock; > > err = snd_pcm_hw_refine(substream, params); > > unlock: > snd_pcm_buffer_access_unlock(runtime); > return err; > } > ``` > > OTOH, if the oneliner above doesn't change the behavior, something > else overlooked obviously. > > Oh wait, it might be the 32bit compat path? If so, the call at > snd_pcm_ioctl_hw_params_compat() needs to be tested, instead. > > > thanks, > > Takashi > > > - - - > > Hi Takashi, > > Thank you for your patch. > > I tested your patch today but unfortunately it doesn’t solve the issue with > PulseAudio on Void PPC.
Have you tried changing the call of snd_pcm_hw_refine_with_lock() in snd_pcm_ioctl_hw_params_compat(), too? Or check the call in snd_pcm_hw_refine_old_user(), too. If it doesn't change even if you replace all callers of snd_pcm_hw_refine_with_lock() with snd_pcm_hw_refine(), something wrong in the test itself. Takashi
