All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@linutronix.de>
To: Prarit Bhargava <prarit@redhat.com>
Cc: linux-kernel@vger.kernel.org, Andi Kleen <ak@linux.intel.com>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, Peter Zijlstra <peterz@infradead.org>,
	Dave Hansen <dave.hansen@intel.com>,
	Piotr Luc <piotr.luc@intel.com>, Kan Liang <kan.liang@intel.com>,
	Borislav Petkov <bp@suse.de>,
	Stephane Eranian <eranian@google.com>,
	Arvind Yadav <arvind.yadav.cs@gmail.com>,
	Andy Lutomirski <luto@kernel.org>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Mathias Krause <minipli@googlemail.com>,
	Tim Chen <tim.c.chen@linux.intel.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>
Subject: Re: [PATCH 2/3 v4] x86/topology: Avoid wasting 128k for package id array
Date: Wed, 1 Nov 2017 17:56:45 +0100 (CET)	[thread overview]
Message-ID: <alpine.DEB.2.20.1711011748390.1942@nanos> (raw)
In-Reply-To: <20171025120940.15721-3-prarit@redhat.com>

On Wed, 25 Oct 2017, Prarit Bhargava wrote:
> diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
> index b390ff76e58f..f4ab1edf4e24 100644
> --- a/arch/x86/include/asm/processor.h
> +++ b/arch/x86/include/asm/processor.h
> @@ -124,8 +124,10 @@ struct cpuinfo_x86 {
>  	u16			booted_cores;
>  	/* Physical processor id: */
>  	u16			phys_proc_id;
> -	/* Logical processor id: */
> +	/* Logical processor (package) id: */
>  	u16			logical_proc_id;
> +	/* Physical package ID */
> +	u16			phys_pkg_id;

How is this new field used aside of being written to and how is it
different from phys_proc_id? AFAICT, it's the same as all callers to
topology_update_package_map() are handing in cpu_data->phys_proc_id.

> +/**
> + * topology_phys_to_logical_pkg - Map a physical package id to a logical
> + *
> + * Returns logical package id or -1 if not found
> + */
> +int topology_phys_to_logical_pkg(unsigned int phys_pkg)
> +{
> +	int log_pkg;
> +
> +	for (log_pkg = 0; log_pkg < logical_packages; log_pkg++)
> +		if (logical_to_physical_pkg_map[log_pkg] == phys_pkg)
> +			return log_pkg;
> +
> +	return -1;
> +}
> +EXPORT_SYMBOL(topology_phys_to_logical_pkg);

....

> +
> +	/* Allocate and copy a new array */
> +	ltp_pkg_map_new = kmalloc(logical_packages * sizeof(u16), GFP_KERNEL);
> +	BUG_ON(!ltp_pkg_map_new);
> +	if (logical_to_physical_pkg_map) {
> +		memcpy(ltp_pkg_map_new, logical_to_physical_pkg_map,
> +		       logical_packages * sizeof(u16));
> +		kfree(logical_to_physical_pkg_map);
>  	}
> -	physical_to_logical_pkg[pkg] = new;
> +	logical_to_physical_pkg_map = ltp_pkg_map_new;

This lacks serialization and is therefore broken against a concurrent
topology_phys_to_logical_pkg() call for obvious reasons. The current user
is probably safe, but this really needs to be fixed now.

Thanks,

	tglx

  reply	other threads:[~2017-11-01 16:56 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-25 12:09 [PATCH 0/3 v4] Fix panic in logical packages calculation Prarit Bhargava
2017-10-25 12:09 ` [PATCH 1/3 v4] perf/x86/intel/uncore: Cache logical pkg id in uncore driver Prarit Bhargava
2017-11-01 16:30   ` Thomas Gleixner
2017-10-25 12:09 ` [PATCH 2/3 v4] x86/topology: Avoid wasting 128k for package id array Prarit Bhargava
2017-11-01 16:56   ` Thomas Gleixner [this message]
2017-11-03 14:53     ` Prarit Bhargava
2017-10-25 12:09 ` [PATCH 3/3 v4] x86/smpboot: Fix __max_logical_packages estimate 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=alpine.DEB.2.20.1711011748390.1942@nanos \
    --to=tglx@linutronix.de \
    --cc=ak@linux.intel.com \
    --cc=arvind.yadav.cs@gmail.com \
    --cc=borntraeger@de.ibm.com \
    --cc=bp@suse.de \
    --cc=dave.hansen@intel.com \
    --cc=eranian@google.com \
    --cc=hpa@zytor.com \
    --cc=kan.liang@intel.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=minipli@googlemail.com \
    --cc=peterz@infradead.org \
    --cc=piotr.luc@intel.com \
    --cc=prarit@redhat.com \
    --cc=thomas.lendacky@amd.com \
    --cc=tim.c.chen@linux.intel.com \
    --cc=vkuznets@redhat.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.