All of lore.kernel.org
 help / color / mirror / Atom feed
From: Prarit Bhargava <prarit@redhat.com>
To: linux-kernel@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, Peter Zijlstra <peterz@infradead.org>,
	Len Brown <len.brown@intel.com>, Borislav Petkov <bp@suse.de>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Jiri Olsa <jolsa@redhat.com>
Subject: Re: [PATCH] arch/x86: Remove second call to topology_update_package_map()
Date: Wed, 12 Oct 2016 11:06:25 -0400	[thread overview]
Message-ID: <57FE5171.3030305@redhat.com> (raw)
In-Reply-To: <1476282988-9476-1-git-send-email-prarit@redhat.com>



On 10/12/2016 10:36 AM, Prarit Bhargava wrote:
> This was noticed during the investigation of
> 
> http://git.kernel.org/tip/2a51fe083eba7f99cbda72f5ef90cdf2f4df882c
> 
> A note for reviewers on the cleanup in smp_init_package_map(): The
> per_cpu variable x86_bios_cpu_apicid is initialized to BAD_APICID, and the
> bitmaps are set to false by default so the code isn't necessary.  The
> pr_warn() can also be dropped as generic_processor_info() will do a
> pr_warning() in the same situation.


> 
> P.
> 
> -----8<-----
> 
> After commit 1f12e32f4cd5 ("x86/topology: Create logical package id"),
> topology_update_package_map() is called twice on a CPU.  The first call is in
> generic_processor_info(), which is called on all present cpus (found in either
> mptable or ACPI MADT).  The second call is in smp_init_package_map() which
> is called later on in the init sequence.
> 
> Only a single call is necessary for the kernel to initialize the data
> structures properly. This patch drops the later call in smp_init_package_map()
> and moves smp_init_package_map() out of smp_store_boot_cpu_info().
> 

Self-NAK.

This seems to not work on systems with an empty socket :/.  Looking into this now.

P.

> Signed-off-by: Prarit Bhargava <prarit@redhat.com>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Ingo Molnar <mingo@redhat.com>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: x86@kernel.org
> Cc: Peter Zijlstra <peterz@infradead.org>
> Cc: Len Brown <len.brown@intel.com>
> Cc: Borislav Petkov <bp@suse.de>
> Cc: Tim Chen <tim.c.chen@linux.intel.com>
> Cc: Andi Kleen <ak@linux.intel.com>
> Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
> Cc: Jiri Olsa <jolsa@redhat.com>
> ---
>  arch/x86/kernel/smpboot.c |   20 +++-----------------
>  1 file changed, 3 insertions(+), 17 deletions(-)
> 
> diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
> index 951f093a96fe..0ff74f8bb5e9 100644
> --- a/arch/x86/kernel/smpboot.c
> +++ b/arch/x86/kernel/smpboot.c
> @@ -271,7 +271,7 @@ int topology_update_package_map(unsigned int apicid, unsigned int cpu)
>  	if (!physical_package_map)
>  		return 0;
>  
> -	if (pkg >= max_physical_pkg_id)
> +	if (!apic->apic_id_valid(apicid) || pkg >= max_physical_pkg_id)
>  		return -EINVAL;
>  
>  	/* Set the logical package id */
> @@ -310,7 +310,7 @@ int topology_phys_to_logical_pkg(unsigned int phys_pkg)
>  
>  static void __init smp_init_package_map(void)
>  {
> -	unsigned int ncpus, cpu;
> +	unsigned int ncpus;
>  	size_t size;
>  
>  	/*
> @@ -342,7 +342,6 @@ static void __init smp_init_package_map(void)
>  	}
>  
>  	__max_logical_packages = DIV_ROUND_UP(total_cpus, ncpus);
> -	logical_packages = 0;
>  
>  	/*
>  	 * Possibly larger than what we need as the number of apic ids per
> @@ -355,19 +354,6 @@ static void __init smp_init_package_map(void)
>  	size = BITS_TO_LONGS(max_physical_pkg_id) * sizeof(unsigned long);
>  	physical_package_map = kzalloc(size, GFP_KERNEL);
>  
> -	for_each_present_cpu(cpu) {
> -		unsigned int apicid = apic->cpu_present_to_apicid(cpu);
> -
> -		if (apicid == BAD_APICID || !apic->apic_id_valid(apicid))
> -			continue;
> -		if (!topology_update_package_map(apicid, cpu))
> -			continue;
> -		pr_warn("CPU %u APICId %x disabled\n", cpu, apicid);
> -		per_cpu(x86_bios_cpu_apicid, cpu) = BAD_APICID;
> -		set_cpu_possible(cpu, false);
> -		set_cpu_present(cpu, false);
> -	}
> -
>  	if (logical_packages > __max_logical_packages) {
>  		pr_warn("Detected more packages (%u), then computed by BIOS data (%u).\n",
>  			logical_packages, __max_logical_packages);
> @@ -385,7 +371,6 @@ void __init smp_store_boot_cpu_info(void)
>  
>  	*c = boot_cpu_data;
>  	c->cpu_index = id;
> -	smp_init_package_map();
>  }
>  
>  /*
> @@ -1285,6 +1270,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus)
>  	 * Setup boot CPU information
>  	 */
>  	smp_store_boot_cpu_info(); /* Final full version of the data */
> +	smp_init_package_map();
>  	cpumask_copy(cpu_callin_mask, cpumask_of(0));
>  	mb();
>  
> 

  reply	other threads:[~2016-10-12 15:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-12 14:36 [PATCH] arch/x86: Remove second call to topology_update_package_map() Prarit Bhargava
2016-10-12 15:06 ` Prarit Bhargava [this message]
2016-10-12 19:51   ` Tim Chen
2016-10-12 20:54     ` Prarit Bhargava
2016-10-12 22:06       ` Tim Chen
2016-10-12 22:37         ` Prarit Bhargava

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=57FE5171.3030305@redhat.com \
    --to=prarit@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=bp@suse.de \
    --cc=hpa@zytor.com \
    --cc=jolsa@redhat.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    --cc=x86@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.