Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp1049lqt; Thu, 18 Apr 2024 07:02:19 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCUmdy4t/06UQdyxwZKGVWKxnlLC7oTaz9piwJqdW28qEoCmXqgTjxbS5FstfOxZAx0Y3jmd/Kp+E4DayL4E7RgWmRdF4gidDqy3DcTEQQ== X-Google-Smtp-Source: AGHT+IGEyDxh7WuxL3Jq/CbH3VLabKia0lc7IauuPZg39H1dwzC68k/tVlMHa2CNdmksNTU+wupd X-Received: by 2002:a17:902:ce86:b0:1e5:5be7:be86 with SMTP id f6-20020a170902ce8600b001e55be7be86mr3558224plg.52.1713448924594; Thu, 18 Apr 2024 07:02:04 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713448924; cv=pass; d=google.com; s=arc-20160816; b=kGXCZ9KXAyPh7V4zj+CRHg04KG4OPSnBc9vxwdUJt0y3gkDwwdSf1cJk3aFAA5JpOW kCK6qxciTtK9/7cvNYWEjkFb8jaMdpfiHMDlFyiDG0moAgp54/oHtMFHRFYqZhLCgnWT yXDCJYEyOq/rNU0oOF0y93j/oaosn1/gQ2Y3tp8OZY5gDQM10ryBjUx5CKkG26N6qSLR I55DupVlRzNStDBBt3/CbsKKB2/U5TM4CKBd8G8d6OwXHekf/YeHaTrXPNx3vWKOqDpt 10ZGE/AeUaDrs5pnt9EocZiBU1yp1uwUVLnPeaqgs68IQdWhtUWi+XaAOs/+E6c6rVhv NfiA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=73b/UxaZDXWeIlndQ1IhHjLSiBLjO+eb8OxFfQxvdNY=; fh=wmH6eZgtoFCyes/zVTYi+VaxxdPmNW9hqdNd8ZTZ4XU=; b=fsI3E6KNtcPsBKJYk3KPTJjFc4f1HaNYCD5BfgPRuc9h+Vb8nRsyXsN6c1ppzdSTen w5svV22dQ8xk3B5H1p4NcJb840R5Z7iX4cQEJt0L4xYjnTsvuNPdoricr1993eoaP/tC R9LqE72XQzhmz8jactlb0plVPO5pgd+lLgAVYbrmqfcpHzUCgy04inPLCDtwUArKXwcW 4OBipWOkJT1ux1FcXLIhe2ZTD7li1D8le5rs/p5KgOMbp2ZaoXNpz75DYpTgjeErZmMX DEVAOh1yU/Meq2WvwlIeCPPVUEA5BxRL0wCEDeoVAiyFCa1kAMCybdVwF2R1cEW3ZST9 y9bA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-150233-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-150233-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id x8-20020a1709029a4800b001e47d98b4e1si1433040plv.591.2024.04.18.07.01.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 07:02:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-150233-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=huawei.com dmarc=pass fromdomain=huawei.com); spf=pass (google.com: domain of linux-kernel+bounces-150233-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-150233-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=huawei.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 427B5281EAC for ; Thu, 18 Apr 2024 14:01:46 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 12606165FD1; Thu, 18 Apr 2024 14:01:03 +0000 (UTC) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE3B71649DE; Thu, 18 Apr 2024 14:00:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713448862; cv=none; b=G0+xlb3A8tF6nT5Wkx+aG6CdDAqyQpFTibJsRrYuoj6OuKCP3V3gpZaFZzXwnSijjojQJaTVxRGQONfHm7haSf6v+gFQxOM/rvE+xoeO/N8H9IZtJIZiozXVOoIDD/wbMlO13aMtNfUXNppzYV+RXFfvf99gkwx0yWidFuL+Z8w= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713448862; c=relaxed/simple; bh=/ZnEJWnVjdAFNyug63GYeRolkDuCDosA3A9pYTnZbXI=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tfv/8CCArFf3+yQ5/kPxbKCx4O8HuSdRuohoZBqy1At5S6e6TJpzI/ZtXfnNhsZhhgLrjR5549TGbxzz/Jl4TtzKUqluT9QIHBEpHDesAYqx5Qe+zzcq5GZsXtgYn5ZKctjay1+nUToiOYsZTiZnnr71XyI4gAORO6t40lf+X3U= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VKzs72BgZz6K6DF; Thu, 18 Apr 2024 21:58:51 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id A577F140517; Thu, 18 Apr 2024 22:00:54 +0800 (CST) Received: from SecurePC-101-06.china.huawei.com (10.122.247.231) by lhrpeml500005.china.huawei.com (7.191.163.240) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Thu, 18 Apr 2024 15:00:53 +0100 From: Jonathan Cameron To: Thomas Gleixner , Peter Zijlstra , , , , , , , , , Russell King , "Rafael J . Wysocki" , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon CC: Ingo Molnar , Borislav Petkov , Dave Hansen , , , Subject: [PATCH v7 13/16] arm64: arch_register_cpu() variant to check if an ACPI handle is now available. Date: Thu, 18 Apr 2024 14:54:09 +0100 Message-ID: <20240418135412.14730-14-Jonathan.Cameron@huawei.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240418135412.14730-1-Jonathan.Cameron@huawei.com> References: <20240418135412.14730-1-Jonathan.Cameron@huawei.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: lhrpeml100002.china.huawei.com (7.191.160.241) To lhrpeml500005.china.huawei.com (7.191.163.240) The ARM64 architecture does not support physical CPU HP today. To avoid any possibility of a bug against such an architecture if defined in future, check for the physical CPU HP case (not present) and return an error on any such attempt. On ARM64 virtual CPU Hotplug relies on the status value that can be queried via the AML method _STA for the CPU object. There are two conditions in which the CPU can be registered. 1) ACPI disabled. 2) ACPI enabled and the acpi_handle is available. _STA evaluates to the CPU is both enabled and present. (Note that in absence of the _STA method they are always in this state). If neither of these conditions is met the CPU is not 'yet' ready to be used and -EPROBE_DEFER is returned. Success occurs in the early attempt to register the CPUs if we are booting with DT (no concept yet of vCPU HP) if not it succeeds for already enabled CPUs when the ACPI Processor driver attaches to them. Finally it may succeed via the CPU Hotplug code indicating that the CPU is now enabled. For ACPI if CONFIG_ACPI_PROCESSOR the only path to get to arch_register_cpu() with that handle set is via acpi_processor_hot_add_init() which is only called from an ACPI bus scan in which _STA has already been queried there is no need to repeat it here. Add a comment to remind us of this in the future. Suggested-by: Rafael J. Wysocki Signed-off-by: Jonathan Cameron --- v7: No change. v6: Add protection again Physical CPU HP to the arch specific code and don't actually check _STA Tested on arm64 with ACPI + DT build and DT only builds, booting with ACPI and DT as appropriate. --- arch/arm64/kernel/smp.c | 53 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index dc0e0b3ec2d4..ccb6ad347df9 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c @@ -504,6 +504,59 @@ static int __init smp_cpu_setup(int cpu) static bool bootcpu_valid __initdata; static unsigned int cpu_count = 1; +int arch_register_cpu(int cpu) +{ + acpi_handle acpi_handle = acpi_get_processor_handle(cpu); + struct cpu *c = &per_cpu(cpu_devices, cpu); + + if (!acpi_disabled && !acpi_handle && + IS_ENABLED(CONFIG_ACPI_HOTPLUG_CPU)) + return -EPROBE_DEFER; + +#ifdef CONFIG_ACPI_HOTPLUG_CPU + /* For now block anything that looks like physical CPU Hotplug */ + if (invalid_logical_cpuid(cpu) || !cpu_present(cpu)) { + pr_err_once("Changing CPU present bit is not supported\n"); + return -ENODEV; + } +#endif + + /* + * Availability of the acpi handle is sufficient to establish + * that _STA has aleady been checked. No need to recheck here. + */ + c->hotpluggable = arch_cpu_is_hotpluggable(cpu); + + return register_cpu(c, cpu); +} + +#ifdef CONFIG_ACPI_HOTPLUG_CPU +void arch_unregister_cpu(int cpu) +{ + acpi_handle acpi_handle = acpi_get_processor_handle(cpu); + struct cpu *c = &per_cpu(cpu_devices, cpu); + acpi_status status; + unsigned long long sta; + + if (!acpi_handle) { + pr_err_once("Removing a CPU without associated ACPI handle\n"); + return; + } + + status = acpi_evaluate_integer(acpi_handle, "_STA", NULL, &sta); + if (ACPI_FAILURE(status)) + return; + + /* For now do not allow anything that looks like physical CPU HP */ + if (cpu_present(cpu) && !(sta & ACPI_STA_DEVICE_PRESENT)) { + pr_err_once("Changing CPU present bit is not supported\n"); + return; + } + + unregister_cpu(c); +} +#endif /* CONFIG_ACPI_HOTPLUG_CPU */ + #ifdef CONFIG_ACPI static struct acpi_madt_generic_interrupt cpu_madt_gicc[NR_CPUS]; -- 2.39.2