From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Skeggs Subject: Re: [PATCH v2 3/9] pci: implement generic code for PCIe speed change Date: Wed, 14 Oct 2015 08:55:43 +1000 Message-ID: <561D8BEF.3080800@gmail.com> References: <1444729463-1560-1-git-send-email-nouveau@karolherbst.de> <1444729463-1560-4-git-send-email-nouveau@karolherbst.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1444729463-1560-4-git-send-email-nouveau-lIBOoy2+GI7scQ4cX5LuPg@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: Karol Herbst , nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: nouveau.vger.kernel.org LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQpIYXNoOiBTSEEyNTYKCk9uIDEwLzEz LzIwMTUgMDc6NDQgUE0sIEthcm9sIEhlcmJzdCB3cm90ZToKPiB2MjogcmVuYW1lIGFuZCBncm91 cCBmdW5jdGlvbnMKPiAKPiBTaWduZWQtb2ZmLWJ5OiBLYXJvbCBIZXJic3QgPG5vdXZlYXVAa2Fy b2xoZXJic3QuZGU+IC0tLSAKPiBkcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L3BjaS5o IHwgIDE0ICsrKyAKPiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvS2J1aWxkICAgIHwgICAx ICsgCj4gZHJtL25vdXZlYXUvbnZrbS9zdWJkZXYvcGNpL2Jhc2UuYyAgICB8ICAgNSArKyAKPiBk cm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcGNpZS5jICAgIHwgMTY1Cj4gKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKyAKPiBkcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcHJp di5oICAgIHwgIDE1ICsrKysgNSBmaWxlcyBjaGFuZ2VkLAo+IDIwMCBpbnNlcnRpb25zKCspIGNy ZWF0ZSBtb2RlIDEwMDY0NAo+IGRybS9ub3V2ZWF1L252a20vc3ViZGV2L3BjaS9wY2llLmMKPiAK PiBkaWZmIC0tZ2l0IGEvZHJtL25vdXZlYXUvaW5jbHVkZS9udmttL3N1YmRldi9wY2kuaAo+IGIv ZHJtL25vdXZlYXUvaW5jbHVkZS9udmttL3N1YmRldi9wY2kuaCBpbmRleCAxN2ZlN2I3Li5hYjlk NWNjCj4gMTAwNjQ0IC0tLSBhL2RybS9ub3V2ZWF1L2luY2x1ZGUvbnZrbS9zdWJkZXYvcGNpLmgg KysrCj4gYi9kcm0vbm91dmVhdS9pbmNsdWRlL252a20vc3ViZGV2L3BjaS5oIEBAIC0yLDYgKzIs MTIgQEAgI2RlZmluZQo+IF9fTlZLTV9QQ0lfSF9fICNpbmNsdWRlIDxjb3JlL3N1YmRldi5oPgo+ IAo+ICtlbnVtIG52a21fcGNpZV9zcGVlZCB7ICsJTlZLTV9QQ0lFX1NQRUVEXzJfNSwgKwo+IE5W S01fUENJRV9TUEVFRF81XzAsICsJTlZLTV9QQ0lFX1NQRUVEXzhfMCwgK307ICsgc3RydWN0IG52 a21fcGNpCj4geyBjb25zdCBzdHJ1Y3QgbnZrbV9wY2lfZnVuYyAqZnVuYzsgc3RydWN0IG52a21f c3ViZGV2IHN1YmRldjsgQEAKPiAtMTgsNiArMjQsMTEgQEAgc3RydWN0IG52a21fcGNpIHsgYm9v bCBhY3F1aXJlZDsgfSBhZ3A7Cj4gCj4gKwlzdHJ1Y3QgeyArCQllbnVtIG52a21fcGNpZV9zcGVl ZCBsYXN0X3NwZWVkOyArCQl1OCBsYXN0X3dpZHRoOyArCj4gfSBwY2llOyArIGJvb2wgbXNpOyB9 Owo+IAo+IEBAIC0zNiw0ICs0Nyw3IEBAIGludCBnOTRfcGNpX25ldyhzdHJ1Y3QgbnZrbV9kZXZp Y2UgKiwgaW50LCBzdHJ1Y3QKPiBudmttX3BjaSAqKik7IGludCBnZjEwMF9wY2lfbmV3KHN0cnVj dCBudmttX2RldmljZSAqLCBpbnQsIHN0cnVjdAo+IG52a21fcGNpICoqKTsgaW50IGdmMTA2X3Bj aV9uZXcoc3RydWN0IG52a21fZGV2aWNlICosIGludCwgc3RydWN0Cj4gbnZrbV9wY2kgKiopOyBp bnQgZ2sxMDRfcGNpX25ldyhzdHJ1Y3QgbnZrbV9kZXZpY2UgKiwgaW50LCBzdHJ1Y3QKPiBudmtt X3BjaSAqKik7ICsgKy8qIHBjaWUgZnVuY3Rpb25zICovICtpbnQKPiBudmttX3BjaWVfc2V0X2xp bmsoc3RydWN0IG52a21fcGNpICosIGVudW0gbnZrbV9wY2llX3NwZWVkLCB1OAo+IHdpZHRoKTsg I2VuZGlmIGRpZmYgLS1naXQgYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvS2J1aWxkCj4g Yi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvS2J1aWxkIGluZGV4IDcyNGFmZDQuLjNjMjUx OWYgMTAwNjQ0IAo+IC0tLSBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3BjaS9LYnVpbGQgKysr Cj4gYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvS2J1aWxkIEBAIC0xLDUgKzEsNiBAQCBu dmttLXkgKz0KPiBudmttL3N1YmRldi9wY2kvYWdwLm8gbnZrbS15ICs9IG52a20vc3ViZGV2L3Bj aS9iYXNlLm8gK252a20teSArPQo+IG52a20vc3ViZGV2L3BjaS9wY2llLm8gbnZrbS15ICs9IG52 a20vc3ViZGV2L3BjaS9udjA0Lm8gbnZrbS15ICs9Cj4gbnZrbS9zdWJkZXYvcGNpL252NDAubyBu dmttLXkgKz0gbnZrbS9zdWJkZXYvcGNpL252NDYubyBkaWZmIC0tZ2l0Cj4gYS9kcm0vbm91dmVh dS9udmttL3N1YmRldi9wY2kvYmFzZS5jCj4gYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kv YmFzZS5jIGluZGV4IGQ2NzFkY2YuLjk1YThkMDUgMTAwNjQ0IAo+IC0tLSBhL2RybS9ub3V2ZWF1 L252a20vc3ViZGV2L3BjaS9iYXNlLmMgKysrCj4gYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9w Y2kvYmFzZS5jIEBAIC0xMTcsNiArMTE3LDkgQEAKPiBudmttX3BjaV9pbml0KHN0cnVjdCBudmtt X3N1YmRldiAqc3ViZGV2KSByZXQgPQo+IG52a21fYWdwX2luaXQocGNpKTsgaWYgKHJldCkgcmV0 dXJuIHJldDsgKwl9IGVsc2UgeyArCQlpZgo+IChwY2lfaXNfcGNpZShwY2ktPnBkZXYpKSArCQkJ bnZrbV9wY2llX2luaXQocGNpKTsgfQo+IAo+IGlmIChwY2ktPmZ1bmMtPmluaXQpIEBAIC0xNjAs NiArMTYzLDggQEAgbnZrbV9wY2lfbmV3Xyhjb25zdCBzdHJ1Y3QKPiBudmttX3BjaV9mdW5jICpm dW5jLCBzdHJ1Y3QgbnZrbV9kZXZpY2UgKmRldmljZSwgcGNpLT5mdW5jID0gZnVuYzsgCj4gcGNp LT5wZGV2ID0gZGV2aWNlLT5mdW5jLT5wY2koZGV2aWNlKS0+cGRldjsgcGNpLT5pcnEgPSAtMTsg Kwo+IHBjaS0+cGNpZS5sYXN0X3NwZWVkID0gLTE7ICsJcGNpLT5wY2llLmxhc3Rfd2lkdGggPSAt MTsKPiAKPiBpZiAoZGV2aWNlLT50eXBlID09IE5WS01fREVWSUNFX0FHUCkgbnZrbV9hZ3BfY3Rv cihwY2kpOyBkaWZmIC0tZ2l0Cj4gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcGNpZS5j Cj4gYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcGNpZS5jIG5ldyBmaWxlIG1vZGUgMTAw NjQ0IGluZGV4Cj4gMDAwMDAwMC4uZTYwZDBiYSAtLS0gL2Rldi9udWxsICsrKwo+IGIvZHJtL25v dXZlYXUvbnZrbS9zdWJkZXYvcGNpL3BjaWUuYyBAQCAtMCwwICsxLDE2NSBAQCArLyogKyAqCj4g Q29weXJpZ2h0IDIwMTUgS2Fyb2wgSGVyYnN0ICsgKiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwKPiBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSArICog Y29weSBvZiB0aGlzIHNvZnR3YXJlCj4gYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxl cyAodGhlICJTb2Z0d2FyZSIpLCArICogdG8gZGVhbCBpbgo+IHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uICsgKgo+IHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+IHN1 YmxpY2Vuc2UsICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g cGVybWl0Cj4gcGVyc29ucyB0byB3aG9tIHRoZSArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvCj4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiArICogKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAo+IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh bGwgYmUgaW5jbHVkZWQgaW4gKyAqIGFsbCBjb3BpZXMgb3IKPiBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUgU29mdHdhcmUuICsgKiArICogVEhFIFNPRlRXQVJFIElTCj4gUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiArICoKPiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gTUVS Q0hBTlRBQklMSVRZLCArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECj4g Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgKyAqIFRIRSBDT1BZUklHSFQgSE9M REVSKFMpIE9SCj4gQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S ICsgKiBPVEhFUiBMSUFCSUxJVFksCj4gV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCArICogQVJJU0lORwo+IEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgKyAqCj4gT1RIRVIgREVBTElO R1MgSU4gVEhFIFNPRlRXQVJFLiArICogKyAqIEF1dGhvcnM6IEthcm9sIEhlcmJzdAo+IDxnaXRA a2Fyb2xoZXJic3QuZGU+ICsgKi8gKyNpbmNsdWRlICJwcml2LmgiICsgK3N0YXRpYyBjaGFyCj4g KnBjaWVfc3BlZWRfc3RyaW5nc1tdID0geyArCSIyLjVHVC9zIiwgKwkiNS4wR1QvcyIsICsJIjgu MEdUL3MiLCAKPiArfTsgKyArc3RhdGljIGVudW0gbnZrbV9wY2llX3NwZWVkIAo+ICtwY2lfYnVz X3NwZWVkX3RvX252a21fcGNpZV9zcGVlZChlbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQpICt7ICsK PiBzd2l0Y2ggKHNwZWVkKSB7ICsJY2FzZSBQQ0lFX1NQRUVEXzJfNUdUOiArCQlyZXR1cm4KPiBO VktNX1BDSUVfU1BFRURfMl81OyArCWNhc2UgUENJRV9TUEVFRF81XzBHVDogKwkJcmV0dXJuCj4g TlZLTV9QQ0lFX1NQRUVEXzVfMDsgKwljYXNlIFBDSUVfU1BFRURfOF8wR1Q6ICsJCXJldHVybgo+ IE5WS01fUENJRV9TUEVFRF84XzA7ICsJZGVmYXVsdDogKwkJLyogWFhYIDB4MTYgaXMgOF8wLCBh c3N1bWUgMHgxNwo+IHdpbGwgYmUgMTZfMCBmb3Igbm93ICovICsJCWlmIChzcGVlZCA9PSAweDE3 KSArCQkJcmV0dXJuCj4gTlZLTV9QQ0lFX1NQRUVEXzhfMDsgKwkJcmV0dXJuIC0xOyArCX0gK30g KyArc3RhdGljIHM4IAo+ICtudmttX3BjaV9nZXRfcGNpZV92ZXJzaW9uKHN0cnVjdCBudmttX3Bj aSAqcGNpKSAreyArCWlmCj4gKCFwY2lfaXNfcGNpZShwY2ktPnBkZXYpKSArCQlyZXR1cm4gLUVO T0RFVjsgKyArCWlmCj4gKCFwY2ktPmZ1bmMtPnBjaWUudmVyc2lvbikgKwkJcmV0dXJuIC1FTk9T WVM7ICsgKwlyZXR1cm4KPiBwY2ktPmZ1bmMtPnBjaWUudmVyc2lvbihwY2kpOyArfSArICtzdGF0 aWMgczggCj4gK252a21fcGNpX3JhaXNlX3BjaWVfdmVyc2lvbihzdHJ1Y3QgbnZrbV9wY2kgKnBj aSkgK3sgKwlpbnQgcmV0LAo+IHN1cHBvcnRlZDsgKyArCWlmICghcGNpX2lzX3BjaWUocGNpLT5w ZGV2KSkgKwkJcmV0dXJuIC1FTk9ERVY7ICsgKwo+IGlmICghcGNpLT5mdW5jLT5wY2llLnNldF92 ZXJzaW9uIHx8Cj4gIXBjaS0+ZnVuYy0+cGNpZS52ZXJzaW9uX3N1cHBvcnRlZCkgKwkJcmV0dXJu IC1FTk9TWVM7ICsgKwlyZXQgPQo+IG52a21fcGNpX2dldF9wY2llX3ZlcnNpb24ocGNpKTsgKwlz dXBwb3J0ZWQgPQo+IHBjaS0+ZnVuYy0+cGNpZS52ZXJzaW9uX3N1cHBvcnRlZChwY2kpOyArCWlm IChyZXQgPT0gMSAmJiByZXQgPAo+IHN1cHBvcnRlZCkgeyArCQludmttX2RlYnVnKCZwY2ktPnN1 YmRldiwgInJhaXNpbmcgdmVyc2lvblxuIik7ICsKPiBwY2ktPmZ1bmMtPnBjaWUuc2V0X3ZlcnNp b24ocGNpLCBzdXBwb3J0ZWQpOyArCQlyZXQgPQo+IG52a21fcGNpX2dldF9wY2llX3ZlcnNpb24o cGNpKTsgKwl9ICsJcmV0dXJuIHJldCA+PSBzdXBwb3J0ZWQgPyByZXQKPiA6IC1FSU5WQUw7ICt9 ICsgK2ludCArbnZrbV9wY2llX2luaXQoc3RydWN0IG52a21fcGNpICpwY2kpICt7ICsKPiBzdHJ1 Y3QgbnZrbV9zdWJkZXYgKnN1YmRldiA9ICZwY2ktPnN1YmRldjsgKwlpbnQgcmV0OyArICsJaWYK PiAoIXBjaV9pc19wY2llKHBjaS0+cGRldikpICsJCXJldHVybiAtRU5PREVWOyArICsJLyogcmFp c2UgcGNpZQo+IHZlcnNpb24gZmlyc3QgKi8gKwlyZXQgPSBudmttX3BjaV9yYWlzZV9wY2llX3Zl cnNpb24ocGNpKTsgKwlpZgo+IChyZXQgPD0gMCkgKwkJbnZrbV9lcnJvcihzdWJkZXYsICJjb3Vs ZG4ndCByYWlzZSB2ZXJzaW9uOiAlaVxuIiwKPiByZXQpOyArICsJaWYgKHBjaS0+ZnVuYy0+cGNp ZS5pbml0KSArCQlwY2ktPmZ1bmMtPnBjaWUuaW5pdChwY2kpOyAKPiArICsJbnZrbV9pbmZvKHN1 YmRldiwgInBjaWUgdmVyc2lvbjogJWlcbiIsCj4gbnZrbV9wY2lfZ2V0X3BjaWVfdmVyc2lvbihw Y2kpKTsgKwlpZiAocGNpLT5mdW5jLT5wY2llLm1heF9zcGVlZCkgKwo+IG52a21faW5mbyhzdWJk ZXYsICJwY2llIG1heCBzcGVlZDogJXNcbiIsICsKPiBwY2llX3NwZWVkX3N0cmluZ3NbcGNpLT5m dW5jLT5wY2llLm1heF9zcGVlZChwY2kpXSk7ICsgKwlpZgo+IChwY2ktPnBjaWUubGFzdF9zcGVl ZCAhPSAtMSkgKwkJbnZrbV9wY2llX3NldF9saW5rKHBjaSwKPiBwY2ktPnBjaWUubGFzdF9zcGVl ZCwgcGNpLT5wY2llLmxhc3Rfd2lkdGgpOyArICsJcmV0dXJuIDA7ICt9ICsgCj4gK2ludCArbnZr bV9wY2llX3NldF9saW5rKHN0cnVjdCBudmttX3BjaSAqcGNpLCBlbnVtIG52a21fcGNpZV9zcGVl ZAo+IHJlcV9zcGVlZCwgKwl1OCByZXFfd2lkdGgpICt7ICsJc3RydWN0IG52a21fc3ViZGV2ICpz dWJkZXYgPQo+ICZwY2ktPnN1YmRldjsgKwllbnVtIG52a21fcGNpZV9zcGVlZCBzeXNfY3VyX3Nw ZWVkLCBzeXNfbWF4X3NwZWVkOyAKPiArCXN0cnVjdCBwY2lfYnVzICpwYnVzID0gcGNpLT5wZGV2 LT5idXM7ICsJaW50IHJldDsgKyArCWlmCj4gKCFwY2lfaXNfcGNpZShwY2ktPnBkZXYpKSArCQly ZXR1cm4gLUVOT0RFVjsgKyArCWlmCj4gKCFwY2ktPmZ1bmMtPnBjaWUuc2V0X2xpbmsgfHwgIXBj aS0+ZnVuYy0+cGNpZS52ZXJzaW9uICsJCQl8fAo+ICFwY2ktPmZ1bmMtPnBjaWUubWF4X3NwZWVk IHx8ICFwY2ktPmZ1bmMtPnBjaWUuY3VyX3NwZWVkKSArCQlyZXR1cm4KPiAtRU5PU1lTOyArICsJ bnZrbV9kZWJ1ZyhzdWJkZXYsICJwY2llIHNwZWVkICVzIHJlcXVlc3RlZFxuIiwgKwo+IHBjaWVf c3BlZWRfc3RyaW5nc1tyZXFfc3BlZWRdKTsgKyArCWlmCj4gKHBjaS0+ZnVuYy0+cGNpZS52ZXJz aW9uKHBjaSkgPCAyKSB7ICsJCW52a21fZXJyb3Ioc3ViZGV2LCAiY2FuJ3QKPiBjaGFuZ2UgbGlu ayBzcGVlZCwgIiArCQkJCSJiZWNhdXNlIGN1cnJlbnQgdmVyc2lvbiB0b28gbG93XG4iKTsgKwo+ IHJldHVybiAtRU5PREVWOyArCX0gKyArCXN5c19jdXJfc3BlZWQgPQo+IHBjaS0+ZnVuYy0+cGNp ZS5jdXJfc3BlZWQocGNpKTsgKwlzeXNfbWF4X3NwZWVkID0KPiBtaW4ocGNpX2J1c19zcGVlZF90 b19udmttX3BjaWVfc3BlZWQocGJ1cy0+bWF4X2J1c19zcGVlZCksICsKPiBwY2ktPmZ1bmMtPnBj aWUubWF4X3NwZWVkKHBjaSkpOyArICsJbnZrbV9kZWJ1ZyhzdWJkZXYsICJidXMKPiBjdXJyZW50 IHNwZWVkOiAlcyBtYXggc3BlZWQ6ICVzXG4iLCArCj4gcGNpZV9zcGVlZF9zdHJpbmdzW3N5c19j dXJfc3BlZWRdLAo+IHBjaWVfc3BlZWRfc3RyaW5nc1tzeXNfbWF4X3NwZWVkXSk7ICsgKwlpZiAo cmVxX3NwZWVkID4KPiBzeXNfbWF4X3NwZWVkKSB7ICsJCXJlcV9zcGVlZCA9IHN5c19tYXhfc3Bl ZWQ7ICsJCW52a21fd2FybihzdWJkZXYsCj4gImJ1cyBvciBjYXJkIG5vdCBmYXN0IGVub3VnaCwg ZHJvcHBpbmcgIiArCQkJCSJyZXF1ZXN0ZWQgc3BlZWQgdG8KPiAlcyIsIHBjaWVfc3BlZWRfc3Ry aW5nc1tyZXFfc3BlZWRdKTsgKwl9ICsgKwlwY2ktPnBjaWUubGFzdF9zcGVlZCA9Cj4gcmVxX3Nw ZWVkOyArCXBjaS0+cGNpZS5sYXN0X3dpZHRoID0gcmVxX3dpZHRoOyArICsJaWYgKHJlcV9zcGVl ZCA9PQo+IHN5c19jdXJfc3BlZWQpIHsgKwkJbnZrbV9kZWJ1ZyhzdWJkZXYsICJyZXF1ZXN0ZWQg c3BlZWQgbWF0Y2hlcwo+IGN1cnJlbnQgc3BlZWQgYWxyZWFkeVxuIik7ICsJCXJldHVybiByZXFf c3BlZWQ7ICsJfSArICsKPiBudmttX2RlYnVnKHN1YmRldiwgInNldCBsaW5rIHRvIHNwZWVkOiAl cyB3aWR0aDogeCVpXG4iLCArCj4gcGNpZV9zcGVlZF9zdHJpbmdzW3JlcV9zcGVlZF0sIHJlcV93 aWR0aCk7ICsJcmV0ID0KPiBwY2ktPmZ1bmMtPnBjaWUuc2V0X2xpbmsocGNpLCByZXFfc3BlZWQs IHJlcV93aWR0aCk7ICsgKwlpZiAocmV0IDwKPiAwKSArCQludmttX2Vycm9yKHN1YmRldiwgInNl dHRpbmcgbGluayBmYWlsZWQgd2l0aCByZXQ6ICVpXG4iLAo+IHJldCk7ICsgKwlyZXR1cm4gcmV0 OyArfSBkaWZmIC0tZ2l0Cj4gYS9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcHJpdi5oCj4g Yi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcHJpdi5oIGluZGV4IGNmNDZkMzguLjUzNzBm MGQgMTAwNjQ0IAo+IC0tLSBhL2RybS9ub3V2ZWF1L252a20vc3ViZGV2L3BjaS9wcml2LmggKysr Cj4gYi9kcm0vbm91dmVhdS9udmttL3N1YmRldi9wY2kvcHJpdi5oIEBAIC0xMiw2ICsxMiwxOCBA QCBzdHJ1Y3QKPiBudmttX3BjaV9mdW5jIHsgdm9pZCAoKndyMDgpKHN0cnVjdCBudmttX3BjaSAq LCB1MTYgYWRkciwgdTgKPiBkYXRhKTsgdm9pZCAoKndyMzIpKHN0cnVjdCBudmttX3BjaSAqLCB1 MTYgYWRkciwgdTMyIGRhdGEpOyB2b2lkCj4gKCptc2lfcmVhcm0pKHN0cnVjdCBudmttX3BjaSAq KTsgKyArCXN0cnVjdCB7ICsJCWludCAoKmluaXQpKHN0cnVjdAo+IG52a21fcGNpICopOyArCQlp bnQgKCpzZXRfbGluaykoc3RydWN0IG52a21fcGNpICosIGVudW0KPiBudmttX3BjaWVfc3BlZWQs IHU4KTsgKyArCQllbnVtIG52a21fcGNpZV9zcGVlZCAoKm1heF9zcGVlZCkoc3RydWN0Cj4gbnZr bV9wY2kgKik7ICsJCWVudW0gbnZrbV9wY2llX3NwZWVkICgqY3VyX3NwZWVkKShzdHJ1Y3QgbnZr bV9wY2kKPiAqKTsgKyArCQl2b2lkICgqc2V0X3ZlcnNpb24pKHN0cnVjdCBudmttX3BjaSAqLCB1 OCk7ICsJCWludAo+ICgqdmVyc2lvbikoc3RydWN0IG52a21fcGNpICopOyArCQlpbnQgKCp2ZXJz aW9uX3N1cHBvcnRlZCkoc3RydWN0Cj4gbnZrbV9wY2kgKik7ClZlcnkgbWlub3Igbml0LXBpY2s6 ICBtb3N0IG9mIHRoZSBjb2RlIHVzZXMgImJsYWhfc2V0IiBldGMgcmF0aGVyIHRoYW4KInNldF9i bGFoIiwgaXQgd291bGQgYmUgbmljZSB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlc2UgaGVyZS4K Cj4gKwl9IHBjaWU7IH07Cj4gCj4gdTMyIG52NDBfcGNpX3JkMzIoc3RydWN0IG52a21fcGNpICos IHUxNik7IEBAIC0yMiw0ICszNCw3IEBAIHZvaWQKPiBudjQwX3BjaV9tc2lfcmVhcm0oc3RydWN0 IG52a21fcGNpICopOyB2b2lkCj4gbnY0Nl9wY2lfbXNpX3JlYXJtKHN0cnVjdCBudmttX3BjaSAq KTsKPiAKPiB2b2lkIGc4NF9wY2lfaW5pdChzdHJ1Y3QgbnZrbV9wY2kgKnBjaSk7ICsgKy8qIHBj aWUgZnVuY3Rpb25zICovIAo+ICtpbnQgbnZrbV9wY2llX2luaXQoc3RydWN0IG52a21fcGNpICpw Y2kpOyAjZW5kaWYKPiAKLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0KVmVyc2lvbjogR251 UEcgdjIKCmlRSWNCQUVCQ0FBR0JRSldIWXZ2QUFvSkVIWUxuR0pRa3BIN0wza1AvUk1UM1RmRWwx RWN3bTAyUHJJeXlnTUsKdllxM3NRdlE2K1p2TUxrU0pSZVVOYk1tYXFCZm9lTm16Tyt6V2hkUGx6 T2JoNUs4bE5NeEQzNVdUU1FZbnpDcgpBQ2RvMHdjMEpCZmE1TU1JdWhVMkFtL0dmWnJMbTlsWjZt OUtlM0xNa2RtRldIeDdXR1pYMkhWV1VIU0tGTDdmCk5sVFlMUzBTTktmNmxhYjBnT2lHNVRNUHhZ Y0dteFlnQ0dkVmh0WVdmaXUzcmFUVXdmQ1FEajFxbHp0akFhOEwKbFJLL2kwS3RDTVZCMXQvZkIv dTNla2FvM1JISk5VNmZjbjUwVG1jTVM0elMzcDNMcm93WGhxQXlWSzI3ZFlseQpFRHpDNDNvOTFj WUZTTmZIdk1IOVppSUs1NEVLUUkvdlkyV3JaZEFSUndRck5ML0lPMFVrTmhoMWc4bGx3bURiCjNa ZTdoWTd4dG9tSlNrcXA3UUZmakE4SWdscG05WjdEUVAydkZxZ291cDNNVnFES0JVc2Nxb0lrdXUr SE8relIKbkIrenVEU3lOU255V3lVamFLbGJjS3VjQ0pFc0lGL0VLdzVPb3NlZ1BOZ1E2TEdFRmMr dWIrRUxrOStvelNEdQpVeFp2WWZNYitQM2pIQmFQZTJYb1hvRm5EdldVa3JINzBzb2RlWXZpaStq eVlOeG1oeUVzVlFWYktWQWZUWjlCCjFVVWttUzlNdjBQdlZlQ0J3VGhveVE2eDhmRkFxM3FrT0tH dG1lcHZ6VDh6WTBFM1BzMVJ4UUdRaXBQRHJ0ZFYKVGo3VkVaZEhiUjdXVW92Mnh6M3BraDNmMk1F aGNrKzhpZFlSODhKUjZpanpieDdCeHozNmd0aDYyNFJTeHUrTApWVjN0NnY2MHByMWhPMjVYdnor Rwo9ekx5dgotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KTm91dmVhdSBtYWlsaW5nIGxpc3QKTm91dmVhdUBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL25vdXZlYXUK