[alsa-devel] [PATCH] ASoC: acpi: fix: continue searching when machine is ignored

Pierre-Louis Bossart pierre-louis.bossart at linux.intel.com
Fri Nov 16 14:52:54 CET 2018


On 11/15/18 9:03 PM, Keyon Jie wrote:
>
>
> 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 */

Yes, we tried something similar, see 
https://github.com/plbossart/sound/commit/9acfd674141bfc0a0bdadda1c3f7b16cc61047de


> 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