Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp1962534pxb; Thu, 16 Sep 2021 21:41:45 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzoqNslyzP/r767EOM+flLmTTngIeVEwKWuVC6nkjl++uQVrln5Bi+M65aZN0pXIDTRWxed X-Received: by 2002:aa7:d8c5:: with SMTP id k5mr10145496eds.194.1631853705125; Thu, 16 Sep 2021 21:41:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631853705; cv=none; d=google.com; s=arc-20160816; b=E4gqHZb3cEKH4JBazRekj2L/bWAXE7KeuYms7eKQvEXrgmzqHyxR0S5xmzrZu1IKHA w/YnxtDX32mJlRScl2dMTlP6fZ8UYIQ/oSnA+NM61AgWiokDCOs8SDUI8ZGt+xyRWMHh yAbQt+MJnUAWMK6Jz6AngdDaptFikf9O50Oih0S4MOLmP6QirBizN/N4eNJ6qCBzXIOr yZaP6VjDDBklQ5LJjlBC2EiM5hNsIXZjBuW/8Tj9Ys0XRjviQjJUTPlufM70OlYc+n8+ IOri/FVFCFV2dFJkRHQ9cfCjwPMpGgiqQhRJgqH3zXuffWNFghSzi3NWQfAsSM44jdXT d4og== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HLgoJ8vaPwkXJsWAX4+nLSrDLiz01ytv1UfzDZgtJv8=; b=pSfupbR+364RwMX04mKfi46ACYGgf5NtzlAMFxUucGWv6lOzxgeEW3BAso8Z5ClZZy ikKzr/o/nahFPwcD1HZ7laKx7N8Gr0OrDF1Bauq4Tym4yjsRHkYyZY/N5Pn3D6gwXz9U B34MIFr9Agy+V/8Twk30BVrbwSMbdvemvVwJSPBAiKh2cItF7TclE9IRH+SPxxI2MYhk eziVZYRun7/z1b/9xEtsdzjvOWpBtCRBlwhGhCTj1ALrFe0b2zaxRnLDIKreBFOHKwl3 wnFzv2BY4YOhVm/+8zO8IbhHK+mQKr3zyx5SHnV6dKNGV5jeKaGn6kPs9xsl6q9x3nb9 7WTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=kwOi4UBS; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 6si6063280ejm.251.2021.09.16.21.41.21; Thu, 16 Sep 2021 21:41:45 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=kwOi4UBS; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350622AbhIPRtD (ORCPT + 99 others); Thu, 16 Sep 2021 13:49:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:57064 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1355367AbhIPRlX (ORCPT ); Thu, 16 Sep 2021 13:41:23 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id F31E161288; Thu, 16 Sep 2021 16:52:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631811151; bh=Y1Y6qKFPn2Oc4WwGT0N3jzb39fHfoRkaYrnTqW2HHjY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kwOi4UBS/sliEy7sdQLiGsqtYlEGlJbZq/YFmGxFnqp0fnKe7+nbE0nmmtNKHlFCo vP3BikIVDHj7tcqz8A+OcEC0Dtq0ThwRTsI4otmbLwNovFTWemJu8M0WvibxBAvnib 6ogX8AQQzy/wlln/e06fPqFqSIEYXdN2ayi8RE1A= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Sven Schnelle , Heiko Carstens Subject: [PATCH 5.14 401/432] s390/topology: fix topology information when calling cpu hotplug notifiers Date: Thu, 16 Sep 2021 18:02:30 +0200 Message-Id: <20210916155824.424349471@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210916155810.813340753@linuxfoundation.org> References: <20210916155810.813340753@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sven Schnelle commit a052096bdd6809eeab809202726634d1ac975aa1 upstream. The cpu hotplug notifiers are called without updating the core/thread masks when a new CPU is added. This causes problems with code setting up data structures in a cpu hotplug notifier, and relying on that later in normal code. This caused a crash in the new core scheduling code (SCHED_CORE), where rq->core was set up in a notifier depending on cpu masks. To fix this, add a cpu_setup_mask which is used in update_cpu_masks() instead of the cpu_online_mask to determine whether the cpu masks should be set for a certain cpu. Also move update_cpu_masks() to update the masks before calling notify_cpu_starting() so that the notifiers are seeing the updated masks. Signed-off-by: Sven Schnelle Cc: [hca@linux.ibm.com: get rid of cpu_online_mask handling] Signed-off-by: Heiko Carstens Signed-off-by: Greg Kroah-Hartman --- arch/s390/include/asm/smp.h | 1 + arch/s390/kernel/smp.c | 9 +++++++-- arch/s390/kernel/topology.c | 13 +++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) --- a/arch/s390/include/asm/smp.h +++ b/arch/s390/include/asm/smp.h @@ -18,6 +18,7 @@ extern struct mutex smp_cpu_state_mutex; extern unsigned int smp_cpu_mt_shift; extern unsigned int smp_cpu_mtid; extern __vector128 __initdata boot_cpu_vector_save_area[__NUM_VXRS]; +extern cpumask_t cpu_setup_mask; extern int __cpu_up(unsigned int cpu, struct task_struct *tidle); --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c @@ -95,6 +95,7 @@ __vector128 __initdata boot_cpu_vector_s #endif static unsigned int smp_max_threads __initdata = -1U; +cpumask_t cpu_setup_mask; static int __init early_nosmt(char *s) { @@ -894,13 +895,14 @@ static void smp_init_secondary(void) vtime_init(); vdso_getcpu_init(); pfault_init(); + cpumask_set_cpu(cpu, &cpu_setup_mask); + update_cpu_masks(); notify_cpu_starting(cpu); if (topology_cpu_dedicated(cpu)) set_cpu_flag(CIF_DEDICATED_CPU); else clear_cpu_flag(CIF_DEDICATED_CPU); set_cpu_online(cpu, true); - update_cpu_masks(); inc_irq_stat(CPU_RST); local_irq_enable(); cpu_startup_entry(CPUHP_AP_ONLINE_IDLE); @@ -955,10 +957,13 @@ early_param("possible_cpus", _setup_poss int __cpu_disable(void) { unsigned long cregs[16]; + int cpu; /* Handle possible pending IPIs */ smp_handle_ext_call(); - set_cpu_online(smp_processor_id(), false); + cpu = smp_processor_id(); + set_cpu_online(cpu, false); + cpumask_clear_cpu(cpu, &cpu_setup_mask); update_cpu_masks(); /* Disable pseudo page faults on this cpu. */ pfault_fini(); --- a/arch/s390/kernel/topology.c +++ b/arch/s390/kernel/topology.c @@ -67,7 +67,7 @@ static void cpu_group_map(cpumask_t *dst static cpumask_t mask; cpumask_clear(&mask); - if (!cpu_online(cpu)) + if (!cpumask_test_cpu(cpu, &cpu_setup_mask)) goto out; cpumask_set_cpu(cpu, &mask); switch (topology_mode) { @@ -88,7 +88,7 @@ static void cpu_group_map(cpumask_t *dst case TOPOLOGY_MODE_SINGLE: break; } - cpumask_and(&mask, &mask, cpu_online_mask); + cpumask_and(&mask, &mask, &cpu_setup_mask); out: cpumask_copy(dst, &mask); } @@ -99,16 +99,16 @@ static void cpu_thread_map(cpumask_t *ds int i; cpumask_clear(&mask); - if (!cpu_online(cpu)) + if (!cpumask_test_cpu(cpu, &cpu_setup_mask)) goto out; cpumask_set_cpu(cpu, &mask); if (topology_mode != TOPOLOGY_MODE_HW) goto out; cpu -= cpu % (smp_cpu_mtid + 1); - for (i = 0; i <= smp_cpu_mtid; i++) - if (cpu_present(cpu + i)) + for (i = 0; i <= smp_cpu_mtid; i++) { + if (cpumask_test_cpu(cpu + i, &cpu_setup_mask)) cpumask_set_cpu(cpu + i, &mask); - cpumask_and(&mask, &mask, cpu_online_mask); + } out: cpumask_copy(dst, &mask); } @@ -569,6 +569,7 @@ void __init topology_init_early(void) alloc_masks(info, &book_info, 2); alloc_masks(info, &drawer_info, 3); out: + cpumask_set_cpu(0, &cpu_setup_mask); __arch_update_cpu_topology(); __arch_update_dedicated_flag(NULL); }