From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v5 18/30] ARM: vITS: introduce translation table walks Date: Thu, 6 Apr 2017 23:41:37 +0100 Message-ID: <1ff2cbdb-757e-2bbe-2f71-4c3970cfffd5@arm.com> References: <1491434362-30310-1-git-send-email-andre.przywara@arm.com> <1491434362-30310-19-git-send-email-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cwG65-0004iL-1X for xen-devel@lists.xenproject.org; Thu, 06 Apr 2017 22:41:45 +0000 In-Reply-To: <1491434362-30310-19-git-send-email-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara , Stefano Stabellini Cc: xen-devel@lists.xenproject.org, Shanker Donthineni , Vijay Kilari List-Id: xen-devel@lists.xenproject.org SGkgQW5kcmUsCgpPbiAwNC8wNi8yMDE3IDEyOjE5IEFNLCBBbmRyZSBQcnp5d2FyYSB3cm90ZToK PiBUaGUgSVRTIHN0b3JlcyB0aGUgdGFyZ2V0ICh2KUNQVSBhbmQgdGhlICh2aXJ0dWFsKSBMUEkg bnVtYmVyIGluIHRhYmxlcy4KPiBJbnRyb2R1Y2UgZnVuY3Rpb25zIHRvIHdhbGsgdGhvc2UgdGFi bGVzIGFuZCB0cmFuc2xhdGUgYW4gZGV2aWNlIElEIC0KPiBldmVudCBJRCBwYWlyIGludG8gYSBw YWlyIG9mIHZpcnR1YWwgTFBJIGFuZCB2Q1BVLgo+IFdlIG1hcCB0aG9zZSB0YWJsZXMgb24gZGVt YW5kIC0gd2hpY2ggaXMgY2hlYXAgb24gYXJtNjQuIEFsc28gd2UgdGFrZQo+IGNhcmUgb2YgdGhl IGxvY2tpbmcgb24gdGhlIHdheSwgc2luY2Ugd2UgY2FuJ3QgZWFzaWx5IHByb3RlY3QgdGhvc2Ug SVRUcwo+IGZyb20gYmVpbmcgYWx0ZXJlZCBieSB0aGUgZ3Vlc3QuCj4KPiBUbyBhbGxvdyBjb21w aWxpbmcgd2l0aG91dCB3YXJuaW5ncywgd2UgZGVjbGFyZSB0d28gZnVuY3Rpb25zIGFzCj4gbm9u LXN0YXRpYyBmb3IgdGhlIG1vbWVudCwgd2hpY2ggdHdvIGxhdGVyIHBhdGNoZXMgd2lsbCBmaXgu Cj4KPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNv bT4KPiAtLS0KPiAgeGVuL2FyY2gvYXJtL2dpYy5jICAgICAgICAgfCAgIDIgKwo+ICB4ZW4vYXJj aC9hcm0vdmdpYy12My1pdHMuYyB8IDE3OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKQo+Cj4g ZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9naWMuYyBiL3hlbi9hcmNoL2FybS9naWMuYwo+IGlu ZGV4IGE1NmJlMzQuLjUwMDBiMGQgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gvYXJtL2dpYy5jCj4g KysrIGIveGVuL2FyY2gvYXJtL2dpYy5jCj4gQEAgLTQ5MSw2ICs0OTEsOCBAQCBzdGF0aWMgdm9p ZCBnaWNfdXBkYXRlX29uZV9scihzdHJ1Y3QgdmNwdSAqdiwgaW50IGkpCj4gICAgICB7Cj4gICAg ICAgICAgZ2ljX2h3X29wcy0+Y2xlYXJfbHIoaSk7Cj4gICAgICAgICAgY2xlYXJfYml0KGksICZ0 aGlzX2NwdShscl9tYXNrKSk7Cj4gKyAgICAgICAgaWYgKCBpc19scGkoaXJxKSApCj4gKyAgICAg ICAgICAgIGNsZWFyX2JpdChHSUNfSVJRX0dVRVNUX0xQSV9QRU5ESU5HLCAmcC0+c3RhdHVzKTsK CkkgYW0gc3RydWdnbGluZyB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGNoYW5nZSBpcyBpbnRyb2R1 Y2VkIGluIHRoaXMgCnBhdGNoLiBUaGlzIGRvZXMgbm90IGxvb2sgcmVsYXRlZCB0byB0aGUgdHJh bnNsYXRpb24gdGFibGUuCgo+Cj4gICAgICAgICAgaWYgKCBwLT5kZXNjICE9IE5VTEwgKQo+ICAg ICAgICAgICAgICBjbGVhcl9iaXQoX0lSUV9JTlBST0dSRVNTLCAmcC0+ZGVzYy0+c3RhdHVzKTsK PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3ZnaWMtdjMtaXRzLmMgYi94ZW4vYXJjaC9hcm0v dmdpYy12My1pdHMuYwo+IGluZGV4IGY2YmYxZWUuLmExNDU2NjYgMTAwNjQ0Cj4gLS0tIGEveGVu L2FyY2gvYXJtL3ZnaWMtdjMtaXRzLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vdmdpYy12My1pdHMu Ywo+IEBAIC02Nyw2ICs2Nyw4IEBAIHN0cnVjdCB2aXRzX2l0dGUKPiAgICAgIHVpbnQxNl90IHBh ZDsKPiAgfTsKPgo+ICsjZGVmaW5lIFVOTUFQUEVEX0NPTExFQ1RJT04gICAgICAoKHVpbnQxNl90 KX4wKQo+ICsKPiAgdm9pZCB2Z2ljX3YzX2l0c19pbml0X2RvbWFpbihzdHJ1Y3QgZG9tYWluICpk KQo+ICB7Cj4gICAgICBzcGluX2xvY2tfaW5pdCgmZC0+YXJjaC52Z2ljLml0c19kZXZpY2VzX2xv Y2spOwo+IEBAIC03OCw2ICs4MCwxODMgQEAgdm9pZCB2Z2ljX3YzX2l0c19mcmVlX2RvbWFpbihz dHJ1Y3QgZG9tYWluICpkKQo+ICAgICAgQVNTRVJUKFJCX0VNUFRZX1JPT1QoJmQtPmFyY2gudmdp Yy5pdHNfZGV2aWNlcykpOwo+ICB9Cj4KPiArLyoKPiArICogVGhlIHBoeXNpY2FsIGFkZHJlc3Mg aXMgZW5jb2RlZCBzbGlnaHRseSBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24KPiArICogdGhlIHVz ZWQgcGFnZSBzaXplOiB0aGUgaGlnaGVzdCBmb3VyIGJpdHMgYXJlIHN0b3JlZCBpbiB0aGUgbG93 ZXN0Cj4gKyAqIGZvdXIgYml0cyBvZiB0aGUgZmllbGQgZm9yIDY0SyBwYWdlcy4KPiArICovCj4g K3N0YXRpYyBwYWRkcl90IGdldF9iYXNlcl9waHlzX2FkZHIodWludDY0X3QgcmVnKQo+ICt7Cj4g KyAgICBpZiAoIHJlZyAmIEJJVCg5KSApCj4gKyAgICAgICAgcmV0dXJuIChyZWcgJiBHRU5NQVNL X1VMTCg0NywgMTYpKSB8Cj4gKyAgICAgICAgICAgICAgICAoKHJlZyAmIEdFTk1BU0tfVUxMKDE1 LCAxMikpIDw8IDM2KTsKPiArICAgIGVsc2UKPiArICAgICAgICByZXR1cm4gcmVnICYgR0VOTUFT S19VTEwoNDcsIDEyKTsKPiArfQo+ICsKPiArLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgSVRT IGxvY2sgaGVsZC4gKi8KPiArc3RhdGljIHN0cnVjdCB2Y3B1ICpnZXRfdmNwdV9mcm9tX2NvbGxl Y3Rpb24oc3RydWN0IHZpcnRfaXRzICppdHMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGNvbGxpZCkKPiArewo+ICsgICAgcGFkZHJfdCBh ZGRyID0gZ2V0X2Jhc2VyX3BoeXNfYWRkcihpdHMtPmJhc2VyX2NvbGwpOwo+ICsgICAgdWludDE2 X3QgdmNwdV9pZDsKPiArICAgIGludCByZXQ7Cj4gKwo+ICsgICAgQVNTRVJUKHNwaW5faXNfbG9j a2VkKCZpdHMtPml0c19sb2NrKSk7Cj4gKwo+ICsgICAgaWYgKCBjb2xsaWQgPj0gaXRzLT5tYXhf Y29sbGVjdGlvbnMgKQo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ICsKPiArICAgIHJldCA9IHZn aWNfYWNjZXNzX2d1ZXN0X21lbW9yeShpdHMtPmQsIGFkZHIgKyBjb2xsaWQgKiBzaXplb2YodWlu dDE2X3QpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2Y3B1X2lkLCBz aXplb2YodmNwdV9pZCksIGZhbHNlKTsKPiArICAgIGlmICggcmV0ICkKPiArICAgICAgICByZXR1 cm4gTlVMTDsKPiArCj4gKyAgICBpZiAoIHZjcHVfaWQgPT0gVU5NQVBQRURfQ09MTEVDVElPTiB8 fCB2Y3B1X2lkID49IGl0cy0+ZC0+bWF4X3ZjcHVzICkKPiArICAgICAgICByZXR1cm4gTlVMTDsK PiArCj4gKyAgICByZXR1cm4gaXRzLT5kLT52Y3B1W3ZjcHVfaWRdOwo+ICt9Cj4gKwo+ICsvKgo+ ICsgKiBPdXIgZGV2aWNlIHRhYmxlIGVuY29kaW5nczoKPiArICogQ29udGFpbnMgdGhlIGd1ZXN0 IHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIEludGVycnVwdCBUcmFuc2xhdGlvbiBUYWJsZSBpbgo+ ICsgKiBiaXRzIFs1MTo4XSwgYW5kIHRoZSBzaXplIG9mIGl0IGlzIGVuY29kZWQgYXMgdGhlIG51 bWJlciBvZiBiaXRzIG1pbnVzIG9uZQo+ICsgKiBpbiB0aGUgbG93ZXN0IDggYml0cyBvZiB0aGUg d29yZC4KPiArICovCj4gKyNkZWZpbmUgREVWX1RBQkxFX0lUVF9BRERSKHgpICgoeCkgJiBHRU5N QVNLX1VMTCg1MSwgOCkpCj4gKyNkZWZpbmUgREVWX1RBQkxFX0lUVF9TSVpFKHgpIChCSVQoKCh4 KSAmIEdFTk1BU0tfVUxMKDcsIDApKSArIDEpKQo+ICsjZGVmaW5lIERFVl9UQUJMRV9FTlRSWShh ZGRyLCBiaXRzKSAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAoKChhZGRyKSAmIEdF Tk1BU0tfVUxMKDUxLCA4KSkgfCAoKChiaXRzKSAtIDEpICYgR0VOTUFTS19VTEwoNywgMCkpKQo+ ICsKPiArLyoKPiArICogTG9va3VwIHRoZSBhZGRyZXNzIG9mIHRoZSBJbnRlcnJ1cHQgVHJhbnNs YXRpb24gVGFibGUgYXNzb2NpYXRlZCB3aXRoCj4gKyAqIGEgZGV2aWNlIElEIGFuZCByZXR1cm4g dGhlIGFkZHJlc3Mgb2YgdGhlIElUVEUgYmVsb25naW5nIHRvIHRoZSBldmVudCBJRAo+ICsgKiAo d2hpY2ggaXMgYW4gaW5kZXggaW50byB0aGF0IHRhYmxlKS4KCllvdSBsaWtlbHkgd2FudCBhIFRP RE8gc3VwcG9ydCB0d28tbGV2ZWwgdGFibGUgaGVyZS4KCj4gKyAqLwo+ICtzdGF0aWMgcGFkZHJf dCBpdHNfZ2V0X2l0dGVfYWRkcmVzcyhzdHJ1Y3QgdmlydF9pdHMgKml0cywKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZGV2aWQsIHVpbnQzMl90IGV2aWQp Cj4gK3sKPiArICAgIHBhZGRyX3QgYWRkciA9IGdldF9iYXNlcl9waHlzX2FkZHIoaXRzLT5iYXNl cl9kZXYpOwo+ICsgICAgdWludDY0X3QgaXR0Owo+ICsKPiArICAgIGlmICggZGV2aWQgPj0gaXRz LT5tYXhfZGV2aWNlcyApCj4gKyAgICAgICAgcmV0dXJuIElOVkFMSURfUEFERFI7Cj4gKwo+ICsg ICAgaWYgKCB2Z2ljX2FjY2Vzc19ndWVzdF9tZW1vcnkoaXRzLT5kLCBhZGRyICsgZGV2aWQgKiBz aXplb2YodWludDY0X3QpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJml0 dCwgc2l6ZW9mKGl0dCksIGZhbHNlKSApCj4gKyAgICAgICAgcmV0dXJuIElOVkFMSURfUEFERFI7 Cj4gKwo+ICsgICAgaWYgKCBldmlkID49IERFVl9UQUJMRV9JVFRfU0laRShpdHQpIHx8Cj4gKyAg ICAgICAgIERFVl9UQUJMRV9JVFRfQUREUihpdHQpID09IElOVkFMSURfUEFERFIgKQo+ICsgICAg ICAgIHJldHVybiBJTlZBTElEX1BBRERSOwo+ICsKPiArICAgIHJldHVybiBERVZfVEFCTEVfSVRU X0FERFIoaXR0KSArIGV2aWQgKiBzaXplb2Yoc3RydWN0IHZpdHNfaXR0ZSk7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIFF1ZXJpZXMgdGhlIGNvbGxlY3Rpb24gYW5kIGRldmljZSB0YWJsZXMgdG8gZ2V0 IHRoZSB2Q1BVIGFuZCB2aXJ0dWFsCj4gKyAqIExQSSBudW1iZXIgZm9yIGEgZ2l2ZW4gZ3Vlc3Qg ZXZlbnQuIFRoaXMgZmlyc3QgYWNjZXNzZXMgdGhlIGd1ZXN0IG1lbW9yeQo+ICsgKiB0byByZXNv bHZlIHRoZSBhZGRyZXNzIG9mIHRoZSBJVFRFLCB0aGVuIHJlYWRzIHRoZSBJVFRFIGVudHJ5IGF0 IHRoaXMKPiArICogYWRkcmVzcyBhbmQgcHV0cyB0aGUgcmVzdWx0IGluIHZjcHVfcHRyIGFuZCB2 bHBpX3B0ci4KPiArICogUmVxdWlyZXMgdGhlIElUUyBsb2NrIHRvIGJlIGhlbGQuCj4gKyAqLwo+ ICtzdGF0aWMgYm9vbCByZWFkX2l0dGVfbG9ja2VkKHN0cnVjdCB2aXJ0X2l0cyAqaXRzLCB1aW50 MzJfdCBkZXZpZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBldmlk LCBzdHJ1Y3QgdmNwdSAqKnZjcHVfcHRyLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90ICp2bHBpX3B0cikKPiArewo+ICsgICAgcGFkZHJfdCBhZGRyOwo+ICsgICAgc3Ry dWN0IHZpdHNfaXR0ZSBpdHRlOwo+ICsgICAgc3RydWN0IHZjcHUgKnZjcHU7Cj4gKwo+ICsgICAg QVNTRVJUKHNwaW5faXNfbG9ja2VkKCZpdHMtPml0c19sb2NrKSk7Cj4gKwo+ICsgICAgYWRkciA9 IGl0c19nZXRfaXR0ZV9hZGRyZXNzKGl0cywgZGV2aWQsIGV2aWQpOwo+ICsgICAgaWYgKCBhZGRy ID09IElOVkFMSURfUEFERFIgKQo+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICBp ZiAoIHZnaWNfYWNjZXNzX2d1ZXN0X21lbW9yeShpdHMtPmQsIGFkZHIsICZpdHRlLCBzaXplb2Yo aXR0ZSksIGZhbHNlKSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIHZjcHUg PSBnZXRfdmNwdV9mcm9tX2NvbGxlY3Rpb24oaXRzLCBpdHRlLmNvbGxlY3Rpb24pOwo+ICsgICAg aWYgKCAhdmNwdSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgICp2Y3B1X3B0 ciA9IHZjcHU7Cj4gKyAgICAqdmxwaV9wdHIgPSBpdHRlLnZscGk7Cj4gKyAgICByZXR1cm4gdHJ1 ZTsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRoZSBs b2NraW5nIGJ5IHRha2luZyB0aGUgaXRzX2xvY2sgaXRzZWxmLCBzbwo+ICsgKiBhIGNhbGxlciBz aGFsbCBub3QgaG9sZCB0aGlzLiBCZWZvcmUgcmV0dXJuaW5nLCB0aGUgbG9jayBpcyBkcm9wcGVk IGFnYWluLgo+ICsgKi8KPiArYm9vbCByZWFkX2l0dGUoc3RydWN0IHZpcnRfaXRzICppdHMsIHVp bnQzMl90IGRldmlkLCB1aW50MzJfdCBldmlkLAo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgdmNw dSAqKnZjcHVfcHRyLCB1aW50MzJfdCAqdmxwaV9wdHIpCj4gK3sKPiArICAgIGJvb2wgcmV0Owo+ ICsKPiArICAgIHNwaW5fbG9jaygmaXRzLT5pdHNfbG9jayk7Cj4gKyAgICByZXQgPSByZWFkX2l0 dGVfbG9ja2VkKGl0cywgZGV2aWQsIGV2aWQsIHZjcHVfcHRyLCB2bHBpX3B0cik7Cj4gKyAgICBz cGluX3VubG9jaygmaXRzLT5pdHNfbG9jayk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArLyoKPiArICogUXVlcmllcyB0aGUgY29sbGVjdGlvbiBhbmQgZGV2aWNlIHRhYmxlcyB0 byB0cmFuc2xhdGUgdGhlIGRldmljZSBJRCBhbmQKPiArICogZXZlbnQgSUQgYW5kIGZpbmQgdGhl IGFwcHJvcHJpYXRlIElUVEUuIFRoZSBnaXZlbiBjb2xsZWN0aW9uIElEIGFuZCB0aGUKPiArICog dmlydHVhbCBMUEkgbnVtYmVyIGFyZSB0aGVuIHN0b3JlZCBpbnRvIHRoYXQgZW50cnkuCj4gKyAq IElmIHZjcHVfcHRyIGlzIHByb3ZpZGVkLCByZXR1cm5zIHRoZSBWQ1BVIGJlbG9uZ2luZyB0byB0 aGF0IGNvbGxlY3Rpb24uCj4gKyAqIFJlcXVpcmVzIHRoZSBJVFMgbG9jayB0byBiZSBoZWxkLgo+ ICsgKi8KPiArc3RhdGljIGJvb2wgd3JpdGVfaXR0ZV9sb2NrZWQoc3RydWN0IHZpcnRfaXRzICpp dHMsIHVpbnQzMl90IGRldmlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBldmlkLCB1aW50MzJfdCBjb2xsaWQsIHVpbnQzMl90IHZscGksCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICoqdmNwdV9wdHIpCj4gK3sKPiArICAgIHBh ZGRyX3QgYWRkcjsKPiArICAgIHN0cnVjdCB2aXRzX2l0dGUgaXR0ZTsKPiArCj4gKyAgICBBU1NF UlQoc3Bpbl9pc19sb2NrZWQoJml0cy0+aXRzX2xvY2spKTsKPiArCj4gKyAgICBpZiAoIGNvbGxp ZCA+PSBpdHMtPm1heF9jb2xsZWN0aW9ucyApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsK PiArICAgIGlmICggdmxwaSA+PSBpdHMtPmQtPmFyY2gudmdpYy5ucl9scGlzICkKPiArICAgICAg ICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgYWRkciA9IGl0c19nZXRfaXR0ZV9hZGRyZXNzKGl0 cywgZGV2aWQsIGV2aWQpOwo+ICsgICAgaWYgKCBhZGRyID09IElOVkFMSURfUEFERFIgKQo+ICsg ICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICBpdHRlLmNvbGxlY3Rpb24gPSBjb2xsaWQ7 Cj4gKyAgICBpdHRlLnZscGkgPSB2bHBpOwo+ICsKPiArICAgIGlmICggdmdpY19hY2Nlc3NfZ3Vl c3RfbWVtb3J5KGl0cy0+ZCwgYWRkciwgJml0dGUsIHNpemVvZihpdHRlKSwgdHJ1ZSkgKQo+ICsg ICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICBpZiAoIHZjcHVfcHRyICkKPiArICAgICAg ICAqdmNwdV9wdHIgPSBnZXRfdmNwdV9mcm9tX2NvbGxlY3Rpb24oaXRzLCBjb2xsaWQpOwo+ICsK PiArICAgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHRh a2VzIGNhcmUgb2YgdGhlIGxvY2tpbmcgYnkgdGFraW5nIHRoZSBpdHNfbG9jayBpdHNlbGYsIHNv Cj4gKyAqIGEgY2FsbGVyIHNoYWxsIG5vdCBob2xkIHRoaXMuIEJlZm9yZSByZXR1cm5pbmcsIHRo ZSBsb2NrIGlzIGRyb3BwZWQgYWdhaW4uCj4gKyAqLwo+ICtib29sIHdyaXRlX2l0dGUoc3RydWN0 IHZpcnRfaXRzICppdHMsIHVpbnQzMl90IGRldmlkLCB1aW50MzJfdCBldmlkLAo+ICsgICAgICAg ICAgICAgICAgdWludDMyX3QgY29sbGlkLCB1aW50MzJfdCB2bHBpLCBzdHJ1Y3QgdmNwdSAqKnZj cHVfcHRyKQo+ICt7Cj4gKyAgICBib29sIHJldDsKPiArCj4gKyAgICBzcGluX2xvY2soJml0cy0+ aXRzX2xvY2spOwo+ICsgICAgcmV0ID0gd3JpdGVfaXR0ZV9sb2NrZWQoaXRzLCBkZXZpZCwgZXZp ZCwgY29sbGlkLCB2bHBpLCB2Y3B1X3B0cik7Cj4gKyAgICBzcGluX3VubG9jaygmaXRzLT5pdHNf bG9jayk7Cj4gKwo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCj4gICAqIEZ1bmN0aW9ucyB0aGF0IGhhbmRsZSBJVFMg Y29tbWFuZHMgKgo+ICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4K Ci0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=