From mboxrd@z Thu Jan 1 00:00:00 1970 From: Flora Cui Subject: Re: [PATCH 2/4] drm/amd/powerplay: refine powerplay code for CZ/ST Date: Tue, 5 Sep 2017 17:13:08 +0800 Message-ID: <20170905091306.GA22316@flora> References: <1504574968-23945-1-git-send-email-Rex.Zhu@amd.com> <1504574968-23945-2-git-send-email-Rex.Zhu@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1504574968-23945-2-git-send-email-Rex.Zhu-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: Rex Zhu Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org T24gVHVlLCBTZXAgMDUsIDIwMTcgYXQgMDk6Mjk6MjZBTSArMDgwMCwgUmV4IFpodSB3cm90ZToK PiAxLiBhZGQgZnVuY3Rpb24gcG9pbnRzIGluc3RhbmQgb2YgY3JlYXQgZnVuY3Rpb24gdGFibGVz Cj4gMi4gaW1wbGVtZW50IHN0b3AgZHBtIHRhc2tzIGZvciBDWi9TVApiZXR0ZXIgdG8gc3BsaXQg dG8gMiBwYXRjaGVzLgoKPiAKPiBDaGFuZ2UtSWQ6IEliZTZmYzkyYjk4OWJhMTI1ZGEzNDg1N2Nl OGIwNTZlOGI2OTliNDFiCj4gU2lnbmVkLW9mZi1ieTogUmV4IFpodSA8UmV4LlpodUBhbWQuY29t Pgo+IC0tLQo+ICAuLi4vZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvY3pfY2xvY2twb3dlcmdhdGlu Zy5jICB8ICAzMCAtLQo+ICBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9o d21nci5jICAgICB8IDM3NyArKysrKysrKystLS0tLS0tLS0tLS0KPiAgMiBmaWxlcyBjaGFuZ2Vk LCAxNTkgaW5zZXJ0aW9ucygrKSwgMjQ4IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9jbG9ja3Bvd2VyZ2F0aW5nLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9jbG9ja3Bvd2VyZ2F0aW5n LmMKPiBpbmRleCBiMzM5MzVmLi41YmFmMWE0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6X2Nsb2NrcG93ZXJnYXRpbmcuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6X2Nsb2NrcG93ZXJnYXRpbmcuYwo+IEBA IC0xMDMsMTYgKzEwMyw2IEBAIGludCBjel9waG1fdW5nYXRlX2FsbF9kaXNwbGF5X3BoeXMoc3Ry dWN0IHBwX2h3bWdyICpod21ncikKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50 IGN6X3RmX3V2ZF9wb3dlcl9nYXRpbmdfaW5pdGlhbGl6ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy LCB2b2lkICpwSW5wdXQsIHZvaWQgKnBPdXRwdXQsIHZvaWQgKnBTdG9yYWdlLCBpbnQgUmVzdWx0 KQo+IC17Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCBjel90Zl92Y2VfcG93 ZXJfZ2F0aW5nX2luaXRpYWxpemUoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqcElucHV0 LCB2b2lkICpwT3V0cHV0LCB2b2lkICpwU3RvcmFnZSwgaW50IFJlc3VsdCkKPiAtewo+IC0JcmV0 dXJuIDA7Cj4gLX0KPiAtCj4gIGludCBjel9lbmFibGVfZGlzYWJsZV91dmRfZHBtKHN0cnVjdCBw cF9od21nciAqaHdtZ3IsIGJvb2wgZW5hYmxlKQo+ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3IgKmN6 X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7Cj4gQEAgLTIyMSwy MyArMjExLDMgQEAgaW50IGN6X2RwbV9wb3dlcmdhdGVfdmNlKHN0cnVjdCBwcF9od21nciAqaHdt Z3IsIGJvb2wgYmdhdGUpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtCj4gLXN0YXRpYyBjb25z dCBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtIGN6X2VuYWJsZV9jbG9ja19wb3dlcl9nYXRp bmdzX2xpc3RbXSA9IHsKPiAtCS8qd2UgZG9uJ3QgbmVlZCBhbiBleGl0IHRhYmxlIGhlcmUsIGJl Y2F1c2UgdGhlcmUgaXMgb25seSBEMyBjb2xkIG9uIEt2Ki8KPiAtCXsKPiAtCSAgLmlzRnVuY3Rp b25OZWVkZWRJblJ1bnRpbWVUYWJsZSA9IHBobV9jZl93YW50X3V2ZF9wb3dlcl9nYXRpbmcsCj4g LQkgIC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfdXZkX3Bvd2VyX2dhdGluZ19pbml0aWFsaXplCj4g LQl9LAo+IC0Jewo+IC0JICAuaXNGdW5jdGlvbk5lZWRlZEluUnVudGltZVRhYmxlID0gcGhtX2Nm X3dhbnRfdmNlX3Bvd2VyX2dhdGluZywKPiAtCSAgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl92Y2Vf cG93ZXJfZ2F0aW5nX2luaXRpYWxpemUKPiAtCX0sCj4gLQkvKiB0byBkbyB7IE5VTEwsIGN6X3Rm X3hkbWFfcG93ZXJfZ2F0aW5nX2VuYWJsZSB9LCAqLwo+IC0JeyB9Cj4gLX07Cj4gLQo+IC1jb25z dCBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9oZWFkZXIgY3pfcGhtX2VuYWJsZV9jbG9ja19wb3dl cl9nYXRpbmdzX21hc3RlciA9IHsKPiAtCTAsCj4gLQlQSE1fTWFzdGVyVGFibGVGbGFnX05vbmUs Cj4gLQljel9lbmFibGVfY2xvY2tfcG93ZXJfZ2F0aW5nc19saXN0Cj4gLX07Cj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL2N6X2h3bWdyLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9jel9od21nci5jCj4gaW5kZXggN2YzYjI0 Zi4uN2VmZTAwOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9o d21nci9jel9od21nci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdt Z3IvY3pfaHdtZ3IuYwo+IEBAIC00NDAsMTQgKzQ0MCw3IEBAIHN0YXRpYyBpbnQgY3pfY29uc3Ry dWN0X2Jvb3Rfc3RhdGUoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgCXJldHVybiAwOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgaW50IGN6X3RmX3Jlc2V0X2FjdGl2ZV9wcm9jZXNzX21hc2soc3RydWN0 IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gLQkJCQkJdm9pZCAqb3V0cHV0LCB2b2lk ICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+IC17Cj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3Rh dGljIGludCBjel90Zl91cGxvYWRfcHB0YWJsZV90b19zbXUoc3RydWN0IHBwX2h3bWdyICpod21n ciwgdm9pZCAqaW5wdXQsCj4gLQkJCQkgICAgICAgdm9pZCAqb3V0cHV0LCB2b2lkICpzdG9yYWdl LCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgaW50IGN6X3VwbG9hZF9wcHRhYmxlX3RvX3NtdShzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlzdHJ1Y3QgU01VOF9GdXNpb25fQ2xrVGFibGUg KmNsb2NrX3RhYmxlOwo+ICAJaW50IHJldDsKPiBAQCAtNTY2LDggKzU1OSw3IEBAIHN0YXRpYyBp bnQgY3pfdGZfdXBsb2FkX3BwdGFibGVfdG9fc211KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZv aWQgKmlucHV0LAo+ICAJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBjel90Zl9p bml0X3NjbGtfbGltaXQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gLQkJ CQkgdm9pZCAqb3V0cHV0LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgaW50 IGN6X2luaXRfc2Nsa19saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlzdHJ1 Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2Vu ZCk7Cj4gIAlzdHJ1Y3QgcGhtX2Nsb2NrX3ZvbHRhZ2VfZGVwZW5kZW5jeV90YWJsZSAqdGFibGUg PQo+IEBAIC01OTMsOCArNTg1LDcgQEAgc3RhdGljIGludCBjel90Zl9pbml0X3NjbGtfbGltaXQo c3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ ICAKPiAtc3RhdGljIGludCBjel90Zl9pbml0X3V2ZF9saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3 bWdyLCB2b2lkICppbnB1dCwKPiAtCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50 IHJlc3VsdCkKPiArc3RhdGljIGludCBjel9pbml0X3V2ZF9saW1pdChzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyKQo+ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9o d21nciAqKShod21nci0+YmFja2VuZCk7Cj4gIAlzdHJ1Y3QgcGhtX3V2ZF9jbG9ja192b2x0YWdl X2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KPiBAQCAtNjIxLDggKzYxMiw3IEBAIHN0YXRpYyBp bnQgY3pfdGZfaW5pdF91dmRfbGltaXQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5w dXQsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBjel90Zl9pbml0X3ZjZV9s aW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKPiAtCQkJCXZvaWQgKm91 dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKPiArc3RhdGljIGludCBjel9pbml0X3Zj ZV9saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3Ig KmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7Cj4gIAlzdHJ1 Y3QgcGhtX3ZjZV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KPiBAQCAt NjQ5LDggKzYzOSw3IEBAIHN0YXRpYyBpbnQgY3pfdGZfaW5pdF92Y2VfbGltaXQoc3RydWN0IHBw X2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3Rh dGljIGludCBjel90Zl9pbml0X2FjcF9saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lk ICppbnB1dCwKPiAtCQkJCXZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkK PiArc3RhdGljIGludCBjel9pbml0X2FjcF9saW1pdChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKSho d21nci0+YmFja2VuZCk7Cj4gIAlzdHJ1Y3QgcGhtX2FjcF9jbG9ja192b2x0YWdlX2RlcGVuZGVu Y3lfdGFibGUgKnRhYmxlID0KPiBAQCAtNjc2LDggKzY2NSw3IEBAIHN0YXRpYyBpbnQgY3pfdGZf aW5pdF9hY3BfbGltaXQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gIAly ZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBjel90Zl9pbml0X3Bvd2VyX2dhdGVfc3Rh dGUoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gLQkJCQl2b2lkICpvdXRw dXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCj4gK3N0YXRpYyB2b2lkIGN6X2luaXRfcG93 ZXJfZ2F0ZV9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlzdHJ1Y3QgY3pf aHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7Cj4g IAo+IEBAIC02ODYsMjIgKzY3NCwxNiBAQCBzdGF0aWMgaW50IGN6X3RmX2luaXRfcG93ZXJfZ2F0 ZV9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKPiAgCWN6X2h3bWdy LT5zYW11X3Bvd2VyX2dhdGVkID0gZmFsc2U7Cj4gIAljel9od21nci0+YWNwX3Bvd2VyX2dhdGVk ID0gZmFsc2U7Cj4gIAljel9od21nci0+cGdhY3Bpbml0ID0gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4g MDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBjel90Zl9pbml0X3NjbGtfdGhyZXNob2xkKHN0cnVj dCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAo+IC0JCQkJdm9pZCAqb3V0cHV0LCB2b2lk ICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgdm9pZCBjel9pbml0X3NjbGtfdGhyZXNo b2xkKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIHsKPiAgCXN0cnVjdCBjel9od21nciAqY3pf aHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKPiAgCj4gIAljel9o d21nci0+bG93X3NjbGtfaW50ZXJydXB0X3RocmVzaG9sZCA9IDA7Cj4gLQo+IC0JcmV0dXJuIDA7 Cj4gIH0KPiAtc3RhdGljIGludCBjel90Zl91cGRhdGVfc2Nsa19saW1pdChzdHJ1Y3QgcHBfaHdt Z3IgKmh3bWdyLAo+IC0JCQkJCXZvaWQgKmlucHV0LCB2b2lkICpvdXRwdXQsCj4gLQkJCQkJdm9p ZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKPiArCj4gK3N0YXRpYyBpbnQgY3pfdXBkYXRlX3NjbGtf bGltaXQoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgewo+ICAJc3RydWN0IGN6X2h3bWdyICpj el9od21nciA9IChzdHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQpOwo+ICAJc3RydWN0 IHBobV9jbG9ja192b2x0YWdlX2RlcGVuZGVuY3lfdGFibGUgKnRhYmxlID0KPiBAQCAtNzc0LDkg Kzc1Niw3IEBAIHN0YXRpYyBpbnQgY3pfdGZfdXBkYXRlX3NjbGtfbGltaXQoc3RydWN0IHBwX2h3 bWdyICpod21nciwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGN6X3RmX3Nl dF9kZWVwX3NsZWVwX3NjbGtfdGhyZXNob2xkKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gLQkJ CQkJdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKPiAtCQkJCQl2b2lkICpzdG9yYWdlLCBpbnQg cmVzdWx0KQo+ICtzdGF0aWMgaW50IGN6X3NldF9kZWVwX3NsZWVwX3NjbGtfdGhyZXNob2xkKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIHsKPiAgCWlmIChwaG1fY2FwX2VuYWJsZWQoaHdtZ3It PnBsYXRmb3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLAo+ICAJCQkJUEhNX1BsYXRmb3JtQ2Fw c19TY2xrRGVlcFNsZWVwKSkgewo+IEBAIC03OTQsOSArNzc0LDcgQEAgc3RhdGljIGludCBjel90 Zl9zZXRfZGVlcF9zbGVlcF9zY2xrX3RocmVzaG9sZChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAo+ ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgY3pfdGZfc2V0X3dhdGVybWFya190 aHJlc2hvbGQoc3RydWN0IHBwX2h3bWdyICpod21nciwKPiAtCQkJCQl2b2lkICppbnB1dCwgdm9p ZCAqb3V0cHV0LAo+IC0JCQkJCXZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCj4gK3N0YXRpYyBp bnQgY3pfc2V0X3dhdGVybWFya190aHJlc2hvbGQoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAg ewo+ICAJc3RydWN0IGN6X2h3bWdyICpjel9od21nciA9Cj4gIAkJCQkgIChzdHJ1Y3QgY3pfaHdt Z3IgKikoaHdtZ3ItPmJhY2tlbmQpOwo+IEBAIC04MDgsNjMgKzc4Niw3MiBAQCBzdGF0aWMgaW50 IGN6X3RmX3NldF93YXRlcm1hcmtfdGhyZXNob2xkKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4g IAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBjel90Zl9zZXRfZW5hYmxlZF9sZXZl bHMoc3RydWN0IHBwX2h3bWdyICpod21nciwKPiAtCQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0 cHV0LAo+IC0JCQkJCXZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCj4gK3N0YXRpYyBpbnQgY3pf bmJkcG1fcHN0YXRlX2VuYWJsZV9kaXNhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIGJvb2wg ZW5hYmxlLCBib29sIGxvY2spCj4gIHsKPiArCXN0cnVjdCBjel9od21nciAqaHdfZGF0YSA9IChz dHJ1Y3QgY3pfaHdtZ3IgKikoaHdtZ3ItPmJhY2tlbmQpOwo+ICsKPiArCWlmIChod19kYXRhLT5p c19uYl9kcG1fZW5hYmxlZCkgewo+ICsJCWlmIChlbmFibGUpIHsKPiArCQkJUFBfREJHX0xPRygi ZW5hYmxlIExvdyBNZW1vcnkgUFN0YXRlLlxuIik7Cj4gKwo+ICsJCQlyZXR1cm4gc211bV9zZW5k X21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNtdW1nciwKPiArCQkJCQkJUFBTTUNf TVNHX0VuYWJsZUxvd01lbW9yeVBzdGF0ZSwKPiArCQkJCQkJKGxvY2sgPyAxIDogMCkpOwo+ICsJ CX0gZWxzZSB7Cj4gKwkJCVBQX0RCR19MT0coImRpc2FibGUgTG93IE1lbW9yeSBQU3RhdGUuXG4i KTsKPiArCj4gKwkJCXJldHVybiBzbXVtX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlciho d21nci0+c211bWdyLAo+ICsJCQkJCQlQUFNNQ19NU0dfRGlzYWJsZUxvd01lbW9yeVBzdGF0ZSwK PiArCQkJCQkJKGxvY2sgPyAxIDogMCkpOwo+ICsJCX0KPiArCX0KPiArCj4gIAlyZXR1cm4gMDsK PiAgfQo+ICAKPiAtCj4gLXN0YXRpYyBpbnQgY3pfdGZfZW5hYmxlX25iX2RwbShzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLAo+IC0JCQkJCXZvaWQgKmlucHV0LCB2b2lkICpvdXRwdXQsCj4gLQkJCQkJ dm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKPiArc3RhdGljIGludCBjel9kaXNhYmxlX25iX2Rw bShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlpbnQgcmV0ID0gMDsKPiAgCj4gIAlz dHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFj a2VuZCk7Cj4gIAl1bnNpZ25lZCBsb25nIGRwbV9mZWF0dXJlcyA9IDA7Cj4gIAo+IC0JaWYgKCFj el9od21nci0+aXNfbmJfZHBtX2VuYWJsZWQpIHsKPiAtCQlQUF9EQkdfTE9HKCJlbmFibGluZyBB TEwgU01VIGZlYXR1cmVzLlxuIik7Cj4gKwlpZiAoY3pfaHdtZ3ItPmlzX25iX2RwbV9lbmFibGVk KSB7Cj4gKwkJY3pfbmJkcG1fcHN0YXRlX2VuYWJsZV9kaXNhYmxlKGh3bWdyLCB0cnVlLCB0cnVl KTsKPiAgCQlkcG1fZmVhdHVyZXMgfD0gTkJfRFBNX01BU0s7Cj4gIAkJcmV0ID0gc211bV9zZW5k X21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoCj4gIAkJCQkJCQkgIGh3bWdyLT5zbXVtZ3IsCj4g LQkJCQkJCQkgIFBQU01DX01TR19FbmFibGVBbGxTbXVGZWF0dXJlcywKPiArCQkJCQkJCSAgUFBT TUNfTVNHX0Rpc2FibGVBbGxTbXVGZWF0dXJlcywKPiAgCQkJCQkJCSAgZHBtX2ZlYXR1cmVzKTsK PiAgCQlpZiAocmV0ID09IDApCj4gLQkJCWN6X2h3bWdyLT5pc19uYl9kcG1fZW5hYmxlZCA9IHRy dWU7Cj4gKwkJCWN6X2h3bWdyLT5pc19uYl9kcG1fZW5hYmxlZCA9IGZhbHNlOwo+ICAJfQo+ICAK PiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgY3pfbmJkcG1fcHN0YXRlX2Vu YWJsZV9kaXNhYmxlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIGJvb2wgZW5hYmxlLCBib29sIGxv Y2spCj4gK3N0YXRpYyBpbnQgY3pfZW5hYmxlX25iX2RwbShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy KQo+ICB7Cj4gLQlzdHJ1Y3QgY3pfaHdtZ3IgKmh3X2RhdGEgPSAoc3RydWN0IGN6X2h3bWdyICop KGh3bWdyLT5iYWNrZW5kKTsKPiAtCj4gLQlpZiAoaHdfZGF0YS0+aXNfbmJfZHBtX2VuYWJsZWQp IHsKPiAtCQlpZiAoZW5hYmxlKSB7Cj4gLQkJCVBQX0RCR19MT0coImVuYWJsZSBMb3cgTWVtb3J5 IFBTdGF0ZS5cbiIpOwo+ICsJaW50IHJldCA9IDA7Cj4gIAo+IC0JCQlyZXR1cm4gc211bV9zZW5k X21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNtdW1nciwKPiAtCQkJCQkJUFBTTUNf TVNHX0VuYWJsZUxvd01lbW9yeVBzdGF0ZSwKPiAtCQkJCQkJKGxvY2sgPyAxIDogMCkpOwo+IC0J CX0gZWxzZSB7Cj4gLQkJCVBQX0RCR19MT0coImRpc2FibGUgTG93IE1lbW9yeSBQU3RhdGUuXG4i KTsKPiArCXN0cnVjdCBjel9od21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3 bWdyLT5iYWNrZW5kKTsKPiArCXVuc2lnbmVkIGxvbmcgZHBtX2ZlYXR1cmVzID0gMDsKPiAgCj4g LQkJCXJldHVybiBzbXVtX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihod21nci0+c211 bWdyLAo+IC0JCQkJCQlQUFNNQ19NU0dfRGlzYWJsZUxvd01lbW9yeVBzdGF0ZSwKPiAtCQkJCQkJ KGxvY2sgPyAxIDogMCkpOwo+IC0JCX0KPiArCWlmICghY3pfaHdtZ3ItPmlzX25iX2RwbV9lbmFi bGVkKSB7Cj4gKwkJUFBfREJHX0xPRygiZW5hYmxpbmcgQUxMIFNNVSBmZWF0dXJlcy5cbiIpOwo+ ICsJCWRwbV9mZWF0dXJlcyB8PSBOQl9EUE1fTUFTSzsKPiArCQlyZXQgPSBzbXVtX3NlbmRfbXNn X3RvX3NtY193aXRoX3BhcmFtZXRlcigKPiArCQkJCQkJCSAgaHdtZ3ItPnNtdW1nciwKPiArCQkJ CQkJCSAgUFBTTUNfTVNHX0VuYWJsZUFsbFNtdUZlYXR1cmVzLAo+ICsJCQkJCQkJICBkcG1fZmVh dHVyZXMpOwo+ICsJCWlmIChyZXQgPT0gMCkKPiArCQkJY3pfaHdtZ3ItPmlzX25iX2RwbV9lbmFi bGVkID0gdHJ1ZTsKPiAgCX0KPiAgCj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiByZXQ7Cj4gIH0K PiAgCj4gLXN0YXRpYyBpbnQgY3pfdGZfdXBkYXRlX2xvd19tZW1fcHN0YXRlKHN0cnVjdCBwcF9o d21nciAqaHdtZ3IsCj4gLQkJCQkJdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKPiAtCQkJCQl2 b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgaW50IGN6X3VwZGF0ZV9sb3dfbWVt X3BzdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBjb25zdCB2b2lkICppbnB1dCkKPiAgewo+ ICAJYm9vbCBkaXNhYmxlX3N3aXRjaDsKPiAgCWJvb2wgZW5hYmxlX2xvd19tZW1fc3RhdGU7Cj4g QEAgLTg4Niw2NCArODczLDY0IEBAIHN0YXRpYyBpbnQgY3pfdGZfdXBkYXRlX2xvd19tZW1fcHN0 YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2l0ZW0gY3pfc2V0X3Bvd2VyX3N0YXRl X2xpc3RbXSA9IHsKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl91cGRhdGVfc2Nsa19saW1p dCB9LAo+IC0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3NldF9kZWVwX3NsZWVwX3NjbGtfdGhy ZXNob2xkIH0sCj4gLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfc2V0X3dhdGVybWFya190aHJl c2hvbGQgfSwKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9zZXRfZW5hYmxlZF9sZXZlbHMg fSwKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9lbmFibGVfbmJfZHBtIH0sCj4gLQl7IC50 YWJsZUZ1bmN0aW9uID0gY3pfdGZfdXBkYXRlX2xvd19tZW1fcHN0YXRlIH0sCj4gLQl7IH0KPiAt fTsKPiArc3RhdGljIGludCBjel9zZXRfcG93ZXJfc3RhdGVfdGFza3Moc3RydWN0IHBwX2h3bWdy ICpod21nciwgY29uc3Qgdm9pZCAqaW5wdXQpCj4gK3sKPiArCWludCByZXQgPSAwOwo+ICAKPiAt c3RhdGljIGNvbnN0IHN0cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2hlYWRlciBjel9zZXRfcG93ZXJf c3RhdGVfbWFzdGVyID0gewo+IC0JMCwKPiAtCVBITV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwKPiAt CWN6X3NldF9wb3dlcl9zdGF0ZV9saXN0Cj4gLX07Cj4gKwljel91cGRhdGVfc2Nsa19saW1pdCho d21ncik7Cj4gKwljel9zZXRfZGVlcF9zbGVlcF9zY2xrX3RocmVzaG9sZChod21ncik7Cj4gKwlj el9zZXRfd2F0ZXJtYXJrX3RocmVzaG9sZChod21ncik7Cj4gKwlyZXQgPSBjel9lbmFibGVfbmJf ZHBtKGh3bWdyKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCWN6X3VwZGF0ZV9s b3dfbWVtX3BzdGF0ZShod21nciwgaW5wdXQpOwo+ICAKPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBw aG1fbWFzdGVyX3RhYmxlX2l0ZW0gY3pfc2V0dXBfYXNpY19saXN0W10gPSB7Cj4gLQl7IC50YWJs ZUZ1bmN0aW9uID0gY3pfdGZfcmVzZXRfYWN0aXZlX3Byb2Nlc3NfbWFzayB9LAo+IC0JeyAudGFi bGVGdW5jdGlvbiA9IGN6X3RmX3VwbG9hZF9wcHRhYmxlX3RvX3NtdSB9LAo+IC0JeyAudGFibGVG dW5jdGlvbiA9IGN6X3RmX2luaXRfc2Nsa19saW1pdCB9LAo+IC0JeyAudGFibGVGdW5jdGlvbiA9 IGN6X3RmX2luaXRfdXZkX2xpbWl0IH0sCj4gLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfaW5p dF92Y2VfbGltaXQgfSwKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9pbml0X2FjcF9saW1p dCB9LAo+IC0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX2luaXRfcG93ZXJfZ2F0ZV9zdGF0ZSB9 LAo+IC0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX2luaXRfc2Nsa190aHJlc2hvbGQgfSwKPiAt CXsgfQo+ICsJcmV0dXJuIDA7Cj4gIH07Cj4gIAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHBobV9t YXN0ZXJfdGFibGVfaGVhZGVyIGN6X3NldHVwX2FzaWNfbWFzdGVyID0gewo+IC0JMCwKPiAtCVBI TV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwKPiAtCWN6X3NldHVwX2FzaWNfbGlzdAo+IC19Owo+ICAK PiAtc3RhdGljIGludCBjel90Zl9wb3dlcl91cF9kaXNwbGF5X2Nsb2NrX3N5c19wbGwoc3RydWN0 IHBwX2h3bWdyICpod21nciwKPiAtCQkJCQl2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0LAo+IC0J CQkJCXZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCj4gK3N0YXRpYyBpbnQgY3pfc2V0dXBfYXNp Y190YXNrKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJ cmV0ID0gY3pfdXBsb2FkX3BwdGFibGVfdG9fc211KGh3bWdyKTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCXJldCA9IGN6X2luaXRfc2Nsa19saW1pdChod21ncik7Cj4gKwlpZiAo cmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBjel9pbml0X3V2ZF9saW1pdChod21ncik7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBjel9pbml0X3ZjZV9saW1p dChod21ncik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBjel9pbml0 X2FjcF9saW1pdChod21ncik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ Y3pfaW5pdF9wb3dlcl9nYXRlX3N0YXRlKGh3bWdyKTsKPiArCWN6X2luaXRfc2Nsa190aHJlc2hv bGQoaHdtZ3IpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjel9w b3dlcl91cF9kaXNwbGF5X2Nsb2NrX3N5c19wbGwoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAg ewo+ICAJc3RydWN0IGN6X2h3bWdyICpod19kYXRhID0gKHN0cnVjdCBjel9od21nciAqKShod21n ci0+YmFja2VuZCk7Cj4gKwo+ICAJaHdfZGF0YS0+ZGlzcF9jbGtfYnlwYXNzX3BlbmRpbmcgPSBm YWxzZTsKPiAgCWh3X2RhdGEtPmRpc3BfY2xrX2J5cGFzcyA9IGZhbHNlOwo+IC0KPiAtCXJldHVy biAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGN6X3RmX2NsZWFyX25iX2RwbV9mbGFnKHN0cnVj dCBwcF9od21nciAqaHdtZ3IsCj4gLQkJCQkJdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKPiAt CQkJCQl2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgdm9pZCBjel9jbGVhcl9u Yl9kcG1fZmxhZyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdt Z3IgKmh3X2RhdGEgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsKPiAtCWh3 X2RhdGEtPmlzX25iX2RwbV9lbmFibGVkID0gZmFsc2U7Cj4gIAo+IC0JcmV0dXJuIDA7Cj4gKwlo d19kYXRhLT5pc19uYl9kcG1fZW5hYmxlZCA9IGZhbHNlOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50 IGN6X3RmX3Jlc2V0X2NjNl9kYXRhKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gLQkJCQkJdm9p ZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKPiAtCQkJCQl2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0 KQo+ICtzdGF0aWMgdm9pZCBjel9yZXNldF9jYzZfZGF0YShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy KQo+ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3IgKmh3X2RhdGEgPSAoc3RydWN0IGN6X2h3bWdyICop KGh3bWdyLT5iYWNrZW5kKTsKPiAgCj4gQEAgLTk1MSw1MCArOTM4LDYwIEBAIHN0YXRpYyBpbnQg Y3pfdGZfcmVzZXRfY2M2X2RhdGEoc3RydWN0IHBwX2h3bWdyICpod21nciwKPiAgCWh3X2RhdGEt PmNjNl9zZXR0aW5ncy5jcHVfcHN0YXRlX3NlcGFyYXRpb25fdGltZSA9IDA7Cj4gIAlod19kYXRh LT5jYzZfc2V0dGluZ3MuY3B1X2NjNl9kaXNhYmxlID0gZmFsc2U7Cj4gIAlod19kYXRhLT5jYzZf c2V0dGluZ3MuY3B1X3BzdGF0ZV9kaXNhYmxlID0gZmFsc2U7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJsZV9pdGVtIGN6X3Bv d2VyX2Rvd25fYXNpY19saXN0W10gPSB7Cj4gLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfcG93 ZXJfdXBfZGlzcGxheV9jbG9ja19zeXNfcGxsIH0sCj4gLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pf dGZfY2xlYXJfbmJfZHBtX2ZsYWcgfSwKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9yZXNl dF9jYzZfZGF0YSB9LAo+IC0JeyB9Cj4gLX07Cj4gLQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHBo bV9tYXN0ZXJfdGFibGVfaGVhZGVyIGN6X3Bvd2VyX2Rvd25fYXNpY19tYXN0ZXIgPSB7Cj4gLQkw LAo+IC0JUEhNX01hc3RlclRhYmxlRmxhZ19Ob25lLAo+IC0JY3pfcG93ZXJfZG93bl9hc2ljX2xp c3QKPiArc3RhdGljIGludCBjel9wb3dlcl9vZmZfYXNpYyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy KQo+ICt7Cj4gKwljel9wb3dlcl91cF9kaXNwbGF5X2Nsb2NrX3N5c19wbGwoaHdtZ3IpOwo+ICsJ Y3pfY2xlYXJfbmJfZHBtX2ZsYWcoaHdtZ3IpOwo+ICsJY3pfcmVzZXRfY2M2X2RhdGEoaHdtZ3Ip Owo+ICsJcmV0dXJuIDA7Cj4gIH07Cj4gIAo+IC1zdGF0aWMgaW50IGN6X3RmX3Byb2dyYW1fdm90 aW5nX2NsaWVudHMoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gLQkJCQl2 b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCj4gK3N0YXRpYyB2b2lkIGN6 X3Byb2dyYW1fdm90aW5nX2NsaWVudHMoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgewo+ICAJ UEhNQ1pfV1JJVEVfU01DX1JFR0lTVEVSKGh3bWdyLT5kZXZpY2UsIENHX0ZSRVFfVFJBTl9WT1RJ TkdfMCwKPiAgCQkJCVBQQ1pfVk9USU5HUklHSFRTQ0xJRU5UU19ERkxUMCk7Cj4gLQlyZXR1cm4g MDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBjel90Zl9zdGFydF9kcG0oc3RydWN0IHBwX2h3bWdy ICpod21nciwgdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKPiAtCQkJICAgdm9pZCAqc3RvcmFn ZSwgaW50IHJlc3VsdCkKPiArc3RhdGljIHZvaWQgY3pfY2xlYXJfdm90aW5nX2NsaWVudHMoc3Ry dWN0IHBwX2h3bWdyICpod21ncikKPiArewo+ICsJUEhNQ1pfV1JJVEVfU01DX1JFR0lTVEVSKGh3 bWdyLT5kZXZpY2UsIENHX0ZSRVFfVFJBTl9WT1RJTkdfMCwgMCk7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgY3pfc3RhcnRfZHBtKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIHsKPiAtCWludCBy ZXMgPSAweGZmOwo+ICsJaW50IHJldCA9IDA7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdy ID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7Cj4gIAl1bnNpZ25lZCBsb25n IGRwbV9mZWF0dXJlcyA9IDA7Cj4gIAo+ICAJY3pfaHdtZ3ItPmRwbV9mbGFncyB8PSBEUE1GbGFn c19TQ0xLX0VuYWJsZWQ7Cj4gIAlkcG1fZmVhdHVyZXMgfD0gU0NMS19EUE1fTUFTSzsKPiAgCj4g LQlyZXMgPSBzbXVtX3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihod21nci0+c211bWdy LAo+ICsJcmV0ID0gc211bV9zZW5kX21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNt dW1nciwKPiAgCQkJCVBQU01DX01TR19FbmFibGVBbGxTbXVGZWF0dXJlcywKPiAgCQkJCWRwbV9m ZWF0dXJlcyk7Cj4gIAo+IC0JcmV0dXJuIHJlczsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgY3pfc3RvcF9kcG0oc3RydWN0IHBwX2h3bWdyICpod21ncikKPiArewo+ICsJ aW50IHJldCA9IDA7Cj4gKwlzdHJ1Y3QgY3pfaHdtZ3IgKmN6X2h3bWdyID0gKHN0cnVjdCBjel9o d21nciAqKShod21nci0+YmFja2VuZCk7Cj4gKwl1bnNpZ25lZCBsb25nIGRwbV9mZWF0dXJlcyA9 IDA7Cj4gKwo+ICsJaWYgKGN6X2h3bWdyLT5kcG1fZmxhZ3MgJiBEUE1GbGFnc19TQ0xLX0VuYWJs ZWQpIHsKPiArCQlkcG1fZmVhdHVyZXMgfD0gU0NMS19EUE1fTUFTSzsKPiArCQljel9od21nci0+ ZHBtX2ZsYWdzICY9IH5EUE1GbGFnc19TQ0xLX0VuYWJsZWQ7Cj4gKwkJcmV0ID0gc211bV9zZW5k X21zZ190b19zbWNfd2l0aF9wYXJhbWV0ZXIoaHdtZ3ItPnNtdW1nciwKPiArCQkJCQlQUFNNQ19N U0dfRGlzYWJsZUFsbFNtdUZlYXR1cmVzLAo+ICsJCQkJCWRwbV9mZWF0dXJlcyk7Cj4gKwl9Cj4g KwlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGN6X3RmX3Byb2dyYW1fYm9vdHVw X3N0YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAo+IC0JCQkJdm9pZCAq b3V0cHV0LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgaW50IGN6X3Byb2dy YW1fYm9vdHVwX3N0YXRlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIHsKPiAgCXN0cnVjdCBj el9od21nciAqY3pfaHdtZ3IgPSAoc3RydWN0IGN6X2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsK PiAgCj4gQEAgLTEwMTYsMTMgKzEwMTMsMTEgQEAgc3RhdGljIGludCBjel90Zl9wcm9ncmFtX2Jv b3R1cF9zdGF0ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwKPiAgCXJldHVy biAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGN6X3RmX3Jlc2V0X2FjcF9ib290X2xldmVsKHN0 cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LAo+IC0JCQkJdm9pZCAqb3V0cHV0LCB2 b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQo+ICtzdGF0aWMgdm9pZCBjel9yZXNldF9hY3BfYm9v dF9sZXZlbChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlzdHJ1Y3QgY3pfaHdtZ3Ig KmN6X2h3bWdyID0gKHN0cnVjdCBjel9od21nciAqKShod21nci0+YmFja2VuZCk7Cj4gIAo+ICAJ Y3pfaHdtZ3ItPmFjcF9ib290X2xldmVsID0gMHhmZjsKPiAtCXJldHVybiAwOwo+ICB9Cj4gIAo+ ICBzdGF0aWMgYm9vbCBjel9kcG1fY2hlY2tfc211X2ZlYXR1cmVzKHN0cnVjdCBwcF9od21nciAq aHdtZ3IsCj4gQEAgLTEwMzgsNjAgKzEwMzMsNDUgQEAgc3RhdGljIGJvb2wgY3pfZHBtX2NoZWNr X3NtdV9mZWF0dXJlcyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLAo+ICAJCQlyZXR1cm4gdHJ1ZTsK PiAgCX0KPiAgCj4gLQlyZXR1cm4gcmVzdWx0Owo+ICsJcmV0dXJuIGZhbHNlOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgaW50IGN6X3RmX2NoZWNrX2Zvcl9kcG1fZGlzYWJsZWQoc3RydWN0IHBwX2h3bWdy ICpod21nciwgdm9pZCAqaW5wdXQsCj4gLQkJCQl2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2Us IGludCByZXN1bHQpCj4gK3N0YXRpYyBib29sIGN6X2NoZWNrX2Zvcl9kcG1fZW5hYmxlZChzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+ICB7Cj4gIAlpZiAoY3pfZHBtX2NoZWNrX3NtdV9mZWF0dXJl cyhod21nciwgU01VX0VuYWJsZWRGZWF0dXJlU2NvcmVib2FyZF9TY2xrRHBtT24pKQo+IC0JCXJl dHVybiBQUF9SZXN1bHRfVGFibGVJbW1lZGlhdGVFeGl0Owo+IC0JcmV0dXJuIDA7Cj4gKwkJcmV0 dXJuIHRydWU7Cj4gKwlyZXR1cm4gZmFsc2U7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgY3pfdGZf ZW5hYmxlX2RpZHQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsCj4gLQkJCQl2 b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCj4gK3N0YXRpYyBpbnQgY3pf ZGlzYWJsZV9kcG1fdGFza3Moc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgewo+IC0JLyogVE8g RE8gKi8KPiAtCXJldHVybiAwOwo+IC19Cj4gKwlpZiAoIWN6X2NoZWNrX2Zvcl9kcG1fZW5hYmxl ZChod21ncikpIHsKPiArCQlwcl9pbmZvKCJkcG0gaGFzIGJlZW4gZGlzYWJsZWRcbiIpOwo+ICsJ CXJldHVybiAwOwo+ICsJfQo+ICsJY3pfZGlzYWJsZV9uYl9kcG0oaHdtZ3IpOwo+ICAKPiAtc3Rh dGljIGludCBjel90Zl9jaGVja19mb3JfZHBtX2VuYWJsZWQoc3RydWN0IHBwX2h3bWdyICpod21n ciwKPiAtCQkJCQkJdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwKPiAtCQkJCQkJdm9pZCAqc3Rv cmFnZSwgaW50IHJlc3VsdCkKPiAtewo+IC0JaWYgKCFjel9kcG1fY2hlY2tfc211X2ZlYXR1cmVz KGh3bWdyLAo+IC0JCQkgICAgIFNNVV9FbmFibGVkRmVhdHVyZVNjb3JlYm9hcmRfU2Nsa0RwbU9u KSkKPiAtCQlyZXR1cm4gUFBfUmVzdWx0X1RhYmxlSW1tZWRpYXRlRXhpdDsKPiAtCXJldHVybiAw Owo+IC19Cj4gKwljel9jbGVhcl92b3RpbmdfY2xpZW50cyhod21ncik7Cj4gKwlpZiAoY3pfc3Rv cF9kcG0oaHdtZ3IpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICAKPiAtc3RhdGljIGNvbnN0IHN0 cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2l0ZW0gY3pfZGlzYWJsZV9kcG1fbGlzdFtdID0gewo+IC0J eyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX2NoZWNrX2Zvcl9kcG1fZW5hYmxlZCB9LAo+IC0JeyB9 LAo+ICsJcmV0dXJuIDA7Cj4gIH07Cj4gIAo+ICtzdGF0aWMgaW50IGN6X2VuYWJsZV9kcG1fdGFz a3Moc3RydWN0IHBwX2h3bWdyICpod21ncikKPiArewo+ICsJaWYgKGN6X2NoZWNrX2Zvcl9kcG1f ZW5hYmxlZChod21ncikpIHsKPiArCQlwcl9pbmZvKCJkcG0gaGFzIGJlZW4gZW5hYmxlZFxuIik7 Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gIAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHBobV9tYXN0 ZXJfdGFibGVfaGVhZGVyIGN6X2Rpc2FibGVfZHBtX21hc3RlciA9IHsKPiAtCTAsCj4gLQlQSE1f TWFzdGVyVGFibGVGbGFnX05vbmUsCj4gLQljel9kaXNhYmxlX2RwbV9saXN0Cj4gLX07Cj4gLQo+ IC1zdGF0aWMgY29uc3Qgc3RydWN0IHBobV9tYXN0ZXJfdGFibGVfaXRlbSBjel9lbmFibGVfZHBt X2xpc3RbXSA9IHsKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBjel90Zl9jaGVja19mb3JfZHBtX2Rp c2FibGVkIH0sCj4gLQl7IC50YWJsZUZ1bmN0aW9uID0gY3pfdGZfcHJvZ3JhbV92b3RpbmdfY2xp ZW50cyB9LAo+IC0JeyAudGFibGVGdW5jdGlvbiA9IGN6X3RmX3N0YXJ0X2RwbSB9LAo+IC0JeyAu dGFibGVGdW5jdGlvbiA9IGN6X3RmX3Byb2dyYW1fYm9vdHVwX3N0YXRlIH0sCj4gLQl7IC50YWJs ZUZ1bmN0aW9uID0gY3pfdGZfZW5hYmxlX2RpZHQgfSwKPiAtCXsgLnRhYmxlRnVuY3Rpb24gPSBj el90Zl9yZXNldF9hY3BfYm9vdF9sZXZlbCB9LAo+IC0JeyB9LAo+IC19Owo+ICsJY3pfcHJvZ3Jh bV92b3RpbmdfY2xpZW50cyhod21ncik7Cj4gKwlpZiAoY3pfc3RhcnRfZHBtKGh3bWdyKSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCWN6X3Byb2dyYW1fYm9vdHVwX3N0YXRlKGh3bWdyKTsKPiAr CWN6X3Jlc2V0X2FjcF9ib290X2xldmVsKGh3bWdyKTsKPiAgCj4gLXN0YXRpYyBjb25zdCBzdHJ1 Y3QgcGhtX21hc3Rlcl90YWJsZV9oZWFkZXIgY3pfZW5hYmxlX2RwbV9tYXN0ZXIgPSB7Cj4gLQkw LAo+IC0JUEhNX01hc3RlclRhYmxlRmxhZ19Ob25lLAo+IC0JY3pfZW5hYmxlX2RwbV9saXN0Cj4g KwlyZXR1cm4gMDsKPiAgfTsKPiAgCj4gIHN0YXRpYyBpbnQgY3pfYXBwbHlfc3RhdGVfYWRqdXN0 X3J1bGVzKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsCj4gQEAgLTExNjIsNyArMTE0Miw4IEBAIHN0 YXRpYyBpbnQgY3pfaHdtZ3JfYmFja2VuZF9pbml0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4g IAkJcmV0dXJuIC1FTk9NRU07Cj4gIAo+ICAJaHdtZ3ItPmJhY2tlbmQgPSBkYXRhOwo+IC0KPiAr CXBobV9jYXBfc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywKPiAr CQkJUEhNX1BsYXRmb3JtQ2Fwc19UYWJsZWxlc3NIYXJkd2FyZUludGVyZmFjZSk7Cj4gIAlyZXN1 bHQgPSBjel9pbml0aWFsaXplX2RwbV9kZWZhdWx0cyhod21ncik7Cj4gIAlpZiAocmVzdWx0ICE9 IDApIHsKPiAgCQlwcl9lcnIoImN6X2luaXRpYWxpemVfZHBtX2RlZmF1bHRzIGZhaWxlZFxuIik7 Cj4gQEAgLTExNzcsNTggKzExNTgsMTQgQEAgc3RhdGljIGludCBjel9od21ncl9iYWNrZW5kX2lu aXQoc3RydWN0IHBwX2h3bWdyICpod21ncikKPiAgCj4gIAljel9jb25zdHJ1Y3RfYm9vdF9zdGF0 ZShod21ncik7Cj4gIAo+IC0JcmVzdWx0ID0gcGhtX2NvbnN0cnVjdF90YWJsZShod21nciwgJmN6 X3NldHVwX2FzaWNfbWFzdGVyLAo+IC0JCQkJJihod21nci0+c2V0dXBfYXNpYykpOwo+IC0JaWYg KHJlc3VsdCAhPSAwKSB7Cj4gLQkJcHJfZXJyKCJGYWlsIHRvIGNvbnN0cnVjdCBzZXR1cCBBU0lD XG4iKTsKPiAtCQlyZXR1cm4gcmVzdWx0Owo+IC0JfQo+IC0KPiAtCXJlc3VsdCA9IHBobV9jb25z dHJ1Y3RfdGFibGUoaHdtZ3IsICZjel9wb3dlcl9kb3duX2FzaWNfbWFzdGVyLAo+IC0JCQkJJiho d21nci0+cG93ZXJfZG93bl9hc2ljKSk7Cj4gLQlpZiAocmVzdWx0ICE9IDApIHsKPiAtCQlwcl9l cnIoIkZhaWwgdG8gY29uc3RydWN0IHBvd2VyIGRvd24gQVNJQ1xuIik7Cj4gLQkJcmV0dXJuIHJl c3VsdDsKPiAtCX0KPiAtCj4gLQlyZXN1bHQgPSBwaG1fY29uc3RydWN0X3RhYmxlKGh3bWdyLCAm Y3pfZGlzYWJsZV9kcG1fbWFzdGVyLAo+IC0JCQkJJihod21nci0+ZGlzYWJsZV9keW5hbWljX3N0 YXRlX21hbmFnZW1lbnQpKTsKPiAtCWlmIChyZXN1bHQgIT0gMCkgewo+IC0JCXByX2VycigiRmFp bCB0byBkaXNhYmxlX2R5bmFtaWNfc3RhdGVcbiIpOwo+IC0JCXJldHVybiByZXN1bHQ7Cj4gLQl9 Cj4gLQlyZXN1bHQgPSBwaG1fY29uc3RydWN0X3RhYmxlKGh3bWdyLCAmY3pfZW5hYmxlX2RwbV9t YXN0ZXIsCj4gLQkJCQkmKGh3bWdyLT5lbmFibGVfZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50KSk7 Cj4gLQlpZiAocmVzdWx0ICE9IDApIHsKPiAtCQlwcl9lcnIoIkZhaWwgdG8gZW5hYmxlX2R5bmFt aWNfc3RhdGVcbiIpOwo+IC0JCXJldHVybiByZXN1bHQ7Cj4gLQl9Cj4gLQlyZXN1bHQgPSBwaG1f Y29uc3RydWN0X3RhYmxlKGh3bWdyLCAmY3pfc2V0X3Bvd2VyX3N0YXRlX21hc3RlciwKPiAtCQkJ CSYoaHdtZ3ItPnNldF9wb3dlcl9zdGF0ZSkpOwo+IC0JaWYgKHJlc3VsdCAhPSAwKSB7Cj4gLQkJ cHJfZXJyKCJGYWlsIHRvIGNvbnN0cnVjdCBzZXRfcG93ZXJfc3RhdGVcbiIpOwo+IC0JCXJldHVy biByZXN1bHQ7Cj4gLQl9Cj4gIAlod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5oYXJkd2FyZUFj dGl2aXR5UGVyZm9ybWFuY2VMZXZlbHMgPSAgQ1pfTUFYX0hBUkRXQVJFX1BPV0VSTEVWRUxTOwo+ ICAKPiAtCXJlc3VsdCA9IHBobV9jb25zdHJ1Y3RfdGFibGUoaHdtZ3IsICZjel9waG1fZW5hYmxl X2Nsb2NrX3Bvd2VyX2dhdGluZ3NfbWFzdGVyLCAmKGh3bWdyLT5lbmFibGVfY2xvY2tfcG93ZXJf Z2F0aW5ncykpOwo+IC0JaWYgKHJlc3VsdCAhPSAwKSB7Cj4gLQkJcHJfZXJyKCJGYWlsIHRvIGNv bnN0cnVjdCBlbmFibGVfY2xvY2tfcG93ZXJfZ2F0aW5nc1xuIik7Cj4gLQkJcmV0dXJuIHJlc3Vs dDsKPiAtCX0KPiAgCXJldHVybiByZXN1bHQ7Cj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQgY3pfaHdt Z3JfYmFja2VuZF9maW5pKHN0cnVjdCBwcF9od21nciAqaHdtZ3IpCj4gIHsKPiAgCWlmIChod21n ciAhPSBOVUxMKSB7Cj4gLQkJcGhtX2Rlc3Ryb3lfdGFibGUoaHdtZ3IsICYoaHdtZ3ItPmVuYWJs ZV9jbG9ja19wb3dlcl9nYXRpbmdzKSk7Cj4gLQkJcGhtX2Rlc3Ryb3lfdGFibGUoaHdtZ3IsICYo aHdtZ3ItPnNldF9wb3dlcl9zdGF0ZSkpOwo+IC0JCXBobV9kZXN0cm95X3RhYmxlKGh3bWdyLCAm KGh3bWdyLT5lbmFibGVfZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50KSk7Cj4gLQkJcGhtX2Rlc3Ry b3lfdGFibGUoaHdtZ3IsICYoaHdtZ3ItPmRpc2FibGVfZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50 KSk7Cj4gLQkJcGhtX2Rlc3Ryb3lfdGFibGUoaHdtZ3IsICYoaHdtZ3ItPnBvd2VyX2Rvd25fYXNp YykpOwo+IC0JCXBobV9kZXN0cm95X3RhYmxlKGh3bWdyLCAmKGh3bWdyLT5zZXR1cF9hc2ljKSk7 Cj4gLQo+ICAJCWtmcmVlKGh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBfb25fZGFsX3B3cmwpOwo+ ICAJCWh3bWdyLT5keW5fc3RhdGUudmRkY19kZXBfb25fZGFsX3B3cmwgPSBOVUxMOwo+ICAKPiBA QCAtMTkzOCw3ICsxODc1LDYgQEAgc3RhdGljIGludCBjel9yZWFkX3NlbnNvcihzdHJ1Y3QgcHBf aHdtZ3IgKmh3bWdyLCBpbnQgaWR4LAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IHBwX2h3bWdyX2Z1 bmMgY3pfaHdtZ3JfZnVuY3MgPSB7Cj4gIAkuYmFja2VuZF9pbml0ID0gY3pfaHdtZ3JfYmFja2Vu ZF9pbml0LAo+ICAJLmJhY2tlbmRfZmluaSA9IGN6X2h3bWdyX2JhY2tlbmRfZmluaSwKPiAtCS5h c2ljX3NldHVwID0gTlVMTCwKPiAgCS5hcHBseV9zdGF0ZV9hZGp1c3RfcnVsZXMgPSBjel9hcHBs eV9zdGF0ZV9hZGp1c3RfcnVsZXMsCj4gIAkuZm9yY2VfZHBtX2xldmVsID0gY3pfZHBtX2ZvcmNl X2RwbV9sZXZlbCwKPiAgCS5nZXRfcG93ZXJfc3RhdGVfc2l6ZSA9IGN6X2dldF9wb3dlcl9zdGF0 ZV9zaXplLAo+IEBAIC0xOTYwLDYgKzE4OTYsMTEgQEAgc3RhdGljIGludCBjel9yZWFkX3NlbnNv cihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBpbnQgaWR4LAo+ICAJLmdldF9jbG9ja19ieV90eXBl ID0gY3pfZ2V0X2Nsb2NrX2J5X3R5cGUsCj4gIAkuZ2V0X21heF9oaWdoX2Nsb2NrcyA9IGN6X2dl dF9tYXhfaGlnaF9jbG9ja3MsCj4gIAkucmVhZF9zZW5zb3IgPSBjel9yZWFkX3NlbnNvciwKPiAr CS5wb3dlcl9vZmZfYXNpYyA9IGN6X3Bvd2VyX29mZl9hc2ljLAo+ICsJLmFzaWNfc2V0dXAgPSBj el9zZXR1cF9hc2ljX3Rhc2ssCj4gKwkuZHluYW1pY19zdGF0ZV9tYW5hZ2VtZW50X2VuYWJsZSA9 IGN6X2VuYWJsZV9kcG1fdGFza3MsCj4gKwkucG93ZXJfc3RhdGVfc2V0ID0gY3pfc2V0X3Bvd2Vy X3N0YXRlX3Rhc2tzLAo+ICsJLmR5bmFtaWNfc3RhdGVfbWFuYWdlbWVudF9kaXNhYmxlID0gY3pf ZGlzYWJsZV9kcG1fdGFza3MsCj4gIH07Cj4gIAo+ICBpbnQgY3pfaW5pdF9mdW5jdGlvbl9wb2lu dGVycyhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBhbWQtZ2Z4IG1haWxpbmcg bGlzdAo+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vYW1kLWdmeAo=