On Friday, August 24, 2018 4:51:26 AM CEST Dou Liyang wrote:
> ACPI driver should make sure all the processor IDs in their ACPI Namespace
> are unique. the driver performs a depth-first walk of the namespace tree
> and calls the acpi_processor_ids_walk() to check the duplicate IDs.
> 
> But, the acpi_processor_ids_walk() mistakes the return value. If a
> processor is checked, it returns true which causes the walk break
> immediately, and other processors will never be checked.
> 
> Repace the value with AE_OK which is the standard acpi_status value.
> And don't abort the namespace walk even on error.
> 
> Fixes 8c8cb30f49b8 ("acpi/processor: Implement DEVICE operator for processor 
> enumeration")
> Signed-off-by: Dou Liyang <douly.f...@cn.fujitsu.com>
> ---
> Changelog:
>   v2 --> v3:
>    - Fix a compiler error reported by LKP
>   v1 --> v2:
>    - Fix the check against duplicate IDs suggested by Rafael.
>   
>   Now,the duplicate IDs only be found in Ivb42 machine, and we have added 
> this check at 
>   linux-4.9. But, we introduced a bug in linux-4.12 by commit 8c8cb30f49b8.
> 
>   For resolving the bug, firstly, I removed the check[1]. because Linux will 
> compare
>   the coming ID with present processors when it hot-added a physical CPU and 
> will avoid
>   using duplicate IDs.
> 
>   But, seems we should consider all the possible processors. So, with this 
> patch, All
>   the processors with the same IDs will never be hot-plugged.
> 
> [1] https://lkml.org/lkml/2018/5/28/213
> ---
>  drivers/acpi/acpi_processor.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
> index 449d86d39965..fc447410ae4d 100644
> --- a/drivers/acpi/acpi_processor.c
> +++ b/drivers/acpi/acpi_processor.c
> @@ -643,7 +643,7 @@ static acpi_status __init 
> acpi_processor_ids_walk(acpi_handle handle,
>  
>       status = acpi_get_type(handle, &acpi_type);
>       if (ACPI_FAILURE(status))
> -             return false;
> +             return status;
>  
>       switch (acpi_type) {
>       case ACPI_TYPE_PROCESSOR:
> @@ -663,11 +663,12 @@ static acpi_status __init 
> acpi_processor_ids_walk(acpi_handle handle,
>       }
>  
>       processor_validated_ids_update(uid);
> -     return true;
> +     return AE_OK;
>  
>  err:
> +     /* Exit on error, but don't abort the namespace walk */
>       acpi_handle_info(handle, "Invalid processor object\n");
> -     return false;
> +     return AE_OK;
>  
>  }
>  
> 

Applied, thanks!


Reply via email to