Received: by 2002:ab2:1689:0:b0:1f7:5705:b850 with SMTP id d9csp1917983lqa; Tue, 30 Apr 2024 03:18:04 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCV2tdyQCaCSSimSzhvoFw4nhlhpXeSDmQvKT4yMizSbjJl5UEw4YJYgTwhU8Rb9ZuaDDu2pR9Xl5Tdb/9dPyDjXKR5A2H0qlqYEDp4jIw== X-Google-Smtp-Source: AGHT+IEGMQFMj+qwtP2KuXF9mzbz0K4WVMi40WrsRaQ9Et1kbGwyR6S4BQ87i9lXkO3PeHv8SnCH X-Received: by 2002:a17:906:4ec6:b0:a52:6e3b:fcf1 with SMTP id i6-20020a1709064ec600b00a526e3bfcf1mr8464477ejv.17.1714472284474; Tue, 30 Apr 2024 03:18:04 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1714472284; cv=pass; d=google.com; s=arc-20160816; b=j5UY3NNP442Z6ZOHwtTw3tuiZNtRi3Uc3LEVNk/ZLTtxxLuwTZVk/cvrF8V9JbT0vB 03VFlCfjzqMSAkgMGefUr4U8caekU3qSb84zWvza/dQ1o3S41sCCKh7ySHIcs2OAC+EE RFxxhxiuwkAIeKcuVl+t2kFGwd0AGjoOpd5LL+jvjobnlK7+GTTk5IXQNv0ZSyJVuXCN khdvrlrOuy85Lfs72QG6CjOkEat/VYgMdmp81H8qH31p2dWkc0MHo2VIhlgg8yxTpuCC Hpn+CLqOw0+Dvnz02mLw5mfn4GWBhXJW1P0/dsYLwK7hQ/May29XtbGETvvpTAHVwCo8 jVfQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:dkim-signature; bh=fOjYIKQ7fHrxYxrwaKof4G8nHvTTKi6hlRUFfBX63xw=; fh=sUq0+XwPj4RM/HDqK++FRu6GzuJLpKW0xns6O7gG9tc=; b=nBmdnaVyoGVHPDMy27oziJIBVh+8g6ZNiRwGHvmhvo1uqTJgVGuMdClIm9yQGnZmnE ZWYYtMLrpPHgoOCRwSqoDQ4GPytEfU2768D3hCLicbFos0a0Qztd9j1xS594wtecG9PO fnJ+zQ7sdRw+T2uV02A49JL3l6zD0eaq9KdoyY5gwkE+93QG2C/t+hq0PPsj9JNrOBmR JV+CLMwUTw6c6hgzo7z/naWzCaO7ZH/JtbXBvyIRteDfRxBvdNpxLXna6nhpWDbHR/kM w5EwIzaRqLMmALJ1rA/7pTCWRJUxLTjAGp3fWAJGn5Fo4as0t0/vjBYks4TDiAAZnsSw 8v9g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=uOMDnN4z; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-163755-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-163755-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id 18-20020a170906309200b00a51dec4612csi15470113ejv.197.2024.04.30.03.18.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Apr 2024 03:18:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-163755-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=uOMDnN4z; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-163755-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-163755-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org 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 am.mirrors.kernel.org (Postfix) with ESMTPS id 10A311F24010 for ; Tue, 30 Apr 2024 10:18:04 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F2F2612AAED; Tue, 30 Apr 2024 10:17:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="uOMDnN4z" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DD5FB128828; Tue, 30 Apr 2024 10:17:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714472272; cv=none; b=dYlgXjiiA0PonDuJr0QNdU8MU/VxFQX5xIhDnHbqZM2bNperrIS7Bq2tUCgdmZ15un6CgchdK0XRCUKPWMiRyOaQsgte2O0IlpRn4AMJY/LIwA+na4it7qG8e3OUEOCXCNpGiGJiYxT9upWVQfyYLjmwSV6+3n/G1Z4zrfQwdBw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714472272; c=relaxed/simple; bh=gh1e1+58nQTAHuiHjenBUZr1umrL/earshHRi+u3ptQ=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=hm5nN1Egy+DxZkg5cmGn+zR2+/ka7SuShWxlb0/5feok9YdEAJNGLUw7tAWY/vDkswIRqahJZUcPFPlPpVF6l2m9TtnAtnydCtvkDTpmNLdZBVM/juN8ZXYF0k6pxFJyxyjIR5v25GqcPVNlGiXyzK5zG48lkO/6BhkA4084Qlw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uOMDnN4z; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7080CC4AF19; Tue, 30 Apr 2024 10:17:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714472271; bh=gh1e1+58nQTAHuiHjenBUZr1umrL/earshHRi+u3ptQ=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=uOMDnN4z5lMd6tjSaLzA/DFWBEvDW+SBX4PpUAzvzHJkcTmyc8M7ZBmkZpLQI2Zyn BnKLXz97gHSXI+FFqxt9Q7MKB1t0bSZ5meSj4zn9x9aQbZpnTcOmwbm+FC5QBepynT C01hW+5LH2TYdPZFs916JOsvt/kLLt0ZXRmNFBJyVBLhq1F5wKFYNEwEUPiS/M7iDb SvWO3imquNMFqr9tcgL2T/t0b4mhuj5WBYR1Ln3ThRc6qVdqwl/UzBzDbm8vHLEauf +WHWwOBIkFxtumcMcwlfY9A2uMGOZCyN1V0ZE8dIcwSDKH+19pi165NhRCjz9hRE63 vTPXCwUJ46PCw== Received: by mail-oo1-f48.google.com with SMTP id 006d021491bc7-5afbcf21abdso314320eaf.1; Tue, 30 Apr 2024 03:17:51 -0700 (PDT) X-Forwarded-Encrypted: i=1; AJvYcCXgICQFTuGScR8mdFdlMsB8kU+2gCcxNLhvQTToZAwdmHbFL+HxVmDffqPr/tBCCSkmdJ4tyFMfSqEYGpsgIr2QbfFGnP5ZQfFg96WSYSLThpyVRWhZiqNxqctVV+pFTRvAln76AscUZIUoGE8JCPB9nSeL3hGeH607VCf8tC683nRKEtOPPCcBlS1sytzY2NwcjVECftiqDnP1b/TP/w== X-Gm-Message-State: AOJu0YylsrJjxHFE5HEjsPb2CJBiOSYH4qTPwms0qtUR333EMTP3DxqN A58+Szfxx8Zj6NfDg+MmSjJwEwdTJ8vBroLL5cSSps3Szs2bMr6NODuprcUvMxRApKW8DyQvjfo wwr+gX7Nua2+NCBBwMxRU8xG7Mjg= X-Received: by 2002:a4a:d247:0:b0:5aa:6b2e:36f0 with SMTP id e7-20020a4ad247000000b005aa6b2e36f0mr14368609oos.0.1714472270695; Tue, 30 Apr 2024 03:17:50 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20240426135126.12802-1-Jonathan.Cameron@huawei.com> <20240426135126.12802-5-Jonathan.Cameron@huawei.com> <80a2e07f-ecb2-48af-b2be-646f17e0e63e@redhat.com> <20240430102838.00006e04@Huawei.com> <20240430111341.00003dba@huawei.com> In-Reply-To: <20240430111341.00003dba@huawei.com> From: "Rafael J. Wysocki" Date: Tue, 30 Apr 2024 12:17:38 +0200 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v8 04/16] ACPI: processor: Move checks and availability of acpi_processor earlier To: Jonathan Cameron Cc: Gavin Shan , Thomas Gleixner , Peter Zijlstra , linux-pm@vger.kernel.org, loongarch@lists.linux.dev, linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev, x86@kernel.org, Russell King , "Rafael J . Wysocki" , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , Marc Zyngier , Hanjun Guo , Ingo Molnar , Borislav Petkov , Dave Hansen , linuxarm@huawei.com, justin.he@arm.com, jianyong.wu@arm.com, Lorenzo Pieralisi , Sudeep Holla Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Apr 30, 2024 at 12:13=E2=80=AFPM Jonathan Cameron wrote: > > On Tue, 30 Apr 2024 10:28:38 +0100 > Jonathan Cameron wrote: > > > On Tue, 30 Apr 2024 14:17:24 +1000 > > Gavin Shan wrote: > > > > > On 4/26/24 23:51, Jonathan Cameron wrote: > > > > Make the per_cpu(processors, cpu) entries available earlier so that > > > > they are available in arch_register_cpu() as ARM64 will need access > > > > to the acpi_handle to distinguish between acpi_processor_add() > > > > and earlier registration attempts (which will fail as _STA cannot > > > > be checked). > > > > > > > > Reorder the remove flow to clear this per_cpu() after > > > > arch_unregister_cpu() has completed, allowing it to be used in > > > > there as well. > > > > > > > > Note that on x86 for the CPU hotplug case, the pr->id prior to > > > > acpi_map_cpu() may be invalid. Thus the per_cpu() structures > > > > must be initialized after that call or after checking the ID > > > > is valid (not hotplug path). > > > > > > > > Signed-off-by: Jonathan Cameron > > > > > > > > --- > > > > v8: On buggy bios detection when setting per_cpu structures > > > > do not carry on. > > > > Fix up the clearing of per cpu structures to remove unwanted > > > > side effects and ensure an error code isn't use to reference t= hem. > > > > --- > > > > drivers/acpi/acpi_processor.c | 79 +++++++++++++++++++++---------= ----- > > > > 1 file changed, 48 insertions(+), 31 deletions(-) > > > > > > > > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_proc= essor.c > > > > index ba0a6f0ac841..3b180e21f325 100644 > > > > --- a/drivers/acpi/acpi_processor.c > > > > +++ b/drivers/acpi/acpi_processor.c > > > > @@ -183,8 +183,38 @@ static void __init acpi_pcc_cpufreq_init(void)= {} > > > > #endif /* CONFIG_X86 */ > > > > > > > > /* Initialization */ > > > > +static DEFINE_PER_CPU(void *, processor_device_array); > > > > + > > > > +static bool acpi_processor_set_per_cpu(struct acpi_processor *pr, > > > > + struct acpi_device *device) > > > > +{ > > > > + BUG_ON(pr->id >=3D nr_cpu_ids); > > > > > > One blank line after BUG_ON() if we need to follow original implement= ation. > > > > Sure unintentional - I'll put that back. > > > > > > > > > + /* > > > > + * Buggy BIOS check. > > > > + * ACPI id of processors can be reported wrongly by the BIOS. > > > > + * Don't trust it blindly > > > > + */ > > > > + if (per_cpu(processor_device_array, pr->id) !=3D NULL && > > > > + per_cpu(processor_device_array, pr->id) !=3D device) { > > > > + dev_warn(&device->dev, > > > > + "BIOS reported wrong ACPI id %d for the processo= r\n", > > > > + pr->id); > > > > + /* Give up, but do not abort the namespace scan. */ > > > > > > It depends on how the return value is handled by the caller if the na= mespace > > > is continued to be scanned. The caller can be acpi_processor_hotadd_i= nit() > > > and acpi_processor_get_info() after this patch is applied. So I think= this > > > specific comment need to be moved to the caller. > > > > Good point. This gets messy and was an unintended change. > > > > Previously the options were: > > 1) acpi_processor_get_info() failed for other reasons - this code was n= ever called. > > 2) acpi_processor_get_info() succeeded without acpi_processor_hotadd_in= it (non hotplug) > > this code then ran and would paper over the problem doing a bunch of= cleanup under err. > > 3) acpi_processor_get_info() succeeded with acpi_processor_hotadd_init = called. > > This code then ran and would paper over the problem doing a bunch of= cleanup under err. > > > > We should maintain that or argue cleanly against it. > > > > This isn't helped the the fact I have no idea which cases we care about= for that bios > > bug handling. Do any of those bios's ever do hotplug? Guess we have t= o try and maintain > > whatever protection this was offering. > > > > Also, the original code leaks data in some paths and I have limited ide= a > > of whether it is intentional or not. So to tidy the issue up that you'v= e identified > > I'll need to try and make that code consistent first. > > > > I suspect the only way to do that is going to be to duplicate the alloc= ations we > > 'want' to leak to deal with the bios bug detection. > > > > For example acpi_processor_get_info() failing leaks pr and pr->throttli= ng.shared_cpu_map > > before this series. After this series we need pr to leak because it's u= sed for the detection > > via processor_device_array. > > > > I'll work through this but it's going to be tricky to tell if we get ri= ght. > > Step 1 will be closing the existing leaks and then we will have somethi= ng > > consistent to build on. > > > I 'think' that fixing the original leaks makes this all much more straigh= t forward. > That return 0 for acpi_processor_get_info() never made sense as far as I = can tell. > The pr isn't used after this point. > > What about something along lines of. > > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.= c > index 161c95c9d60a..97cff4492304 100644 > --- a/drivers/acpi/acpi_processor.c > +++ b/drivers/acpi/acpi_processor.c > @@ -392,8 +392,10 @@ static int acpi_processor_add(struct acpi_device *de= vice, > device->driver_data =3D pr; > > result =3D acpi_processor_get_info(device); > - if (result) /* Processor is not physically present or unavailable= */ > - return 0; > + if (result) { /* Processor is not physically present or unavailab= le */ > + result =3D 0; As per my previous message (just sent) this should be an error code, as returning 0 from acpi_processor_add() is generally problematic. > + goto err_free_throttling_mask; > + } > > BUG_ON(pr->id >=3D nr_cpu_ids); >