From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunming Zhou Subject: [PATCH 1/3] [RFC]drm: add syncobj timeline support v4 Date: Thu, 6 Sep 2018 16:57:32 +0800 Message-ID: <20180906085734.7320-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Chunming Zhou , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Daniel Rakos , Daniel Vetter , Dave Airlie , Christian Konig List-Id: dri-devel@lists.freedesktop.org VktfS0hSX3RpbWVsaW5lX3NlbWFwaG9yZToKVGhpcyBleHRlbnNpb24gaW50cm9kdWNlcyBhIG5l dyB0eXBlIG9mIHNlbWFwaG9yZSB0aGF0IGhhcyBhbiBpbnRlZ2VyIHBheWxvYWQKaWRlbnRpZnlp bmcgYSBwb2ludCBpbiBhIHRpbWVsaW5lLiBTdWNoIHRpbWVsaW5lIHNlbWFwaG9yZXMgc3VwcG9y dCB0aGUKZm9sbG93aW5nIG9wZXJhdGlvbnM6CiAgICogQ1BVIHF1ZXJ5IC0gQSBob3N0IG9wZXJh dGlvbiB0aGF0IGFsbG93cyBxdWVyeWluZyB0aGUgcGF5bG9hZCBvZiB0aGUKICAgICB0aW1lbGlu ZSBzZW1hcGhvcmUuCiAgICogQ1BVIHdhaXQgLSBBIGhvc3Qgb3BlcmF0aW9uIHRoYXQgYWxsb3dz IGEgYmxvY2tpbmcgd2FpdCBmb3IgYQogICAgIHRpbWVsaW5lIHNlbWFwaG9yZSB0byByZWFjaCBh IHNwZWNpZmllZCB2YWx1ZS4KICAgKiBEZXZpY2Ugd2FpdCAtIEEgZGV2aWNlIG9wZXJhdGlvbiB0 aGF0IGFsbG93cyB3YWl0aW5nIGZvciBhCiAgICAgdGltZWxpbmUgc2VtYXBob3JlIHRvIHJlYWNo IGEgc3BlY2lmaWVkIHZhbHVlLgogICAqIERldmljZSBzaWduYWwgLSBBIGRldmljZSBvcGVyYXRp b24gdGhhdCBhbGxvd3MgYWR2YW5jaW5nIHRoZQogICAgIHRpbWVsaW5lIHNlbWFwaG9yZSB0byBh IHNwZWNpZmllZCB2YWx1ZS4KClNpbmNlIGl0J3MgYSB0aW1lbGluZSwgdGhhdCBtZWFucyB0aGUg ZnJvbnQgdGltZSBwb2ludChQVCkgYWx3YXlzIGlzIHNpZ25hbGVkIGJlZm9yZSB0aGUgbGF0ZSBQ VC4KYS4gc2lnbmFsIFBUIGRlc2lnbjoKU2lnbmFsIFBUIGZlbmNlIE4gZGVwZW5kcyBvbiBQVFtO LTFdIGZlbmNlIGFuZCBzaWduYWwgb3BlcnRpb24gZmVuY2UsIHdoZW4gUFRbTl0gZmVuY2UgaXMg c2lnbmFsZWQsCnRoZSB0aW1lbGluZSB3aWxsIGluY3JlYXNlIHRvIHZhbHVlIG9mIFBUW05dLgpi LiB3YWl0IFBUIGRlc2lnbjoKV2FpdCBQVCBmZW5jZSBpcyBzaWduYWxlZCBieSByZWFjaGluZyB0 aW1lbGluZSBwb2ludCB2YWx1ZSwgd2hlbiB0aW1lbGluZSBpcyBpbmNyZWFzaW5nLCB3aWxsIGNv bXBhcmUKd2FpdCBQVHMgdmFsdWUgd2l0aCBuZXcgdGltZWxpbmUgdmFsdWUsIGlmIFBUIHZhbHVl IGlzIGxvd2VyIHRoYW4gdGltZWxpbmUgdmFsdWUsIHRoZW4gd2FpdCBQVCB3aWxsIGJlCnNpZ25h bGVkLCBvdGhlcndpc2Uga2VlcCBpbiBsaXN0LiBzZW1hcGhvcmUgd2FpdCBvcGVyYXRpb24gY2Fu IHdhaXQgb24gYW55IHBvaW50IG9mIHRpbWVsaW5lLApzbyBuZWVkIGEgUkIgdHJlZSB0byBvcmRl ciB0aGVtLiBBbmQgd2FpdCBQVCBjb3VsZCBhaGVhZCBvZiBzaWduYWwgUFQsIHdlIG5lZWQgYSBz dW1pc3Npb24gZmVuY2UgdG8KcGVyZm9ybSB0aGF0LgoKdjI6CjEuIHJlbW92ZSB1bnVzZWQgRFJN X1NZTkNPQkpfQ1JFQVRFX1RZUEVfTk9STUFMLiAoQ2hyaXN0aWFuKQoyLiBtb3ZlIHVuZXhwb3Nl ZCBkZW5pdGlvbnMgdG8gLmMgZmlsZS4gKERhbmllbCBWZXR0ZXIpCjMuIHNwbGl0IHVwIHRoZSBj aGFuZ2UgdG8gZHJtX3N5bmNvYmpfZmluZF9mZW5jZSgpIGluIGEgc2VwYXJhdGUgcGF0Y2guIChD aHJpc3RpYW4pCjQuIHNwbGl0IHVwIHRoZSBjaGFuZ2UgdG8gZHJtX3N5bmNvYmpfcmVwbGFjZV9m ZW5jZSgpIGluIGEgc2VwYXJhdGUgcGF0Y2guCjUuIGRyb3AgdGhlIHN1Ym1pc3Npb25fZmVuY2Ug aW1wbGVtZW50YXRpb24gYW5kIGluc3RlYWQgdXNlIHdhaXRfZXZlbnQoKSBmb3IgdGhhdC4gKENo cmlzdGlhbikKNi4gV0FSTl9PTihwb2ludCAhPSAwKSBmb3IgTk9STUFMIHR5cGUgc3luY29iaiBj YXNlLiAoRGFuaWVsIFZldHRlcikKCnYzOgoxLiByZXBsYWNlIG5vcm1hbCBzeW5jb2JqIHdpdGgg dGltZWxpbmUgaW1wbGVtZW5hdGlvbi4gKFZldHRlciBhbmQgQ2hyaXN0aWFuKQogICAgYS4gbm9y bWFsIHN5bmNvYmogc2lnbmFsIG9wIHdpbGwgY3JlYXRlIGEgc2lnbmFsIFBUIHRvIHRhaWwgb2Yg c2lnbmFsIHB0IGxpc3QuCiAgICBiLiBub3JtYWwgc3luY29iaiB3YWl0IG9wIHdpbGwgY3JlYXRl IGEgd2FpdCBwdCB3aXRoIGxhc3Qgc2lnbmFsIHBvaW50LCBhbmQgdGhpcyB3YWl0IFBUIGlzIG9u bHkgc2lnbmFsZWQgYnkgcmVsYXRlZCBzaWduYWwgcG9pbnQgUFQuCjIuIG1hbnkgYnVnIGZpeCBh bmQgY2xlYW4gdXAKMy4gc3R1YiBmZW5jZSBtb3ZpbmcgaXMgbW92ZWQgdG8gb3RoZXIgcGF0Y2gu Cgp2NO+8mgoxLiBmaXggUkIgdHJlZSBsb29wIHdpdGggd2hpbGUobm9kZT1yYl9maXJzdCguLi4p KS4gKENocmlzdGlhbikKMi4gZml4IHN5bmNvYmogbGlmZWN5Y2xlLiAoQ2hyaXN0aWFuKQozLiBv bmx5IGVuYWJsZV9zaWduYWxpbmcgd2hlbiB0aGVyZSBpcyB3YWl0X3B0LiAoQ2hyaXN0aWFuKQoK VGVzdGVkIGJ5IC4vZGVxcC12ayAtbiBkRVFQLVZLKnNlbWFwaG9yZSogZm9yIG5vcm1hbCBzeW5j b2JqCgpTaWduZWQtb2ZmLWJ5OiBDaHVubWluZyBaaG91IDxkYXZpZDEuemhvdUBhbWQuY29tPgpD YzogQ2hyaXN0aWFuIEtvbmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CkNjOiBEYXZlIEFp cmxpZSA8YWlybGllZEByZWRoYXQuY29tPgpDYzogRGFuaWVsIFJha29zIDxEYW5pZWwuUmFrb3NA YW1kLmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vZHJtX3N5bmNvYmouYyAgICAgICAgICAgICAgfCA1MTYgKysrKysrKysrKysrKysr KystLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgfCAgIDQg Ky0KIGluY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmggICAgICAgICAgICAgICAgICB8ICA3OCArKy0t CiBpbmNsdWRlL3VhcGkvZHJtL2RybS5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogNCBm aWxlcyBjaGFuZ2VkLCA0NDggaW5zZXJ0aW9ucygrKSwgMTUxIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9zeW5jb2JqLmMKaW5kZXggZTljZTYyM2QwNDllLi45NGIzMWRlMjM4NTggMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fc3luY29iai5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f c3luY29iai5jCkBAIC01Niw2ICs1Niw5IEBACiAjaW5jbHVkZSAiZHJtX2ludGVybmFsLmgiCiAj aW5jbHVkZSA8ZHJtL2RybV9zeW5jb2JqLmg+CiAKKy8qIG1lcmdlIG5vcm1hbCBzeW5jb2JqIHRv IHRpbWVsaW5lIHN5bmNvYmosIHRoZSBwb2ludCBpbnRlcnZhbCBpcyAxICovCisjZGVmaW5lIERS TV9TWU5DT0JKX05PUk1BTF9QT0lOVCAxCisKIHN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNl IHsKIAlzdHJ1Y3QgZG1hX2ZlbmNlIGJhc2U7CiAJc3BpbmxvY2tfdCBsb2NrOwpAQCAtODIsNiAr ODUsMTggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGRybV9zeW5jb2JqX3N0 dWJfZmVuY2Vfb3BzID0gewogCS5yZWxlYXNlID0gZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZV9yZWxl YXNlLAogfTsKIAorc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCB7CisJc3RydWN0IGRtYV9m ZW5jZV9hcnJheSAqYmFzZTsKKwl1NjQgICAgdmFsdWU7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0 OworfTsKK3N0cnVjdCBkcm1fc3luY29ial93YWl0X3B0IHsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpf c3R1Yl9mZW5jZSBiYXNlOworCXN0cnVjdCBkbWFfZmVuY2UgKnNpZ25hbF9wdF9mZW5jZTsKKwlz dHJ1Y3QgZG1hX2ZlbmNlX2NiIHdhaXRfY2I7CisJc3RydWN0IHJiX25vZGUgICBub2RlOworCXU2 NCAgICB2YWx1ZTsKK307CiAKIC8qKgogICogZHJtX3N5bmNvYmpfZmluZCAtIGxvb2t1cCBhbmQg cmVmZXJlbmNlIGEgc3luYyBvYmplY3QuCkBAIC0xMDksNjEgKzEyNCwyMzggQEAgc3RydWN0IGRy bV9zeW5jb2JqICpkcm1fc3luY29ial9maW5kKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRl LAogfQogRVhQT1JUX1NZTUJPTChkcm1fc3luY29ial9maW5kKTsKIAotc3RhdGljIHZvaWQgZHJt X3N5bmNvYmpfYWRkX2NhbGxiYWNrX2xvY2tlZChzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmos Ci0JCQkJCSAgICBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmNiLAotCQkJCQkgICAgZHJtX3N5bmNv YmpfZnVuY190IGZ1bmMpCitzdGF0aWMgdm9pZCBkcm1fc3luY29ial90aW1lbGluZV9pbml0KHN0 cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX3N5bmNvYmpf dGltZWxpbmUgKnN5bmNvYmpfdGltZWxpbmUpCiB7Ci0JY2ItPmZ1bmMgPSBmdW5jOwotCWxpc3Rf YWRkX3RhaWwoJmNiLT5ub2RlLCAmc3luY29iai0+Y2JfbGlzdCk7CisJc3Bpbl9sb2NrKCZzeW5j b2JqLT5sb2NrKTsKKwlzeW5jb2JqX3RpbWVsaW5lLT50aW1lbGluZV9jb250ZXh0ID0gZG1hX2Zl bmNlX2NvbnRleHRfYWxsb2MoMSk7CisJc3luY29ial90aW1lbGluZS0+dGltZWxpbmUgPSAwOwor CXN5bmNvYmpfdGltZWxpbmUtPnNpZ25hbF9wb2ludCA9IDA7CisJaW5pdF93YWl0cXVldWVfaGVh ZCgmc3luY29ial90aW1lbGluZS0+d3EpOworCisJc3luY29ial90aW1lbGluZS0+d2FpdF9wdF90 cmVlID0gUkJfUk9PVDsKKwlJTklUX0xJU1RfSEVBRCgmc3luY29ial90aW1lbGluZS0+c2lnbmFs X3B0X2xpc3QpOworCXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKIH0KIAotc3RhdGljIGlu dCBkcm1fc3luY29ial9mZW5jZV9nZXRfb3JfYWRkX2NhbGxiYWNrKHN0cnVjdCBkcm1fc3luY29i aiAqc3luY29iaiwKLQkJCQkJCSBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UsCi0JCQkJCQkgc3Ry dWN0IGRybV9zeW5jb2JqX2NiICpjYiwKLQkJCQkJCSBkcm1fc3luY29ial9mdW5jX3QgZnVuYykK K3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX3RpbWVsaW5lX2Zpbmkoc3RydWN0IGRybV9zeW5jb2Jq ICpzeW5jb2JqLAorCQkJCSAgICAgIHN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZSAqc3luY29i al90aW1lbGluZSkKIHsKLQlpbnQgcmV0OwotCi0JKmZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2Vf Z2V0KHN5bmNvYmopOwotCWlmICgqZmVuY2UpCi0JCXJldHVybiAxOworCXN0cnVjdCByYl9ub2Rl ICpub2RlID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdCA9IE5V TEw7CisJc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCAqc2lnbmFsX3B0ID0gTlVMTCwgKnRt cDsKIAogCXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Ci0JLyogV2UndmUgYWxyZWFkeSB0cmll ZCBvbmNlIHRvIGdldCBhIGZlbmNlIGFuZCBmYWlsZWQuICBOb3cgdGhhdCB3ZQotCSAqIGhhdmUg dGhlIGxvY2ssIHRyeSBvbmUgbW9yZSB0aW1lIGp1c3QgdG8gYmUgc3VyZSB3ZSBkb24ndCBhZGQg YQotCSAqIGNhbGxiYWNrIHdoZW4gYSBmZW5jZSBoYXMgYWxyZWFkeSBiZWVuIHNldC4KLQkgKi8K LQlpZiAoc3luY29iai0+ZmVuY2UpIHsKLQkJKmZlbmNlID0gZG1hX2ZlbmNlX2dldChyY3VfZGVy ZWZlcmVuY2VfcHJvdGVjdGVkKHN5bmNvYmotPmZlbmNlLAotCQkJCQkJCQkgbG9ja2RlcF9pc19o ZWxkKCZzeW5jb2JqLT5sb2NrKSkpOwotCQlyZXQgPSAxOwotCX0gZWxzZSB7Ci0JCSpmZW5jZSA9 IE5VTEw7Ci0JCWRybV9zeW5jb2JqX2FkZF9jYWxsYmFja19sb2NrZWQoc3luY29iaiwgY2IsIGZ1 bmMpOwotCQlyZXQgPSAwOworCWlmICghUkJfRU1QVFlfUk9PVCgmc3luY29ial90aW1lbGluZS0+ d2FpdF9wdF90cmVlKSkKKwkJRFJNX0VSUk9SKCJUaGVyZSBzdGlsbCBhcmUgYWR2YW5jZWQgd2Fp dF9wdHMhIHBscyBjaGVjayEiKTsKKwl3aGlsZSAoKG5vZGUgPSByYl9maXJzdCgmc3luY29ial90 aW1lbGluZS0+d2FpdF9wdF90cmVlKSkpIHsKKwkJd2FpdF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0 cnVjdCBkcm1fc3luY29ial93YWl0X3B0LCBub2RlKTsKKwkJcmJfZXJhc2UoJndhaXRfcHQtPm5v ZGUsCisJCQkgJnN5bmNvYmpfdGltZWxpbmUtPndhaXRfcHRfdHJlZSk7CisJCVJCX0NMRUFSX05P REUoJndhaXRfcHQtPm5vZGUpOworCQlpZiAoIXdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSkgewor CQkJLyogaWYgd2FpdF9wdCBzdGlsbCBpcyBhZHZhbmNlZCwgZmFrZSBzaWduYWwgaXQuCisJCQkg KiBnZW5lcmFsbHkgc2hvdWxkbid0IGhhcHBlbnMgKi8KKwkJCWRtYV9mZW5jZV9zZXRfZXJyb3Io JndhaXRfcHQtPmJhc2UuYmFzZSwgLUVOT0VOVCk7CisJCQlkbWFfZmVuY2Vfc2lnbmFsKCZ3YWl0 X3B0LT5iYXNlLmJhc2UpOworCQl9CisJCS8qIGtmcmVlKHdhaXRfcHQpIGlzIGV4Y3V0ZWQgYnkg ZmVuY2UgcHV0ICovCisJCWRtYV9mZW5jZV9wdXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7CisJfQor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzaWduYWxfcHQsIHRtcCwKKwkJCQkgJnN5bmNvYmpf dGltZWxpbmUtPnNpZ25hbF9wdF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZzaWduYWxfcHQt Pmxpc3QpOworCQlkbWFfZmVuY2VfcHV0KCZzaWduYWxfcHQtPmJhc2UtPmJhc2UpOworCQlrZnJl ZShzaWduYWxfcHQpOwogCX0KIAlzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7Cit9CiAKLQly ZXR1cm4gcmV0Oworc3RhdGljIHZvaWQgd2FpdF9wdF9mdW5jKHN0cnVjdCBkbWFfZmVuY2UgKmZl bmNlLCBzdHJ1Y3QgZG1hX2ZlbmNlX2NiICpjYikKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfd2Fp dF9wdCAqd2FpdF9wdCA9CisJCWNvbnRhaW5lcl9vZihjYiwgc3RydWN0IGRybV9zeW5jb2JqX3dh aXRfcHQsIHdhaXRfY2IpOworCisJZG1hX2ZlbmNlX3NpZ25hbCgmd2FpdF9wdC0+YmFzZS5iYXNl KTsKKwlkbWFfZmVuY2VfcHV0KHdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSk7CisJd2FpdF9wdC0+ c2lnbmFsX3B0X2ZlbmNlID0gTlVMTDsKKwlkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJh c2UpOworfQorCitzdGF0aWMgdm9pZCBkcm1fc3luY29ial9maW5kX3NpZ25hbF9wdF9mb3Jfd2Fp dF9wdChzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosCisJCQkJCQkgICBzdHJ1Y3QgZHJtX3N5 bmNvYmpfd2FpdF9wdCAqd2FpdF9wdCkKK3sKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUg KnRpbWVsaW5lID0gJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmU7CisJc3RydWN0IGRybV9zeW5j b2JqX3NpZ25hbF9wdCAqc2lnbmFsX3B0OworCWludCByZXQ7CisKKwlpZiAod2FpdF9wdC0+c2ln bmFsX3B0X2ZlbmNlKSB7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKChzeW5jb2JqLT50eXBlID09 IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUpICYmCisJCSAgICh3YWl0X3B0LT52YWx1ZSA8PSB0 aW1lbGluZS0+dGltZWxpbmUpKSB7CisJCWRtYV9mZW5jZV9zaWduYWwoJndhaXRfcHQtPmJhc2Uu YmFzZSk7CisJCXJiX2VyYXNlKCZ3YWl0X3B0LT5ub2RlLAorCQkJICZ0aW1lbGluZS0+d2FpdF9w dF90cmVlKTsKKwkJUkJfQ0xFQVJfTk9ERSgmd2FpdF9wdC0+bm9kZSk7CisJCWRtYV9mZW5jZV9w dXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KHNpZ25hbF9wdCwgJnRpbWVsaW5lLT5zaWduYWxfcHRfbGlzdCwgbGlzdCkgeworCQlp ZiAod2FpdF9wdC0+dmFsdWUgPCBzaWduYWxfcHQtPnZhbHVlKQorCQkJY29udGludWU7CisJCWlm ICgoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgJiYKKwkJICAgICh3 YWl0X3B0LT52YWx1ZSAhPSBzaWduYWxfcHQtPnZhbHVlKSkKKwkJCWNvbnRpbnVlOworCQl3YWl0 X3B0LT5zaWduYWxfcHRfZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KCZzaWduYWxfcHQtPmJhc2UtPmJh c2UpOworCQlyZXQgPSBkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKHdhaXRfcHQtPnNpZ25hbF9wdF9m ZW5jZSwKKwkJCQkJICAgICAmd2FpdF9wdC0+d2FpdF9jYiwKKwkJCQkJICAgICB3YWl0X3B0X2Z1 bmMpOworCQlpZiAocmV0ID09IC1FTk9FTlQpIHsKKwkJCWRtYV9mZW5jZV9zaWduYWwoJndhaXRf cHQtPmJhc2UuYmFzZSk7CisJCQlkbWFfZmVuY2VfcHV0KHdhaXRfcHQtPnNpZ25hbF9wdF9mZW5j ZSk7CisJCQl3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2UgPSBOVUxMOworCQkJcmJfZXJhc2UoJndh aXRfcHQtPm5vZGUsCisJCQkJICZ0aW1lbGluZS0+d2FpdF9wdF90cmVlKTsKKwkJCVJCX0NMRUFS X05PREUoJndhaXRfcHQtPm5vZGUpOworCQkJZG1hX2ZlbmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5i YXNlKTsKKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlkbWFfZmVuY2VfcHV0KHdhaXRfcHQt PnNpZ25hbF9wdF9mZW5jZSk7CisJCQlEUk1fRVJST1IoImFkZCBjYWxsYmFjayBlcnJvciEiKTsK KwkJfSBlbHNlIHsKKwkJCS8qIGFmdGVyIGFkZGluZyBjYWxsYmFjaywgcmVtb3ZlIGZyb20gcmIg dHJlZSAqLworCQkJcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCisJCQkJICZ0aW1lbGluZS0+d2Fp dF9wdF90cmVlKTsKKwkJCVJCX0NMRUFSX05PREUoJndhaXRfcHQtPm5vZGUpOworCQl9CisJCXJl dHVybjsKKwl9CisJLyogc2lnbmFsZWQgcHQgd2FzIHJlbGVhc2VkICovCisJaWYgKCF3YWl0X3B0 LT5zaWduYWxfcHRfZmVuY2UgJiYgKHdhaXRfcHQtPnZhbHVlIDw9CisJCQkJCSAgdGltZWxpbmUt PnNpZ25hbF9wb2ludCkpIHsKKwkJZG1hX2ZlbmNlX3NpZ25hbCgmd2FpdF9wdC0+YmFzZS5iYXNl KTsKKwkJcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCisJCQkgJnRpbWVsaW5lLT53YWl0X3B0X3Ry ZWUpOworCQlSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0LT5ub2RlKTsKKwkJZG1hX2ZlbmNlX3B1dCgm d2FpdF9wdC0+YmFzZS5iYXNlKTsKKwl9CiB9CiAKLXZvaWQgZHJtX3N5bmNvYmpfYWRkX2NhbGxi YWNrKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKLQkJCSAgICAgIHN0cnVjdCBkcm1fc3lu Y29ial9jYiAqY2IsCi0JCQkgICAgICBkcm1fc3luY29ial9mdW5jX3QgZnVuYykKK3N0YXRpYyBp bnQgZHJtX3N5bmNvYmpfdGltZWxpbmVfY3JlYXRlX3NpZ25hbF9wdChzdHJ1Y3QgZHJtX3N5bmNv YmogKnN5bmNvYmosCisJCQkJCQkgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCisJCQkJCQkgdTY0 IHBvaW50KQogeworCXN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9CisJ CWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQpLCBHRlBfS0VSTkVM KTsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICp0YWlsX3B0OworCXN0cnVjdCBkbWFf ZmVuY2UgKipmZW5jZXM7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisJc3RydWN0IGRybV9zeW5j b2JqX3dhaXRfcHQgKnRhaWxfd2FpdF9wdCA9IE5VTEw7CisJaW50IG51bV9mZW5jZXMgPSAwOwor CWludCByZXQgPSAwLCBpOworCisJaWYgKCFzaWduYWxfcHQpCisJCXJldHVybiAtRU5PTUVNOwor CWlmIChzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wb2ludCA+PSBwb2ludCkgewor CQlEUk1fV0FSTigiQSBsYXRlciBzaWduYWwgaXMgcmVhZHkhIik7CisJCWdvdG8gb3V0OworCX0K KwlpZiAoIWZlbmNlKQorCQlnb3RvIG91dDsKKworCWZlbmNlcyA9IGttYWxsb2NfYXJyYXkoc2l6 ZW9mKHZvaWQgKiksIDIsIEdGUF9LRVJORUwpOworCWlmICghZmVuY2VzKQorCQlnb3RvIG91dDsK KwlmZW5jZXNbbnVtX2ZlbmNlcysrXSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOworCS8qIHRpbWVs aW5lIHN5bmNvYmogbXVzdCB0YWtlIHRoaXMgZGVwZW5kZW5jeSAqLworCWlmIChzeW5jb2JqLT50 eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUpIHsKKwkJc3Bpbl9sb2NrKCZzeW5jb2Jq LT5sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNp Z25hbF9wdF9saXN0KSkgeworCQkJdGFpbF9wdCA9IGxpc3RfbGFzdF9lbnRyeSgmc3luY29iai0+ c3luY29ial90aW1lbGluZS5zaWduYWxfcHRfbGlzdCwKKwkJCQkJCSAgc3RydWN0IGRybV9zeW5j b2JqX3NpZ25hbF9wdCwgbGlzdCk7CisJCQlmZW5jZXNbbnVtX2ZlbmNlcysrXSA9IGRtYV9mZW5j ZV9nZXQoJnRhaWxfcHQtPmJhc2UtPmJhc2UpOworCQl9CisJCXNwaW5fdW5sb2NrKCZzeW5jb2Jq LT5sb2NrKTsKKwl9CisJc2lnbmFsX3B0LT5iYXNlID0gZG1hX2ZlbmNlX2FycmF5X2NyZWF0ZShu dW1fZmVuY2VzLCBmZW5jZXMsCisJCQkJCQkgc3luY29iai0+c3luY29ial90aW1lbGluZS50aW1l bGluZV9jb250ZXh0LAorCQkJCQkJIHBvaW50LCBmYWxzZSk7CisJaWYgKCFzaWduYWxfcHQtPmJh c2UpCisJCWdvdG8gZmFpbDsKKworCXNpZ25hbF9wdC0+dmFsdWUgPSBwb2ludDsKIAlzcGluX2xv Y2soJnN5bmNvYmotPmxvY2spOwotCWRybV9zeW5jb2JqX2FkZF9jYWxsYmFja19sb2NrZWQoc3lu Y29iaiwgY2IsIGZ1bmMpOworCXN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUuc2lnbmFsX3BvaW50 ID0gcG9pbnQ7CisJSU5JVF9MSVNUX0hFQUQoJnNpZ25hbF9wdC0+bGlzdCk7CisJbGlzdF9hZGRf dGFpbCgmc2lnbmFsX3B0LT5saXN0LCAmc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxf cHRfbGlzdCk7CisKKwkvKiBjaGVjayBpZiB0aGVyZSBpcyBhZHZhbmNlZCB3YWl0ICovCisJbm9k ZSA9IHJiX2xhc3QoJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90cmVlKTsKKwlp ZiAobm9kZSkKKwkJdGFpbF93YWl0X3B0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGRybV9zeW5j b2JqX3dhaXRfcHQsIG5vZGUpOworCWlmICh0YWlsX3dhaXRfcHQgJiYgIXRhaWxfd2FpdF9wdC0+ c2lnbmFsX3B0X2ZlbmNlKSB7CisJCWZvciAobm9kZSA9IHJiX2ZpcnN0KCZzeW5jb2JqLT5zeW5j b2JqX3RpbWVsaW5lLndhaXRfcHRfdHJlZSk7CisJCSAgICAgbm9kZSAhPSBOVUxMOyBub2RlID0g cmJfbmV4dChub2RlKSkgeworCQkJc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKndhaXRfcHQg PQorCQkJCXJiX2VudHJ5KG5vZGUsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0LAorCQkJCQkg bm9kZSk7CisKKwkJCWRybV9zeW5jb2JqX2ZpbmRfc2lnbmFsX3B0X2Zvcl93YWl0X3B0KHN5bmNv YmosCisJCQkJCQkJICAgICAgIHdhaXRfcHQpOworCQl9CisJfQorCiAJc3Bpbl91bmxvY2soJnN5 bmNvYmotPmxvY2spOworCXdha2VfdXBfYWxsKCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLndx KTsKKworCXJldHVybiAwOworZmFpbDoKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZlbmNlczsgaSsr KQorCQlkbWFfZmVuY2VfcHV0KGZlbmNlc1tpXSk7CisJa2ZyZWUoZmVuY2VzKTsKK291dDoKKwlr ZnJlZShzaWduYWxfcHQpOworCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgZHJtX3N5bmNvYmpfcmVt b3ZlX2NhbGxiYWNrKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKLQkJCQkgc3RydWN0IGRy bV9zeW5jb2JqX2NiICpjYikKK3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX3RpbWVsaW5lX2dhcmJh Z2VfY29sbGVjdGlvbihzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmopCiB7CisJc3RydWN0IGRy bV9zeW5jb2JqX3RpbWVsaW5lICp0aW1lbGluZSA9ICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5l OworCXN0cnVjdCByYl9ub2RlICpub2RlOworCXN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0ICp3 YWl0X3B0OworCXN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCwgKnRtcDsK KwogCXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Ci0JbGlzdF9kZWxfaW5pdCgmY2ItPm5vZGUp OworCW5vZGUgPSByYl9maXJzdCgmdGltZWxpbmUtPndhaXRfcHRfdHJlZSk7CisJd2hpbGUgKG5v ZGUpIHsKKwkJd2FpdF9wdCA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBkcm1fc3luY29ial93YWl0 X3B0LCBub2RlKTsKKwkJaWYgKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoJndhaXRfcHQtPmJhc2Uu YmFzZSkpIHsKKwkJCW5vZGUgPSByYl9uZXh0KG5vZGUpOworCQkJY29udGludWU7CisJCX0KKwkJ cmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCisJCQkgJnRpbWVsaW5lLT53YWl0X3B0X3RyZWUpOwor CQlSQl9DTEVBUl9OT0RFKCZ3YWl0X3B0LT5ub2RlKTsKKwkJLyoga2ZyZWUod2FpdF9wdCkgaXMg ZXhjdXRlZCBieSBmZW5jZSBwdXQgKi8KKwkJZG1hX2ZlbmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5i YXNlKTsKKwkJbm9kZSA9IHJiX2ZpcnN0KCZ0aW1lbGluZS0+d2FpdF9wdF90cmVlKTsKKwl9CisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNpZ25hbF9wdCwgdG1wLAorCQkJCSAmdGltZWxpbmUt PnNpZ25hbF9wdF9saXN0LCBsaXN0KSB7CisJCWlmIChkbWFfZmVuY2VfaXNfc2lnbmFsZWQoJnNp Z25hbF9wdC0+YmFzZS0+YmFzZSkpIHsKKwkJCXRpbWVsaW5lLT50aW1lbGluZSA9IHNpZ25hbF9w dC0+dmFsdWU7CisJCQlsaXN0X2RlbCgmc2lnbmFsX3B0LT5saXN0KTsKKwkJCWRtYV9mZW5jZV9w dXQoJnNpZ25hbF9wdC0+YmFzZS0+YmFzZSk7CisJCQlrZnJlZShzaWduYWxfcHQpOworCQl9IGVs c2UgeworCQkJLypzaWduYWxfcHQgaXMgaW4gb3JkZXIgaW4gbGlzdCwgZnJvbSBzbWFsbCB0byBi aWcsIHNvCisJCQkgKiB0aGUgbGF0ZXIgbXVzdCBub3QgYmUgc2lnbmFsIGVpdGhlciAqLworCQkJ YnJlYWs7CisJCX0KKwl9CisKIAlzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7CiB9Ci0KIC8q KgogICogZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSAtIHJlcGxhY2UgZmVuY2UgaW4gYSBzeW5j IG9iamVjdC4KICAqIEBzeW5jb2JqOiBTeW5jIG9iamVjdCB0byByZXBsYWNlIGZlbmNlIGluCkBA IC0xNzYsMjggKzM2OCwyOSBAQCB2b2lkIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3RydWN0 IGRybV9zeW5jb2JqICpzeW5jb2JqLAogCQkJICAgICAgIHU2NCBwb2ludCwKIAkJCSAgICAgICBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKIHsKLQlzdHJ1Y3QgZG1hX2ZlbmNlICpvbGRfZmVuY2U7 Ci0Jc3RydWN0IGRybV9zeW5jb2JqX2NiICpjdXIsICp0bXA7Ci0KLQlpZiAoZmVuY2UpCi0JCWRt YV9mZW5jZV9nZXQoZmVuY2UpOwotCi0Jc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKLQotCW9s ZF9mZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29iai0+ZmVuY2UsCi0JCQkJ CSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmc3luY29iai0+bG9jaykpOwotCXJjdV9hc3NpZ25fcG9p bnRlcihzeW5jb2JqLT5mZW5jZSwgZmVuY2UpOwotCi0JaWYgKGZlbmNlICE9IG9sZF9mZW5jZSkg ewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3VyLCB0bXAsICZzeW5jb2JqLT5jYl9saXN0 LCBub2RlKSB7Ci0JCQlsaXN0X2RlbF9pbml0KCZjdXItPm5vZGUpOwotCQkJY3VyLT5mdW5jKHN5 bmNvYmosIGN1cik7CisJZHJtX3N5bmNvYmpfdGltZWxpbmVfZ2FyYmFnZV9jb2xsZWN0aW9uKHN5 bmNvYmopOworCWlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUp IHsKKwkJaWYgKGZlbmNlKQorCQkJZHJtX3N5bmNvYmpfdGltZWxpbmVfY3JlYXRlX3NpZ25hbF9w dChzeW5jb2JqLCBmZW5jZSwKKwkJCQkJCQkgICAgICBwb2ludCk7CisJCXJldHVybjsKKwl9IGVs c2UgaWYgKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9OT1JNQUwpIHsKKwkJdTY0 IHB0X3ZhbHVlOworCisJCWlmICghZmVuY2UpIHsKKwkJCWRybV9zeW5jb2JqX3RpbWVsaW5lX2Zp bmkoc3luY29iaiwKKwkJCQkJCSAgJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUpOworCQkJZHJt X3N5bmNvYmpfdGltZWxpbmVfaW5pdChzeW5jb2JqLAorCQkJCQkJICAmc3luY29iai0+c3luY29i al90aW1lbGluZSk7CisJCQlyZXR1cm47CiAJCX0KKwkJcHRfdmFsdWUgPSBzeW5jb2JqLT5zeW5j b2JqX3RpbWVsaW5lLnNpZ25hbF9wb2ludCArCisJCQlEUk1fU1lOQ09CSl9OT1JNQUxfUE9JTlQ7 CisJCWRybV9zeW5jb2JqX3RpbWVsaW5lX2NyZWF0ZV9zaWduYWxfcHQoc3luY29iaiwgZmVuY2Us IHB0X3ZhbHVlKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCURSTV9FUlJPUigidGhlIHN5bmNv YmogdHlwZSBpc24ndCBzdXBwb3J0XG4iKTsKIAl9Ci0KLQlzcGluX3VubG9jaygmc3luY29iai0+ bG9jayk7Ci0KLQlkbWFfZmVuY2VfcHV0KG9sZF9mZW5jZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRy bV9zeW5jb2JqX3JlcGxhY2VfZmVuY2UpOwogCkBAIC0yMjAsNiArNDEzLDEyMCBAQCBzdGF0aWMg aW50IGRybV9zeW5jb2JqX2Fzc2lnbl9udWxsX2hhbmRsZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5 bmNvYmopCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9w dCAqCitkcm1fc3luY29ial90aW1lbGluZV9sb29rdXBfd2FpdF9wdF9mZW5jZShzdHJ1Y3QgZHJt X3N5bmNvYmogKnN5bmNvYmosCisJCQkJCSAgdTY0IHBvaW50LAorCQkJCQkgIHN0cnVjdCBkbWFf ZmVuY2UgKipmZW5jZSkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IHN5bmNvYmotPnN5bmNv YmpfdGltZWxpbmUud2FpdF9wdF90cmVlLnJiX25vZGU7CisJc3RydWN0IGRybV9zeW5jb2JqX3dh aXRfcHQgKndhaXRfcHQgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsKKwl3 aGlsZShub2RlKSB7CisJCWludCByZXN1bHQ7CisKKwkJd2FpdF9wdCA9IHJiX2VudHJ5KG5vZGUs IHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0LCBub2RlKTsKKwkJcmVzdWx0ID0gcG9pbnQgLSB3 YWl0X3B0LT52YWx1ZTsKKwkJaWYgKHJlc3VsdCA8IDApIHsKKwkJCW5vZGUgPSBub2RlLT5yYl9s ZWZ0OworCQl9IGVsc2UgaWYgKHJlc3VsdCA+IDApIHsKKwkJCW5vZGUgPSBub2RlLT5yYl9yaWdo dDsKKwkJfSBlbHNlIHsKKwkJCWlmIChmZW5jZSkKKwkJCQkqZmVuY2UgPSBkbWFfZmVuY2VfZ2V0 KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2so JnN5bmNvYmotPmxvY2spOworCisJcmV0dXJuIHdhaXRfcHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZHJtX3N5bmNvYmpfd2FpdF9wdCAqCitkcm1fc3luY29ial90aW1lbGluZV9jcmVhdGVfd2FpdF9w dF9hbmRfcmV0dXJuX2ZlbmNlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKKwkJCQkJCSAg ICAgdTY0IHBvaW50LAorCQkJCQkJICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCit7CisJ c3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKndhaXRfcHQgPSBremFsbG9jKHNpemVvZigqd2Fp dF9wdCksCisJCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfc3R1 Yl9mZW5jZSAqYmFzZTsKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICYoc3luY29iai0+c3luY29i al90aW1lbGluZS53YWl0X3B0X3RyZWUucmJfbm9kZSksICpwYXJlbnQgPSBOVUxMOworCisJaWYg KCF3YWl0X3B0KQorCQlyZXR1cm4gTlVMTDsKKwliYXNlID0gJndhaXRfcHQtPmJhc2U7CisJc3Bp bl9sb2NrX2luaXQoJmJhc2UtPmxvY2spOworCWRtYV9mZW5jZV9pbml0KCZiYXNlLT5iYXNlLAor CQkgICAgICAgJmRybV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzLAorCQkgICAgICAgJmJhc2UtPmxv Y2ssCisJCSAgICAgICBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnRpbWVsaW5lX2NvbnRleHQs IHBvaW50KTsKKwl3YWl0X3B0LT52YWx1ZSA9IHBvaW50OworCXdhaXRfcHQtPnNpZ25hbF9wdF9m ZW5jZSA9IE5VTEw7CisKKwkvKiB3YWl0IHB0IG11c3QgYmUgaW4gYW4gb3JkZXIsIHNvIHRoYXQg d2UgY2FuIGVhc2lseSBsb29rdXAgYW5kIHNpZ25hbAorCSAqIGl0ICovCisJc3Bpbl9sb2NrKCZz eW5jb2JqLT5sb2NrKTsKKwl3aGlsZSgqbmV3KSB7CisJCXN0cnVjdCBkcm1fc3luY29ial93YWl0 X3B0ICp0aGlzID0KKwkJCXJiX2VudHJ5KCpuZXcsIHN0cnVjdCBkcm1fc3luY29ial93YWl0X3B0 LCBub2RlKTsKKwkJaW50IHJlc3VsdCA9IHdhaXRfcHQtPnZhbHVlIC0gdGhpcy0+dmFsdWU7CisK KwkJcGFyZW50ID0gKm5ldzsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQluZXcgPSAmKCgqbmV3KS0+ cmJfbGVmdCk7CisJCWVsc2UgaWYgKHJlc3VsdCA+IDApCisJCQluZXcgPSAmKCgqbmV3KS0+cmJf cmlnaHQpOworCQllbHNlCisJCQlnb3RvIGV4aXN0OworCX0KKwlpZiAoZmVuY2UpCisJCSpmZW5j ZSA9IGRtYV9mZW5jZV9nZXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7CisJcmJfbGlua19ub2RlKCZ3 YWl0X3B0LT5ub2RlLCBwYXJlbnQsIG5ldyk7CisJcmJfaW5zZXJ0X2NvbG9yKCZ3YWl0X3B0LT5u b2RlLCAmc3luY29iai0+c3luY29ial90aW1lbGluZS53YWl0X3B0X3RyZWUpOworCXNwaW5fdW5s b2NrKCZzeW5jb2JqLT5sb2NrKTsKKwlyZXR1cm4gd2FpdF9wdDsKK2V4aXN0OgorCXNwaW5fdW5s b2NrKCZzeW5jb2JqLT5sb2NrKTsKKwlkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2Up OworCXdhaXRfcHQgPSBkcm1fc3luY29ial90aW1lbGluZV9sb29rdXBfd2FpdF9wdF9mZW5jZShz eW5jb2JqLCBwb2ludCwKKwkJCQkJCQkgICAgZmVuY2UpOworCXJldHVybiB3YWl0X3B0OworfQor CitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqCitkcm1fc3luY29ial90aW1lbGluZV9wb2ludF9n ZXQoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgcG9pbnQsIHU2NCBmbGFncykKK3sK KwlzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdDsKKwlzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSA9IE5VTEw7CisKKwkvKiBjaGVjayBpZiB0aGUgd2FpdCBwdCBleGlzdHMgKi8KKwl3 YWl0X3B0ID0gZHJtX3N5bmNvYmpfdGltZWxpbmVfbG9va3VwX3dhaXRfcHRfZmVuY2Uoc3luY29i aiwgcG9pbnQsCisJCQkJCQkJICAgICZmZW5jZSk7CisJaWYgKCFmZW5jZSkgeworCQkvKiBUaGlz IGlzIGEgbmV3IHdhaXQgcHQsIHNvIGNyZWF0ZSBpdCAqLworCQl3YWl0X3B0ID0gZHJtX3N5bmNv YmpfdGltZWxpbmVfY3JlYXRlX3dhaXRfcHRfYW5kX3JldHVybl9mZW5jZShzeW5jb2JqLCBwb2lu dCwKKwkJCQkJCQkgICAgICAmZmVuY2UpOworCQlpZiAoIWZlbmNlKQorCQkJcmV0dXJuIE5VTEw7 CisJfQorCWlmICh3YWl0X3B0KSB7CisJCWludCByZXQgPSAwOworCisJCWlmIChmbGFncyAmIERS TV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUKSB7CisJCQlyZXQgPSB3YWl0X2V2 ZW50X2ludGVycnVwdGlibGVfdGltZW91dChzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLndxLAor CQkJCQkJCSAgICAgICB3YWl0X3B0LT52YWx1ZSA8PSBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5l LnNpZ25hbF9wb2ludCwKKwkJCQkJCQkgICAgICAgbXNlY3NfdG9famlmZmllcygxMDAwMCkpOyAv KiB3YWl0IDEwcyAqLworCQkJaWYgKHJldCA8PSAwKQorCQkJCXJldHVybiBOVUxMOworCQl9CisJ CXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7CisJCWRybV9zeW5jb2JqX2ZpbmRfc2lnbmFsX3B0 X2Zvcl93YWl0X3B0KHN5bmNvYmosIHdhaXRfcHQpOworCQlzcGluX3VubG9jaygmc3luY29iai0+ bG9jayk7CisJCXJldHVybiBmZW5jZTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICog ZHJtX3N5bmNvYmpfZmluZF9mZW5jZSAtIGxvb2t1cCBhbmQgcmVmZXJlbmNlIHRoZSBmZW5jZSBp biBhIHN5bmMgb2JqZWN0CiAgKiBAZmlsZV9wcml2YXRlOiBkcm0gZmlsZSBwcml2YXRlIHBvaW50 ZXIKQEAgLTIzNCwyMCArNTQxLDQ2IEBAIHN0YXRpYyBpbnQgZHJtX3N5bmNvYmpfYXNzaWduX251 bGxfaGFuZGxlKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikKICAqIGNvbnRhaW5zIGEgcmVm ZXJlbmNlIHRvIHRoZSBmZW5jZSwgd2hpY2ggbXVzdCBiZSByZWxlYXNlZCBieSBjYWxsaW5nCiAg KiBkbWFfZmVuY2VfcHV0KCkuCiAgKi8KLWludCBkcm1fc3luY29ial9maW5kX2ZlbmNlKHN0cnVj dCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlLAotCQkJICAgdTMyIGhhbmRsZSwgdTY0IHBvaW50LAot CQkJICAgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlKQoraW50IGRybV9zeW5jb2JqX3NlYXJjaF9m ZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCBwb2ludCwKKwkJCSAgICAgdTY0 IGZsYWdzLCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2UpCiB7Ci0Jc3RydWN0IGRybV9zeW5jb2Jq ICpzeW5jb2JqID0gZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXZhdGUsIGhhbmRsZSk7CiAJaW50 IHJldCA9IDA7CiAKIAlpZiAoIXN5bmNvYmopCiAJCXJldHVybiAtRU5PRU5UOwogCi0JKmZlbmNl ID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmopOworCWRybV9zeW5jb2JqX3RpbWVsaW5l X2dhcmJhZ2VfY29sbGVjdGlvbihzeW5jb2JqKTsKKwlpZiAoc3luY29iai0+dHlwZSA9PSBEUk1f U1lOQ09CSl9UWVBFX05PUk1BTCkgeworCQkvKk5PUk1BTCBzeW5jb2JqIGFsd2F5cyB3YWl0IG9u IGxhc3QgcHQgKi8KKwkJdTY0IHRhaWxfcHRfdmFsdWUgPSBzeW5jb2JqLT5zeW5jb2JqX3RpbWVs aW5lLnNpZ25hbF9wb2ludDsKKworCQlpZiAodGFpbF9wdF92YWx1ZSA9PSAwKQorCQkJdGFpbF9w dF92YWx1ZSArPSBEUk1fU1lOQ09CSl9OT1JNQUxfUE9JTlQ7CisJCS8qIE5PUk1BTCBzeW5jb2Jq IGRvZXNuJ3QgY2FyZSBwb2ludCB2YWx1ZSAqLworCQlXQVJOX09OKHBvaW50ICE9IDApOworCQkq ZmVuY2UgPSBkcm1fc3luY29ial90aW1lbGluZV9wb2ludF9nZXQoc3luY29iaiwgdGFpbF9wdF92 YWx1ZSwKKwkJCQkJCQlmbGFncyk7CisJfSBlbHNlIGlmIChzeW5jb2JqLT50eXBlID09IERSTV9T WU5DT0JKX1RZUEVfVElNRUxJTkUpIHsKKwkJKmZlbmNlID0gZHJtX3N5bmNvYmpfdGltZWxpbmVf cG9pbnRfZ2V0KHN5bmNvYmosIHBvaW50LAorCQkJCQkJCWZsYWdzKTsKKwl9IGVsc2UgeworCQlE Uk1fRVJST1IoIkRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIHN5bmNvYmpcbiIpOworCQkqZmVuY2Ug PSBOVUxMOworCX0KIAlpZiAoISpmZW5jZSkgewogCQlyZXQgPSAtRUlOVkFMOwogCX0KKwlyZXR1 cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcm1fc3luY29ial9zZWFyY2hfZmVuY2UpOworaW50 IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2Uoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCisJ CQkgICB1MzIgaGFuZGxlLCB1NjQgcG9pbnQsCisJCQkgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVu Y2UpIHsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBkcm1fc3luY29ial9maW5kKGZp bGVfcHJpdmF0ZSwgaGFuZGxlKTsKKworCWludCByZXQgPSBkcm1fc3luY29ial9zZWFyY2hfZmVu Y2Uoc3luY29iaiwgcG9pbnQsCisJCQkJCURSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1Jf U1VCTUlULAorCQkJCQlmZW5jZSk7CiAJZHJtX3N5bmNvYmpfcHV0KHN5bmNvYmopOwogCXJldHVy biByZXQ7CiB9CkBAIC0yNjQsNyArNTk3LDcgQEAgdm9pZCBkcm1fc3luY29ial9mcmVlKHN0cnVj dCBrcmVmICprcmVmKQogCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGNvbnRhaW5lcl9v ZihrcmVmLAogCQkJCQkJICAgc3RydWN0IGRybV9zeW5jb2JqLAogCQkJCQkJICAgcmVmY291bnQp OwotCWRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3luY29iaiwgMCwgTlVMTCk7CisJZHJtX3N5 bmNvYmpfdGltZWxpbmVfZmluaShzeW5jb2JqLCAmc3luY29iai0+c3luY29ial90aW1lbGluZSk7 CiAJa2ZyZWUoc3luY29iaik7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9zeW5jb2JqX2ZyZWUpOwpA QCAtMjkyLDggKzYyNSwxMiBAQCBpbnQgZHJtX3N5bmNvYmpfY3JlYXRlKHN0cnVjdCBkcm1fc3lu Y29iaiAqKm91dF9zeW5jb2JqLCB1aW50MzJfdCBmbGFncywKIAkJcmV0dXJuIC1FTk9NRU07CiAK IAlrcmVmX2luaXQoJnN5bmNvYmotPnJlZmNvdW50KTsKLQlJTklUX0xJU1RfSEVBRCgmc3luY29i ai0+Y2JfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJnN5bmNvYmotPmxvY2spOworCWlmIChmbGFn cyAmIERSTV9TWU5DT0JKX0NSRUFURV9UWVBFX1RJTUVMSU5FKQorCQlzeW5jb2JqLT50eXBlID0g RFJNX1NZTkNPQkpfVFlQRV9USU1FTElORTsKKwllbHNlCisJCXN5bmNvYmotPnR5cGUgPSBEUk1f U1lOQ09CSl9UWVBFX05PUk1BTDsKKwlkcm1fc3luY29ial90aW1lbGluZV9pbml0KHN5bmNvYmos ICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lKTsKIAogCWlmIChmbGFncyAmIERSTV9TWU5DT0JK X0NSRUFURV9TSUdOQUxFRCkgewogCQlyZXQgPSBkcm1fc3luY29ial9hc3NpZ25fbnVsbF9oYW5k bGUoc3luY29iaik7CkBAIC02NTEsNyArOTg4LDYgQEAgc3RydWN0IHN5bmNvYmpfd2FpdF9lbnRy eSB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl OwogCXN0cnVjdCBkbWFfZmVuY2VfY2IgZmVuY2VfY2I7Ci0Jc3RydWN0IGRybV9zeW5jb2JqX2Ni IHN5bmNvYmpfY2I7CiB9OwogCiBzdGF0aWMgdm9pZCBzeW5jb2JqX3dhaXRfZmVuY2VfZnVuYyhz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwKQEAgLTY2MywxOCArOTk5LDYgQEAgc3RhdGljIHZvaWQg c3luY29ial93YWl0X2ZlbmNlX2Z1bmMoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsCiAJd2FrZV91 cF9wcm9jZXNzKHdhaXQtPnRhc2spOwogfQogCi1zdGF0aWMgdm9pZCBzeW5jb2JqX3dhaXRfc3lu Y29ial9mdW5jKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKLQkJCQkgICAgICBzdHJ1Y3Qg ZHJtX3N5bmNvYmpfY2IgKmNiKQotewotCXN0cnVjdCBzeW5jb2JqX3dhaXRfZW50cnkgKndhaXQg PQotCQljb250YWluZXJfb2YoY2IsIHN0cnVjdCBzeW5jb2JqX3dhaXRfZW50cnksIHN5bmNvYmpf Y2IpOwotCi0JLyogVGhpcyBoYXBwZW5zIGluc2lkZSB0aGUgc3luY29iaiBsb2NrICovCi0Jd2Fp dC0+ZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29i ai0+ZmVuY2UsCi0JCQkJCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZzeW5jb2JqLT5sb2NrKSkp OwotCXdha2VfdXBfcHJvY2Vzcyh3YWl0LT50YXNrKTsKLX0KLQogc3RhdGljIHNpZ25lZCBsb25n IGRybV9zeW5jb2JqX2FycmF5X3dhaXRfdGltZW91dChzdHJ1Y3QgZHJtX3N5bmNvYmogKipzeW5j b2JqcywKIAkJCQkJCSAgdWludDMyX3QgY291bnQsCiAJCQkJCQkgIHVpbnQzMl90IGZsYWdzLApA QCAtNjk4LDE0ICsxMDIyLDExIEBAIHN0YXRpYyBzaWduZWQgbG9uZyBkcm1fc3luY29ial9hcnJh eV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCiAJc2lnbmFsZWRf Y291bnQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAJCWVudHJpZXNbaV0u dGFzayA9IGN1cnJlbnQ7Ci0JCWVudHJpZXNbaV0uZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9n ZXQoc3luY29ianNbaV0pOworCQlyZXQgPSBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3luY29i anNbaV0sIDAsIDAsCisJCQkJCSAgICAgICAmZW50cmllc1tpXS5mZW5jZSk7CiAJCWlmICghZW50 cmllc1tpXS5mZW5jZSkgewotCQkJaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19X QUlUX0ZPUl9TVUJNSVQpIHsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0ID0g LUVJTlZBTDsKLQkJCQlnb3RvIGNsZWFudXBfZW50cmllczsKLQkJCX0KKwkJCXJldCA9IC1FSU5W QUw7CisJCQlnb3RvIGNsZWFudXBfZW50cmllczsKIAkJfQogCiAJCWlmIChkbWFfZmVuY2VfaXNf c2lnbmFsZWQoZW50cmllc1tpXS5mZW5jZSkpIHsKQEAgLTczMywxNSArMTA1NCw2IEBAIHN0YXRp YyBzaWduZWQgbG9uZyBkcm1fc3luY29ial9hcnJheV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV9z eW5jb2JqICoqc3luY29ianMsCiAJICogZmFsbHRob3VnaCBhbmQgdHJ5IGEgMCB0aW1lb3V0IHdh aXQhCiAJICovCiAKLQlpZiAoZmxhZ3MgJiBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9S X1NVQk1JVCkgewotCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotCQkJZHJtX3N5bmNv YmpfZmVuY2VfZ2V0X29yX2FkZF9jYWxsYmFjayhzeW5jb2Jqc1tpXSwKLQkJCQkJCQkgICAgICAm ZW50cmllc1tpXS5mZW5jZSwKLQkJCQkJCQkgICAgICAmZW50cmllc1tpXS5zeW5jb2JqX2NiLAot CQkJCQkJCSAgICAgIHN5bmNvYmpfd2FpdF9zeW5jb2JqX2Z1bmMpOwotCQl9Ci0JfQotCiAJZG8g ewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCkBAIC03ODksMTMg KzExMDEsMTAgQEAgc3RhdGljIHNpZ25lZCBsb25nIGRybV9zeW5jb2JqX2FycmF5X3dhaXRfdGlt ZW91dChzdHJ1Y3QgZHJtX3N5bmNvYmogKipzeW5jb2JqcywKIAogY2xlYW51cF9lbnRyaWVzOgog CWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0JCWlmIChlbnRyaWVzW2ldLnN5bmNvYmpf Y2IuZnVuYykKLQkJCWRybV9zeW5jb2JqX3JlbW92ZV9jYWxsYmFjayhzeW5jb2Jqc1tpXSwKLQkJ CQkJCSAgICAmZW50cmllc1tpXS5zeW5jb2JqX2NiKTsKKwkJZG1hX2ZlbmNlX3B1dChlbnRyaWVz W2ldLmZlbmNlKTsKIAkJaWYgKGVudHJpZXNbaV0uZmVuY2VfY2IuZnVuYykKIAkJCWRtYV9mZW5j ZV9yZW1vdmVfY2FsbGJhY2soZW50cmllc1tpXS5mZW5jZSwKIAkJCQkJCSAgJmVudHJpZXNbaV0u ZmVuY2VfY2IpOwotCQlkbWFfZmVuY2VfcHV0KGVudHJpZXNbaV0uZmVuY2UpOwogCX0KIAlrZnJl ZShlbnRyaWVzKTsKIApAQCAtOTcwLDEyICsxMjc5LDIxIEBAIGRybV9zeW5jb2JqX3Jlc2V0X2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJaWYgKHJldCA8IDApCiAJ CXJldHVybiByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y291bnRfaGFuZGxlczsgaSsr KQotCQlkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlKHN5bmNvYmpzW2ldLCAwLCBOVUxMKTsKLQor CWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jb3VudF9oYW5kbGVzOyBpKyspIHsKKwkJaWYgKHN5bmNv YmpzW2ldLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUpIHsKKwkJCURSTV9FUlJP UigidGltZWxpbmUgc3luY29iaiBjYW5ub3QgcmVzZXQhXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7 CisJCQlnb3RvIG91dDsKKwkJfQorCQlkcm1fc3luY29ial90aW1lbGluZV9maW5pKHN5bmNvYmpz W2ldLAorCQkJCQkgICZzeW5jb2Jqc1tpXS0+c3luY29ial90aW1lbGluZSk7CisJCWRybV9zeW5j b2JqX3RpbWVsaW5lX2luaXQoc3luY29ianNbaV0sCisJCQkJCSAgJnN5bmNvYmpzW2ldLT5zeW5j b2JqX3RpbWVsaW5lKTsKKwl9CitvdXQ6CiAJZHJtX3N5bmNvYmpfYXJyYXlfZnJlZShzeW5jb2Jq cywgYXJncy0+Y291bnRfaGFuZGxlcyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQog CiBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZm ZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCAw YThkMmQ2NGYzODAuLjU3OWU5MWE1ODU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2V4ZWNidWZmZXIuYwpAQCAtMjEzNyw3ICsyMTM3LDkgQEAgYXdhaXRfZmVuY2VfYXJyYXko c3RydWN0IGk5MTVfZXhlY2J1ZmZlciAqZWIsCiAJCWlmICghKGZsYWdzICYgSTkxNV9FWEVDX0ZF TkNFX1dBSVQpKQogCQkJY29udGludWU7CiAKLQkJZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9n ZXQoc3luY29iaik7CisJCWRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzeW5jb2JqLCAwLAorCQkJ CQkgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQsCisJCQkJCSAmZmVuY2Up OwogCQlpZiAoIWZlbmNlKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHJtL2RybV9zeW5jb2JqLmggYi9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCmluZGV4IDQy NTQzMmI4NWE4Ny4uNjU3Yzk3ZGMyNWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fc3lu Y29iai5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKQEAgLTMwLDYgKzMwLDI1IEBA CiAKIHN0cnVjdCBkcm1fc3luY29ial9jYjsKIAorZW51bSBkcm1fc3luY29ial90eXBlIHsKKwlE Uk1fU1lOQ09CSl9UWVBFX05PUk1BTCwKKwlEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FCit9Owor CitzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgeworCXdhaXRfcXVldWVfaGVhZF90CXdxOwor CXU2NCB0aW1lbGluZV9jb250ZXh0OworCS8qKgorCSAqIEB0aW1lbGluZTogc3luY29iaiB0aW1l bGluZQorCSAqLworCXU2NCB0aW1lbGluZTsKKwl1NjQgc2lnbmFsX3BvaW50OworCisKKwlzdHJ1 Y3QgcmJfcm9vdCB3YWl0X3B0X3RyZWU7CisJc3RydWN0IGxpc3RfaGVhZCBzaWduYWxfcHRfbGlz dDsKK307CisKIC8qKgogICogc3RydWN0IGRybV9zeW5jb2JqIC0gc3luYyBvYmplY3QuCiAgKgpA QCAtNDEsMTkgKzYwLDE2IEBAIHN0cnVjdCBkcm1fc3luY29iaiB7CiAJICovCiAJc3RydWN0IGty ZWYgcmVmY291bnQ7CiAJLyoqCi0JICogQGZlbmNlOgotCSAqIE5VTEwgb3IgYSBwb2ludGVyIHRv IHRoZSBmZW5jZSBib3VuZCB0byB0aGlzIG9iamVjdC4KLQkgKgotCSAqIFRoaXMgZmllbGQgc2hv dWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5LiBVc2UgZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KCkKLQkg KiBhbmQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSgpIGluc3RlYWQuCisJICogQHR5cGU6IGlu ZGljYXRlIHN5bmNvYmogdHlwZQogCSAqLwotCXN0cnVjdCBkbWFfZmVuY2UgX19yY3UgKmZlbmNl OworCWVudW0gZHJtX3N5bmNvYmpfdHlwZSB0eXBlOwogCS8qKgotCSAqIEBjYl9saXN0OiBMaXN0 IG9mIGNhbGxiYWNrcyB0byBjYWxsIHdoZW4gdGhlICZmZW5jZSBnZXRzIHJlcGxhY2VkLgorCSAq IEBzeW5jb2JqX3RpbWVsaW5lOiB0aW1lbGluZQogCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgY2Jf bGlzdDsKKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgc3luY29ial90aW1lbGluZTsKKwog CS8qKgotCSAqIEBsb2NrOiBQcm90ZWN0cyAmY2JfbGlzdCBhbmQgd3JpdGUtbG9ja3MgJmZlbmNl LgorCSAqIEBsb2NrOiBQcm90ZWN0cyB0aW1lbGluZSBsaXN0IGFuZCB3cml0ZS1sb2NrcyAmZmVu Y2UuCiAJICovCiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qKgpAQCAtNjIsMjUgKzc4LDYgQEAgc3Ry dWN0IGRybV9zeW5jb2JqIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIH07CiAKLXR5cGVkZWYgdm9p ZCAoKmRybV9zeW5jb2JqX2Z1bmNfdCkoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAotCQkJ CSAgIHN0cnVjdCBkcm1fc3luY29ial9jYiAqY2IpOwotCi0vKioKLSAqIHN0cnVjdCBkcm1fc3lu Y29ial9jYiAtIGNhbGxiYWNrIGZvciBkcm1fc3luY29ial9hZGRfY2FsbGJhY2sKLSAqIEBub2Rl OiB1c2VkIGJ5IGRybV9zeW5jb2JfYWRkX2NhbGxiYWNrIHRvIGFwcGVuZCB0aGlzIHN0cnVjdCB0 bwotICoJICAmZHJtX3N5bmNvYmouY2JfbGlzdAotICogQGZ1bmM6IGRybV9zeW5jb2JqX2Z1bmNf dCB0byBjYWxsCi0gKgotICogVGhpcyBzdHJ1Y3Qgd2lsbCBiZSBpbml0aWFsaXplZCBieSBkcm1f c3luY29ial9hZGRfY2FsbGJhY2ssIGFkZGl0aW9uYWwKLSAqIGRhdGEgY2FuIGJlIHBhc3NlZCBh bG9uZyBieSBlbWJlZGRpbmcgZHJtX3N5bmNvYmpfY2IgaW4gYW5vdGhlciBzdHJ1Y3QuCi0gKiBU aGUgY2FsbGJhY2sgd2lsbCBnZXQgY2FsbGVkIHRoZSBuZXh0IHRpbWUgZHJtX3N5bmNvYmpfcmVw bGFjZV9mZW5jZSBpcwotICogY2FsbGVkLgotICovCi1zdHJ1Y3QgZHJtX3N5bmNvYmpfY2Igewot CXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlkcm1fc3luY29ial9mdW5jX3QgZnVuYzsKLX07Ci0K IHZvaWQgZHJtX3N5bmNvYmpfZnJlZShzdHJ1Y3Qga3JlZiAqa3JlZik7CiAKIC8qKgpAQCAtMTA2 LDI5ICsxMDMsNiBAQCBkcm1fc3luY29ial9wdXQoc3RydWN0IGRybV9zeW5jb2JqICpvYmopCiAJ a3JlZl9wdXQoJm9iai0+cmVmY291bnQsIGRybV9zeW5jb2JqX2ZyZWUpOwogfQogCi0vKioKLSAq IGRybV9zeW5jb2JqX2ZlbmNlX2dldCAtIGdldCBhIHJlZmVyZW5jZSB0byBhIGZlbmNlIGluIGEg c3luYyBvYmplY3QKLSAqIEBzeW5jb2JqOiBzeW5jIG9iamVjdC4KLSAqCi0gKiBUaGlzIGFjcXVp cmVzIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvICZkcm1fc3luY29iai5mZW5jZSBjb250YWluZWQg aW4gQG9iaiwKLSAqIGlmIG5vdCBOVUxMLiBJdCBpcyBpbGxlZ2FsIHRvIGNhbGwgdGhpcyB3aXRo b3V0IGFscmVhZHkgaG9sZGluZyBhIHJlZmVyZW5jZS4KLSAqIE5vIGxvY2tzIHJlcXVpcmVkLgot ICoKLSAqIFJldHVybnM6Ci0gKiBFaXRoZXIgdGhlIGZlbmNlIG9mIEBvYmogb3IgTlVMTCBpZiB0 aGVyZSdzIG5vbmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRtYV9mZW5jZSAqCi1kcm1f c3luY29ial9mZW5jZV9nZXQoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqKQotewotCXN0cnVj dCBkbWFfZmVuY2UgKmZlbmNlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWZlbmNlID0gZG1hX2Zl bmNlX2dldF9yY3Vfc2FmZSgmc3luY29iai0+ZmVuY2UpOwotCXJjdV9yZWFkX3VubG9jaygpOwot Ci0JcmV0dXJuIGZlbmNlOwotfQotCiBzdHJ1Y3QgZHJtX3N5bmNvYmogKmRybV9zeW5jb2JqX2Zp bmQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCiAJCQkJICAgICB1MzIgaGFuZGxlKTsK IHZvaWQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNv YmosIHU2NCBwb2ludCwKQEAgLTE0Miw1ICsxMTYsNyBAQCBpbnQgZHJtX3N5bmNvYmpfY3JlYXRl KHN0cnVjdCBkcm1fc3luY29iaiAqKm91dF9zeW5jb2JqLCB1aW50MzJfdCBmbGFncywKIGludCBk cm1fc3luY29ial9nZXRfaGFuZGxlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlLAogCQkJ ICAgc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1MzIgKmhhbmRsZSk7CiBpbnQgZHJtX3N5 bmNvYmpfZ2V0X2ZkKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgaW50ICpwX2ZkKTsKK2lu dCBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1 NjQgcG9pbnQsCisJCQkgICAgIHU2NCBmbGFncywgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlKTsK IAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybS5oIGIvaW5jbHVkZS91 YXBpL2RybS9kcm0uaAppbmRleCAzMDBmMzM2NjMzZjIuLmNlYmRiMjU0MWViNyAxMDA2NDQKLS0t IGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaAorKysgYi9pbmNsdWRlL3VhcGkvZHJtL2RybS5oCkBA IC03MTcsNiArNzE3LDcgQEAgc3RydWN0IGRybV9wcmltZV9oYW5kbGUgewogc3RydWN0IGRybV9z eW5jb2JqX2NyZWF0ZSB7CiAJX191MzIgaGFuZGxlOwogI2RlZmluZSBEUk1fU1lOQ09CSl9DUkVB VEVfU0lHTkFMRUQgKDEgPDwgMCkKKyNkZWZpbmUgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfVElN RUxJTkUgKDEgPDwgMSkKIAlfX3UzMiBmbGFnczsKIH07CiAKLS0gCjIuMTcuMQoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxp c3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==