All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sudeep Holla <sudeep.holla@arm.com>
To: Zeng Tao <prime.zeng@hisilicon.com>
Cc: linuxarm@huawei.com,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	Sudeep Holla <sudeep.holla@arm.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] cpu-topology: Skip the exist but not possible cpu nodes
Date: Tue, 7 Jan 2020 14:49:40 +0000	[thread overview]
Message-ID: <20200107144940.GA47473@bogus> (raw)
In-Reply-To: <1577935489-25245-1-git-send-email-prime.zeng@hisilicon.com>

On Thu, Jan 02, 2020 at 11:24:49AM +0800, Zeng Tao wrote:
> When CONFIG_NR_CPUS is smaller than the cpu nodes defined in the device
> tree, the cpu node parsing will fail. And this is not reasonable for a
> legal device tree configs.
> In this patch, skip such cpu nodes rather than return an error.
> 
> Signed-off-by: Zeng Tao <prime.zeng@hisilicon.com>
> ---
>  drivers/base/arch_topology.c | 35 ++++++++++++++++++++++++++---------
>  1 file changed, 26 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
> index 5fe44b3..4cddfeb 100644
> --- a/drivers/base/arch_topology.c
> +++ b/drivers/base/arch_topology.c
> @@ -250,20 +250,34 @@ core_initcall(free_raw_capacity);
>  #if defined(CONFIG_ARM64) || defined(CONFIG_RISCV)
>  static int __init get_cpu_for_node(struct device_node *node)
>  {
> -	struct device_node *cpu_node;
> +	struct device_node *cpu_node, *t;
>  	int cpu;
> +	bool found = false;
>  
>  	cpu_node = of_parse_phandle(node, "cpu", 0);
>  	if (!cpu_node)
> -		return -1;
> +		return -EINVAL;
> +
> +	for_each_of_cpu_node(t)
> +		if (t == cpu_node) {
> +			found = true;
> +			break;
> +		}
> +
> +	if (!found) {
> +		pr_crit("Unable to find CPU node for %pOF\n", cpu_node);
> +		return -EINVAL;
> +	}
>

The whole extra logic added above sounds redundant, details below...

>  	cpu = of_cpu_node_to_id(cpu_node);
>  	if (cpu >= 0)
>  		topology_parse_cpu_capacity(cpu_node, cpu);
> -	else
> -		pr_crit("Unable to find CPU node for %pOF\n", cpu_node);
> +	else {
> +		pr_warn("CPU node for %pOF exist but the possible cpu range is :%*pbl\n",
> +			cpu_node, cpumask_pr_args(cpu_possible_mask));
> +		cpu = -ENODEV;

.. of_cpu_node_to_id returns -ENODEV anyways so above assignment is also
redundant. All you achieved is explicit error message. I think we should
be fine combining them. Just extend existing error log with both message.

> +	}
>  
> -	of_node_put(cpu_node);
>  	return cpu;
>  }
>  
> @@ -287,10 +301,13 @@ static int __init parse_core(struct device_node *core, int package_id,
>  				cpu_topology[cpu].core_id = core_id;
>  				cpu_topology[cpu].thread_id = i;
>  			} else {
> -				pr_err("%pOF: Can't get CPU for thread\n",
> -				       t);
> +				if (cpu != -ENODEV)
> +					pr_err("%pOF: Can't get CPU for thread\n",
> +					       t);
> +				else
> +					cpu = 0;

I would rather use another variable instead of reusing 'cpu'

>  				of_node_put(t);
> -				return -EINVAL;
> +				return cpu;

Shouldn't we continue here if cpu == -ENODEV instead of returning 0 ?

>  			}
>  			of_node_put(t);
>  		}
> @@ -307,7 +324,7 @@ static int __init parse_core(struct device_node *core, int package_id,
>  
>  		cpu_topology[cpu].package_id = package_id;
>  		cpu_topology[cpu].core_id = core_id;
> -	} else if (leaf) {
> +	} else if (leaf && cpu != -ENODEV) {

I am still not sure on the approach, it is based on -ENODEV as valid
error and allow to continue. It may be fine, I just need to make sure.

--
Regards,
Sudeep

  parent reply	other threads:[~2020-01-07 14:49 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-02  3:24 [PATCH] cpu-topology: Skip the exist but not possible cpu nodes Zeng Tao
2020-01-06 18:42 ` Dietmar Eggemann
2020-01-07  1:35   ` Zengtao (B)
2020-01-07 13:12     ` Dietmar Eggemann
2020-01-08  2:01       ` Zengtao (B)
2020-01-07 14:49 ` Sudeep Holla [this message]
2020-01-08  1:57   ` Zengtao (B)
2020-01-10 11:16     ` Sudeep Holla
2020-01-11  2:03       ` Zengtao (B)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200107144940.GA47473@bogus \
    --to=sudeep.holla@arm.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=prime.zeng@hisilicon.com \
    --cc=rafael@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.