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 5D80C7C085; Mon, 15 Apr 2024 17:34:59 +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=1713202504; cv=none; b=IofJLulzUuZFDGBECrSWo5Nho2kgRrlTwAhgiOP7VPcNEQEk3xJTZuKhuFLqIjbC7dZTEfqsg3+eQXucOAZeveXdliSUTAP3eqljWn0fadaXq34X1rDa3IthKslNdJqW6A5eOXTKgoujxOW62xB3I6+YJ5/jUh8pFpmZZIJTwfE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713202504; c=relaxed/simple; bh=8nW1r00CaQqsroyhph8CiKXzAWz528/ZnYH9HoUPHrE=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=APHeLVl4hP/ch+Kb/s/8HnSiApp+0+WQWkXdO20aEbYbpjXsdNE6xc/YJkESUYUpU9t2q2VAP/zVkpQoBa+gtClpuce/OgrpKJyrhYUEUcsMt+GwrtP86yni6qbtFpRUlGxY2uAgfkQGfYKEfU9j2zxQnHpw5oSh9ihuqFDY7PI= 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 4VJDlf2GLCz6K5Wg; Tue, 16 Apr 2024 01:33:02 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 95A0D140517; Tue, 16 Apr 2024 01:34:56 +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; Mon, 15 Apr 2024 18:34:55 +0100 Date: Mon, 15 Apr 2024 18:34:54 +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: <20240415183454.000072f6@Huawei.com> In-Reply-To: <20240415175057.00002e11@Huawei.com> References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-3-Jonathan.Cameron@huawei.com> <20240415164854.0000264f@Huawei.com> <20240415175057.00002e11@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: linux-acpi@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: lhrpeml100001.china.huawei.com (7.191.160.183) To lhrpeml500005.china.huawei.com (7.191.163.240) On Mon, 15 Apr 2024 17:50:57 +0100 Jonathan Cameron wrote: > 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/acpi_= 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(struct a= cpi_device *device) > > > > > > union acpi_object object =3D { 0 }; > > > > > > struct acpi_buffer buffer =3D { sizeof(union acpi_objec= t), &object }; > > > > > > struct acpi_processor *pr =3D acpi_driver_data(device); > > > > > > + 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(struct a= cpi_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 structure. > > > > 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 isn'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_add()= , 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 p= assed > > > > > as acpi_dev to acpi_bind_one() in acpi_processor_add(). Then, th= ere > > > > > will be one physical device corresponding to the processor ACPI d= evice > > > > > 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 at th= is 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, which > > > depends on the order of acpi_bind_one() calls involving the same ACPI > > > device. =20 > >=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 >=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. >=20 > The arch_register_cpu() calls end up calling register_cpu() / > device_register() / acpi_device_notify() / acpi_bind_one() >=20 > With current code that fails (silently) > 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 > 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 li= ke > (and I don't have it working yet). >=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)=20 >=20 > Would that be a path you'd consider? 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. Jonathan >=20 > Jonathan >=20 >=20 >=20 > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel 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 326AEC00A94 for ; Mon, 15 Apr 2024 17:35:18 +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=c4gzjCrhka1RZTfb0U0lHhmVqoxXQZmrrxES0zgN66U=; b=UTodVaPx1GILlQ +mE1yzxz09JohPOMZue486CtQY8jqbkwppjBjsCTq6QdIgnn0vwSKKSFFisncTwXbdWpObQsL/Sfk 9OgwQpZB+ilBb1tXHDt3pw1daj1mV3qY/CL52T5xCAlW56DLz6TN2UibfeTyoG3a2qjJaGRyKy6TH IAM3+ZnjKv25XL2m/e546bi6N3Nooe0R8b31xEHuPAMkgufQsO9cQ7SZlEmRgmEyHAo71a7br3rk6 LQpp+te6CMh6YQv5RTNvjTRadLgRd6+NmphT+N6Eo2XVQyo5EqUeUuEO45kaQnj0y+/azavJhSkoc pBgWBBwUnwnGJSQy/LVA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rwQEV-00000009L1V-3Ct5; Mon, 15 Apr 2024 17:35:07 +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 1rwQES-00000009L0H-18DK for linux-arm-kernel@lists.infradead.org; Mon, 15 Apr 2024 17:35:06 +0000 Received: from mail.maildlp.com (unknown [172.18.186.31]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4VJDlf2GLCz6K5Wg; Tue, 16 Apr 2024 01:33:02 +0800 (CST) Received: from lhrpeml500005.china.huawei.com (unknown [7.191.163.240]) by mail.maildlp.com (Postfix) with ESMTPS id 95A0D140517; Tue, 16 Apr 2024 01:34:56 +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; Mon, 15 Apr 2024 18:34:55 +0100 Date: Mon, 15 Apr 2024 18:34:54 +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: <20240415183454.000072f6@Huawei.com> In-Reply-To: <20240415175057.00002e11@Huawei.com> References: <20240412143719.11398-1-Jonathan.Cameron@huawei.com> <20240412143719.11398-3-Jonathan.Cameron@huawei.com> <20240415164854.0000264f@Huawei.com> <20240415175057.00002e11@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: lhrpeml100001.china.huawei.com (7.191.160.183) 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-20240415_103504_605440_157DCD87 X-CRM114-Status: GOOD ( 56.62 ) 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 T24gTW9uLCAxNSBBcHIgMjAyNCAxNzo1MDo1NyArMDEwMApKb25hdGhhbiBDYW1lcm9uIDxKb25h dGhhbi5DYW1lcm9uQEh1YXdlaS5jb20+IHdyb3RlOgoKPiBPbiBNb24sIDE1IEFwciAyMDI0IDE4 OjE5OjE3ICswMjAwCj4gIlJhZmFlbCBKLiBXeXNvY2tpIiA8cmFmYWVsQGtlcm5lbC5vcmc+IHdy b3RlOgo+IAo+ID4gT24gTW9uLCBBcHIgMTUsIDIwMjQgYXQgNjoxNuKAr1BNIFJhZmFlbCBKLiBX eXNvY2tpIDxyYWZhZWxAa2VybmVsLm9yZz4gd3JvdGU6ICAKPiA+ID4KPiA+ID4gT24gTW9uLCBB cHIgMTUsIDIwMjQgYXQgNTo0OeKAr1BNIEpvbmF0aGFuIENhbWVyb24KPiA+ID4gPEpvbmF0aGFu LkNhbWVyb25AaHVhd2VpLmNvbT4gd3JvdGU6ICAgIAo+ID4gPiA+Cj4gPiA+ID4gT24gRnJpLCAx MiBBcHIgMjAyNCAyMDoxMDo1NCArMDIwMAo+ID4gPiA+ICJSYWZhZWwgSi4gV3lzb2NraSIgPHJh ZmFlbEBrZXJuZWwub3JnPiB3cm90ZToKPiA+ID4gPiAgICAKPiA+ID4gPiA+IE9uIEZyaSwgQXBy IDEyLCAyMDI0IGF0IDQ6MzjigK9QTSBKb25hdGhhbiBDYW1lcm9uCj4gPiA+ID4gPiA8Sm9uYXRo YW4uQ2FtZXJvbkBodWF3ZWkuY29tPiB3cm90ZTogICAgCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ IFRoZSBhcm02NCBzcGVjaWZpYyBhcmNoX3JlZ2lzdGVyX2NwdSgpIG5lZWRzIHRvIGFjY2VzcyB0 aGUgX1NUQQo+ID4gPiA+ID4gPiBtZXRob2Qgb2YgdGhlIERTRFQgb2JqZWN0IHNvIG1ha2UgaXQg YXZhaWxhYmxlIGJ5IGFzc2lnbmluZyB0aGUKPiA+ID4gPiA+ID4gYXBwcm9wcmlhdGUgaGFuZGxl IHRvIHRoZSBzdHJ1Y3QgY3B1IGluc3RhbmNlLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBTaWdu ZWQtb2ZmLWJ5OiBKb25hdGhhbiBDYW1lcm9uIDxKb25hdGhhbi5DYW1lcm9uQGh1YXdlaS5jb20+ Cj4gPiA+ID4gPiA+IC0tLQo+ID4gPiA+ID4gPiAgZHJpdmVycy9hY3BpL2FjcGlfcHJvY2Vzc29y LmMgfCAzICsrKwo+ID4gPiA+ID4gPiAgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQo+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfcHJv Y2Vzc29yLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9wcm9jZXNzb3IuYwo+ID4gPiA+ID4gPiBpbmRl eCA3YTBkZDM1ZDYyYzkuLjkzZTAyOTQwM2QwNSAxMDA2NDQKPiA+ID4gPiA+ID4gLS0tIGEvZHJp dmVycy9hY3BpL2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4gPiA+ID4gKysrIGIvZHJpdmVycy9hY3Bp L2FjcGlfcHJvY2Vzc29yLmMKPiA+ID4gPiA+ID4gQEAgLTIzNSw2ICsyMzUsNyBAQCBzdGF0aWMg aW50IGFjcGlfcHJvY2Vzc29yX2dldF9pbmZvKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQo+ ID4gPiA+ID4gPiAgICAgICAgIHVuaW9uIGFjcGlfb2JqZWN0IG9iamVjdCA9IHsgMCB9Owo+ID4g PiA+ID4gPiAgICAgICAgIHN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IHNpemVvZih1bmlv biBhY3BpX29iamVjdCksICZvYmplY3QgfTsKPiA+ID4gPiA+ID4gICAgICAgICBzdHJ1Y3QgYWNw aV9wcm9jZXNzb3IgKnByID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOwo+ID4gPiA+ID4gPiAr ICAgICAgIHN0cnVjdCBjcHUgKmM7Cj4gPiA+ID4gPiA+ICAgICAgICAgaW50IGRldmljZV9kZWNs YXJhdGlvbiA9IDA7Cj4gPiA+ID4gPiA+ICAgICAgICAgYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVf T0s7Cj4gPiA+ID4gPiA+ICAgICAgICAgc3RhdGljIGludCBjcHUwX2luaXRpYWxpemVkOwo+ID4g PiA+ID4gPiBAQCAtMzE0LDYgKzMxNSw4IEBAIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfZ2V0 X2luZm8oc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCj4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgIGNwdWZyZXFfYWRkX2RldmljZSgiYWNwaS1jcHVmcmVxIik7Cj4gPiA+ID4g PiA+ICAgICAgICAgfQo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiArICAgICAgIGMgPSAmcGVyX2Nw dShjcHVfZGV2aWNlcywgcHItPmlkKTsKPiA+ID4gPiA+ID4gKyAgICAgICBBQ1BJX0NPTVBBTklP Tl9TRVQoJmMtPmRldiwgZGV2aWNlKTsgICAgCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhpcyBpcyBh bHNvIHNldCBmb3IgcGVyX2NwdShjcHVfc3lzX2RldmljZXMsIHByLT5pZCkgaW4KPiA+ID4gPiA+ IGFjcGlfcHJvY2Vzc29yX2FkZCgpLCB2aWEgYWNwaV9iaW5kX29uZSgpLiAgICAKPiA+ID4gPgo+ ID4gPiA+IEhpIFJhZmFlbCwKPiA+ID4gPgo+ID4gPiA+IGNwdV9zeXNfZGV2aWNlcyBnZXRzIGZp bGxlZCB3aXRoIGEgcG9pbnRlciB0byB0aGlzIHNhbWUgc3RydWN0dXJlLgo+ID4gPiA+IFRoZSBj b250ZW50cyBnZXRzIHNldCBpbiByZWdpc3Rlcl9jcHUoKSBzbyBhdCB0aGlzIHBvaW50Cj4gPiA+ ID4gaXQgZG9lc24ndCBwb2ludCBhbnl3aGVyZS4gIEFzIGEgc2lkZSBub3RlIHJlZ2lzdGVyX2Nw dSgpCj4gPiA+ID4gbWVtc2V0cyB0byB6ZXJvIHRoZSB2YWx1ZSBJIHNldCBpdCB0byBpbiB0aGUg Y29kZSBhYm92ZSB3aGljaCBpc24ndAo+ID4gPiA+IGdyZWF0LCBwYXJ0aWN1bGFybHkgYXMgSSB3 YW50IHRvIHVzZSB0aGlzIGluIHBvc3RfZWplY3QgZm9yCj4gPiA+ID4gYXJtNjQuCj4gPiA+ID4K PiA+ID4gPiBXZSBjb3VsZCBtYWtlIGEgY29weSBvZiB0aGUgaGFuZGxlIGFuZCBwdXQgaXQgYmFj ayBhZnRlcgo+ID4gPiA+IHRoZSBtZW1zZXQgaW4gcmVnaXN0ZXJfY3B1KCkgYnV0IHRoYXQgaXMg YWxzbyB1Z2x5Lgo+ID4gPiA+IEl0J3MgdGhlIGJlc3QgSSd2ZSBjb21lIHVwIHdpdGggdG8gbWFr ZSBzdXJlIHRoaXMgaXMgc3RpbGwgc2V0Cj4gPiA+ID4gY29tZSByZW1vdmUgdGltZSBidXQgaXMg cmF0aGVyIG9kZC4gICAgCj4gPiA+ID4gPgo+ID4gPiA+ID4gTW9yZW92ZXIsIHRoZXJlIGlzIHNv bWUgcHItPmlkIHZhbGlkYXRpb24gaW4gYWNwaV9wcm9jZXNzb3JfYWRkKCksIHNvCj4gPiA+ID4g PiBpdCBzZWVtcyBwcmVtYXR1cmUgdG8gdXNlIGl0IGhlcmUgdGhpcyB3YXkuCj4gPiA+ID4gPgo+ ID4gPiA+ID4gSSB0aGluayB0aGF0IEFDUElfQ09NUEFOSU9OX1NFVCgpIHNob3VsZCBiZSBjYWxs ZWQgZnJvbSBoZXJlIG9uCj4gPiA+ID4gPiBwZXJfY3B1KGNwdV9zeXNfZGV2aWNlcywgcHItPmlk KSBhZnRlciB2YWxpZGF0aW5nIHByLT5pZCAoc28gdGhlCj4gPiA+ID4gPiBwci0+aWQgdmFsaWRh dGlvbiBzaG91bGQgYWxsIGJlIGRvbmUgaGVyZSkgYW5kIHRoZW4gTlVMTCBjYW4gYmUgcGFzc2Vk Cj4gPiA+ID4gPiBhcyBhY3BpX2RldiB0byBhY3BpX2JpbmRfb25lKCkgaW4gYWNwaV9wcm9jZXNz b3JfYWRkKCkuICBUaGVuLCB0aGVyZQo+ID4gPiA+ID4gd2lsbCBiZSBvbmUgcGh5c2ljYWwgZGV2 aWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb2Nlc3NvciBBQ1BJIGRldmljZQo+ID4gPiA+ID4g YW5kIG5vIGNvbmZ1c2lvbi4gICAgCj4gPiA+ID4KPiA+ID4gPiBJJ20gZmFpcmx5IHN1cmUgdGhp cyBpcyBwb2ludGluZyB0byB0aGUgc2FtZSBkZXZpY2UgYnV0IGFncmVlZCB0aGlzCj4gPiA+ID4g aXMgYSB0aW55IGJpdCBjb25mdXNpbmcuIEhvd2V2ZXIgd2UgY2FuJ3QgdXNlIGNwdV9zeXNfZGV2 aWNlcyBhdCB0aGlzIHBvaW50Cj4gPiA+ID4gc28gSSdtIG5vdCBpbW1lZGlhdGVseSBzZWVpbmcg YSBjbGVhbmVyIHNvbHV0aW9uIDooICAgIAo+ID4gPgo+ID4gPiBXZWxsLCBPSy4KPiA+ID4KPiA+ ID4gUGxlYXNlIGF0IGxlYXN0IGNvbnNpZGVyIGRvaW5nIHRoZSBwci0+aWQgdmFsaWRhdGlvbiBj aGVja3MgYmVmb3JlCj4gPiA+IHNldHRpbmcgdGhlIEFDUEkgY29tcGFuaW9uIGZvciAmcGVyX2Nw dShjcHVfZGV2aWNlcywgcHItPmlkKS4KPiA+ID4KPiA+ID4gQWxzbywgYWNwaV9iaW5kX29uZSgp IG5lZWRzIHRvIGJlIGNhbGxlZCBvbiB0aGUgInBoeXNpY2FsIiBkZXZpY2VzCj4gPiA+IHBhc3Nl ZCB0byBBQ1BJX0NPTVBBTklPTl9TRVQoKSAod2l0aCBOVUxMIGFzIHRoZSBzZWNvbmQgYXJndW1l bnQpIGZvcgo+ID4gPiB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBwaHlzaWNhbCBkZXZpY2Ug bG9va3VwIHRvIHdvcmsuCj4gPiA+Cj4gPiA+IFBsZWFzZSBhbHNvIG5vdGUgdGhhdCBhY3BpX3By aW1hcnlfZGV2X2NvbXBhbmlvbigpIHNob3VsZCByZXR1cm4KPiA+ID4gcGVyX2NwdShjcHVfc3lz X2RldmljZXMsIHByLT5pZCkgZm9yIHRoZSBwcm9jZXNzb3IgQUNQSSBkZXZpY2UsIHdoaWNoCj4g PiA+IGRlcGVuZHMgb24gdGhlIG9yZGVyIG9mIGFjcGlfYmluZF9vbmUoKSBjYWxscyBpbnZvbHZp bmcgdGhlIHNhbWUgQUNQSQo+ID4gPiBkZXZpY2UuICAgIAo+ID4gCj4gPiBPZiBjb3Vyc2UsIGlm IHRoZSB2YWx1ZSBzZXQgYnkgQUNQSV9DT01QQU5JT05fU0VUKCkgaXMgY2xlYXJlZAo+ID4gc3Vi c2VxdWVudGx5LCB0aGUgYWJvdmUgaXMgbm90IG5lZWRlZCwgYnV0IHRoZW4gdXNpbmcKPiA+IEFD UElfQ09NUEFOSU9OX1NFVCgpIGlzIHF1ZXN0aW9uYWJsZSBvdmVyYWxsLiAgCj4gCj4gQWdyZWVk ICsgc21vb3RoaW5nIG92ZXIgdGhhdCBieSBzdGFzaGluZyBhbmQgcHV0dGluZyBpdCBiYWNrIGRv ZXNuJ3QKPiB3b3JrIGJlY2F1c2UgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBjYWxsIHRvIGFjcGlf YmluZF9vbmUoKSBpbmJldHdlZW4KPiBoZXJlIGFuZCB0aGUgb25lIHlvdSByZWZlcmVuY2UuCj4g Cj4gVGhlIGFyY2hfcmVnaXN0ZXJfY3B1KCkgY2FsbHMgZW5kIHVwIGNhbGxpbmcgcmVnaXN0ZXJf Y3B1KCkgLwo+IGRldmljZV9yZWdpc3RlcigpIC8gYWNwaV9kZXZpY2Vfbm90aWZ5KCkgLyBhY3Bp X2JpbmRfb25lKCkKPiAKPiBXaXRoIGN1cnJlbnQgY29kZSB0aGF0IGZhaWxzIChzaWxlbnRseSkK PiBJZiBJIG1ha2Ugc3VyZSB0aGUgaGFuZGxlIGlzIHNldCBiZWZvcmUgcmVnaXN0ZXJfY3B1KCkg dGhlbiBpdAo+IHN1Y2NlZWRzLCBidXQgd2UgZW5kIHVwIHdpdGggZHVwbGljYXRlIHN5c2ZzIGZp bGVzIGV0YyBiZWNhdXNlIHdlCj4gYmluZCB0d2ljZS4KPiAKPiBJIHRoaW5rIHRoZSBvbmx5IHdh eSBhcm91bmQgdGhpcyBpcyBsYXJnZXIgcmVvcmdhbml6YXRpb24gb2YgdGhlCj4gQ1BVIGhvdHBs dWcgY29kZSB0byBwdWxsIHRoZSBhcmNoX3JlZ2lzdGVyX2NwdSgpIGNhbGwgdG8gd2hlcmUKPiB0 aGUgYWNwaV9iaW5kX29uZSgpIGNhbGwgaXMuICBIb3dldmVyIHRoYXQgY2hhbmdlcyBhIGxvdCBt b3JlIHRoYW4gSSdkIGxpa2UKPiAoYW5kIEkgZG9uJ3QgaGF2ZSBpdCB3b3JraW5nIHlldCkuCj4g Cj4gQWx0ZXJuYXRpdmVseSBmaW5kIHNvbWV3aGVyZSBlbHNlIHRvIHN0YXNoIHRoZSBoYW5kbGUs IG9yIGp1c3QgYWRkIGl0IGFzCj4gYSBwYXJhbWV0ZXIgdG8gYXJjaF9yZWdpc3Rlcl9jcHUoKS4g UmlnaHQgbm93IHRoaXMgZmVlbHMgdGhlIGVhc2llcgo+IHBhdGggdG8gbWUuIGFyY2hfcmVnaXN0 ZXJfY3B1KGludCBjcHUsIGFjcGlfaGFuZGxlIGhhbmRsZSkgCj4gCj4gV291bGQgdGhhdCBiZSBh IHBhdGggeW91J2QgY29uc2lkZXI/CgpBbm90aGVyIG9wdGlvbiB3b3VsZCBiZSB0byBkbyB0aGUg cGVyX2NwdShwcm9jZXNzb3JzLCBwci0+aWQpID0gcHIKYSBmZXcgbGluZXMgZWFybGllciB0aGFu IGN1cnJlbnRseSBhbmQgYWNjZXNzIHRoYXQgZGlyZWN0bHkgZnJvbSB0aGUKYXJjaF9yZWdpc3Rl cl9jcHUoKSBjYWxsLiAgU2ltaWxhcmx5IHJlbW92ZSB0aGF0IHJlZmVyZW5jZSBhIGJpdCBsYXRl ciBhbmQKdXNlIGl0IGluIGFyY2hfdW5yZWdpc3Rlcl9jcHUoKS4KClRoaXMgc2VlbXMgbGlrZSB0 aGUgc2ltcGxlc3Qgc29sdXRpb24sIGJ1dCBJIG1heSBiZSBtaXNzaW5nIHNvbWV0aGluZy4KCkpv bmF0aGFuCgo+IAo+IEpvbmF0aGFuCj4gCj4gCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAo+ IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IGh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK