From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v2 2/3] drm/xen-front: Use Xen common shared buffer implementation Date: Fri, 30 Nov 2018 09:42:04 +0200 Message-ID: <20181130074205.20496-2-andr2000__9875.88861394233$1543563667$gmane$org@gmail.com> References: <20181130074205.20496-1-andr2000@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gSdRJ-00036r-89 for xen-devel@lists.xenproject.org; Fri, 30 Nov 2018 07:42:17 +0000 Received: by mail-lj1-x241.google.com with SMTP id v15-v6so4092793ljh.13 for ; Thu, 29 Nov 2018 23:42:15 -0800 (PST) In-Reply-To: <20181130074205.20496-1-andr2000@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, alsa-devel@alsa-project.org, jgross@suse.com, boris.ostrovsky@oracle.com Cc: andr2000@gmail.com, Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKVXNlIHBhZ2UgZGlyZWN0b3J5IGJhc2VkIHNoYXJlZCBidWZmZXIgaW1wbGVtZW50 YXRpb24Kbm93IGF2YWlsYWJsZSBhcyBjb21tb24gY29kZSBmb3IgWGVuIGZyb250ZW5kIGRyaXZl cnMuCgpSZW1vdmUgZmx1c2hpbmcgb2Ygc2hhcmVkIGJ1ZmZlciBvbiBwYWdlIGZsaXAgYXMgdGhp cwp3b3JrYXJvdW5kIG5lZWRzIGEgcHJvcGVyIGZpeC4KClNpZ25lZC1vZmYtYnk6IE9sZWtzYW5k ciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWcgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJz L2dwdS9kcm0veGVuL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9k cm0veGVuL3hlbl9kcm1fZnJvbnQuYyAgICAgICB8ICA2NSArKy0tCiBkcml2ZXJzL2dwdS9kcm0v eGVuL3hlbl9kcm1fZnJvbnRfZ2VtLmMgICB8ICAgMSAtCiBkcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfc2hidWYuYyB8IDQxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJz L2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuaCB8ICA2NCAtLS0tCiA2IGZpbGVzIGNo YW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDUyMCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJvbnRfc2hidWYuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9zaGJ1Zi5oCgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hlbi9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3hl bi9LY29uZmlnCmluZGV4IDRjY2ExNjA3ODJhYi4uZjk2OWQ0ODY4NTVkIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0veGVuL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hlbi9LY29u ZmlnCkBAIC0xMiw2ICsxMiw3IEBAIGNvbmZpZyBEUk1fWEVOX0ZST05URU5ECiAJc2VsZWN0IERS TV9LTVNfSEVMUEVSCiAJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCiAJc2VsZWN0IFhFTl9YRU5C VVNfRlJPTlRFTkQKKwlzZWxlY3QgWEVOX0ZST05UX1BHRElSX1NIQlVGCiAJaGVscAogCSAgQ2hv b3NlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBhIHBhcmEtdmlydHVhbGl6ZWQK IAkgIGZyb250ZW5kIERSTS9LTVMgZHJpdmVyIGZvciBYZW4gZ3Vlc3QgT1Nlcy4KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0veGVuL01h a2VmaWxlCmluZGV4IDcxMmFmZmY1ZmZjMy4uODI1OTA1ZjY3ZmFhIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0veGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4vTWFrZWZp bGUKQEAgLTQsNyArNCw2IEBAIGRybV94ZW5fZnJvbnQtb2JqcyA6PSB4ZW5fZHJtX2Zyb250Lm8g XAogCQkgICAgICB4ZW5fZHJtX2Zyb250X2ttcy5vIFwKIAkJICAgICAgeGVuX2RybV9mcm9udF9j b25uLm8gXAogCQkgICAgICB4ZW5fZHJtX2Zyb250X2V2dGNobmwubyBcCi0JCSAgICAgIHhlbl9k cm1fZnJvbnRfc2hidWYubyBcCiAJCSAgICAgIHhlbl9kcm1fZnJvbnRfY2ZnLm8gXAogCQkgICAg ICB4ZW5fZHJtX2Zyb250X2dlbS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94ZW4v eGVuX2RybV9mcm9udC5jIGIvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250LmMKaW5k ZXggNmI2ZDVhYjgyZWMzLi40ZDNkMzZmYzNhNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS94ZW4veGVuX2RybV9mcm9udC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2RybV9m cm9udC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUg PHhlbi94ZW5idXMuaD4KIAorI2luY2x1ZGUgPHhlbi94ZW4tZnJvbnQtcGdkaXItc2hidWYuaD4K ICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2lvL2Rpc3BsaWYuaD4KIAogI2luY2x1ZGUgInhlbl9k cm1fZnJvbnQuaCIKQEAgLTI2LDI4ICsyNywyMCBAQAogI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRf ZXZ0Y2hubC5oIgogI2luY2x1ZGUgInhlbl9kcm1fZnJvbnRfZ2VtLmgiCiAjaW5jbHVkZSAieGVu X2RybV9mcm9udF9rbXMuaCIKLSNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250X3NoYnVmLmgiCiAKIHN0 cnVjdCB4ZW5fZHJtX2Zyb250X2RidWYgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1NjQg ZGJ1Zl9jb29raWU7CiAJdTY0IGZiX2Nvb2tpZTsKLQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1 ZiAqc2hidWY7CisKKwlzdHJ1Y3QgeGVuX2Zyb250X3BnZGlyX3NoYnVmIHNoYnVmOwogfTsKIAot c3RhdGljIGludCBkYnVmX2FkZF90b19saXN0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X2luZm8gKmZy b250X2luZm8sCi0JCQkgICAgc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKnNoYnVmLCB1NjQg ZGJ1Zl9jb29raWUpCitzdGF0aWMgdm9pZCBkYnVmX2FkZF90b19saXN0KHN0cnVjdCB4ZW5fZHJt X2Zyb250X2luZm8gKmZyb250X2luZm8sCisJCQkgICAgIHN0cnVjdCB4ZW5fZHJtX2Zyb250X2Ri dWYgKmRidWYsIHU2NCBkYnVmX2Nvb2tpZSkKIHsKLQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVm ICpkYnVmOwotCi0JZGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpkYnVmKSwgR0ZQX0tFUk5FTCk7Ci0J aWYgKCFkYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWRidWYtPmRidWZfY29va2llID0gZGJ1 Zl9jb29raWU7Ci0JZGJ1Zi0+c2hidWYgPSBzaGJ1ZjsKIAlsaXN0X2FkZCgmZGJ1Zi0+bGlzdCwg JmZyb250X2luZm8tPmRidWZfbGlzdCk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qg eGVuX2RybV9mcm9udF9kYnVmICpkYnVmX2dldChzdHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3Qs CkBAIC02MiwxNSArNTUsNiBAQCBzdGF0aWMgc3RydWN0IHhlbl9kcm1fZnJvbnRfZGJ1ZiAqZGJ1 Zl9nZXQoc3RydWN0IGxpc3RfaGVhZCAqZGJ1Zl9saXN0LAogCXJldHVybiBOVUxMOwogfQogCi1z dGF0aWMgdm9pZCBkYnVmX2ZsdXNoX2ZiKHN0cnVjdCBsaXN0X2hlYWQgKmRidWZfbGlzdCwgdTY0 IGZiX2Nvb2tpZSkKLXsKLQlzdHJ1Y3QgeGVuX2RybV9mcm9udF9kYnVmICpidWYsICpxOwotCi0J bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBsaXN0KQotCQlpZiAo YnVmLT5mYl9jb29raWUgPT0gZmJfY29va2llKQotCQkJeGVuX2RybV9mcm9udF9zaGJ1Zl9mbHVz aChidWYtPnNoYnVmKTsKLX0KLQogc3RhdGljIHZvaWQgZGJ1Zl9mcmVlKHN0cnVjdCBsaXN0X2hl YWQgKmRidWZfbGlzdCwgdTY0IGRidWZfY29va2llKQogewogCXN0cnVjdCB4ZW5fZHJtX2Zyb250 X2RidWYgKmJ1ZiwgKnE7CkBAIC03OCw4ICs2Miw4IEBAIHN0YXRpYyB2b2lkIGRidWZfZnJlZShz dHJ1Y3QgbGlzdF9oZWFkICpkYnVmX2xpc3QsIHU2NCBkYnVmX2Nvb2tpZSkKIAlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoYnVmLCBxLCBkYnVmX2xpc3QsIGxpc3QpCiAJCWlmIChidWYtPmRidWZf Y29va2llID09IGRidWZfY29va2llKSB7CiAJCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKLQkJCXhl bl9kcm1fZnJvbnRfc2hidWZfdW5tYXAoYnVmLT5zaGJ1Zik7Ci0JCQl4ZW5fZHJtX2Zyb250X3No YnVmX2ZyZWUoYnVmLT5zaGJ1Zik7CisJCQl4ZW5fZnJvbnRfcGdkaXJfc2hidWZfdW5tYXAoJmJ1 Zi0+c2hidWYpOworCQkJeGVuX2Zyb250X3BnZGlyX3NoYnVmX2ZyZWUoJmJ1Zi0+c2hidWYpOwog CQkJa2ZyZWUoYnVmKTsKIAkJCWJyZWFrOwogCQl9CkBAIC05MSw4ICs3NSw4IEBAIHN0YXRpYyB2 b2lkIGRidWZfZnJlZV9hbGwoc3RydWN0IGxpc3RfaGVhZCAqZGJ1Zl9saXN0KQogCiAJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKGJ1ZiwgcSwgZGJ1Zl9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVs KCZidWYtPmxpc3QpOwotCQl4ZW5fZHJtX2Zyb250X3NoYnVmX3VubWFwKGJ1Zi0+c2hidWYpOwot CQl4ZW5fZHJtX2Zyb250X3NoYnVmX2ZyZWUoYnVmLT5zaGJ1Zik7CisJCXhlbl9mcm9udF9wZ2Rp cl9zaGJ1Zl91bm1hcCgmYnVmLT5zaGJ1Zik7CisJCXhlbl9mcm9udF9wZ2Rpcl9zaGJ1Zl9mcmVl KCZidWYtPnNoYnVmKTsKIAkJa2ZyZWUoYnVmKTsKIAl9CiB9CkBAIC0xNzEsOSArMTU1LDkgQEAg aW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGUoc3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAq ZnJvbnRfaW5mbywKIAkJCSAgICAgIHUzMiBicHAsIHU2NCBzaXplLCBzdHJ1Y3QgcGFnZSAqKnBh Z2VzKQogewogCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2V2dGNobmwgKmV2dGNobmw7Ci0Jc3RydWN0 IHhlbl9kcm1fZnJvbnRfc2hidWYgKnNoYnVmOworCXN0cnVjdCB4ZW5fZHJtX2Zyb250X2RidWYg KmRidWY7CiAJc3RydWN0IHhlbmRpc3BsX3JlcSAqcmVxOwotCXN0cnVjdCB4ZW5fZHJtX2Zyb250 X3NoYnVmX2NmZyBidWZfY2ZnOworCXN0cnVjdCB4ZW5fZnJvbnRfcGdkaXJfc2hidWZfY2ZnIGJ1 Zl9jZmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCkBAIC0xODEsMjggKzE2 NSwyOSBAQCBpbnQgeGVuX2RybV9mcm9udF9kYnVmX2NyZWF0ZShzdHJ1Y3QgeGVuX2RybV9mcm9u dF9pbmZvICpmcm9udF9pbmZvLAogCWlmICh1bmxpa2VseSghZXZ0Y2hubCkpCiAJCXJldHVybiAt RUlPOwogCisJZGJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpkYnVmKSwgR0ZQX0tFUk5FTCk7CisJaWYg KCFkYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRidWZfYWRkX3RvX2xpc3QoZnJvbnRfaW5m bywgZGJ1ZiwgZGJ1Zl9jb29raWUpOworCiAJbWVtc2V0KCZidWZfY2ZnLCAwLCBzaXplb2YoYnVm X2NmZykpOwogCWJ1Zl9jZmcueGJfZGV2ID0gZnJvbnRfaW5mby0+eGJfZGV2OworCWJ1Zl9jZmcu bnVtX3BhZ2VzID0gRElWX1JPVU5EX1VQKHNpemUsIFBBR0VfU0laRSk7CiAJYnVmX2NmZy5wYWdl cyA9IHBhZ2VzOwotCWJ1Zl9jZmcuc2l6ZSA9IHNpemU7CisJYnVmX2NmZy5wZ2RpciA9ICZkYnVm LT5zaGJ1ZjsKIAlidWZfY2ZnLmJlX2FsbG9jID0gZnJvbnRfaW5mby0+Y2ZnLmJlX2FsbG9jOwog Ci0Jc2hidWYgPSB4ZW5fZHJtX2Zyb250X3NoYnVmX2FsbG9jKCZidWZfY2ZnKTsKLQlpZiAoSVNf RVJSKHNoYnVmKSkKLQkJcmV0dXJuIFBUUl9FUlIoc2hidWYpOwotCi0JcmV0ID0gZGJ1Zl9hZGRf dG9fbGlzdChmcm9udF9pbmZvLCBzaGJ1ZiwgZGJ1Zl9jb29raWUpOwotCWlmIChyZXQgPCAwKSB7 Ci0JCXhlbl9kcm1fZnJvbnRfc2hidWZfZnJlZShzaGJ1Zik7Ci0JCXJldHVybiByZXQ7Ci0JfQor CXJldCA9IHhlbl9mcm9udF9wZ2Rpcl9zaGJ1Zl9hbGxvYygmYnVmX2NmZyk7CisJaWYgKHJldCA8 IDApCisJCWdvdG8gZmFpbF9zaGJ1Zl9hbGxvYzsKIAogCW11dGV4X2xvY2soJmV2dGNobmwtPnUu cmVxLnJlcV9pb19sb2NrKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmcm9udF9pbmZvLT5pb19s b2NrLCBmbGFncyk7CiAJcmVxID0gYmVfcHJlcGFyZV9yZXEoZXZ0Y2hubCwgWEVORElTUExfT1Bf REJVRl9DUkVBVEUpOwogCXJlcS0+b3AuZGJ1Zl9jcmVhdGUuZ3JlZl9kaXJlY3RvcnkgPQotCQkJ eGVuX2RybV9mcm9udF9zaGJ1Zl9nZXRfZGlyX3N0YXJ0KHNoYnVmKTsKKwkJCXhlbl9mcm9udF9w Z2Rpcl9zaGJ1Zl9nZXRfZGlyX3N0YXJ0KCZkYnVmLT5zaGJ1Zik7CiAJcmVxLT5vcC5kYnVmX2Ny ZWF0ZS5idWZmZXJfc3ogPSBzaXplOwogCXJlcS0+b3AuZGJ1Zl9jcmVhdGUuZGJ1Zl9jb29raWUg PSBkYnVmX2Nvb2tpZTsKIAlyZXEtPm9wLmRidWZfY3JlYXRlLndpZHRoID0gd2lkdGg7CkBAIC0y MjEsNyArMjA2LDcgQEAgaW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGUoc3RydWN0IHhlbl9k cm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsOwog Ci0JcmV0ID0geGVuX2RybV9mcm9udF9zaGJ1Zl9tYXAoc2hidWYpOworCXJldCA9IHhlbl9mcm9u dF9wZ2Rpcl9zaGJ1Zl9tYXAoJmRidWYtPnNoYnVmKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBm YWlsOwogCkBAIC0yMzAsNiArMjE1LDcgQEAgaW50IHhlbl9kcm1fZnJvbnRfZGJ1Zl9jcmVhdGUo c3RydWN0IHhlbl9kcm1fZnJvbnRfaW5mbyAqZnJvbnRfaW5mbywKIAogZmFpbDoKIAltdXRleF91 bmxvY2soJmV2dGNobmwtPnUucmVxLnJlcV9pb19sb2NrKTsKK2ZhaWxfc2hidWZfYWxsb2M6CiAJ ZGJ1Zl9mcmVlKCZmcm9udF9pbmZvLT5kYnVmX2xpc3QsIGRidWZfY29va2llKTsKIAlyZXR1cm4g cmV0OwogfQpAQCAtMzU4LDcgKzM0NCw2IEBAIGludCB4ZW5fZHJtX2Zyb250X3BhZ2VfZmxpcChz dHJ1Y3QgeGVuX2RybV9mcm9udF9pbmZvICpmcm9udF9pbmZvLAogCWlmICh1bmxpa2VseShjb25u X2lkeCA+PSBmcm9udF9pbmZvLT5udW1fZXZ0X3BhaXJzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAK LQlkYnVmX2ZsdXNoX2ZiKCZmcm9udF9pbmZvLT5kYnVmX2xpc3QsIGZiX2Nvb2tpZSk7CiAJZXZ0 Y2hubCA9ICZmcm9udF9pbmZvLT5ldnRfcGFpcnNbY29ubl9pZHhdLnJlcTsKIAogCW11dGV4X2xv Y2soJmV2dGNobmwtPnUucmVxLnJlcV9pb19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS94ZW4veGVuX2Ry bV9mcm9udF9nZW0uYwppbmRleCBjODViZmU3NTcxY2IuLjUzYmU0YzdkYzBhNCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X2dlbS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS94ZW4veGVuX2RybV9mcm9udF9nZW0uYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1 ZGUgPHhlbi9iYWxsb29uLmg+CiAKICNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250LmgiCi0jaW5jbHVk ZSAieGVuX2RybV9mcm9udF9zaGJ1Zi5oIgogCiBzdHJ1Y3QgeGVuX2dlbV9vYmplY3QgewogCXN0 cnVjdCBkcm1fZ2VtX29iamVjdCBiYXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hl bi94ZW5fZHJtX2Zyb250X3NoYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hlbl9kcm1fZnJv bnRfc2hidWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMzM2I2N2NjMWEwLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVm LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MTQgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgT1IgTUlUCi0KLS8qCi0gKiAgWGVuIHBhcmEtdmlydHVhbCBEUk0gZGV2 aWNlCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggRVBBTSBTeXN0ZW1zIEluYy4KLSAq Ci0gKiBBdXRob3I6IE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNo ZW5rb0BlcGFtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8ZHJtL2RybVAuaD4KLQotI2lmIGRlZmlu ZWQoQ09ORklHX1g4NikKLSNpbmNsdWRlIDxkcm0vZHJtX2NhY2hlLmg+Ci0jZW5kaWYKLSNpbmNs dWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLSNpbmNsdWRlIDxh c20veGVuL2h5cGVydmlzb3IuaD4KLSNpbmNsdWRlIDx4ZW4vYmFsbG9vbi5oPgotI2luY2x1ZGUg PHhlbi94ZW4uaD4KLSNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+Ci0jaW5jbHVkZSA8eGVuL2ludGVy ZmFjZS9pby9yaW5nLmg+Ci0jaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9pby9kaXNwbGlmLmg+Ci0K LSNpbmNsdWRlICJ4ZW5fZHJtX2Zyb250LmgiCi0jaW5jbHVkZSAieGVuX2RybV9mcm9udF9zaGJ1 Zi5oIgotCi1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9vcHMgewotCS8qCi0JICogQ2FsY3Vs YXRlIG51bWJlciBvZiBncmVmcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBidWZmZXIsCi0JICog ZS5nLiBpZiBncmVmcyBhcmUgcmVxdWlyZWQgZm9yIHBhZ2UgZGlyZWN0b3J5IG9ubHkgb3IgdGhl IGJ1ZmZlcgotCSAqIHBhZ2VzIGFzIHdlbGwuCi0JICovCi0Jdm9pZCAoKmNhbGNfbnVtX2dyZWZz KShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKLQkvKiBGaWxsIHBhZ2UgZGlyZWN0 b3J5IGFjY29yZGluZyB0byBwYXJhLXZpcnR1YWwgZGlzcGxheSBwcm90b2NvbC4gKi8KLQl2b2lk ICgqZmlsbF9wYWdlX2Rpcikoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Ci0JLyog Q2xhaW0gZ3JhbnQgcmVmZXJlbmNlcyBmb3IgdGhlIHBhZ2VzIG9mIHRoZSBidWZmZXIuICovCi0J aW50ICgqZ3JhbnRfcmVmc19mb3JfYnVmZmVyKShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAq YnVmLAotCQkJCSAgICAgZ3JhbnRfcmVmX3QgKnByaXZfZ3JlZl9oZWFkLCBpbnQgZ3JlZl9pZHgp OwotCS8qIE1hcCBncmFudCByZWZlcmVuY2VzIG9mIHRoZSBidWZmZXIuICovCi0JaW50ICgqbWFw KShzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKTsKLQkvKiBVbm1hcCBncmFudCByZWZl cmVuY2VzIG9mIHRoZSBidWZmZXIuICovCi0JaW50ICgqdW5tYXApKHN0cnVjdCB4ZW5fZHJtX2Zy b250X3NoYnVmICpidWYpOwotfTsKLQotZ3JhbnRfcmVmX3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9n ZXRfZGlyX3N0YXJ0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCi17Ci0JaWYgKCFi dWYtPmdyZWZzKQotCQlyZXR1cm4gR1JBTlRfSU5WQUxJRF9SRUY7Ci0KLQlyZXR1cm4gYnVmLT5n cmVmc1swXTsKLX0KLQotaW50IHhlbl9kcm1fZnJvbnRfc2hidWZfbWFwKHN0cnVjdCB4ZW5fZHJt X2Zyb250X3NoYnVmICpidWYpCi17Ci0JaWYgKGJ1Zi0+b3BzLT5tYXApCi0JCXJldHVybiBidWYt Pm9wcy0+bWFwKGJ1Zik7Ci0KLQkvKiBubyBuZWVkIHRvIG1hcCBvd24gZ3JhbnQgcmVmZXJlbmNl cyAqLwotCXJldHVybiAwOwotfQotCi1pbnQgeGVuX2RybV9mcm9udF9zaGJ1Zl91bm1hcChzdHJ1 Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQotewotCWlmIChidWYtPm9wcy0+dW5tYXApCi0J CXJldHVybiBidWYtPm9wcy0+dW5tYXAoYnVmKTsKLQotCS8qIG5vIG5lZWQgdG8gdW5tYXAgb3du IGdyYW50IHJlZmVyZW5jZXMgKi8KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB4ZW5fZHJtX2Zyb250 X3NoYnVmX2ZsdXNoKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCi17Ci0jaWYgZGVm aW5lZChDT05GSUdfWDg2KQotCWRybV9jbGZsdXNoX3BhZ2VzKGJ1Zi0+cGFnZXMsIGJ1Zi0+bnVt X3BhZ2VzKTsKLSNlbmRpZgotfQotCi12b2lkIHhlbl9kcm1fZnJvbnRfc2hidWZfZnJlZShzdHJ1 Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQotewotCWlmIChidWYtPmdyZWZzKSB7Ci0JCWlu dCBpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9ncmVmczsgaSsrKQotCQkJaWYgKGJ1 Zi0+Z3JlZnNbaV0gIT0gR1JBTlRfSU5WQUxJRF9SRUYpCi0JCQkJZ250dGFiX2VuZF9mb3JlaWdu X2FjY2VzcyhidWYtPmdyZWZzW2ldLAotCQkJCQkJCSAgMCwgMFVMKTsKLQl9Ci0Ja2ZyZWUoYnVm LT5ncmVmcyk7Ci0Ja2ZyZWUoYnVmLT5kaXJlY3RvcnkpOwotCWtmcmVlKGJ1Zik7Ci19Ci0KLS8q Ci0gKiBudW1iZXIgb2YgZ3JlZnMgYSBwYWdlIGNhbiBob2xkIHdpdGggcmVzcGVjdCB0byB0aGUK LSAqIHN0cnVjdCB4ZW5kaXNwbF9wYWdlX2RpcmVjdG9yeSBoZWFkZXIKLSAqLwotI2RlZmluZSBY RU5fRFJNX05VTV9HUkVGU19QRVJfUEFHRSAoKFBBR0VfU0laRSAtIFwKLQkJb2Zmc2V0b2Yoc3Ry dWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5LCBncmVmKSkgLyBcCi0JCXNpemVvZihncmFudF9y ZWZfdCkpCi0KLXN0YXRpYyBpbnQgZ2V0X251bV9wYWdlc19kaXIoc3RydWN0IHhlbl9kcm1fZnJv bnRfc2hidWYgKmJ1ZikKLXsKLQkvKiBudW1iZXIgb2YgcGFnZXMgdGhlIHBhZ2UgZGlyZWN0b3J5 IGNvbnN1bWVzIGl0c2VsZiAqLwotCXJldHVybiBESVZfUk9VTkRfVVAoYnVmLT5udW1fcGFnZXMs IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFKTsKLX0KLQotc3RhdGljIHZvaWQgYmFja2VuZF9j YWxjX251bV9ncmVmcyhzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQotewotCS8qIG9u bHkgZm9yIHBhZ2VzIHRoZSBwYWdlIGRpcmVjdG9yeSBjb25zdW1lcyBpdHNlbGYgKi8KLQlidWYt Pm51bV9ncmVmcyA9IGdldF9udW1fcGFnZXNfZGlyKGJ1Zik7Ci19Ci0KLXN0YXRpYyB2b2lkIGd1 ZXN0X2NhbGNfbnVtX2dyZWZzKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCi17Ci0J LyoKLQkgKiBudW1iZXIgb2YgcGFnZXMgdGhlIHBhZ2UgZGlyZWN0b3J5IGNvbnN1bWVzIGl0c2Vs ZgotCSAqIHBsdXMgZ3JlZnMgZm9yIHRoZSBidWZmZXIgcGFnZXMKLQkgKi8KLQlidWYtPm51bV9n cmVmcyA9IGdldF9udW1fcGFnZXNfZGlyKGJ1ZikgKyBidWYtPm51bV9wYWdlczsKLX0KLQotI2Rl ZmluZSB4ZW5fcGFnZV90b192YWRkcihwYWdlKSBcCi0JCSgodWludHB0cl90KXBmbl90b19rYWRk cihwYWdlX3RvX3hlbl9wZm4ocGFnZSkpKQotCi1zdGF0aWMgaW50IGJhY2tlbmRfdW5tYXAoc3Ry dWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1ZikKLXsKLQlzdHJ1Y3QgZ250dGFiX3VubWFwX2dy YW50X3JlZiAqdW5tYXBfb3BzOwotCWludCBpLCByZXQ7Ci0KLQlpZiAoIWJ1Zi0+cGFnZXMgfHwg IWJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlcyB8fCAhYnVmLT5ncmVmcykKLQkJcmV0dXJuIDA7Ci0K LQl1bm1hcF9vcHMgPSBrY2FsbG9jKGJ1Zi0+bnVtX3BhZ2VzLCBzaXplb2YoKnVubWFwX29wcyks Ci0JCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1bm1hcF9vcHMpIHsKLQkJRFJNX0VSUk9SKCJG YWlsZWQgdG8gZ2V0IG1lbW9yeSB3aGlsZSB1bm1hcHBpbmdcbiIpOwotCQlyZXR1cm4gLUVOT01F TTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmLT5udW1fcGFnZXM7IGkrKykgewotCQlwaHlz X2FkZHJfdCBhZGRyOwotCi0JCWFkZHIgPSB4ZW5fcGFnZV90b192YWRkcihidWYtPnBhZ2VzW2ld KTsKLQkJZ250dGFiX3NldF91bm1hcF9vcCgmdW5tYXBfb3BzW2ldLCBhZGRyLCBHTlRNQVBfaG9z dF9tYXAsCi0JCQkJICAgIGJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlc1tpXSk7Ci0JfQotCi0JcmV0 ID0gZ250dGFiX3VubWFwX3JlZnModW5tYXBfb3BzLCBOVUxMLCBidWYtPnBhZ2VzLAotCQkJCWJ1 Zi0+bnVtX3BhZ2VzKTsKLQotCWZvciAoaSA9IDA7IGkgPCBidWYtPm51bV9wYWdlczsgaSsrKSB7 Ci0JCWlmICh1bmxpa2VseSh1bm1hcF9vcHNbaV0uc3RhdHVzICE9IEdOVFNUX29rYXkpKQotCQkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gdW5tYXAgcGFnZSAlZDogJWRcbiIsCi0JCQkJICBpLCB1bm1h cF9vcHNbaV0uc3RhdHVzKTsKLQl9Ci0KLQlpZiAocmV0KQotCQlEUk1fRVJST1IoIkZhaWxlZCB0 byB1bm1hcCBncmFudCByZWZlcmVuY2VzLCByZXQgJWQiLCByZXQpOwotCi0Ja2ZyZWUodW5tYXBf b3BzKTsKLQlrZnJlZShidWYtPmJhY2tlbmRfbWFwX2hhbmRsZXMpOwotCWJ1Zi0+YmFja2VuZF9t YXBfaGFuZGxlcyA9IE5VTEw7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBiYWNrZW5k X21hcChzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQotewotCXN0cnVjdCBnbnR0YWJf bWFwX2dyYW50X3JlZiAqbWFwX29wcyA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciAqcHRyOwotCWlu dCByZXQsIGN1cl9ncmVmLCBjdXJfZGlyX3BhZ2UsIGN1cl9wYWdlLCBncmVmc19sZWZ0OwotCi0J bWFwX29wcyA9IGtjYWxsb2MoYnVmLT5udW1fcGFnZXMsIHNpemVvZigqbWFwX29wcyksIEdGUF9L RVJORUwpOwotCWlmICghbWFwX29wcykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlidWYtPmJhY2tl bmRfbWFwX2hhbmRsZXMgPSBrY2FsbG9jKGJ1Zi0+bnVtX3BhZ2VzLAotCQkJCQkgICBzaXplb2Yo KmJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlcyksCi0JCQkJCSAgIEdGUF9LRVJORUwpOwotCWlmICgh YnVmLT5iYWNrZW5kX21hcF9oYW5kbGVzKSB7Ci0JCWtmcmVlKG1hcF9vcHMpOwotCQlyZXR1cm4g LUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIHJlYWQgcGFnZSBkaXJlY3RvcnkgdG8gZ2V0IGdyZWZz IGZyb20gdGhlIGJhY2tlbmQ6IGZvciBleHRlcm5hbAotCSAqIGJ1ZmZlciB3ZSBvbmx5IGFsbG9j YXRlIGJ1Zi0+Z3JlZnMgZm9yIHRoZSBwYWdlIGRpcmVjdG9yeSwKLQkgKiBzbyBidWYtPm51bV9n cmVmcyBoYXMgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBwYWdlIGRpcmVjdG9yeSBpdHNlbGYKLQkg Ki8KLQlwdHIgPSBidWYtPmRpcmVjdG9yeTsKLQlncmVmc19sZWZ0ID0gYnVmLT5udW1fcGFnZXM7 Ci0JY3VyX3BhZ2UgPSAwOwotCWZvciAoY3VyX2Rpcl9wYWdlID0gMDsgY3VyX2Rpcl9wYWdlIDwg YnVmLT5udW1fZ3JlZnM7IGN1cl9kaXJfcGFnZSsrKSB7Ci0JCXN0cnVjdCB4ZW5kaXNwbF9wYWdl X2RpcmVjdG9yeSAqcGFnZV9kaXIgPQotCQkJCShzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3Rv cnkgKilwdHI7Ci0JCWludCB0b19jb3B5ID0gWEVOX0RSTV9OVU1fR1JFRlNfUEVSX1BBR0U7Ci0K LQkJaWYgKHRvX2NvcHkgPiBncmVmc19sZWZ0KQotCQkJdG9fY29weSA9IGdyZWZzX2xlZnQ7Ci0K LQkJZm9yIChjdXJfZ3JlZiA9IDA7IGN1cl9ncmVmIDwgdG9fY29weTsgY3VyX2dyZWYrKykgewot CQkJcGh5c19hZGRyX3QgYWRkcjsKLQotCQkJYWRkciA9IHhlbl9wYWdlX3RvX3ZhZGRyKGJ1Zi0+ cGFnZXNbY3VyX3BhZ2VdKTsKLQkJCWdudHRhYl9zZXRfbWFwX29wKCZtYXBfb3BzW2N1cl9wYWdl XSwgYWRkciwKLQkJCQkJICBHTlRNQVBfaG9zdF9tYXAsCi0JCQkJCSAgcGFnZV9kaXItPmdyZWZb Y3VyX2dyZWZdLAotCQkJCQkgIGJ1Zi0+eGJfZGV2LT5vdGhlcmVuZF9pZCk7Ci0JCQljdXJfcGFn ZSsrOwotCQl9Ci0KLQkJZ3JlZnNfbGVmdCAtPSB0b19jb3B5OwotCQlwdHIgKz0gUEFHRV9TSVpF OwotCX0KLQlyZXQgPSBnbnR0YWJfbWFwX3JlZnMobWFwX29wcywgTlVMTCwgYnVmLT5wYWdlcywg YnVmLT5udW1fcGFnZXMpOwotCi0JLyogc2F2ZSBoYW5kbGVzIGV2ZW4gaWYgZXJyb3IsIHNvIHdl IGNhbiB1bm1hcCAqLwotCWZvciAoY3VyX3BhZ2UgPSAwOyBjdXJfcGFnZSA8IGJ1Zi0+bnVtX3Bh Z2VzOyBjdXJfcGFnZSsrKSB7Ci0JCWJ1Zi0+YmFja2VuZF9tYXBfaGFuZGxlc1tjdXJfcGFnZV0g PSBtYXBfb3BzW2N1cl9wYWdlXS5oYW5kbGU7Ci0JCWlmICh1bmxpa2VseShtYXBfb3BzW2N1cl9w YWdlXS5zdGF0dXMgIT0gR05UU1Rfb2theSkpCi0JCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAg cGFnZSAlZDogJWRcbiIsCi0JCQkJICBjdXJfcGFnZSwgbWFwX29wc1tjdXJfcGFnZV0uc3RhdHVz KTsKLQl9Ci0KLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIG1hcCBncmFudCBy ZWZlcmVuY2VzLCByZXQgJWQiLCByZXQpOwotCQliYWNrZW5kX3VubWFwKGJ1Zik7Ci0JfQotCi0J a2ZyZWUobWFwX29wcyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgYmFja2VuZF9m aWxsX3BhZ2VfZGlyKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpCi17Ci0Jc3RydWN0 IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICpwYWdlX2RpcjsKLQl1bnNpZ25lZCBjaGFyICpwdHI7 Ci0JaW50IGksIG51bV9wYWdlc19kaXI7Ci0KLQlwdHIgPSBidWYtPmRpcmVjdG9yeTsKLQludW1f cGFnZXNfZGlyID0gZ2V0X251bV9wYWdlc19kaXIoYnVmKTsKLQotCS8qIGZpbGwgb25seSBncmVm cyBmb3IgdGhlIHBhZ2UgZGlyZWN0b3J5IGl0c2VsZiAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1f cGFnZXNfZGlyIC0gMTsgaSsrKSB7Ci0JCXBhZ2VfZGlyID0gKHN0cnVjdCB4ZW5kaXNwbF9wYWdl X2RpcmVjdG9yeSAqKXB0cjsKLQotCQlwYWdlX2Rpci0+Z3JlZl9kaXJfbmV4dF9wYWdlID0gYnVm LT5ncmVmc1tpICsgMV07Ci0JCXB0ciArPSBQQUdFX1NJWkU7Ci0JfQotCS8qIGxhc3QgcGFnZSBt dXN0IHNheSB0aGVyZSBpcyBubyBtb3JlIHBhZ2VzICovCi0JcGFnZV9kaXIgPSAoc3RydWN0IHhl bmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwotCXBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3Bh Z2UgPSBHUkFOVF9JTlZBTElEX1JFRjsKLX0KLQotc3RhdGljIHZvaWQgZ3Vlc3RfZmlsbF9wYWdl X2RpcihzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAqYnVmKQotewotCXVuc2lnbmVkIGNoYXIg KnB0cjsKLQlpbnQgY3VyX2dyZWYsIGdyZWZzX2xlZnQsIHRvX2NvcHksIGksIG51bV9wYWdlc19k aXI7Ci0KLQlwdHIgPSBidWYtPmRpcmVjdG9yeTsKLQludW1fcGFnZXNfZGlyID0gZ2V0X251bV9w YWdlc19kaXIoYnVmKTsKLQotCS8qCi0JICogd2hpbGUgY29weWluZywgc2tpcCBncmVmcyBhdCBz dGFydCwgdGhleSBhcmUgZm9yIHBhZ2VzCi0JICogZ3JhbnRlZCBmb3IgdGhlIHBhZ2UgZGlyZWN0 b3J5IGl0c2VsZgotCSAqLwotCWN1cl9ncmVmID0gbnVtX3BhZ2VzX2RpcjsKLQlncmVmc19sZWZ0 ID0gYnVmLT5udW1fcGFnZXM7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19kaXI7IGkrKykg ewotCQlzdHJ1Y3QgeGVuZGlzcGxfcGFnZV9kaXJlY3RvcnkgKnBhZ2VfZGlyID0KLQkJCQkoc3Ry dWN0IHhlbmRpc3BsX3BhZ2VfZGlyZWN0b3J5ICopcHRyOwotCi0JCWlmIChncmVmc19sZWZ0IDw9 IFhFTl9EUk1fTlVNX0dSRUZTX1BFUl9QQUdFKSB7Ci0JCQl0b19jb3B5ID0gZ3JlZnNfbGVmdDsK LQkJCXBhZ2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBHUkFOVF9JTlZBTElEX1JFRjsKLQkJ fSBlbHNlIHsKLQkJCXRvX2NvcHkgPSBYRU5fRFJNX05VTV9HUkVGU19QRVJfUEFHRTsKLQkJCXBh Z2VfZGlyLT5ncmVmX2Rpcl9uZXh0X3BhZ2UgPSBidWYtPmdyZWZzW2kgKyAxXTsKLQkJfQotCQlt ZW1jcHkoJnBhZ2VfZGlyLT5ncmVmLCAmYnVmLT5ncmVmc1tjdXJfZ3JlZl0sCi0JCSAgICAgICB0 b19jb3B5ICogc2l6ZW9mKGdyYW50X3JlZl90KSk7Ci0JCXB0ciArPSBQQUdFX1NJWkU7Ci0JCWdy ZWZzX2xlZnQgLT0gdG9fY29weTsKLQkJY3VyX2dyZWYgKz0gdG9fY29weTsKLQl9Ci19Ci0KLXN0 YXRpYyBpbnQgZ3Vlc3RfZ3JhbnRfcmVmc19mb3JfYnVmZmVyKHN0cnVjdCB4ZW5fZHJtX2Zyb250 X3NoYnVmICpidWYsCi0JCQkJICAgICAgIGdyYW50X3JlZl90ICpwcml2X2dyZWZfaGVhZCwKLQkJ CQkgICAgICAgaW50IGdyZWZfaWR4KQotewotCWludCBpLCBjdXJfcmVmLCBvdGhlcmVuZF9pZDsK LQotCW90aGVyZW5kX2lkID0gYnVmLT54Yl9kZXYtPm90aGVyZW5kX2lkOwotCWZvciAoaSA9IDA7 IGkgPCBidWYtPm51bV9wYWdlczsgaSsrKSB7Ci0JCWN1cl9yZWYgPSBnbnR0YWJfY2xhaW1fZ3Jh bnRfcmVmZXJlbmNlKHByaXZfZ3JlZl9oZWFkKTsKLQkJaWYgKGN1cl9yZWYgPCAwKQotCQkJcmV0 dXJuIGN1cl9yZWY7Ci0KLQkJZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzX3JlZihjdXJfcmVm LCBvdGhlcmVuZF9pZCwKLQkJCQkJCXhlbl9wYWdlX3RvX2dmbihidWYtPnBhZ2VzW2ldKSwKLQkJ CQkJCTApOwotCQlidWYtPmdyZWZzW2dyZWZfaWR4KytdID0gY3VyX3JlZjsKLQl9Ci0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ3JhbnRfcmVmZXJlbmNlcyhzdHJ1Y3QgeGVuX2RybV9mcm9u dF9zaGJ1ZiAqYnVmKQotewotCWdyYW50X3JlZl90IHByaXZfZ3JlZl9oZWFkOwotCWludCByZXQs IGksIGosIGN1cl9yZWY7Ci0JaW50IG90aGVyZW5kX2lkLCBudW1fcGFnZXNfZGlyOwotCi0JcmV0 ID0gZ250dGFiX2FsbG9jX2dyYW50X3JlZmVyZW5jZXMoYnVmLT5udW1fZ3JlZnMsICZwcml2X2dy ZWZfaGVhZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJRFJNX0VSUk9SKCJDYW5ub3QgYWxsb2NhdGUg Z3JhbnQgcmVmZXJlbmNlc1xuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jb3RoZXJlbmRfaWQg PSBidWYtPnhiX2Rldi0+b3RoZXJlbmRfaWQ7Ci0JaiA9IDA7Ci0JbnVtX3BhZ2VzX2RpciA9IGdl dF9udW1fcGFnZXNfZGlyKGJ1Zik7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9wYWdlc19kaXI7IGkr KykgewotCQl1bnNpZ25lZCBsb25nIGZyYW1lOwotCi0JCWN1cl9yZWYgPSBnbnR0YWJfY2xhaW1f Z3JhbnRfcmVmZXJlbmNlKCZwcml2X2dyZWZfaGVhZCk7Ci0JCWlmIChjdXJfcmVmIDwgMCkKLQkJ CXJldHVybiBjdXJfcmVmOwotCi0JCWZyYW1lID0geGVuX3BhZ2VfdG9fZ2ZuKHZpcnRfdG9fcGFn ZShidWYtPmRpcmVjdG9yeSArCi0JCQkJCVBBR0VfU0laRSAqIGkpKTsKLQkJZ250dGFiX2dyYW50 X2ZvcmVpZ25fYWNjZXNzX3JlZihjdXJfcmVmLCBvdGhlcmVuZF9pZCwgZnJhbWUsIDApOwotCQli dWYtPmdyZWZzW2orK10gPSBjdXJfcmVmOwotCX0KLQotCWlmIChidWYtPm9wcy0+Z3JhbnRfcmVm c19mb3JfYnVmZmVyKSB7Ci0JCXJldCA9IGJ1Zi0+b3BzLT5ncmFudF9yZWZzX2Zvcl9idWZmZXIo YnVmLCAmcHJpdl9ncmVmX2hlYWQsIGopOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9 Ci0KLQlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2VzKHByaXZfZ3JlZl9oZWFkKTsKLQlyZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCBhbGxvY19zdG9yYWdlKHN0cnVjdCB4ZW5fZHJtX2Zyb250 X3NoYnVmICpidWYpCi17Ci0JYnVmLT5ncmVmcyA9IGtjYWxsb2MoYnVmLT5udW1fZ3JlZnMsIHNp emVvZigqYnVmLT5ncmVmcyksIEdGUF9LRVJORUwpOwotCWlmICghYnVmLT5ncmVmcykKLQkJcmV0 dXJuIC1FTk9NRU07Ci0KLQlidWYtPmRpcmVjdG9yeSA9IGtjYWxsb2MoZ2V0X251bV9wYWdlc19k aXIoYnVmKSwgUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1Zi0+ZGlyZWN0b3J5KQot CQlyZXR1cm4gLUVOT01FTTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogRm9yIGJlIGFsbG9j YXRlZCBidWZmZXJzIHdlIGRvbid0IG5lZWQgZ3JhbnRfcmVmc19mb3JfYnVmZmVyIGFzIHRob3Nl Ci0gKiBncmFudCByZWZlcmVuY2VzIGFyZSBhbGxvY2F0ZWQgYXQgYmFja2VuZCBzaWRlCi0gKi8K LXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9vcHMgYmFja2VuZF9vcHMg PSB7Ci0JLmNhbGNfbnVtX2dyZWZzID0gYmFja2VuZF9jYWxjX251bV9ncmVmcywKLQkuZmlsbF9w YWdlX2RpciA9IGJhY2tlbmRfZmlsbF9wYWdlX2RpciwKLQkubWFwID0gYmFja2VuZF9tYXAsCi0J LnVubWFwID0gYmFja2VuZF91bm1hcAotfTsKLQotLyogRm9yIGxvY2FsbHkgZ3JhbnRlZCByZWZl cmVuY2VzIHdlIGRvIG5vdCBuZWVkIHRvIG1hcC91bm1hcCB0aGUgcmVmZXJlbmNlcyAqLwotc3Rh dGljIGNvbnN0IHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmX29wcyBsb2NhbF9vcHMgPSB7Ci0J LmNhbGNfbnVtX2dyZWZzID0gZ3Vlc3RfY2FsY19udW1fZ3JlZnMsCi0JLmZpbGxfcGFnZV9kaXIg PSBndWVzdF9maWxsX3BhZ2VfZGlyLAotCS5ncmFudF9yZWZzX2Zvcl9idWZmZXIgPSBndWVzdF9n cmFudF9yZWZzX2Zvcl9idWZmZXIsCi19OwotCi1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiAq Ci14ZW5fZHJtX2Zyb250X3NoYnVmX2FsbG9jKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmX2Nm ZyAqY2ZnKQotewotCXN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWY7Ci0JaW50IHJldDsK LQotCWJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpidWYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikK LQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlpZiAoY2ZnLT5iZV9hbGxvYykKLQkJYnVm LT5vcHMgPSAmYmFja2VuZF9vcHM7Ci0JZWxzZQotCQlidWYtPm9wcyA9ICZsb2NhbF9vcHM7Ci0K LQlidWYtPnhiX2RldiA9IGNmZy0+eGJfZGV2OwotCWJ1Zi0+bnVtX3BhZ2VzID0gRElWX1JPVU5E X1VQKGNmZy0+c2l6ZSwgUEFHRV9TSVpFKTsKLQlidWYtPnBhZ2VzID0gY2ZnLT5wYWdlczsKLQot CWJ1Zi0+b3BzLT5jYWxjX251bV9ncmVmcyhidWYpOwotCi0JcmV0ID0gYWxsb2Nfc3RvcmFnZShi dWYpOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCXJldCA9IGdyYW50X3JlZmVyZW5jZXMo YnVmKTsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQlidWYtPm9wcy0+ZmlsbF9wYWdlX2Rp cihidWYpOwotCi0JcmV0dXJuIGJ1ZjsKLQotZmFpbDoKLQl4ZW5fZHJtX2Zyb250X3NoYnVmX2Zy ZWUoYnVmKTsKLQlyZXR1cm4gRVJSX1BUUihyZXQpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3hlbi94ZW5fZHJtX2Zyb250X3NoYnVmLmggYi9kcml2ZXJzL2dwdS9kcm0veGVuL3hl bl9kcm1fZnJvbnRfc2hidWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU0NWM2 OTI1MzllLi4wMDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3hlbi94ZW5fZHJtX2Zy b250X3NoYnVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KLQotLyoKLSAqICBYZW4gcGFyYS12aXJ0 dWFsIERSTSBkZXZpY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBFUEFNIFN5c3Rl bXMgSW5jLgotICoKLSAqIEF1dGhvcjogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5k cl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPgotICovCi0KLSNpZm5kZWYgX19YRU5fRFJNX0ZST05U X1NIQlVGX0hfCi0jZGVmaW5lIF9fWEVOX0RSTV9GUk9OVF9TSEJVRl9IXwotCi0jaW5jbHVkZSA8 bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLQotI2luY2x1 ZGUgPHhlbi9ncmFudF90YWJsZS5oPgotCi1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1ZiB7Ci0J LyoKLQkgKiBudW1iZXIgb2YgcmVmZXJlbmNlcyBncmFudGVkIGZvciB0aGUgYmFja2VuZCB1c2U6 Ci0JICogIC0gZm9yIGFsbG9jYXRlZC9pbXBvcnRlZCBkbWEtYnVmJ3MgdGhpcyBob2xkcyBudW1i ZXIgb2YgZ3JhbnQKLQkgKiAgICByZWZlcmVuY2VzIGZvciB0aGUgcGFnZSBkaXJlY3RvcnkgYW5k IHBhZ2VzIG9mIHRoZSBidWZmZXIKLQkgKiAgLSBmb3IgdGhlIGJ1ZmZlciBwcm92aWRlZCBieSB0 aGUgYmFja2VuZCB0aGlzIGhvbGRzIG51bWJlciBvZgotCSAqICAgIGdyYW50IHJlZmVyZW5jZXMg Zm9yIHRoZSBwYWdlIGRpcmVjdG9yeSBhcyBncmFudCByZWZlcmVuY2VzIGZvcgotCSAqICAgIHRo ZSBidWZmZXIgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUgYmFja2VuZAotCSAqLwotCWludCBudW1f Z3JlZnM7Ci0JZ3JhbnRfcmVmX3QgKmdyZWZzOwotCXVuc2lnbmVkIGNoYXIgKmRpcmVjdG9yeTsK LQotCWludCBudW1fcGFnZXM7Ci0Jc3RydWN0IHBhZ2UgKipwYWdlczsKLQotCXN0cnVjdCB4ZW5i dXNfZGV2aWNlICp4Yl9kZXY7Ci0KLQkvKiB0aGVzZSBhcmUgdGhlIG9wcyB1c2VkIGludGVybmFs bHkgZGVwZW5kaW5nIG9uIGJlX2FsbG9jIG1vZGUgKi8KLQljb25zdCBzdHJ1Y3QgeGVuX2RybV9m cm9udF9zaGJ1Zl9vcHMgKm9wczsKLQotCS8qIFhlbiBtYXAgaGFuZGxlcyBmb3IgdGhlIGJ1ZmZl ciBhbGxvY2F0ZWQgYnkgdGhlIGJhY2tlbmQgKi8KLQlncmFudF9oYW5kbGVfdCAqYmFja2VuZF9t YXBfaGFuZGxlczsKLX07Ci0KLXN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmX2NmZyB7Ci0Jc3Ry dWN0IHhlbmJ1c19kZXZpY2UgKnhiX2RldjsKLQlzaXplX3Qgc2l6ZTsKLQlzdHJ1Y3QgcGFnZSAq KnBhZ2VzOwotCWJvb2wgYmVfYWxsb2M7Ci19OwotCi1zdHJ1Y3QgeGVuX2RybV9mcm9udF9zaGJ1 ZiAqCi14ZW5fZHJtX2Zyb250X3NoYnVmX2FsbG9jKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVm X2NmZyAqY2ZnKTsKLQotZ3JhbnRfcmVmX3QgeGVuX2RybV9mcm9udF9zaGJ1Zl9nZXRfZGlyX3N0 YXJ0KHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpOwotCi1pbnQgeGVuX2RybV9mcm9u dF9zaGJ1Zl9tYXAoc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hidWYgKmJ1Zik7Ci0KLWludCB4ZW5f ZHJtX2Zyb250X3NoYnVmX3VubWFwKHN0cnVjdCB4ZW5fZHJtX2Zyb250X3NoYnVmICpidWYpOwot Ci12b2lkIHhlbl9kcm1fZnJvbnRfc2hidWZfZmx1c2goc3RydWN0IHhlbl9kcm1fZnJvbnRfc2hi dWYgKmJ1Zik7Ci0KLXZvaWQgeGVuX2RybV9mcm9udF9zaGJ1Zl9mcmVlKHN0cnVjdCB4ZW5fZHJt X2Zyb250X3NoYnVmICpidWYpOwotCi0jZW5kaWYgLyogX19YRU5fRFJNX0ZST05UX1NIQlVGX0hf ICovCi0tIAoyLjE5LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0 Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRl dmVs