From mboxrd@z Thu Jan 1 00:00:00 1970 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 1E47012C817; Tue, 30 Apr 2024 10:45:39 +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=1714473941; cv=none; b=hDvxBB5qZ8/2KSNa/TK8ImjAXzS4k40IefGP1YpNJUkBXPKIbolQ+2xxxoa8RTHhknFdS3SKoXafQGg6OwjG7kf0HdXKif6WLSzl5FgwirYpBllF2dkt5cdJtDV3TAoDJ8/p40IdH1w9jU4RVxV+fh0MDcECVCaX5GcA55MR/4k= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714473941; c=relaxed/simple; bh=8UiQvrMBFWHfk3jz4LDaQ1Ux2UhIMOTbXigwIyYX8UE=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=OOPzzY5xAG8u0zDVizxkwfDO0nLSn4SNzTF/2TiANCrz1Q0MhJ0f96wHuZMJweDtjRQuhzIdVbbArC9mL09KQT4HQi48N0ooS0d0ZdnMG44EvriwigrU41ZMDW2WVMUZKOuXklD3OG3KSfq7GqCYUNikrl8YjdqWKtAyejQfNhU= 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.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VTGxW6T5Sz6J74t; Tue, 30 Apr 2024 18:42:55 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 3BD24140B3C; Tue, 30 Apr 2024 18:45:36 +0800 (CST) Received: from localhost (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; Tue, 30 Apr 2024 11:45:35 +0100 Date: Tue, 30 Apr 2024 11:45:34 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: Gavin Shan , Thomas Gleixner , Peter Zijlstra , , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , Marc Zyngier , Hanjun Guo , "Ingo Molnar" , Borislav Petkov , Dave Hansen , , , , Lorenzo Pieralisi , "Sudeep Holla" Subject: Re: [PATCH v8 04/16] ACPI: processor: Move checks and availability of acpi_processor earlier Message-ID: <20240430114534.0000600e@huawei.com> In-Reply-To: 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> Organization: Huawei Technologies R&D (UK) Ltd. X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.29; x86_64-w64-mingw32) Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: lhrpeml500004.china.huawei.com (7.191.163.9) To lhrpeml500005.china.huawei.com (7.191.163.240) On Tue, 30 Apr 2024 12:17:38 +0200 "Rafael J. Wysocki" wrote: > 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: > > =20 > > > On Tue, 30 Apr 2024 14:17:24 +1000 > > > Gavin Shan wrote: > > > =20 > > > > On 4/26/24 23:51, Jonathan Cameron wrote: =20 > > > > > Make the per_cpu(processors, cpu) entries available earlier so th= at > > > > > they are available in arch_register_cpu() as ARM64 will need acce= ss > > > > > 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= them. > > > > > --- > > > > > 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_pr= ocessor.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(voi= d) {} > > > > > #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); =20 > > > > > > > > One blank line after BUG_ON() if we need to follow original impleme= ntation. =20 > > > > > > Sure unintentional - I'll put that back. > > > =20 > > > > =20 > > > > > + /* > > > > > + * 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 proces= sor\n", > > > > > + pr->id); > > > > > + /* Give up, but do not abort the namespace scan. */ =20 > > > > > > > > It depends on how the return value is handled by the caller if the = namespace > > > > is continued to be scanned. The caller can be acpi_processor_hotadd= _init() > > > > and acpi_processor_get_info() after this patch is applied. So I thi= nk this > > > > specific comment need to be moved to the caller. =20 > > > > > > 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= never called. > > > 2) acpi_processor_get_info() succeeded without acpi_processor_hotadd_= init (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_ini= t 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 abo= ut for that bios > > > bug handling. Do any of those bios's ever do hotplug? Guess we have= to try and maintain > > > whatever protection this was offering. > > > > > > Also, the original code leaks data in some paths and I have limited i= dea > > > of whether it is intentional or not. So to tidy the issue up that you= 've 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 all= ocations we > > > 'want' to leak to deal with the bios bug detection. > > > > > > For example acpi_processor_get_info() failing leaks pr and pr->thrott= ling.shared_cpu_map > > > before this series. After this series we need pr to leak because it's= used for the detection > > > via processor_device_array. > > > > > > I'll work through this but it's going to be tricky to tell if we get = right. > > > Step 1 will be closing the existing leaks and then we will have somet= hing > > > consistent to build on. > > > =20 > > I 'think' that fixing the original leaks makes this all much more strai= ght 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_processo= r.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 *= device, > > device->driver_data =3D pr; > > > > result =3D acpi_processor_get_info(device); > > - if (result) /* Processor is not physically present or unavailab= le */ > > - return 0; > > + if (result) { /* Processor is not physically present or unavail= able */ > > + result =3D 0; =20 >=20 > As per my previous message (just sent) this should be an error code, > as returning 0 from acpi_processor_add() is generally problematic. Ok. I'll switch to that, but as a separate precusor patch. Independent of the memory leak fixes. Jonathan >=20 > > + goto err_free_throttling_mask; > > + } > > > > BUG_ON(pr->id >=3D nr_cpu_ids); > > =20 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 69460C4345F for ; Tue, 30 Apr 2024 10:46:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Subject:CC:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=CDGskt5kMwjdZwWgjJuS+u4hCtm+N/YymIuaKg81zF8=; b=jh4/6HjiGA/poS TnpY1e7Qiz/y1o/Di5FfvygEGDteNVb+ACoFRtaIMtTbDSFm3WHQ4qoxV9wFNe4x2VuKMCyzaB5pC qACfvyqv3rOs4nCLOzCPeT0hUnjSgndxz19D+Ujp5RK+d/mnhO6hf2iz72jTK/VFv4o8P4Bl3g1h+ UByVHF1lzBtgO15oL2/7YRlPpW6pfPdIiffFGD1dTrEC8H3xzC4oTGbN8UJVA+BhbUnKlSJ2ZO+Tz E6wHMAvJYEZdyvNpg8EnZb7P2Yb0qI9QipQ8upP+eczuA6hFxEcfr27kiBPYXnCFu8RHOhz2XiJO9 qjvRtQxDZymtsWMAHnyg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1kzg-000000063Qf-0yPT; Tue, 30 Apr 2024 10:45:52 +0000 Received: from frasgout.his.huawei.com ([185.176.79.56]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s1kzd-000000063NW-07yz for linux-arm-kernel@lists.infradead.org; Tue, 30 Apr 2024 10:45:51 +0000 Received: from mail.maildlp.com (unknown [172.18.186.231]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VTGxW6T5Sz6J74t; Tue, 30 Apr 2024 18:42:55 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 3BD24140B3C; Tue, 30 Apr 2024 18:45:36 +0800 (CST) Received: from localhost (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; Tue, 30 Apr 2024 11:45:35 +0100 Date: Tue, 30 Apr 2024 11:45:34 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: Gavin Shan , Thomas Gleixner , Peter Zijlstra , , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , Marc Zyngier , Hanjun Guo , "Ingo Molnar" , Borislav Petkov , Dave Hansen , , , , Lorenzo Pieralisi , "Sudeep Holla" Subject: Re: [PATCH v8 04/16] ACPI: processor: Move checks and availability of acpi_processor earlier Message-ID: <20240430114534.0000600e@huawei.com> In-Reply-To: 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> Organization: Huawei Technologies R&D (UK) Ltd. X-Mailer: Claws Mail 4.0.0 (GTK+ 3.24.29; x86_64-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.122.247.231] X-ClientProxiedBy: lhrpeml500004.china.huawei.com (7.191.163.9) To lhrpeml500005.china.huawei.com (7.191.163.240) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240430_034549_567563_017A882B X-CRM114-Status: GOOD ( 52.86 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCAzMCBBcHIgMjAyNCAxMjoxNzozOCArMDIwMAoiUmFmYWVsIEouIFd5c29ja2kiIDxy YWZhZWxAa2VybmVsLm9yZz4gd3JvdGU6Cgo+IE9uIFR1ZSwgQXByIDMwLCAyMDI0IGF0IDEyOjEz 4oCvUE0gSm9uYXRoYW4gQ2FtZXJvbgo+IDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+IHdy b3RlOgo+ID4KPiA+IE9uIFR1ZSwgMzAgQXByIDIwMjQgMTA6Mjg6MzggKzAxMDAKPiA+IEpvbmF0 aGFuIENhbWVyb24gPEpvbmF0aGFuLkNhbWVyb25ASHVhd2VpLmNvbT4gd3JvdGU6Cj4gPiAgCj4g PiA+IE9uIFR1ZSwgMzAgQXByIDIwMjQgMTQ6MTc6MjQgKzEwMDAKPiA+ID4gR2F2aW4gU2hhbiA8 Z3NoYW5AcmVkaGF0LmNvbT4gd3JvdGU6Cj4gPiA+ICAKPiA+ID4gPiBPbiA0LzI2LzI0IDIzOjUx LCBKb25hdGhhbiBDYW1lcm9uIHdyb3RlOiAgCj4gPiA+ID4gPiBNYWtlIHRoZSBwZXJfY3B1KHBy b2Nlc3NvcnMsIGNwdSkgZW50cmllcyBhdmFpbGFibGUgZWFybGllciBzbyB0aGF0Cj4gPiA+ID4g PiB0aGV5IGFyZSBhdmFpbGFibGUgaW4gYXJjaF9yZWdpc3Rlcl9jcHUoKSBhcyBBUk02NCB3aWxs IG5lZWQgYWNjZXNzCj4gPiA+ID4gPiB0byB0aGUgYWNwaV9oYW5kbGUgdG8gZGlzdGluZ3Vpc2gg YmV0d2VlbiBhY3BpX3Byb2Nlc3Nvcl9hZGQoKQo+ID4gPiA+ID4gYW5kIGVhcmxpZXIgcmVnaXN0 cmF0aW9uIGF0dGVtcHRzICh3aGljaCB3aWxsIGZhaWwgYXMgX1NUQSBjYW5ub3QKPiA+ID4gPiA+ IGJlIGNoZWNrZWQpLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFJlb3JkZXIgdGhlIHJlbW92ZSBmbG93 IHRvIGNsZWFyIHRoaXMgcGVyX2NwdSgpIGFmdGVyCj4gPiA+ID4gPiBhcmNoX3VucmVnaXN0ZXJf Y3B1KCkgaGFzIGNvbXBsZXRlZCwgYWxsb3dpbmcgaXQgdG8gYmUgdXNlZCBpbgo+ID4gPiA+ID4g dGhlcmUgYXMgd2VsbC4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBOb3RlIHRoYXQgb24geDg2IGZvciB0 aGUgQ1BVIGhvdHBsdWcgY2FzZSwgdGhlIHByLT5pZCBwcmlvciB0bwo+ID4gPiA+ID4gYWNwaV9t YXBfY3B1KCkgbWF5IGJlIGludmFsaWQuIFRodXMgdGhlIHBlcl9jcHUoKSBzdHJ1Y3R1cmVzCj4g PiA+ID4gPiBtdXN0IGJlIGluaXRpYWxpemVkIGFmdGVyIHRoYXQgY2FsbCBvciBhZnRlciBjaGVj a2luZyB0aGUgSUQKPiA+ID4gPiA+IGlzIHZhbGlkIChub3QgaG90cGx1ZyBwYXRoKS4KPiA+ID4g PiA+Cj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBKb25hdGhhbiBDYW1lcm9uIDxKb25hdGhhbi5D YW1lcm9uQGh1YXdlaS5jb20+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gLS0tCj4gPiA+ID4gPiB2ODog T24gYnVnZ3kgYmlvcyBkZXRlY3Rpb24gd2hlbiBzZXR0aW5nIHBlcl9jcHUgc3RydWN0dXJlcwo+ ID4gPiA+ID4gICAgICBkbyBub3QgY2Fycnkgb24uCj4gPiA+ID4gPiAgICAgIEZpeCB1cCB0aGUg Y2xlYXJpbmcgb2YgcGVyIGNwdSBzdHJ1Y3R1cmVzIHRvIHJlbW92ZSB1bndhbnRlZAo+ID4gPiA+ ID4gICAgICBzaWRlIGVmZmVjdHMgYW5kIGVuc3VyZSBhbiBlcnJvciBjb2RlIGlzbid0IHVzZSB0 byByZWZlcmVuY2UgdGhlbS4KPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gICBkcml2ZXJzL2FjcGkv YWNwaV9wcm9jZXNzb3IuYyB8IDc5ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t Cj4gPiA+ID4gPiAgIDEgZmlsZSBjaGFuZ2VkLCA0OCBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlv bnMoLSkKPiA+ID4gPiA+Cj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlf cHJvY2Vzc29yLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gPiA+ID4gaW5k ZXggYmEwYTZmMGFjODQxLi4zYjE4MGUyMWYzMjUgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2 ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9hY3BpL2Fj cGlfcHJvY2Vzc29yLmMKPiA+ID4gPiA+IEBAIC0xODMsOCArMTgzLDM4IEBAIHN0YXRpYyB2b2lk IF9faW5pdCBhY3BpX3BjY19jcHVmcmVxX2luaXQodm9pZCkge30KPiA+ID4gPiA+ICAgI2VuZGlm IC8qIENPTkZJR19YODYgKi8KPiA+ID4gPiA+Cj4gPiA+ID4gPiAgIC8qIEluaXRpYWxpemF0aW9u ICovCj4gPiA+ID4gPiArc3RhdGljIERFRklORV9QRVJfQ1BVKHZvaWQgKiwgcHJvY2Vzc29yX2Rl dmljZV9hcnJheSk7Cj4gPiA+ID4gPiArCj4gPiA+ID4gPiArc3RhdGljIGJvb2wgYWNwaV9wcm9j ZXNzb3Jfc2V0X3Blcl9jcHUoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciwKPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNl KQo+ID4gPiA+ID4gK3sKPiA+ID4gPiA+ICsgQlVHX09OKHByLT5pZCA+PSBucl9jcHVfaWRzKTsg IAo+ID4gPiA+Cj4gPiA+ID4gT25lIGJsYW5rIGxpbmUgYWZ0ZXIgQlVHX09OKCkgaWYgd2UgbmVl ZCB0byBmb2xsb3cgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24uICAKPiA+ID4KPiA+ID4gU3VyZSB1 bmludGVudGlvbmFsIC0gSSdsbCBwdXQgdGhhdCBiYWNrLgo+ID4gPiAgCj4gPiA+ID4gIAo+ID4g PiA+ID4gKyAvKgo+ID4gPiA+ID4gKyAgKiBCdWdneSBCSU9TIGNoZWNrLgo+ID4gPiA+ID4gKyAg KiBBQ1BJIGlkIG9mIHByb2Nlc3NvcnMgY2FuIGJlIHJlcG9ydGVkIHdyb25nbHkgYnkgdGhlIEJJ T1MuCj4gPiA+ID4gPiArICAqIERvbid0IHRydXN0IGl0IGJsaW5kbHkKPiA+ID4gPiA+ICsgICov Cj4gPiA+ID4gPiArIGlmIChwZXJfY3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkg IT0gTlVMTCAmJgo+ID4gPiA+ID4gKyAgICAgcGVyX2NwdShwcm9jZXNzb3JfZGV2aWNlX2FycmF5 LCBwci0+aWQpICE9IGRldmljZSkgewo+ID4gPiA+ID4gKyAgICAgICAgIGRldl93YXJuKCZkZXZp Y2UtPmRldiwKPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAiQklPUyByZXBvcnRlZCB3cm9u ZyBBQ1BJIGlkICVkIGZvciB0aGUgcHJvY2Vzc29yXG4iLAo+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgICAgIHByLT5pZCk7Cj4gPiA+ID4gPiArICAgICAgICAgLyogR2l2ZSB1cCwgYnV0IGRvIG5v dCBhYm9ydCB0aGUgbmFtZXNwYWNlIHNjYW4uICovICAKPiA+ID4gPgo+ID4gPiA+IEl0IGRlcGVu ZHMgb24gaG93IHRoZSByZXR1cm4gdmFsdWUgaXMgaGFuZGxlZCBieSB0aGUgY2FsbGVyIGlmIHRo ZSBuYW1lc3BhY2UKPiA+ID4gPiBpcyBjb250aW51ZWQgdG8gYmUgc2Nhbm5lZC4gVGhlIGNhbGxl ciBjYW4gYmUgYWNwaV9wcm9jZXNzb3JfaG90YWRkX2luaXQoKQo+ID4gPiA+IGFuZCBhY3BpX3By b2Nlc3Nvcl9nZXRfaW5mbygpIGFmdGVyIHRoaXMgcGF0Y2ggaXMgYXBwbGllZC4gU28gSSB0aGlu ayB0aGlzCj4gPiA+ID4gc3BlY2lmaWMgY29tbWVudCBuZWVkIHRvIGJlIG1vdmVkIHRvIHRoZSBj YWxsZXIuICAKPiA+ID4KPiA+ID4gR29vZCBwb2ludC4gVGhpcyBnZXRzIG1lc3N5IGFuZCB3YXMg YW4gdW5pbnRlbmRlZCBjaGFuZ2UuCj4gPiA+Cj4gPiA+IFByZXZpb3VzbHkgdGhlIG9wdGlvbnMg d2VyZToKPiA+ID4gMSkgYWNwaV9wcm9jZXNzb3JfZ2V0X2luZm8oKSBmYWlsZWQgZm9yIG90aGVy IHJlYXNvbnMgLSB0aGlzIGNvZGUgd2FzIG5ldmVyIGNhbGxlZC4KPiA+ID4gMikgYWNwaV9wcm9j ZXNzb3JfZ2V0X2luZm8oKSBzdWNjZWVkZWQgd2l0aG91dCBhY3BpX3Byb2Nlc3Nvcl9ob3RhZGRf aW5pdCAobm9uIGhvdHBsdWcpCj4gPiA+ICAgIHRoaXMgY29kZSB0aGVuIHJhbiBhbmQgd291bGQg cGFwZXIgb3ZlciB0aGUgcHJvYmxlbSBkb2luZyBhIGJ1bmNoIG9mIGNsZWFudXAgdW5kZXIgZXJy Lgo+ID4gPiAzKSBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbygpIHN1Y2NlZWRlZCB3aXRoIGFjcGlf cHJvY2Vzc29yX2hvdGFkZF9pbml0IGNhbGxlZC4KPiA+ID4gICAgVGhpcyBjb2RlIHRoZW4gcmFu IGFuZCB3b3VsZCBwYXBlciBvdmVyIHRoZSBwcm9ibGVtIGRvaW5nIGEgYnVuY2ggb2YgY2xlYW51 cCB1bmRlciBlcnIuCj4gPiA+Cj4gPiA+IFdlIHNob3VsZCBtYWludGFpbiB0aGF0IG9yIGFyZ3Vl IGNsZWFubHkgYWdhaW5zdCBpdC4KPiA+ID4KPiA+ID4gVGhpcyBpc24ndCBoZWxwZWQgdGhlIHRo ZSBmYWN0IEkgaGF2ZSBubyBpZGVhIHdoaWNoIGNhc2VzIHdlIGNhcmUgYWJvdXQgZm9yIHRoYXQg Ymlvcwo+ID4gPiBidWcgaGFuZGxpbmcuICBEbyBhbnkgb2YgdGhvc2UgYmlvcydzIGV2ZXIgZG8g aG90cGx1Zz8gIEd1ZXNzIHdlIGhhdmUgdG8gdHJ5IGFuZCBtYWludGFpbgo+ID4gPiB3aGF0ZXZl ciBwcm90ZWN0aW9uIHRoaXMgd2FzIG9mZmVyaW5nLgo+ID4gPgo+ID4gPiBBbHNvLCB0aGUgb3Jp Z2luYWwgY29kZSBsZWFrcyBkYXRhIGluIHNvbWUgcGF0aHMgYW5kIEkgaGF2ZSBsaW1pdGVkIGlk ZWEKPiA+ID4gb2Ygd2hldGhlciBpdCBpcyBpbnRlbnRpb25hbCBvciBub3QuIFNvIHRvIHRpZHkg dGhlIGlzc3VlIHVwIHRoYXQgeW91J3ZlIGlkZW50aWZpZWQKPiA+ID4gSSdsbCBuZWVkIHRvIHRy eSBhbmQgbWFrZSB0aGF0IGNvZGUgY29uc2lzdGVudCBmaXJzdC4KPiA+ID4KPiA+ID4gSSBzdXNw ZWN0IHRoZSBvbmx5IHdheSB0byBkbyB0aGF0IGlzIGdvaW5nIHRvIGJlIHRvIGR1cGxpY2F0ZSB0 aGUgYWxsb2NhdGlvbnMgd2UKPiA+ID4gJ3dhbnQnIHRvIGxlYWsgdG8gZGVhbCB3aXRoIHRoZSBi aW9zIGJ1ZyBkZXRlY3Rpb24uCj4gPiA+Cj4gPiA+IEZvciBleGFtcGxlIGFjcGlfcHJvY2Vzc29y X2dldF9pbmZvKCkgZmFpbGluZyBsZWFrcyBwciBhbmQgcHItPnRocm90dGxpbmcuc2hhcmVkX2Nw dV9tYXAKPiA+ID4gYmVmb3JlIHRoaXMgc2VyaWVzLiBBZnRlciB0aGlzIHNlcmllcyB3ZSBuZWVk IHByIHRvIGxlYWsgYmVjYXVzZSBpdCdzIHVzZWQgZm9yIHRoZSBkZXRlY3Rpb24KPiA+ID4gdmlh IHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXkuCj4gPiA+Cj4gPiA+IEknbGwgd29yayB0aHJvdWdoIHRo aXMgYnV0IGl0J3MgZ29pbmcgdG8gYmUgdHJpY2t5IHRvIHRlbGwgaWYgd2UgZ2V0IHJpZ2h0Lgo+ ID4gPiBTdGVwIDEgd2lsbCBiZSBjbG9zaW5nIHRoZSBleGlzdGluZyBsZWFrcyBhbmQgdGhlbiB3 ZSB3aWxsIGhhdmUgc29tZXRoaW5nCj4gPiA+IGNvbnNpc3RlbnQgdG8gYnVpbGQgb24uCj4gPiA+ ICAKPiA+IEkgJ3RoaW5rJyB0aGF0IGZpeGluZyB0aGUgb3JpZ2luYWwgbGVha3MgbWFrZXMgdGhp cyBhbGwgbXVjaCBtb3JlIHN0cmFpZ2h0IGZvcndhcmQuCj4gPiBUaGF0IHJldHVybiAwIGZvciBh Y3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbygpIG5ldmVyIG1hZGUgc2Vuc2UgYXMgZmFyIGFzIEkgY2Fu IHRlbGwuCj4gPiBUaGUgcHIgaXNuJ3QgdXNlZCBhZnRlciB0aGlzIHBvaW50Lgo+ID4KPiA+IFdo YXQgYWJvdXQgc29tZXRoaW5nIGFsb25nIGxpbmVzIG9mLgo+ID4KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nv ci5jCj4gPiBpbmRleCAxNjFjOTVjOWQ2MGEuLjk3Y2ZmNDQ5MjMwNCAxMDA2NDQKPiA+IC0tLSBh L2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gPiArKysgYi9kcml2ZXJzL2FjcGkvYWNw aV9wcm9jZXNzb3IuYwo+ID4gQEAgLTM5Miw4ICszOTIsMTAgQEAgc3RhdGljIGludCBhY3BpX3By b2Nlc3Nvcl9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsCj4gPiAgICAgICAgIGRldmlj ZS0+ZHJpdmVyX2RhdGEgPSBwcjsKPiA+Cj4gPiAgICAgICAgIHJlc3VsdCA9IGFjcGlfcHJvY2Vz c29yX2dldF9pbmZvKGRldmljZSk7Cj4gPiAtICAgICAgIGlmIChyZXN1bHQpIC8qIFByb2Nlc3Nv ciBpcyBub3QgcGh5c2ljYWxseSBwcmVzZW50IG9yIHVuYXZhaWxhYmxlICovCj4gPiAtICAgICAg ICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAgIGlmIChyZXN1bHQpIHsgLyogUHJvY2Vzc29y IGlzIG5vdCBwaHlzaWNhbGx5IHByZXNlbnQgb3IgdW5hdmFpbGFibGUgKi8KPiA+ICsgICAgICAg ICAgICAgICByZXN1bHQgPSAwOyAgCj4gCj4gQXMgcGVyIG15IHByZXZpb3VzIG1lc3NhZ2UgKGp1 c3Qgc2VudCkgdGhpcyBzaG91bGQgYmUgYW4gZXJyb3IgY29kZSwKPiBhcyByZXR1cm5pbmcgMCBm cm9tIGFjcGlfcHJvY2Vzc29yX2FkZCgpIGlzIGdlbmVyYWxseSBwcm9ibGVtYXRpYy4KT2suIEkn bGwgc3dpdGNoIHRvIHRoYXQsIGJ1dCBhcyBhIHNlcGFyYXRlIHByZWN1c29yIHBhdGNoLiBJbmRl cGVuZGVudCBvZgp0aGUgbWVtb3J5IGxlYWsgZml4ZXMuCgpKb25hdGhhbgoKPiAKPiA+ICsgICAg ICAgICAgICAgICBnb3RvIGVycl9mcmVlX3Rocm90dGxpbmdfbWFzazsKPiA+ICsgICAgICAgfQo+ ID4KPiA+ICAgICAgICAgQlVHX09OKHByLT5pZCA+PSBucl9jcHVfaWRzKTsKPiA+ICAKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==