[alsa-devel] [PATCH] ASoC: acpi: fix: continue searching when machine is ignored
Keyon Jie
yang.jie at linux.intel.com
Fri Nov 16 04:03:07 CET 2018
On 2018/11/16 上午7:01, Pierre-Louis Bossart wrote:
> Hi Keyon,
>
>>> The machine_quirk may return NULL which means the acpi entries should be
>>> skipped and search for next matched entry is needed, here add return
>>> check here and continue for NULL case.
>>
>> Nice catch, this was missed in the other patchset since the ACPI ID to
>> ignore was the last in the table...
>>
>> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
>
> I was wondering if this patch was merged, but actually it's good Mark
> wasn't copied on this one: the code doesn't quite work as intended and
> shouldn't be merged as is.
>
> Chintan and I see an oops and reboot on KBL Chromebooks, when the quirk
> returns NULL, the mach variable becomes NULL and cannot be modified with
> pointer arithmetic (which doesn't show with the diff format).
Ah, yeap, I omitted this, so we may need introduce a new pointer to fix
that, something like this:
diff --git a/sound/soc/soc-acpi.c b/sound/soc/soc-acpi.c
index b8e72b52db30..0d967d0ca222 100644
--- a/sound/soc/soc-acpi.c
+++ b/sound/soc/soc-acpi.c
@@ -10,11 +10,22 @@ struct snd_soc_acpi_mach *
snd_soc_acpi_find_machine(struct snd_soc_acpi_mach *machines)
{
struct snd_soc_acpi_mach *mach;
+ struct snd_soc_acpi_mach *quirk_mach = NULL;
for (mach = machines; mach->id[0]; mach++) {
if (acpi_dev_present(mach->id, NULL, -1)) {
- if (mach->machine_quirk)
- mach = mach->machine_quirk(mach);
+ if (mach->machine_quirk) {
+ quirk_mach = mach->machine_quirk(mach);
+
+ if (!quirk_mach)
+ /* skip if no quirk matched */
+ continue;
+ else
+ /* return quirk matched machine */
+ return quirk_mach;
+ }
+
+ /* return acpi matched machine directly */
return mach;
}
}
>
> It's very likely btw that anyone trying a recent kernel on these devices
> would not see the audio driver probe at all, so we do want to try other
> entries - but of course without this nasty side effect. I will submit a
> v2 when I've sorted out other problems on Chrome.
That's fine.
Thanks,
~Keyon
>
> Thanks
>
> -Pierre
>
>>
>>>
>>> Signed-off-by: Keyon Jie <yang.jie at linux.intel.com>
>>> ---
>>> sound/soc/soc-acpi.c | 5 ++++-
>>> 1 file changed, 4 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/sound/soc/soc-acpi.c b/sound/soc/soc-acpi.c
>>> index b8e72b52db30..faf8941363e4 100644
>>> --- a/sound/soc/soc-acpi.c
>>> +++ b/sound/soc/soc-acpi.c
>>> @@ -15,7 +15,10 @@ snd_soc_acpi_find_machine(struct snd_soc_acpi_mach
>>> *machines)
>>> if (acpi_dev_present(mach->id, NULL, -1)) {
>>> if (mach->machine_quirk)
>>> mach = mach->machine_quirk(mach);
>>> - return mach;
>>> +
>>> + /* return matched machine, continue otherwise */
>>> + if (mach)
>>> + return mach;
>>> }
>>> }
>>> return NULL;
>> _______________________________________________
>> Alsa-devel mailing list
>> Alsa-devel at alsa-project.org
>> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
More information about the Alsa-devel
mailing list