From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Ostrovsky Subject: Re: [PATCH] x86: correct socket_cpumask allocation for AP Date: Wed, 08 Jul 2015 11:45:32 -0400 Message-ID: <559D459C.7060808@oracle.com> References: <1436348218-29172-1-git-send-email-chao.p.peng@linux.intel.com> <559D35FD020000780008E354@mail.emea.novell.com> <1436368264.22672.219.camel@citrix.com> <559D602C020000780008E585@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <559D602C020000780008E585@mail.emea.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Jan Beulich , Dario Faggioli , Chao Peng Cc: andrew.cooper3@citrix.com, keir@xen.org, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org On 07/08/2015 11:38 AM, Jan Beulich wrote: >>>> On 08.07.15 at 17:11, wrote: >> On Wed, 2015-07-08 at 13:38 +0100, Jan Beulich wrote: >>>>>> On 08.07.15 at 11:36, wrote: >>>> @@ -84,11 +85,21 @@ void *stack_base[NR_CPUS]; >>>> static void smp_store_cpu_info(int id) >>>> { >>>> struct cpuinfo_x86 *c = cpu_data + id; >>>> + unsigned int socket; >>>> >>>> *c = boot_cpu_data; >>>> if ( id != 0 ) >>>> + { >>>> identify_cpu(c); >>>> >>>> + socket = cpu_to_socket(id); >>>> + if ( !socket_cpumask[socket] ) >>>> + { >>>> + socket_cpumask[socket] = secondary_socket_cpumask; >>>> + secondary_socket_cpumask = NULL; >>> I don't think this will build with small enough NR_CPUS. >>> >> And it *does* *not* fix the issue on my box. > I.e. bad analysis (albeit it seemed correct to me) _and_ new code > not tested. Chao, one more try, or we'll have to revert the whole > series (closing the window for it for 4.6). FWIW, this fixes it for me: diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index c73aa1b..a93c723 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -707,6 +707,8 @@ static int cpu_smpboot_alloc(unsigned int cpu) unsigned long stub_page; unsigned int socket = cpu_to_socket(cpu); + socket = cpu >> 4; + if ( node != NUMA_NO_NODE ) memflags = MEMF_node(node); But I suspect this is not what you want ;-) -boris