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 4EEDE12B156; Tue, 16 Apr 2024 17:35:07 +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=1713288910; cv=none; b=FjMQWTKT78d7YKHeWMqIdCDxzYNeemwk/I8yyv5uHlbuwC+A2DojC2LhvROT5pklawV0wpk82iJcUJaiKkAS5hCMObE7Zv0rf3YADgo26mTlXxB5+rWujaYBq2+aB7W779VWoiw494rsikPTK8B/7kgpfmtpyZKVr+U6rtz8nKs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713288910; c=relaxed/simple; bh=Z7BK1ffY1oFsL11vJXHcwMHmQHUgwlPvHa/5kupznIc=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=rd2fGRHEhYMLy2hPL0iPECZ5e7lUIJ7LJBHbvhBCCdi7/FpFxmMicltBdLK47qdL5sMdyC2uNracLnLiVwrkqGdX8YHpN72UP7pdUdbxFpy6FAOGBDSzzetX0603wMf1o8CVOeisgTAA0QO6t7NwVGijzDQYCFMS7SiQkoBOgDE= 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 4VJrdq4sLxz6K8xC; Wed, 17 Apr 2024 01:30:07 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 185F11400D3; Wed, 17 Apr 2024 01:35:04 +0800 (CST) Received: from localhost (10.202.227.76) 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, 16 Apr 2024 18:35:03 +0100 Date: Tue, 16 Apr 2024 18:35:02 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: , , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , , Subject: Re: [PATCH v5 02/18] ACPI: processor: Set the ACPI_COMPANION for the struct cpu instance Message-ID: <20240416183502.00007527@Huawei.com> In-Reply-To: References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-3-Jonathan.Cameron@huawei.com> <20240415164854.0000264f@Huawei.com> <20240415175057.00002e11@Huawei.com> <20240415183454.000072f6@Huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; 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: lhrpeml100002.china.huawei.com (7.191.160.241) To lhrpeml500005.china.huawei.com (7.191.163.240) On Mon, 15 Apr 2024 19:41:43 +0200 "Rafael J. Wysocki" wrote: > On Mon, Apr 15, 2024 at 7:35=E2=80=AFPM Jonathan Cameron > wrote: > > > > On Mon, 15 Apr 2024 17:50:57 +0100 > > Jonathan Cameron wrote: > > =20 > > > On Mon, 15 Apr 2024 18:19:17 +0200 > > > "Rafael J. Wysocki" wrote: > > > =20 > > > > On Mon, Apr 15, 2024 at 6:16=E2=80=AFPM Rafael J. Wysocki wrote: =20 > > > > > > > > > > On Mon, Apr 15, 2024 at 5:49=E2=80=AFPM Jonathan Cameron > > > > > wrote: =20 > > > > > > > > > > > > On Fri, 12 Apr 2024 20:10:54 +0200 > > > > > > "Rafael J. Wysocki" wrote: > > > > > > =20 > > > > > > > On Fri, Apr 12, 2024 at 4:38=E2=80=AFPM Jonathan Cameron > > > > > > > wrote: =20 > > > > > > > > > > > > > > > > The arm64 specific arch_register_cpu() needs to access the = _STA > > > > > > > > method of the DSDT object so make it available by assigning= the > > > > > > > > appropriate handle to the struct cpu instance. > > > > > > > > > > > > > > > > Signed-off-by: Jonathan Cameron > > > > > > > > --- > > > > > > > > drivers/acpi/acpi_processor.c | 3 +++ > > > > > > > > 1 file changed, 3 insertions(+) > > > > > > > > > > > > > > > > diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/a= cpi_processor.c > > > > > > > > index 7a0dd35d62c9..93e029403d05 100644 > > > > > > > > --- a/drivers/acpi/acpi_processor.c > > > > > > > > +++ b/drivers/acpi/acpi_processor.c > > > > > > > > @@ -235,6 +235,7 @@ static int acpi_processor_get_info(stru= ct acpi_device *device) > > > > > > > > union acpi_object object =3D { 0 }; > > > > > > > > struct acpi_buffer buffer =3D { sizeof(union acpi_o= bject), &object }; > > > > > > > > struct acpi_processor *pr =3D acpi_driver_data(devi= ce); > > > > > > > > + struct cpu *c; > > > > > > > > int device_declaration =3D 0; > > > > > > > > acpi_status status =3D AE_OK; > > > > > > > > static int cpu0_initialized; > > > > > > > > @@ -314,6 +315,8 @@ static int acpi_processor_get_info(stru= ct acpi_device *device) > > > > > > > > cpufreq_add_device("acpi-cpufreq"); > > > > > > > > } > > > > > > > > > > > > > > > > + c =3D &per_cpu(cpu_devices, pr->id); > > > > > > > > + ACPI_COMPANION_SET(&c->dev, device); =20 > > > > > > > > > > > > > > This is also set for per_cpu(cpu_sys_devices, pr->id) in > > > > > > > acpi_processor_add(), via acpi_bind_one(). =20 > > > > > > > > > > > > Hi Rafael, > > > > > > > > > > > > cpu_sys_devices gets filled with a pointer to this same structu= re. > > > > > > The contents gets set in register_cpu() so at this point > > > > > > it doesn't point anywhere. As a side note register_cpu() > > > > > > memsets to zero the value I set it to in the code above which i= sn't > > > > > > great, particularly as I want to use this in post_eject for > > > > > > arm64. > > > > > > > > > > > > We could make a copy of the handle and put it back after > > > > > > the memset in register_cpu() but that is also ugly. > > > > > > It's the best I've come up with to make sure this is still set > > > > > > come remove time but is rather odd. =20 > > > > > > > > > > > > > > Moreover, there is some pr->id validation in acpi_processor_a= dd(), so > > > > > > > it seems premature to use it here this way. > > > > > > > > > > > > > > I think that ACPI_COMPANION_SET() should be called from here = on > > > > > > > per_cpu(cpu_sys_devices, pr->id) after validating pr->id (so = the > > > > > > > pr->id validation should all be done here) and then NULL can = be passed > > > > > > > as acpi_dev to acpi_bind_one() in acpi_processor_add(). Then= , there > > > > > > > will be one physical device corresponding to the processor AC= PI device > > > > > > > and no confusion. =20 > > > > > > > > > > > > I'm fairly sure this is pointing to the same device but agreed = this > > > > > > is a tiny bit confusing. However we can't use cpu_sys_devices a= t this point > > > > > > so I'm not immediately seeing a cleaner solution :( =20 > > > > > > > > > > Well, OK. > > > > > > > > > > Please at least consider doing the pr->id validation checks before > > > > > setting the ACPI companion for &per_cpu(cpu_devices, pr->id). > > > > > > > > > > Also, acpi_bind_one() needs to be called on the "physical" devices > > > > > passed to ACPI_COMPANION_SET() (with NULL as the second argument)= for > > > > > the reference counting and physical device lookup to work. > > > > > > > > > > Please also note that acpi_primary_dev_companion() should return > > > > > per_cpu(cpu_sys_devices, pr->id) for the processor ACPI device, w= hich > > > > > depends on the order of acpi_bind_one() calls involving the same = ACPI > > > > > device. =20 > > > > > > > > Of course, if the value set by ACPI_COMPANION_SET() is cleared > > > > subsequently, the above is not needed, but then using > > > > ACPI_COMPANION_SET() is questionable overall. =20 > > > > > > Agreed + smoothing over that by stashing and putting it back doesn't > > > work because there is an additional call to acpi_bind_one() inbetween > > > here and the one you reference. > > > > > > The arch_register_cpu() calls end up calling register_cpu() / > > > device_register() / acpi_device_notify() / acpi_bind_one() > > > > > > With current code that fails (silently) =20 >=20 > And that's why there is an explicit acpi_bind_one() invocation in > acpi_processor_add(). >=20 > > > If I make sure the handle is set before register_cpu() then it > > > succeeds, but we end up with duplicate sysfs files etc because we > > > bind twice. =20 >=20 > Right, I should have recalled that earlier. >=20 > > > I think the only way around this is larger reorganization of the > > > CPU hotplug code to pull the arch_register_cpu() call to where > > > the acpi_bind_one() call is. However that changes a lot more than I'= d like > > > (and I don't have it working yet). =20 >=20 > I see. >=20 > > > Alternatively find somewhere else to stash the handle, or just add it= as > > > a parameter to arch_register_cpu(). Right now this feels the easier > > > path to me. arch_register_cpu(int cpu, acpi_handle handle) > > > > > > Would that be a path you'd consider? =20 > > > > Another option would be to do the per_cpu(processors, pr->id) =3D pr > > a few lines earlier than currently and access that directly from the > > arch_register_cpu() call. Similarly remove that reference a bit later = and > > use it in arch_unregister_cpu(). > > > > This seems like the simplest solution, but I may be missing something. = =20 >=20 > This should work AFAICS, but I'd move the entire piece of code between > BUG_ON() and setting per_cpu(processors, pr->id) inclusive: Hi Rafael, Unfortunately this is more complex on x86 than I realized :( On x86 the initial pr->id is invalid, which is one of the conditions that leads to acpi_processor_hotadd_init() being called. It only become valid after acpi_map_cpu() in acpi_processor_hotadd_init(). So the best I can immediately come up with is to factor out these checks an= d the setting of the per_cpu structures and set them either in acpi_processor_hot= add_init() or in an else for the non hotplug / normal registration path (where the pr-= >id is valid). Naturally found this on my final set of tests... A little ugly but not 'too bad'.=20 Jonathan p.s. No one minds if I break x86, right? >=20 > BUG_ON(pr->id >=3D nr_cpu_ids); >=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 processor\n", > pr->id); > /* Give up, but do not abort the namespace scan. */ > goto err; > } > /* > * processor_device_array is not cleared on errors to allow buggy BIOS > * checks. > */ > per_cpu(processor_device_array, pr->id) =3D device; > per_cpu(processors, pr->id) =3D pr; >=20 > into acpi_processor_get_info(), right after the point where pr->id is set. 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 976B7C4345F for ; Tue, 16 Apr 2024 17:35:32 +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=I/aUTh+CRs9LnwB8pwzpIvVm+I8dXdUjrOkPvkMhYWo=; b=i71URHHxF7zwaA +DJvOaCl0rcRjZwE6eyIZ82H3Wy1To40Mrr4fWNdGuZDZ2FmbRB6FQ+IbxHSc2YVf9swMQ6PK+O5v qunTteL+XkCF3ACyUEH5tjQElnZLBZB1eMnKcnPGzH3wzLOnAJNUdY5iU8nY0Cxn7oEw4EJbpecqq 4Eb6KwZYa7gzdBiBUDTkkc6ghQVmbBJi692nYRa3T7oVoc5v5lozqGvxSbrVgbzVpoVK0h7nv1oz2 Y15fgV6aIIIoH4jcIMc+tY9XeFUW+6+zCifVHC3u43U+4JECf2uocjfjyzyM6joejtLpAuc/6bfTS c+FYN5TxCRSWkufx7Cuw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwmiF-0000000DCe7-31F2; Tue, 16 Apr 2024 17:35:19 +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 1rwmiB-0000000DCcn-20bm for linux-arm-kernel@lists.infradead.org; Tue, 16 Apr 2024 17:35:18 +0000 Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VJrdq4sLxz6K8xC; Wed, 17 Apr 2024 01:30:07 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 185F11400D3; Wed, 17 Apr 2024 01:35:04 +0800 (CST) Received: from localhost (10.202.227.76) 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, 16 Apr 2024 18:35:03 +0100 Date: Tue, 16 Apr 2024 18:35:02 +0100 From: Jonathan Cameron To: "Rafael J. Wysocki" CC: , , , , , , , , , Russell King , Miguel Luis , James Morse , Salil Mehta , Jean-Philippe Brucker , Catalin Marinas , Will Deacon , , Subject: Re: [PATCH v5 02/18] ACPI: processor: Set the ACPI_COMPANION for the struct cpu instance Message-ID: <20240416183502.00007527@Huawei.com> In-Reply-To: References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-3-Jonathan.Cameron@huawei.com> <20240415164854.0000264f@Huawei.com> <20240415175057.00002e11@Huawei.com> <20240415183454.000072f6@Huawei.com> Organization: Huawei Technologies Research and Development (UK) Ltd. X-Mailer: Claws Mail 4.1.0 (GTK 3.24.33; x86_64-w64-mingw32) MIME-Version: 1.0 X-Originating-IP: [10.202.227.76] X-ClientProxiedBy: lhrpeml100002.china.huawei.com (7.191.160.241) 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-20240416_103515_812289_C563CF8D X-CRM114-Status: GOOD ( 64.28 ) 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 T24gTW9uLCAxNSBBcHIgMjAyNCAxOTo0MTo0MyArMDIwMAoiUmFmYWVsIEouIFd5c29ja2kiIDxy YWZhZWxAa2VybmVsLm9yZz4gd3JvdGU6Cgo+IE9uIE1vbiwgQXByIDE1LCAyMDI0IGF0IDc6MzXi gK9QTSBKb25hdGhhbiBDYW1lcm9uCj4gPEpvbmF0aGFuLkNhbWVyb25AaHVhd2VpLmNvbT4gd3Jv dGU6Cj4gPgo+ID4gT24gTW9uLCAxNSBBcHIgMjAyNCAxNzo1MDo1NyArMDEwMAo+ID4gSm9uYXRo YW4gQ2FtZXJvbiA8Sm9uYXRoYW4uQ2FtZXJvbkBIdWF3ZWkuY29tPiB3cm90ZToKPiA+ICAKPiA+ ID4gT24gTW9uLCAxNSBBcHIgMjAyNCAxODoxOToxNyArMDIwMAo+ID4gPiAiUmFmYWVsIEouIFd5 c29ja2kiIDxyYWZhZWxAa2VybmVsLm9yZz4gd3JvdGU6Cj4gPiA+ICAKPiA+ID4gPiBPbiBNb24s IEFwciAxNSwgMjAyNCBhdCA2OjE24oCvUE0gUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbEBrZXJu ZWwub3JnPiB3cm90ZTogIAo+ID4gPiA+ID4KPiA+ID4gPiA+IE9uIE1vbiwgQXByIDE1LCAyMDI0 IGF0IDU6NDnigK9QTSBKb25hdGhhbiBDYW1lcm9uCj4gPiA+ID4gPiA8Sm9uYXRoYW4uQ2FtZXJv bkBodWF3ZWkuY29tPiB3cm90ZTogIAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBPbiBGcmksIDEy IEFwciAyMDI0IDIwOjEwOjU0ICswMjAwCj4gPiA+ID4gPiA+ICJSYWZhZWwgSi4gV3lzb2NraSIg PHJhZmFlbEBrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gPiA+ID4gIAo+ID4gPiA+ID4gPiA+IE9u IEZyaSwgQXByIDEyLCAyMDI0IGF0IDQ6MzjigK9QTSBKb25hdGhhbiBDYW1lcm9uCj4gPiA+ID4g PiA+ID4gPEpvbmF0aGFuLkNhbWVyb25AaHVhd2VpLmNvbT4gd3JvdGU6ICAKPiA+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gPiBUaGUgYXJtNjQgc3BlY2lmaWMgYXJjaF9yZWdpc3Rlcl9jcHUo KSBuZWVkcyB0byBhY2Nlc3MgdGhlIF9TVEEKPiA+ID4gPiA+ID4gPiA+IG1ldGhvZCBvZiB0aGUg RFNEVCBvYmplY3Qgc28gbWFrZSBpdCBhdmFpbGFibGUgYnkgYXNzaWduaW5nIHRoZQo+ID4gPiA+ ID4gPiA+ID4gYXBwcm9wcmlhdGUgaGFuZGxlIHRvIHRoZSBzdHJ1Y3QgY3B1IGluc3RhbmNlLgo+ ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEpvbmF0aGFuIENh bWVyb24gPEpvbmF0aGFuLkNhbWVyb25AaHVhd2VpLmNvbT4KPiA+ID4gPiA+ID4gPiA+IC0tLQo+ ID4gPiA+ID4gPiA+ID4gIGRyaXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jIHwgMyArKysKPiA+ ID4gPiA+ID4gPiA+ICAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCj4gPiA+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpX3Byb2Nl c3Nvci5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4gPiA+ID4gPiA+IGlu ZGV4IDdhMGRkMzVkNjJjOS4uOTNlMDI5NDAzZDA1IDEwMDY0NAo+ID4gPiA+ID4gPiA+ID4gLS0t IGEvZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2Ry aXZlcnMvYWNwaS9hY3BpX3Byb2Nlc3Nvci5jCj4gPiA+ID4gPiA+ID4gPiBAQCAtMjM1LDYgKzIz NSw3IEBAIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0X2luZm8oc3RydWN0IGFjcGlfZGV2 aWNlICpkZXZpY2UpCj4gPiA+ID4gPiA+ID4gPiAgICAgICAgIHVuaW9uIGFjcGlfb2JqZWN0IG9i amVjdCA9IHsgMCB9Owo+ID4gPiA+ID4gPiA+ID4gICAgICAgICBzdHJ1Y3QgYWNwaV9idWZmZXIg YnVmZmVyID0geyBzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCAmb2JqZWN0IH07Cj4gPiA+ID4g PiA+ID4gPiAgICAgICAgIHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIgPSBhY3BpX2RyaXZlcl9k YXRhKGRldmljZSk7Cj4gPiA+ID4gPiA+ID4gPiArICAgICAgIHN0cnVjdCBjcHUgKmM7Cj4gPiA+ ID4gPiA+ID4gPiAgICAgICAgIGludCBkZXZpY2VfZGVjbGFyYXRpb24gPSAwOwo+ID4gPiA+ID4g PiA+ID4gICAgICAgICBhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKPiA+ID4gPiA+ID4gPiA+ ICAgICAgICAgc3RhdGljIGludCBjcHUwX2luaXRpYWxpemVkOwo+ID4gPiA+ID4gPiA+ID4gQEAg LTMxNCw2ICszMTUsOCBAQCBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9pbmZvKHN0cnVj dCBhY3BpX2RldmljZSAqZGV2aWNlKQo+ID4gPiA+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgY3B1ZnJlcV9hZGRfZGV2aWNlKCJhY3BpLWNwdWZyZXEiKTsKPiA+ID4gPiA+ID4gPiA+ ICAgICAgICAgfQo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgYyA9ICZw ZXJfY3B1KGNwdV9kZXZpY2VzLCBwci0+aWQpOwo+ID4gPiA+ID4gPiA+ID4gKyAgICAgICBBQ1BJ X0NPTVBBTklPTl9TRVQoJmMtPmRldiwgZGV2aWNlKTsgIAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gVGhpcyBpcyBhbHNvIHNldCBmb3IgcGVyX2NwdShjcHVfc3lzX2RldmljZXMsIHByLT5p ZCkgaW4KPiA+ID4gPiA+ID4gPiBhY3BpX3Byb2Nlc3Nvcl9hZGQoKSwgdmlhIGFjcGlfYmluZF9v bmUoKS4gIAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBIaSBSYWZhZWwsCj4gPiA+ID4gPiA+Cj4g PiA+ID4gPiA+IGNwdV9zeXNfZGV2aWNlcyBnZXRzIGZpbGxlZCB3aXRoIGEgcG9pbnRlciB0byB0 aGlzIHNhbWUgc3RydWN0dXJlLgo+ID4gPiA+ID4gPiBUaGUgY29udGVudHMgZ2V0cyBzZXQgaW4g cmVnaXN0ZXJfY3B1KCkgc28gYXQgdGhpcyBwb2ludAo+ID4gPiA+ID4gPiBpdCBkb2Vzbid0IHBv aW50IGFueXdoZXJlLiAgQXMgYSBzaWRlIG5vdGUgcmVnaXN0ZXJfY3B1KCkKPiA+ID4gPiA+ID4g bWVtc2V0cyB0byB6ZXJvIHRoZSB2YWx1ZSBJIHNldCBpdCB0byBpbiB0aGUgY29kZSBhYm92ZSB3 aGljaCBpc24ndAo+ID4gPiA+ID4gPiBncmVhdCwgcGFydGljdWxhcmx5IGFzIEkgd2FudCB0byB1 c2UgdGhpcyBpbiBwb3N0X2VqZWN0IGZvcgo+ID4gPiA+ID4gPiBhcm02NC4KPiA+ID4gPiA+ID4K PiA+ID4gPiA+ID4gV2UgY291bGQgbWFrZSBhIGNvcHkgb2YgdGhlIGhhbmRsZSBhbmQgcHV0IGl0 IGJhY2sgYWZ0ZXIKPiA+ID4gPiA+ID4gdGhlIG1lbXNldCBpbiByZWdpc3Rlcl9jcHUoKSBidXQg dGhhdCBpcyBhbHNvIHVnbHkuCj4gPiA+ID4gPiA+IEl0J3MgdGhlIGJlc3QgSSd2ZSBjb21lIHVw IHdpdGggdG8gbWFrZSBzdXJlIHRoaXMgaXMgc3RpbGwgc2V0Cj4gPiA+ID4gPiA+IGNvbWUgcmVt b3ZlIHRpbWUgYnV0IGlzIHJhdGhlciBvZGQuICAKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ IE1vcmVvdmVyLCB0aGVyZSBpcyBzb21lIHByLT5pZCB2YWxpZGF0aW9uIGluIGFjcGlfcHJvY2Vz c29yX2FkZCgpLCBzbwo+ID4gPiA+ID4gPiA+IGl0IHNlZW1zIHByZW1hdHVyZSB0byB1c2UgaXQg aGVyZSB0aGlzIHdheS4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IEkgdGhpbmsgdGhhdCBB Q1BJX0NPTVBBTklPTl9TRVQoKSBzaG91bGQgYmUgY2FsbGVkIGZyb20gaGVyZSBvbgo+ID4gPiA+ ID4gPiA+IHBlcl9jcHUoY3B1X3N5c19kZXZpY2VzLCBwci0+aWQpIGFmdGVyIHZhbGlkYXRpbmcg cHItPmlkIChzbyB0aGUKPiA+ID4gPiA+ID4gPiBwci0+aWQgdmFsaWRhdGlvbiBzaG91bGQgYWxs IGJlIGRvbmUgaGVyZSkgYW5kIHRoZW4gTlVMTCBjYW4gYmUgcGFzc2VkCj4gPiA+ID4gPiA+ID4g YXMgYWNwaV9kZXYgdG8gYWNwaV9iaW5kX29uZSgpIGluIGFjcGlfcHJvY2Vzc29yX2FkZCgpLiAg VGhlbiwgdGhlcmUKPiA+ID4gPiA+ID4gPiB3aWxsIGJlIG9uZSBwaHlzaWNhbCBkZXZpY2UgY29y cmVzcG9uZGluZyB0byB0aGUgcHJvY2Vzc29yIEFDUEkgZGV2aWNlCj4gPiA+ID4gPiA+ID4gYW5k IG5vIGNvbmZ1c2lvbi4gIAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBJJ20gZmFpcmx5IHN1cmUg dGhpcyBpcyBwb2ludGluZyB0byB0aGUgc2FtZSBkZXZpY2UgYnV0IGFncmVlZCB0aGlzCj4gPiA+ ID4gPiA+IGlzIGEgdGlueSBiaXQgY29uZnVzaW5nLiBIb3dldmVyIHdlIGNhbid0IHVzZSBjcHVf c3lzX2RldmljZXMgYXQgdGhpcyBwb2ludAo+ID4gPiA+ID4gPiBzbyBJJ20gbm90IGltbWVkaWF0 ZWx5IHNlZWluZyBhIGNsZWFuZXIgc29sdXRpb24gOiggIAo+ID4gPiA+ID4KPiA+ID4gPiA+IFdl bGwsIE9LLgo+ID4gPiA+ID4KPiA+ID4gPiA+IFBsZWFzZSBhdCBsZWFzdCBjb25zaWRlciBkb2lu ZyB0aGUgcHItPmlkIHZhbGlkYXRpb24gY2hlY2tzIGJlZm9yZQo+ID4gPiA+ID4gc2V0dGluZyB0 aGUgQUNQSSBjb21wYW5pb24gZm9yICZwZXJfY3B1KGNwdV9kZXZpY2VzLCBwci0+aWQpLgo+ID4g PiA+ID4KPiA+ID4gPiA+IEFsc28sIGFjcGlfYmluZF9vbmUoKSBuZWVkcyB0byBiZSBjYWxsZWQg b24gdGhlICJwaHlzaWNhbCIgZGV2aWNlcwo+ID4gPiA+ID4gcGFzc2VkIHRvIEFDUElfQ09NUEFO SU9OX1NFVCgpICh3aXRoIE5VTEwgYXMgdGhlIHNlY29uZCBhcmd1bWVudCkgZm9yCj4gPiA+ID4g PiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwaHlzaWNhbCBkZXZpY2UgbG9va3VwIHRvIHdv cmsuCj4gPiA+ID4gPgo+ID4gPiA+ID4gUGxlYXNlIGFsc28gbm90ZSB0aGF0IGFjcGlfcHJpbWFy eV9kZXZfY29tcGFuaW9uKCkgc2hvdWxkIHJldHVybgo+ID4gPiA+ID4gcGVyX2NwdShjcHVfc3lz X2RldmljZXMsIHByLT5pZCkgZm9yIHRoZSBwcm9jZXNzb3IgQUNQSSBkZXZpY2UsIHdoaWNoCj4g PiA+ID4gPiBkZXBlbmRzIG9uIHRoZSBvcmRlciBvZiBhY3BpX2JpbmRfb25lKCkgY2FsbHMgaW52 b2x2aW5nIHRoZSBzYW1lIEFDUEkKPiA+ID4gPiA+IGRldmljZS4gIAo+ID4gPiA+Cj4gPiA+ID4g T2YgY291cnNlLCBpZiB0aGUgdmFsdWUgc2V0IGJ5IEFDUElfQ09NUEFOSU9OX1NFVCgpIGlzIGNs ZWFyZWQKPiA+ID4gPiBzdWJzZXF1ZW50bHksIHRoZSBhYm92ZSBpcyBub3QgbmVlZGVkLCBidXQg dGhlbiB1c2luZwo+ID4gPiA+IEFDUElfQ09NUEFOSU9OX1NFVCgpIGlzIHF1ZXN0aW9uYWJsZSBv dmVyYWxsLiAgCj4gPiA+Cj4gPiA+IEFncmVlZCArIHNtb290aGluZyBvdmVyIHRoYXQgYnkgc3Rh c2hpbmcgYW5kIHB1dHRpbmcgaXQgYmFjayBkb2Vzbid0Cj4gPiA+IHdvcmsgYmVjYXVzZSB0aGVy ZSBpcyBhbiBhZGRpdGlvbmFsIGNhbGwgdG8gYWNwaV9iaW5kX29uZSgpIGluYmV0d2Vlbgo+ID4g PiBoZXJlIGFuZCB0aGUgb25lIHlvdSByZWZlcmVuY2UuCj4gPiA+Cj4gPiA+IFRoZSBhcmNoX3Jl Z2lzdGVyX2NwdSgpIGNhbGxzIGVuZCB1cCBjYWxsaW5nIHJlZ2lzdGVyX2NwdSgpIC8KPiA+ID4g ZGV2aWNlX3JlZ2lzdGVyKCkgLyBhY3BpX2RldmljZV9ub3RpZnkoKSAvIGFjcGlfYmluZF9vbmUo KQo+ID4gPgo+ID4gPiBXaXRoIGN1cnJlbnQgY29kZSB0aGF0IGZhaWxzIChzaWxlbnRseSkgIAo+ IAo+IEFuZCB0aGF0J3Mgd2h5IHRoZXJlIGlzIGFuIGV4cGxpY2l0IGFjcGlfYmluZF9vbmUoKSBp bnZvY2F0aW9uIGluCj4gYWNwaV9wcm9jZXNzb3JfYWRkKCkuCj4gCj4gPiA+IElmIEkgbWFrZSBz dXJlIHRoZSBoYW5kbGUgaXMgc2V0IGJlZm9yZSByZWdpc3Rlcl9jcHUoKSB0aGVuIGl0Cj4gPiA+ IHN1Y2NlZWRzLCBidXQgd2UgZW5kIHVwIHdpdGggZHVwbGljYXRlIHN5c2ZzIGZpbGVzIGV0YyBi ZWNhdXNlIHdlCj4gPiA+IGJpbmQgdHdpY2UuICAKPiAKPiBSaWdodCwgSSBzaG91bGQgaGF2ZSBy ZWNhbGxlZCB0aGF0IGVhcmxpZXIuCj4gCj4gPiA+IEkgdGhpbmsgdGhlIG9ubHkgd2F5IGFyb3Vu ZCB0aGlzIGlzIGxhcmdlciByZW9yZ2FuaXphdGlvbiBvZiB0aGUKPiA+ID4gQ1BVIGhvdHBsdWcg Y29kZSB0byBwdWxsIHRoZSBhcmNoX3JlZ2lzdGVyX2NwdSgpIGNhbGwgdG8gd2hlcmUKPiA+ID4g dGhlIGFjcGlfYmluZF9vbmUoKSBjYWxsIGlzLiAgSG93ZXZlciB0aGF0IGNoYW5nZXMgYSBsb3Qg bW9yZSB0aGFuIEknZCBsaWtlCj4gPiA+IChhbmQgSSBkb24ndCBoYXZlIGl0IHdvcmtpbmcgeWV0 KS4gIAo+IAo+IEkgc2VlLgo+IAo+ID4gPiBBbHRlcm5hdGl2ZWx5IGZpbmQgc29tZXdoZXJlIGVs c2UgdG8gc3Rhc2ggdGhlIGhhbmRsZSwgb3IganVzdCBhZGQgaXQgYXMKPiA+ID4gYSBwYXJhbWV0 ZXIgdG8gYXJjaF9yZWdpc3Rlcl9jcHUoKS4gUmlnaHQgbm93IHRoaXMgZmVlbHMgdGhlIGVhc2ll cgo+ID4gPiBwYXRoIHRvIG1lLiBhcmNoX3JlZ2lzdGVyX2NwdShpbnQgY3B1LCBhY3BpX2hhbmRs ZSBoYW5kbGUpCj4gPiA+Cj4gPiA+IFdvdWxkIHRoYXQgYmUgYSBwYXRoIHlvdSdkIGNvbnNpZGVy PyAgCj4gPgo+ID4gQW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8gZG8gdGhlIHBlcl9jcHUocHJv Y2Vzc29ycywgcHItPmlkKSA9IHByCj4gPiBhIGZldyBsaW5lcyBlYXJsaWVyIHRoYW4gY3VycmVu dGx5IGFuZCBhY2Nlc3MgdGhhdCBkaXJlY3RseSBmcm9tIHRoZQo+ID4gYXJjaF9yZWdpc3Rlcl9j cHUoKSBjYWxsLiAgU2ltaWxhcmx5IHJlbW92ZSB0aGF0IHJlZmVyZW5jZSBhIGJpdCBsYXRlciBh bmQKPiA+IHVzZSBpdCBpbiBhcmNoX3VucmVnaXN0ZXJfY3B1KCkuCj4gPgo+ID4gVGhpcyBzZWVt cyBsaWtlIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiwgYnV0IEkgbWF5IGJlIG1pc3Npbmcgc29tZXRo aW5nLiAgCj4gCj4gVGhpcyBzaG91bGQgd29yayBBRkFJQ1MsIGJ1dCBJJ2QgbW92ZSB0aGUgZW50 aXJlIHBpZWNlIG9mIGNvZGUgYmV0d2Vlbgo+IEJVR19PTigpIGFuZCBzZXR0aW5nIHBlcl9jcHUo cHJvY2Vzc29ycywgcHItPmlkKSBpbmNsdXNpdmU6CgpIaSBSYWZhZWwsCgpVbmZvcnR1bmF0ZWx5 IHRoaXMgaXMgbW9yZSBjb21wbGV4IG9uIHg4NiB0aGFuIEkgcmVhbGl6ZWQgOigKCk9uIHg4NiB0 aGUgaW5pdGlhbCBwci0+aWQgaXMgaW52YWxpZCwgd2hpY2ggaXMgb25lIG9mIHRoZSBjb25kaXRp b25zCnRoYXQgbGVhZHMgdG8gYWNwaV9wcm9jZXNzb3JfaG90YWRkX2luaXQoKSBiZWluZyBjYWxs ZWQuCkl0IG9ubHkgYmVjb21lIHZhbGlkIGFmdGVyIGFjcGlfbWFwX2NwdSgpIGluIGFjcGlfcHJv Y2Vzc29yX2hvdGFkZF9pbml0KCkuCgpTbyB0aGUgYmVzdCBJIGNhbiBpbW1lZGlhdGVseSBjb21l IHVwIHdpdGggaXMgdG8gZmFjdG9yIG91dCB0aGVzZSBjaGVja3MgYW5kIHRoZQpzZXR0aW5nIG9m IHRoZSBwZXJfY3B1IHN0cnVjdHVyZXMgYW5kIHNldCB0aGVtIGVpdGhlciBpbiBhY3BpX3Byb2Nl c3Nvcl9ob3RhZGRfaW5pdCgpCm9yIGluIGFuIGVsc2UgZm9yIHRoZSBub24gaG90cGx1ZyAvIG5v cm1hbCByZWdpc3RyYXRpb24gcGF0aCAod2hlcmUgdGhlIHByLT5pZCBpcyB2YWxpZCkuCgpOYXR1 cmFsbHkgZm91bmQgdGhpcyBvbiBteSBmaW5hbCBzZXQgb2YgdGVzdHMuLi4KCkEgbGl0dGxlIHVn bHkgYnV0IG5vdCAndG9vIGJhZCcuIAoKSm9uYXRoYW4KcC5zLiBObyBvbmUgbWluZHMgaWYgSSBi cmVhayB4ODYsIHJpZ2h0PwoKCgoKCj4gCj4gICAgIEJVR19PTihwci0+aWQgPj0gbnJfY3B1X2lk cyk7Cj4gCj4gICAgIC8qCj4gICAgICAqIEJ1Z2d5IEJJT1MgY2hlY2suCj4gICAgICAqIEFDUEkg aWQgb2YgcHJvY2Vzc29ycyBjYW4gYmUgcmVwb3J0ZWQgd3JvbmdseSBieSB0aGUgQklPUy4KPiAg ICAgICogRG9uJ3QgdHJ1c3QgaXQgYmxpbmRseQo+ICAgICAgKi8KPiAgICAgaWYgKHBlcl9jcHUo cHJvY2Vzc29yX2RldmljZV9hcnJheSwgcHItPmlkKSAhPSBOVUxMICYmCj4gICAgICAgICBwZXJf Y3B1KHByb2Nlc3Nvcl9kZXZpY2VfYXJyYXksIHByLT5pZCkgIT0gZGV2aWNlKSB7Cj4gICAgICAg ICBkZXZfd2FybigmZGV2aWNlLT5kZXYsCj4gICAgICAgICAgICAgIkJJT1MgcmVwb3J0ZWQgd3Jv bmcgQUNQSSBpZCAlZCBmb3IgdGhlIHByb2Nlc3NvclxuIiwKPiAgICAgICAgICAgICBwci0+aWQp Owo+ICAgICAgICAgLyogR2l2ZSB1cCwgYnV0IGRvIG5vdCBhYm9ydCB0aGUgbmFtZXNwYWNlIHNj YW4uICovCj4gICAgICAgICBnb3RvIGVycjsKPiAgICAgfQo+ICAgICAvKgo+ICAgICAgKiBwcm9j ZXNzb3JfZGV2aWNlX2FycmF5IGlzIG5vdCBjbGVhcmVkIG9uIGVycm9ycyB0byBhbGxvdyBidWdn eSBCSU9TCj4gICAgICAqIGNoZWNrcy4KPiAgICAgICovCj4gICAgIHBlcl9jcHUocHJvY2Vzc29y X2RldmljZV9hcnJheSwgcHItPmlkKSA9IGRldmljZTsKPiAgICAgcGVyX2NwdShwcm9jZXNzb3Jz LCBwci0+aWQpID0gcHI7Cj4gCj4gaW50byBhY3BpX3Byb2Nlc3Nvcl9nZXRfaW5mbygpLCByaWdo dCBhZnRlciB0aGUgcG9pbnQgd2hlcmUgcHItPmlkIGlzIHNldC4KCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==