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 X-Spam-Level: X-Spam-Status: No, score=-8.0 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E785CA9ECF for ; Fri, 1 Nov 2019 19:56:54 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D68A920650 for ; Fri, 1 Nov 2019 19:56:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ug+iO7yq" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D68A920650 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id A2DCF1163; Fri, 1 Nov 2019 19:56:53 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 2A5B0115E for ; Fri, 1 Nov 2019 19:56:53 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-lf1-f65.google.com (mail-lf1-f65.google.com [209.85.167.65]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id EF5AB466 for ; Fri, 1 Nov 2019 19:56:51 +0000 (UTC) Received: by mail-lf1-f65.google.com with SMTP id j5so8040154lfh.10 for ; Fri, 01 Nov 2019 12:56:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=c/1S4MjpEhaUuRWidZvrk8sA+V6O3n+vHUEiQqgBvHs=; b=ug+iO7yqyKaWcnieuyakmRdXAPkgrkmmgl3DoK8D/2eH+0xMVEiDYjw8ghnAlhSzqc eg7F+I7eitL18a/sgHjNH9YUP/lfN2tXxPErfFd2pQeR9gR8eLJgMvdb5frn4+q2WpQd bPMVgaDVbvAO1E+9bJaj+JKqr/gbLjEYp4rEPG3v2C60sYHtU3F2IcGrtAadlacbz4a6 /WzZWVPN38KkBmZniMxZhWuMUu5QxDpLHEAmenZlEmmZTVpMTyJfoDpf6nvQHayWHqti o71HA0yJMzBPYOIR045t1+m2ipt8BaKOt/hEzLbAhfEpEzvHoirS2G5YuwBAOxkwEwbB RywA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=c/1S4MjpEhaUuRWidZvrk8sA+V6O3n+vHUEiQqgBvHs=; b=rHCa8OMdY6IFtm1mFc3cN/eQuePl9c5Rkvh/bHbrCheI++gyx1WLooQSyxUaLVnDqw C21hRHIYUYv5lb1RMgxpvjFF5+Vx8v/us27+Udh+xVtqAEVOeO6KFzWeY727/GOhzQLO GHCYIerYn11V6eiWNgKvKLHgf8uUke4A2kog/G+Obu/wkI9AwOYcU1suRkmcVAWS84Zq cLYmW6CnWzKykzAjD8ma2EurtS2YDNqAF/pTNHNTj9EzGTubJwwdchTzKIs/3PWk+Zw9 NGR2DyD4/TpWkMUc3Z5vjm452hl3TwqpiWQ43QPG+gY/09GoRey3ST1+m9n37PYBl+oE cIOw== X-Gm-Message-State: APjAAAXQyVMX6fWQKfmfSuEjUhYz5ERwOFMi8EtMDNAz42bs6yuBt0LX MZpTmVYFjvI3UwZHDl64LL8= X-Google-Smtp-Source: APXvYqy45E8bR8suQhnp6ZWkspc0hY7Yf8U+GIvnp1VJkbRwVGZpixX/8cMST0VjJ1z3ET1+xG9kNw== X-Received: by 2002:a19:6b04:: with SMTP id d4mr8571629lfa.10.1572638210165; Fri, 01 Nov 2019 12:56:50 -0700 (PDT) Received: from [192.168.2.145] (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.googlemail.com with ESMTPSA id y11sm2677497ljn.94.2019.11.01.12.56.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 01 Nov 2019 12:56:49 -0700 (PDT) Subject: Re: [RFC 1/3] memory: Introduce memory controller mini-framework To: Thierry Reding References: <20191015162945.1203736-1-thierry.reding@gmail.com> <20191015162945.1203736-2-thierry.reding@gmail.com> <0888ea6f-2092-001e-5663-3a1d3f305ba4@gmail.com> <20191101101804.GD1167505@ulmo> From: Dmitry Osipenko Message-ID: Date: Fri, 1 Nov 2019 22:56:47 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1 MIME-Version: 1.0 In-Reply-To: <20191101101804.GD1167505@ulmo> Content-Language: en-US Cc: Arnd Bergmann , Will Deacon , Jonathan Hunter , iommu@lists.linux-foundation.org, linux-tegra@vger.kernel.org, Robin Murphy , linux-arm-kernel@lists.infradead.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org MDEuMTEuMjAxOSAxMzoxOCwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKPiBPbiBUaHUsIE9j dCAzMSwgMjAxOSBhdCAwNjoxMTozM1BNICswMzAwLCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+ IDE1LjEwLjIwMTkgMTk6MjksIFRoaWVycnkgUmVkaW5nINC/0LjRiNC10YI6Cj4+PiBGcm9tOiBU aGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgo+Pj4KPj4+IFRoaXMgbmV3IGZyYW1l d29yayBpcyBjdXJyZW50bHkgbm90aGluZyBtb3JlIHRoYW4gYSByZWdpc3RyeSBvZiBtZW1vcnkK Pj4+IGNvbnRyb2xsZXJzLCB3aXRoIHRoZSBnb2FsIGJlaW5nIHRvIG9yZGVyIGRldmljZSBwcm9i aW5nLiBPbmUgdXNlLWNhc2UKPj4+IHdoZXJlIHRoaXMgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwg aXMgYSBtZW1vcnkgY29udHJvbGxlciBkZXZpY2Ugd2hpY2gKPj4+IG5lZWRzIHRvIHByb2dyYW0g c29tZSByZWdpc3RlcnMgYmVmb3JlIHRoZSBzeXN0ZW0gTU1VIGNhbiBiZSBlbmFibGVkLgo+Pj4g QXNzb2NpYXRpbmcgdGhlIG1lbW9yeSBjb250cm9sbGVyIHdpdGggdGhlIFNNTVUgYWxsb3dzIHRo ZSBTTU1VIGRyaXZlcgo+Pj4gdG8gZGVmZXIgdGhlIHByb2JlIHVudGlsIHRoZSBtZW1vcnkgY29u dHJvbGxlciBoYXMgYmVlbiByZWdpc3RlcmVkLgo+Pj4KPj4+IE9uZSBzdWNoIGV4YW1wbGUgaXMg VGVncmExODYgd2hlcmUgdGhlIG1lbW9yeSBjb250cm9sbGVyIGNvbnRhaW5zIHNvbWUKPj4+IHJl Z2lzdGVycyB0aGF0IGFyZSB1c2VkIHRvIHByb2dyYW0gc3RyZWFtIElEcyBmb3IgdGhlIHZhcmlv dXMgbWVtb3J5Cj4+PiBjbGllbnRzIChkaXNwbGF5LCBVU0IsIFBDSSwgLi4uKSBpbiB0aGUgc3lz dGVtLiBQcm9ncmFtbWluZyB0aGVzZSBTSURzCj4+PiBpcyByZXF1aXJlZCBmb3IgdGhlIG1lbW9y eSBjbGllbnRzIHRvIGVtaXQgdGhlIHByb3BlciBTSURzIGFzIHBhcnQgb2YKPj4+IHRoZWlyIG1l bW9yeSByZXF1ZXN0cy4gVGhlIG1lbW9yeSBjb250cm9sbGVyIGRyaXZlciB0aGVyZWZvcmUgbmVl ZHMgdG8KPj4+IGJlIHByb2dyYW1tZWQgcHJpb3IgdG8gdGhlIFNNTVUgZHJpdmVyLiBUbyBhY2hp ZXZlIHRoYXQsIHRoZSBtZW1vcnkKPj4+IGNvbnRyb2xsZXIgd2lsbCBiZSByZWZlcmVuY2VkIHZp YSBwaGFuZGxlIGZyb20gdGhlIFNNTVUgZGV2aWNlIHRyZWUKPj4+IG5vZGUsIHRoZSBTTU1VIGRy aXZlciBjYW4gdGhlbiB1c2UgdGhlIG1lbW9yeSBjb250cm9sbGVyIGZyYW1ld29yayB0bwo+Pj4g ZmluZCBpdCBhbmQgZGVmZXIgcHJvYmUgdW50aWwgaXQgaGFzIGJlZW4gcmVnaXN0ZXJlZC4KPj4+ Cj4+PiBTaWduZWQtb2ZmLWJ5OiBUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPgo+ Pj4gLS0tCj4+PiAgZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUgICAgICAgICAgIHwgIDEgKwo+Pj4g IGRyaXZlcnMvbWVtb3J5L2NvcmUuYyAgICAgICAgICAgICB8IDk5ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4+ICBpbmNsdWRlL2xpbnV4L21lbW9yeS1jb250cm9sbGVyLmggfCAy NSArKysrKysrKwo+Pj4gIDMgZmlsZXMgY2hhbmdlZCwgMTI1IGluc2VydGlvbnMoKykKPj4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZW1vcnkvY29yZS5jCj4+PiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvbGludXgvbWVtb3J5LWNvbnRyb2xsZXIuaAo+Pgo+PiBIZWxsbyBUaGll cnJ5LAo+Pgo+PiBUaGlzIGxvb2tzIGxpa2UgYSB2ZXJ5IGdvb2QgZW5kZWF2b3VyISBJIGhhdmUg Y291cGxlIGNvbW1lbnRzLCBwbGVhc2UKPj4gc2VlIHRoZW0gYmVsb3cuCj4+Cj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUgYi9kcml2ZXJzL21lbW9yeS9NYWtlZmlsZQo+ Pj4gaW5kZXggMjdiNDkzNDM1ZTYxLi5kMTZlN2RjYThlZjkgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL21lbW9yeS9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy9tZW1vcnkvTWFrZWZpbGUKPj4+ IEBAIC0zLDYgKzMsNyBAQAo+Pj4gICMgTWFrZWZpbGUgZm9yIG1lbW9yeSBkZXZpY2VzCj4+PiAg Iwo+Pj4gIAo+Pj4gK29iai15CQkJCSs9IGNvcmUubwo+Pj4gIG9iai0kKENPTkZJR19ERFIpCQkr PSBqZWRlY19kZHJfZGF0YS5vCj4+PiAgaWZlcSAoJChDT05GSUdfRERSKSx5KQo+Pj4gIG9iai0k KENPTkZJR19PRikJCSs9IG9mX21lbW9yeS5vCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZW1v cnkvY29yZS5jIGIvZHJpdmVycy9tZW1vcnkvY29yZS5jCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xNzcyZTgzOTMwNWEKPj4+IC0tLSAvZGV2L251bGwK Pj4+ICsrKyBiL2RyaXZlcnMvbWVtb3J5L2NvcmUuYwo+Pj4gQEAgLTAsMCArMSw5OSBAQAo+Pj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+PiArLyoKPj4+ICsgKiBDb3B5 cmlnaHQgKEMpIDIwMTkgTlZJRElBIENvcnBvcmF0aW9uLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNp bmNsdWRlIDxsaW51eC9tZW1vcnktY29udHJvbGxlci5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9v Zi5oPgo+Pj4gKwo+Pj4gK3N0YXRpYyBERUZJTkVfTVVURVgoY29udHJvbGxlcnNfbG9jayk7Cj4+ PiArc3RhdGljIExJU1RfSEVBRChjb250cm9sbGVycyk7Cj4+PiArCj4+PiArc3RhdGljIHZvaWQg bWVtb3J5X2NvbnRyb2xsZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQo+Pj4gK3sKPj4+ICsJ c3RydWN0IG1lbW9yeV9jb250cm9sbGVyICptYyA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBt ZW1vcnlfY29udHJvbGxlciwgcmVmKTsKPj4+ICsKPj4+ICsJV0FSTl9PTighbGlzdF9lbXB0eSgm bWMtPmxpc3QpKTsKPj4+ICt9Cj4+PiArCj4+PiAraW50IG1lbW9yeV9jb250cm9sbGVyX3JlZ2lz dGVyKHN0cnVjdCBtZW1vcnlfY29udHJvbGxlciAqbWMpCj4+PiArewo+Pj4gKwlrcmVmX2luaXQo Jm1jLT5yZWYpOwo+Pj4gKwo+Pj4gKwltdXRleF9sb2NrKCZjb250cm9sbGVyc19sb2NrKTsKPj4+ ICsJbGlzdF9hZGRfdGFpbCgmbWMtPmxpc3QsICZjb250cm9sbGVycyk7Cj4+PiArCW11dGV4X3Vu bG9jaygmY29udHJvbGxlcnNfbG9jayk7Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ ICtFWFBPUlRfU1lNQk9MX0dQTChtZW1vcnlfY29udHJvbGxlcl9yZWdpc3Rlcik7Cj4+PiArCj4+ PiArdm9pZCBtZW1vcnlfY29udHJvbGxlcl91bnJlZ2lzdGVyKHN0cnVjdCBtZW1vcnlfY29udHJv bGxlciAqbWMpCj4+PiArewo+Pj4gKwltdXRleF9sb2NrKCZjb250cm9sbGVyc19sb2NrKTsKPj4+ ICsJbGlzdF9kZWxfaW5pdCgmbWMtPmxpc3QpOwo+Pj4gKwltdXRleF91bmxvY2soJmNvbnRyb2xs ZXJzX2xvY2spOwo+Pj4gKwo+Pj4gKwlrcmVmX3B1dCgmbWMtPnJlZiwgbWVtb3J5X2NvbnRyb2xs ZXJfcmVsZWFzZSk7Cj4+PiArfQo+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9jb250cm9s bGVyX3VucmVnaXN0ZXIpOwo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X2NvbnRyb2xs ZXIgKgo+Pj4gK29mX21lbW9yeV9jb250cm9sbGVyX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCj4+PiArCQkJIGNvbnN0IGNoYXIgKmNvbl9pZCkKPj4+ICt7 Cj4+PiArCWNvbnN0IGNoYXIgKmNlbGxzID0gIiNtZW1vcnktY29udHJvbGxlci1jZWxscyI7Cj4+ PiArCWNvbnN0IGNoYXIgKm5hbWVzID0gIm1lbW9yeS1jb250cm9sbGVyLW5hbWVzIjsKPj4+ICsJ Y29uc3QgY2hhciAqcHJvcCA9ICJtZW1vcnktY29udHJvbGxlcnMiOwo+Pj4gKwlzdHJ1Y3QgbWVt b3J5X2NvbnRyb2xsZXIgKm1jOwo+Pj4gKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7Cj4+ PiArCWludCBpbmRleCA9IDAsIGVycjsKPj4+ICsKPj4+ICsJaWYgKGNvbl9pZCkgewo+Pj4gKwkJ aW5kZXggPSBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcobnAsIG5hbWVzLCBjb25faWQpOwo+Pj4g KwkJaWYgKGluZGV4IDwgMCkKPj4+ICsJCQlyZXR1cm4gRVJSX1BUUihpbmRleCk7Cj4+PiArCX0K Pj4+ICsKPj4+ICsJZXJyID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MobnAsIHByb3AsIGNl bGxzLCBpbmRleCwgJmFyZ3MpOwo+Pj4gKwlpZiAoZXJyKSB7Cj4+PiArCQlpZiAoZXJyID09IC1F Tk9FTlQpCj4+PiArCQkJZXJyID0gLUVOT0RFVjsKPj4+ICsKPj4+ICsJCXJldHVybiBFUlJfUFRS KGVycik7Cj4+PiArCX0KPj4+ICsKPj4+ICsJbXV0ZXhfbG9jaygmY29udHJvbGxlcnNfbG9jayk7 Cj4+PiArCj4+PiArCWxpc3RfZm9yX2VhY2hfZW50cnkobWMsICZjb250cm9sbGVycywgbGlzdCkg ewo+Pj4gKwkJaWYgKG1jLT5kZXYgJiYgbWMtPmRldi0+b2Zfbm9kZSA9PSBhcmdzLm5wKSB7Cj4+ PiArCQkJa3JlZl9nZXQoJm1jLT5yZWYpOwo+Pgo+PiBUaGlzIGlzIG5vdCBlbm91Z2ggYmVjYXVz ZSBtZW1vcnkgY29udHJvbGxlciBkcml2ZXIgY291bGQgYmUgYSBsb2FkYWJsZQo+PiBtb2R1bGUs IHRodXMgc29tZXRoaW5nIGxpa2UgdGhpcyBpcyBuZWVkZWQgaGVyZToKPj4KPj4gCV9fbW9kdWxl X2dldChtYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKPj4KPj4gVGhpcyB3b24ndCBhbGxvdyBNQyBk cml2ZXIgdG8gYmUgdW5sb2FkZWQgd2hpbGUgaXQgaGFzIGFjdGl2ZSB1c2Vycy4KPiAKPiBHb29k IGNhdGNoLiBJJ3ZlIGFkZGVkIHRoYXQgKGFuZCB0aGUgbW9kdWxlX3B1dCgpIGZyb20gYmVsb3cp IHRvIHRoZQo+IHBhdGNoLgo+IAo+Pj4gKwkJCW11dGV4X3VubG9jaygmY29udHJvbGxlcnNfbG9j ayk7Cj4+PiArCQkJZ290byB1bmxvY2s7Cj4+PiArCQl9Cj4+PiArCX0KPj4+ICsKPj4+ICsJbWMg PSBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwo+Pj4gKwo+Pj4gK3VubG9jazoKPj4+ICsJbXV0ZXhf dW5sb2NrKCZjb250cm9sbGVyc19sb2NrKTsKPj4+ICsJb2Zfbm9kZV9wdXQoYXJncy5ucCk7Cj4+ PiArCXJldHVybiBtYzsKPj4+ICt9Cj4+PiArCj4+PiArc3RydWN0IG1lbW9yeV9jb250cm9sbGVy ICoKPj4+ICttZW1vcnlfY29udHJvbGxlcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBj aGFyICpjb25faWQpCj4+PiArewo+Pj4gKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfT0YpICYmIGRl diAmJiBkZXYtPm9mX25vZGUpCj4+PiArCQlyZXR1cm4gb2ZfbWVtb3J5X2NvbnRyb2xsZXJfZ2V0 KGRldiwgZGV2LT5vZl9ub2RlLCBjb25faWQpOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gRVJSX1BUUigt RU5PREVWKTsKPj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2NvbnRyb2xsZXJf Z2V0KTsKPj4KPj4gSW4gbW9zdCBjYXNlcyBtZW1vcnkgY29udHJvbGxlcnMgYXJlIHVuaXF1ZSBp biBhIHN5c3RlbSwgc28gaXQgbG9va3MgdG8KPj4gbWUgdGhhdCBpdCB3aWxsIGJlIG1vcmUgdW5p dmVyc2FsIHRvIGhhdmUgYWJpbGl0eSB0byBnZXQgTUMgYnkgaXRzCj4+IGRldmljZS10cmVlIGNv bXBhdGlibGUgbmFtZS4gTGlrZSB0aGlzOgo+Pgo+PiAJb2ZfbWVtb3J5X2NvbnRyb2xsZXJfZ2V0 X2J5X2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0aWJsZSk7Cj4+Cj4+IFRoaXMgd2lsbCBh bGxvdyBjdXJyZW50IGRyaXZlcnMgKGxpa2UgVGVncmEyMCBkZXZmcmVxIGRyaXZlciBmb3IKPj4g ZXhhbXBsZSkgdG8gdXRpbGl6ZSB0aGlzIG5ldyBBUEkgd2l0aG91dCBoYXZpbmcgdHJvdWJsZSBv ZiBtYWludGFpbmluZwo+PiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGRldmlj ZS10cmVlcyB0aGF0IGRvIG5vdCBoYXZlIGEKPj4gcGhhbmRsZSB0byBNQy4KPj4KPj4gaHR0cHM6 Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGludXgvdjUuNC1yYzUvc291cmNlL2RyaXZlcnMvZGV2ZnJl cS90ZWdyYTIwLWRldmZyZXEuYyNMMTAwCj4+Cj4+IE9mIGNvdXJzZSB0aGVyZSBjb3VsZCBiZSBj YXNlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgY29udHJvbGxlcnMgd2l0aAo+PiB0aGUgc2Ft ZSBjb21wYXRpYmxlLCBidXQgdGhhdCBjYXNlIGNvdWxkIGJlIHN1cHBvcnRlZCBsYXRlciBvbiBi eSB0aG9zZQo+PiB3aG8gcmVhbGx5IG5lZWQgaXQuIEkgZG9uJ3QgdGhpbmsgdGhhdCBhbnkgb2Yg TlZJRElBIFRlZ3JhIFNvQ3MgZmFsbAo+PiBpbnRvIHRoYXQgY2F0ZWdvcnkuCj4gCj4gVGhpcyBo YXMgdGhlIHNsaWdodCBkaXNhZHZhbnRhZ2UgdGhhdCB3ZSB3b3VsZCBoYXZlIHRvIGl0ZXJhdGUg b3ZlciBhCj4gbnVtYmVyIG9mIGNvbXBhdGlibGUgc3RyaW5ncyBpbiBjYXNlIHdlIHdhbnQgdG8g dHJhbnNwYXJlbnRseSBzdXBwb3J0Cj4gbW9yZSB0aGFuIGEgc2luZ2xlIHZlcnNpb24gb2YgdGhl IG1lbW9yeSBjb250cm9sbGVyLgoKR29vZCBwb2ludC4KCj4gQW4gYWx0ZXJuYXRpdmUsIHdoaWNo IGlzIHVzZWQgYnkgYSBudW1iZXIgb2Ygb3RoZXIgcmVzb3VyY2UgcmVnaXN0cnkKPiBBUElzLCB3 b3VsZCBiZSB0byB3b3JrIHdpdGggbG9va3VwIHRhYmxlcy4gQmFzaWNhbGx5IHRob3NlIHdvdWxk IG1ha2UKPiBhIG1hcHBpbmcgYmV0d2VlbiBhIHByb3ZpZGVyIGFuZCBhIGRldmljZS9jb25zdW1l ciBwYWlyLiBUaGUgcmVzdWx0Cj4gd291bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgo+IAo+ IAlzdHJ1Y3QgbWVtb3J5X2NvbnRyb2xsZXJfbG9va3VwIHsKPiAJCWNvbnN0IGNoYXIgKnByb3Zp ZGVyOwo+IAkJY29uc3QgY2hhciAqZGV2X2lkOwo+IAkJY29uc3QgY2hhciAqY29uX2lkOwo+IAl9 Owo+IAo+IAlzdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9jb250cm9sbGVyX2xvb2t1cCAqdGVn cmExMjRfbWNfbG9va3VwW10gPSB7Cj4gCQl7ICI3MDAxOTAwMC5tZW1vcnktY29udHJvbGxlciIs ICI2MDAwYzgwMC5hY3Rtb24iLCBOVUxMIH0sCj4gCX07Cj4gCj4gbWVtb3J5X2NvbnRyb2xsZXJf Z2V0KCkgY291bGQgdGhlbiB1c2UgdGhhdCBhcyBhIGxhc3QtcmVzb3J0IHRvIGZpbmQgYQo+IHJl ZmVyZW5jZSB0byBhIG1lbW9yeSBjb250cm9sbGVyIGlmIGEgZGV2aWNlIHRyZWUgcGhhbmRsZSBp c24ndAo+IGF2YWlsYWJsZS4KClRoZSBleHBsaWNpdCBsb29rdXAgdGFibGUgc291bmRzIGxpa2Ug YSBnb29kIGlkZWEgYmVjYXVzZSBpdCBzaG91bGQgYmUKdXNhYmxlIGluIGEgY2FzZSBvZiBhIG5v bi1PRiBkZXZpY2VzIGFzIHdlbGwuCgo+IE9uIHRoZSBvdGhlciBoYW5kIGl0IHNob3VsZCBiZSBm YWlybHkgZWFzeSB0byBjb25kaXRpb25hbGl6ZSBhbGwgdGhlCj4gY29kZSBiYXNlZCBwdXJlbHkg b24gdGhlIGF2YWlsYWJpbGl0eSBvZiBhIHBoYW5kbGU6Cj4gCj4gCW1jID0gbWVtb3J5X2NvbnRy b2xsZXJfZ2V0KGRldiwgTlVMTCk7Cj4gCWlmIChJU19FUlIobWMpKSB7Cj4gCQlpZiAobWMgIT0g RVJSX1BUUigtRU5PREVWKSkKPiAJCQlyZXR1cm4gUFRSX0VSUihtYyk7Cj4gCj4gCQltYyA9IE5V TEw7Cj4gCX0KPiAKPiAJLi4uCj4gCj4gCWlmIChtYykgewo+IAkJLi4uCj4gCX0KPiAKPiBUaGUg YWJvdmUgY291bGQgYmUgc2ltcGxpZmllZCBieSB3cmFwcGluZyB0aGUgbG9naWMgaW4gYSBoZWxw ZXIgdGhhdCBjYW4KPiBiZSB1c2VkIGlmIGNvbnN1bWVycyBjYW4gd29yayB3aXRob3V0OiBtZW1v cnlfY29udHJvbGxlcl9nZXRfb3B0aW9uYWwoKS4KCk9wdGlvbmFsIHJldHJpZXZhbCBoZWxwZXJz IGFyZSBhIGNvbW1vbiB0aGluZyBhbW9uZyBzdWJzeXN0ZW0gQVBJcy4KQWx0aG91Z2ggaXQgcHJv YmFibHkgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBNQyBBUEkK YW5kIGNvdWxkIGJlIGFkZGVkIGxhdGVyIG9uLCBvbmNlIHRoZXJlIHdpbGwgYmUgYSByZWFsIG5l ZWQgaW4gaXQuCkFGQUlLLCBub25lIG9mIHRoZSBUZWdyYSBkcml2ZXJzIGhhdmUgc3VjaCBhIG5l ZWQgcmlnaHQgbm93LgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwppb21tdSBtYWlsaW5nIGxpc3QKaW9tbXVAbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcK aHR0cHM6Ly9saXN0cy5saW51eGZvdW5kYXRpb24ub3JnL21haWxtYW4vbGlzdGluZm8vaW9tbXU=