From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: [PATCH v3 8/9] xen/gntdev: Implement dma-buf export functionality Date: Tue, 12 Jun 2018 16:41:59 +0300 Message-ID: <20180612134200.17456-9-andr2000__49081.17631353$1528810873$gmane$org@gmail.com> References: <20180612134200.17456-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 1fSjZ3-0007ip-QJ for xen-devel@lists.xenproject.org; Tue, 12 Jun 2018 13:42:25 +0000 Received: by mail-lf0-x242.google.com with SMTP id d24-v6so36054986lfa.8 for ; Tue, 12 Jun 2018 06:42:23 -0700 (PDT) In-Reply-To: <20180612134200.17456-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, linux-media@vger.kernel.org, jgross@suse.com, boris.ostrovsky@oracle.com, konrad.wilk@oracle.com Cc: andr2000@gmail.com, daniel.vetter@intel.com, matthew.d.roper@intel.com, dongwon.kim@intel.com, Oleksandr Andrushchenko List-Id: xen-devel@lists.xenproject.org RnJvbTogT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVw YW0uY29tPgoKMS4gQ3JlYXRlIGEgZG1hLWJ1ZiBmcm9tIGdyYW50IHJlZmVyZW5jZXMgcHJvdmlk ZWQgYnkgdGhlIGZvcmVpZ24KICAgZG9tYWluLiBCeSBkZWZhdWx0IGRtYS1idWYgaXMgYmFja2Vk IGJ5IHN5c3RlbSBtZW1vcnkgcGFnZXMsIGJ1dAogICBieSBwcm92aWRpbmcgR05UREVWX0RNQV9G TEFHX1hYWCBmbGFncyBpdCBjYW4gYWxzbyBiZSBjcmVhdGVkCiAgIGFzIGEgRE1BIHdyaXRlLWNv bWJpbmUvY29oZXJlbnQgYnVmZmVyLCBlLmcuIGFsbG9jYXRlZCB3aXRoCiAgIGNvcnJlc3BvbmRp bmcgZG1hX2FsbG9jX3h4eCBBUEkuCiAgIEV4cG9ydCB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBhcyBh IG5ldyBkbWEtYnVmLgoKMi4gSW1wbGVtZW50IHdhaXRpbmcgZm9yIHRoZSBkbWEtYnVmIHRvIGJl IHJlbGVhc2VkOiBibG9jayB1bnRpbCB0aGUKICAgZG1hLWJ1ZiB3aXRoIHRoZSBmaWxlIGRlc2Ny aXB0b3IgcHJvdmlkZWQgaXMgcmVsZWFzZWQuCiAgIElmIHdpdGhpbiB0aGUgdGltZS1vdXQgcHJv dmlkZWQgdGhlIGJ1ZmZlciBpcyBub3QgcmVsZWFzZWQgdGhlbgogICAtRVRJTUVET1VUIGVycm9y IGlzIHJldHVybmVkLiBJZiB0aGUgYnVmZmVyIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvcgogICBk b2VzIG5vdCBleGlzdCBvciBoYXMgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLCB0aGVuIC1FTk9FTlQg aXMKICAgcmV0dXJuZWQuIEZvciB2YWxpZCBmaWxlIGRlc2NyaXB0b3JzIHRoaXMgbXVzdCBub3Qg YmUgdHJlYXRlZCBhcwogICBlcnJvci4KCjMuIE1ha2UgZ250ZGV2J3MgY29tbW9uIGNvZGUgYW5k IHN0cnVjdHVyZXMgYXZhaWxhYmxlIHRvIGRtYS1idWYuCgpTaWduZWQtb2ZmLWJ5OiBPbGVrc2Fu ZHIgQW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Ci0tLQog ZHJpdmVycy94ZW4vZ250ZGV2LWNvbW1vbi5oIHwgICA0ICsKIGRyaXZlcnMveGVuL2dudGRldi1k bWFidWYuYyB8IDQ3MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGRyaXZl cnMveGVuL2dudGRldi5jICAgICAgICB8ICAxMCArCiAzIGZpbGVzIGNoYW5nZWQsIDQ4MiBpbnNl cnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2dudGRl di1jb21tb24uaCBiL2RyaXZlcnMveGVuL2dudGRldi1jb21tb24uaAppbmRleCBhMzQwOGZkMzli MDcuLjcyZjgwZGJjZTg2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ250ZGV2LWNvbW1vbi5o CisrKyBiL2RyaXZlcnMveGVuL2dudGRldi1jb21tb24uaApAQCAtODksNCArODksOCBAQCBib29s IGdudGRldl9hY2NvdW50X21hcHBlZF9wYWdlcyhpbnQgY291bnQpOwogCiBpbnQgZ250ZGV2X21h cF9ncmFudF9wYWdlcyhzdHJ1Y3QgZ250ZGV2X2dyYW50X21hcCAqbWFwKTsKIAorI2lmZGVmIENP TkZJR19YRU5fR05UREVWX0RNQUJVRgordm9pZCBnbnRkZXZfcmVtb3ZlX21hcChzdHJ1Y3QgZ250 ZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBnbnRkZXZfZ3JhbnRfbWFwICptYXApOworI2VuZGlmCisK ICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ250ZGV2LWRtYWJ1Zi5jIGIvZHJpdmVy cy94ZW4vZ250ZGV2LWRtYWJ1Zi5jCmluZGV4IGRjNTdjNmEyNTUyNS4uODRjYmE2N2M2YWQ3IDEw MDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRkZXYtZG1hYnVmLmMKKysrIGIvZHJpdmVycy94ZW4v Z250ZGV2LWRtYWJ1Zi5jCkBAIC0zLDEzICszLDUzIEBACiAvKgogICogWGVuIGRtYS1idWYgZnVu Y3Rpb25hbGl0eSBmb3IgZ250ZGV2LgogICoKKyAqIERNQSBidWZmZXIgaW1wbGVtZW50YXRpb24g aXMgYmFzZWQgb24gZHJpdmVycy9ncHUvZHJtL2RybV9wcmltZS5jLgorICoKICAqIENvcHlyaWdo dCAoYykgMjAxOCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbywgRVBBTSBTeXN0ZW1zIEluYy4KICAq LwogCisjaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K IAorI2luY2x1ZGUgPHhlbi9ncmFudF90YWJsZS5oPgorI2luY2x1ZGUgPHhlbi9nbnRkZXYuaD4K KworI2luY2x1ZGUgImdudGRldi1jb21tb24uaCIKICNpbmNsdWRlICJnbnRkZXYtZG1hYnVmLmgi CiAKK3N0cnVjdCBnbnRkZXZfZG1hYnVmIHsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2ICpw cml2OworCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CisJc3RydWN0IGxpc3RfaGVhZCBuZXh0Owor CWludCBmZDsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCS8qIEV4cG9ydGVkIGJ1ZmZlcnMg YXJlIHJlZmVyZW5jZSBjb3VudGVkLiAqLworCQkJc3RydWN0IGtyZWYgcmVmY291bnQ7CisKKwkJ CXN0cnVjdCBnbnRkZXZfcHJpdiAqcHJpdjsKKwkJCXN0cnVjdCBnbnRkZXZfZ3JhbnRfbWFwICpt YXA7CisJCX0gZXhwOworCX0gdTsKKworCS8qIE51bWJlciBvZiBwYWdlcyB0aGlzIGJ1ZmZlciBo YXMuICovCisJaW50IG5yX3BhZ2VzOworCS8qIFBhZ2VzIG9mIHRoaXMgYnVmZmVyLiAqLworCXN0 cnVjdCBwYWdlICoqcGFnZXM7Cit9OworCitzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl93YWl0X29iaiB7 CisJc3RydWN0IGxpc3RfaGVhZCBuZXh0OworCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZf ZG1hYnVmOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247Cit9OworCitzdHJ1Y3QgZ250 ZGV2X2RtYWJ1Zl9hdHRhY2htZW50IHsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwllbnVtIGRt YV9kYXRhX2RpcmVjdGlvbiBkaXI7Cit9OworCiBzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2IHsK IAkvKiBMaXN0IG9mIGV4cG9ydGVkIERNQSBidWZmZXJzLiAqLwogCXN0cnVjdCBsaXN0X2hlYWQg ZXhwX2xpc3Q7CkBAIC0yMywxNyArNjMsNDM5IEBAIHN0cnVjdCBnbnRkZXZfZG1hYnVmX3ByaXYg ewogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiB3YWl0IGZvciBleHBvcnRlZCBETUEgYnVmZmVyIHRv IGJlIHJlbGVhc2VkLiAqLwogCitzdGF0aWMgdm9pZCBkbWFidWZfZXhwX3JlbGVhc2Uoc3RydWN0 IGtyZWYgKmtyZWYpOworCitzdGF0aWMgc3RydWN0IGdudGRldl9kbWFidWZfd2FpdF9vYmogKgor ZG1hYnVmX2V4cF93YWl0X29ial9uZXcoc3RydWN0IGdudGRldl9kbWFidWZfcHJpdiAqcHJpdiwK KwkJCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZfZG1hYnVmKQoreworCXN0cnVjdCBnbnRk ZXZfZG1hYnVmX3dhaXRfb2JqICpvYmo7CisKKwlvYmogPSBremFsbG9jKHNpemVvZigqb2JqKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFvYmopCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ aW5pdF9jb21wbGV0aW9uKCZvYmotPmNvbXBsZXRpb24pOworCW9iai0+Z250ZGV2X2RtYWJ1ZiA9 IGdudGRldl9kbWFidWY7CisKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlsaXN0X2FkZCgm b2JqLT5uZXh0LCAmcHJpdi0+ZXhwX3dhaXRfbGlzdCk7CisJLyogUHV0IG91ciByZWZlcmVuY2Ug YW5kIHdhaXQgZm9yIGdudGRldl9kbWFidWYncyByZWxlYXNlIHRvIGZpcmUuICovCisJa3JlZl9w dXQoJmdudGRldl9kbWFidWYtPnUuZXhwLnJlZmNvdW50LCBkbWFidWZfZXhwX3JlbGVhc2UpOwor CW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIHZv aWQgZG1hYnVmX2V4cF93YWl0X29ial9mcmVlKHN0cnVjdCBnbnRkZXZfZG1hYnVmX3ByaXYgKnBy aXYsCisJCQkJICAgICBzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl93YWl0X29iaiAqb2JqKQoreworCXN0 cnVjdCBnbnRkZXZfZG1hYnVmX3dhaXRfb2JqICpjdXJfb2JqLCAqcTsKKworCW11dGV4X2xvY2so JnByaXYtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXJfb2JqLCBxLCAmcHJp di0+ZXhwX3dhaXRfbGlzdCwgbmV4dCkKKwkJaWYgKGN1cl9vYmogPT0gb2JqKSB7CisJCQlsaXN0 X2RlbCgmb2JqLT5uZXh0KTsKKwkJCWtmcmVlKG9iaik7CisJCQlicmVhazsKKwkJfQorCW11dGV4 X3VubG9jaygmcHJpdi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgZG1hYnVmX2V4cF93YWl0X29i al93YWl0KHN0cnVjdCBnbnRkZXZfZG1hYnVmX3dhaXRfb2JqICpvYmosCisJCQkJICAgIHUzMiB3 YWl0X3RvX21zKQoreworCWlmICh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm9iai0+Y29t cGxldGlvbiwKKwkJCW1zZWNzX3RvX2ppZmZpZXMod2FpdF90b19tcykpIDw9IDApCisJCXJldHVy biAtRVRJTUVET1VUOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9leHBf d2FpdF9vYmpfc2lnbmFsKHN0cnVjdCBnbnRkZXZfZG1hYnVmX3ByaXYgKnByaXYsCisJCQkJICAg ICAgIHN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZfZG1hYnVmKQoreworCXN0cnVjdCBnbnRk ZXZfZG1hYnVmX3dhaXRfb2JqICpvYmosICpxOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KG9iaiwgcSwgJnByaXYtPmV4cF93YWl0X2xpc3QsIG5leHQpCisJCWlmIChvYmotPmdudGRldl9k bWFidWYgPT0gZ250ZGV2X2RtYWJ1ZikgeworCQkJcHJfZGVidWcoIkZvdW5kIGdudGRldl9kbWFi dWYgaW4gdGhlIHdhaXQgbGlzdCwgd2FrZVxuIik7CisJCQljb21wbGV0ZV9hbGwoJm9iai0+Y29t cGxldGlvbik7CisJCQlicmVhazsKKwkJfQorfQorCitzdGF0aWMgc3RydWN0IGdudGRldl9kbWFi dWYgKgorZG1hYnVmX2V4cF93YWl0X29ial9nZXRfYnlfZmQoc3RydWN0IGdudGRldl9kbWFidWZf cHJpdiAqcHJpdiwgaW50IGZkKQoreworCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpxLCAqZ250ZGV2 X2RtYWJ1ZiwgKnJldCA9IEVSUl9QVFIoLUVOT0VOVCk7CisKKwltdXRleF9sb2NrKCZwcml2LT5s b2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZ250ZGV2X2RtYWJ1ZiwgcSwgJnByaXYt PmV4cF9saXN0LCBuZXh0KQorCQlpZiAoZ250ZGV2X2RtYWJ1Zi0+ZmQgPT0gZmQpIHsKKwkJCXBy X2RlYnVnKCJGb3VuZCBnbnRkZXZfZG1hYnVmIGluIHRoZSB3YWl0IGxpc3RcbiIpOworCQkJa3Jl Zl9nZXQoJmdudGRldl9kbWFidWYtPnUuZXhwLnJlZmNvdW50KTsKKwkJCXJldCA9IGdudGRldl9k bWFidWY7CisJCQlicmVhazsKKwkJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0 dXJuIHJldDsKK30KKwogaW50IGdudGRldl9kbWFidWZfZXhwX3dhaXRfcmVsZWFzZWQoc3RydWN0 IGdudGRldl9kbWFidWZfcHJpdiAqcHJpdiwgaW50IGZkLAogCQkJCSAgICBpbnQgd2FpdF90b19t cykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiAqZ250ZGV2X2Rt YWJ1ZjsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl93YWl0X29iaiAqb2JqOworCWludCByZXQ7CisK Kwlwcl9kZWJ1ZygiV2lsbCB3YWl0IGZvciBkbWEtYnVmIHdpdGggZmQgJWRcbiIsIGZkKTsKKwkv KgorCSAqIFRyeSB0byBmaW5kIHRoZSBETUEgYnVmZmVyOiBpZiBub3QgZm91bmQgbWVhbnMgdGhh dAorCSAqIGVpdGhlciB0aGUgYnVmZmVyIGhhcyBhbHJlYWR5IGJlZW4gcmVsZWFzZWQgb3IgZmls ZSBkZXNjcmlwdG9yCisJICogcHJvdmlkZWQgaXMgd3JvbmcuCisJICovCisJZ250ZGV2X2RtYWJ1 ZiA9IGRtYWJ1Zl9leHBfd2FpdF9vYmpfZ2V0X2J5X2ZkKHByaXYsIGZkKTsKKwlpZiAoSVNfRVJS KGdudGRldl9kbWFidWYpKQorCQlyZXR1cm4gUFRSX0VSUihnbnRkZXZfZG1hYnVmKTsKKworCS8q CisJICogZ250ZGV2X2RtYWJ1ZiBzdGlsbCBleGlzdHMgYW5kIGlzIHJlZmVyZW5jZSBjb3VudCBs b2NrZWQgYnkgdXMgbm93LAorCSAqIHNvIHByZXBhcmUgdG8gd2FpdDogYWxsb2NhdGUgd2FpdCBv YmplY3QgYW5kIGFkZCBpdCB0byB0aGUgd2FpdCBsaXN0LAorCSAqIHNvIHdlIGNhbiBmaW5kIGl0 IG9uIHJlbGVhc2UuCisJICovCisJb2JqID0gZG1hYnVmX2V4cF93YWl0X29ial9uZXcocHJpdiwg Z250ZGV2X2RtYWJ1Zik7CisJaWYgKElTX0VSUihvYmopKQorCQlyZXR1cm4gUFRSX0VSUihvYmop OworCisJcmV0ID0gZG1hYnVmX2V4cF93YWl0X29ial93YWl0KG9iaiwgd2FpdF90b19tcyk7CisJ ZG1hYnVmX2V4cF93YWl0X29ial9mcmVlKHByaXYsIG9iaik7CisJcmV0dXJuIHJldDsKK30KKwor LyogRE1BIGJ1ZmZlciBleHBvcnQgc3VwcG9ydC4gKi8KKworc3RhdGljIHN0cnVjdCBzZ190YWJs ZSAqCitkbWFidWZfcGFnZXNfdG9fc2d0KHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGlu dCBucl9wYWdlcykKK3sKKwlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKKwlpbnQgcmV0OworCisJc2d0 ID0ga21hbGxvYyhzaXplb2YoKnNndCksIEdGUF9LRVJORUwpOworCWlmICghc2d0KSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNnX2FsbG9jX3RhYmxlX2Zy b21fcGFnZXMoc2d0LCBwYWdlcywgbnJfcGFnZXMsIDAsCisJCQkJCW5yX3BhZ2VzIDw8IFBBR0Vf U0hJRlQsCisJCQkJCUdGUF9LRVJORUwpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0 dXJuIHNndDsKKworb3V0OgorCWtmcmVlKHNndCk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30K Kworc3RhdGljIGludCBkbWFidWZfZXhwX29wc19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYV9i dWYsCisJCQkJIHN0cnVjdCBkZXZpY2UgKnRhcmdldF9kZXYsCisJCQkJIHN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9hdHRhY2htZW50 ICpnbnRkZXZfZG1hYnVmX2F0dGFjaDsKKworCWdudGRldl9kbWFidWZfYXR0YWNoID0ga3phbGxv YyhzaXplb2YoKmdudGRldl9kbWFidWZfYXR0YWNoKSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7 CisJaWYgKCFnbnRkZXZfZG1hYnVmX2F0dGFjaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnbnRk ZXZfZG1hYnVmX2F0dGFjaC0+ZGlyID0gRE1BX05PTkU7CisJYXR0YWNoLT5wcml2ID0gZ250ZGV2 X2RtYWJ1Zl9hdHRhY2g7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9leHBf b3BzX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkgIHN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgKmF0dGFjaCkKK3sKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9hdHRhY2htZW50 ICpnbnRkZXZfZG1hYnVmX2F0dGFjaCA9IGF0dGFjaC0+cHJpdjsKKworCWlmIChnbnRkZXZfZG1h YnVmX2F0dGFjaCkgeworCQlzdHJ1Y3Qgc2dfdGFibGUgKnNndCA9IGdudGRldl9kbWFidWZfYXR0 YWNoLT5zZ3Q7CisKKwkJaWYgKHNndCkgeworCQkJaWYgKGdudGRldl9kbWFidWZfYXR0YWNoLT5k aXIgIT0gRE1BX05PTkUpCisJCQkJZG1hX3VubWFwX3NnX2F0dHJzKGF0dGFjaC0+ZGV2LCBzZ3Qt PnNnbCwKKwkJCQkJCSAgIHNndC0+bmVudHMsCisJCQkJCQkgICBnbnRkZXZfZG1hYnVmX2F0dGFj aC0+ZGlyLAorCQkJCQkJICAgRE1BX0FUVFJfU0tJUF9DUFVfU1lOQyk7CisJCQlzZ19mcmVlX3Rh YmxlKHNndCk7CisJCX0KKworCQlrZnJlZShzZ3QpOworCQlrZnJlZShnbnRkZXZfZG1hYnVmX2F0 dGFjaCk7CisJCWF0dGFjaC0+cHJpdiA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNn X3RhYmxlICoKK2RtYWJ1Zl9leHBfb3BzX21hcF9kbWFfYnVmKHN0cnVjdCBkbWFfYnVmX2F0dGFj aG1lbnQgKmF0dGFjaCwKKwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlz dHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9hdHRhY2htZW50ICpnbnRkZXZfZG1hYnVmX2F0dGFjaCA9IGF0 dGFjaC0+cHJpdjsKKwlzdHJ1Y3QgZ250ZGV2X2RtYWJ1ZiAqZ250ZGV2X2RtYWJ1ZiA9IGF0dGFj aC0+ZG1hYnVmLT5wcml2OworCXN0cnVjdCBzZ190YWJsZSAqc2d0OworCisJcHJfZGVidWcoIk1h cHBpbmcgJWQgcGFnZXMgZm9yIGRldiAlcFxuIiwgZ250ZGV2X2RtYWJ1Zi0+bnJfcGFnZXMsCisJ CSBhdHRhY2gtPmRldik7CisKKwlpZiAoZGlyID09IERNQV9OT05FIHx8ICFnbnRkZXZfZG1hYnVm X2F0dGFjaCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBSZXR1cm4gdGhlIGNh Y2hlZCBtYXBwaW5nIHdoZW4gcG9zc2libGUuICovCisJaWYgKGdudGRldl9kbWFidWZfYXR0YWNo LT5kaXIgPT0gZGlyKQorCQlyZXR1cm4gZ250ZGV2X2RtYWJ1Zl9hdHRhY2gtPnNndDsKKworCS8q CisJICogVHdvIG1hcHBpbmdzIHdpdGggZGlmZmVyZW50IGRpcmVjdGlvbnMgZm9yIHRoZSBzYW1l IGF0dGFjaG1lbnQgYXJlCisJICogbm90IGFsbG93ZWQuCisJICovCisJaWYgKGdudGRldl9kbWFi dWZfYXR0YWNoLT5kaXIgIT0gRE1BX05PTkUpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7CisK KwlzZ3QgPSBkbWFidWZfcGFnZXNfdG9fc2d0KGdudGRldl9kbWFidWYtPnBhZ2VzLAorCQkJCSAg Z250ZGV2X2RtYWJ1Zi0+bnJfcGFnZXMpOworCWlmICghSVNfRVJSKHNndCkpIHsKKwkJaWYgKCFk bWFfbWFwX3NnX2F0dHJzKGF0dGFjaC0+ZGV2LCBzZ3QtPnNnbCwgc2d0LT5uZW50cywgZGlyLAor CQkJCSAgICAgIERNQV9BVFRSX1NLSVBfQ1BVX1NZTkMpKSB7CisJCQlzZ19mcmVlX3RhYmxlKHNn dCk7CisJCQlrZnJlZShzZ3QpOworCQkJc2d0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJfSBlbHNl IHsKKwkJCWdudGRldl9kbWFidWZfYXR0YWNoLT5zZ3QgPSBzZ3Q7CisJCQlnbnRkZXZfZG1hYnVm X2F0dGFjaC0+ZGlyID0gZGlyOworCQl9CisJfQorCWlmIChJU19FUlIoc2d0KSkKKwkJcHJfZGVi dWcoIkZhaWxlZCB0byBtYXAgc2cgdGFibGUgZm9yIGRldiAlcFxuIiwgYXR0YWNoLT5kZXYpOwor CXJldHVybiBzZ3Q7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9leHBfb3BzX3VubWFwX2RtYV9i dWYoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCQkJCQkgc3RydWN0IHNnX3Rh YmxlICpzZ3QsCisJCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJLyogTm90 IGltcGxlbWVudGVkLiBUaGUgdW5tYXAgaXMgZG9uZSBhdCBkbWFidWZfZXhwX29wc19kZXRhY2go KS4gKi8KK30KKworc3RhdGljIHZvaWQgZG1hYnVmX2V4cF9yZWxlYXNlKHN0cnVjdCBrcmVmICpr cmVmKQoreworCXN0cnVjdCBnbnRkZXZfZG1hYnVmICpnbnRkZXZfZG1hYnVmID0KKwkJY29udGFp bmVyX29mKGtyZWYsIHN0cnVjdCBnbnRkZXZfZG1hYnVmLCB1LmV4cC5yZWZjb3VudCk7CisKKwlk bWFidWZfZXhwX3dhaXRfb2JqX3NpZ25hbChnbnRkZXZfZG1hYnVmLT5wcml2LCBnbnRkZXZfZG1h YnVmKTsKKwlsaXN0X2RlbCgmZ250ZGV2X2RtYWJ1Zi0+bmV4dCk7CisJa2ZyZWUoZ250ZGV2X2Rt YWJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9leHBfb3BzX3JlbGVhc2Uoc3RydWN0IGRt YV9idWYgKmRtYV9idWYpCit7CisJc3RydWN0IGdudGRldl9kbWFidWYgKmdudGRldl9kbWFidWYg PSBkbWFfYnVmLT5wcml2OworCXN0cnVjdCBnbnRkZXZfZG1hYnVmX3ByaXYgKnByaXYgPSBnbnRk ZXZfZG1hYnVmLT5wcml2OworCisJZ250ZGV2X3JlbW92ZV9tYXAoZ250ZGV2X2RtYWJ1Zi0+dS5l eHAucHJpdiwgZ250ZGV2X2RtYWJ1Zi0+dS5leHAubWFwKTsKKwltdXRleF9sb2NrKCZwcml2LT5s b2NrKTsKKwlrcmVmX3B1dCgmZ250ZGV2X2RtYWJ1Zi0+dS5leHAucmVmY291bnQsIGRtYWJ1Zl9l eHBfcmVsZWFzZSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKK30KKworc3RhdGljIHZv aWQgKmRtYWJ1Zl9leHBfb3BzX2ttYXBfYXRvbWljKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAor CQkJCQl1bnNpZ25lZCBsb25nIHBhZ2VfbnVtKQoreworCS8qIE5vdCBpbXBsZW1lbnRlZC4gKi8K KwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZG1hYnVmX2V4cF9vcHNfa3VubWFwX2F0 b21pYyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgcGFnZV9u dW0sIHZvaWQgKmFkZHIpCit7CisJLyogTm90IGltcGxlbWVudGVkLiAqLworfQorCitzdGF0aWMg dm9pZCAqZG1hYnVmX2V4cF9vcHNfa21hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkg dW5zaWduZWQgbG9uZyBwYWdlX251bSkKK3sKKwkvKiBOb3QgaW1wbGVtZW50ZWQuICovCisJcmV0 dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRtYWJ1Zl9leHBfb3BzX2t1bm1hcChzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1ZiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGFnZV9udW0sIHZvaWQgKmFk ZHIpCit7CisJLyogTm90IGltcGxlbWVudGVkLiAqLworfQorCitzdGF0aWMgaW50IGRtYWJ1Zl9l eHBfb3BzX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYV9idWYsCisJCQkgICAgICAgc3RydWN0IHZt X2FyZWFfc3RydWN0ICp2bWEpCit7CisJLyogTm90IGltcGxlbWVudGVkLiAqLworCXJldHVybiAw OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGRtYWJ1Zl9leHBfb3BzID0g IHsKKwkuYXR0YWNoID0gZG1hYnVmX2V4cF9vcHNfYXR0YWNoLAorCS5kZXRhY2ggPSBkbWFidWZf ZXhwX29wc19kZXRhY2gsCisJLm1hcF9kbWFfYnVmID0gZG1hYnVmX2V4cF9vcHNfbWFwX2RtYV9i dWYsCisJLnVubWFwX2RtYV9idWYgPSBkbWFidWZfZXhwX29wc191bm1hcF9kbWFfYnVmLAorCS5y ZWxlYXNlID0gZG1hYnVmX2V4cF9vcHNfcmVsZWFzZSwKKwkubWFwID0gZG1hYnVmX2V4cF9vcHNf a21hcCwKKwkubWFwX2F0b21pYyA9IGRtYWJ1Zl9leHBfb3BzX2ttYXBfYXRvbWljLAorCS51bm1h cCA9IGRtYWJ1Zl9leHBfb3BzX2t1bm1hcCwKKwkudW5tYXBfYXRvbWljID0gZG1hYnVmX2V4cF9v cHNfa3VubWFwX2F0b21pYywKKwkubW1hcCA9IGRtYWJ1Zl9leHBfb3BzX21tYXAsCit9OworCitz dHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9leHBvcnRfYXJncyB7CisJc3RydWN0IGdudGRldl9wcml2ICpw cml2OworCXN0cnVjdCBnbnRkZXZfZ3JhbnRfbWFwICptYXA7CisJc3RydWN0IGdudGRldl9kbWFi dWZfcHJpdiAqZG1hYnVmX3ByaXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCBjb3VudDsK KwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXUzMiBmZDsKK307CisKK3N0YXRpYyBpbnQgZG1hYnVm X2V4cF9mcm9tX3BhZ2VzKHN0cnVjdCBnbnRkZXZfZG1hYnVmX2V4cG9ydF9hcmdzICphcmdzKQor eworCURFRklORV9ETUFfQlVGX0VYUE9SVF9JTkZPKGV4cF9pbmZvKTsKKwlzdHJ1Y3QgZ250ZGV2 X2RtYWJ1ZiAqZ250ZGV2X2RtYWJ1ZjsKKwlpbnQgcmV0ID0gMDsKKworCWdudGRldl9kbWFidWYg PSBremFsbG9jKHNpemVvZigqZ250ZGV2X2RtYWJ1ZiksIEdGUF9LRVJORUwpOworCWlmICghZ250 ZGV2X2RtYWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlrcmVmX2luaXQoJmdudGRldl9kbWFi dWYtPnUuZXhwLnJlZmNvdW50KTsKKworCWdudGRldl9kbWFidWYtPnByaXYgPSBhcmdzLT5kbWFi dWZfcHJpdjsKKwlnbnRkZXZfZG1hYnVmLT5ucl9wYWdlcyA9IGFyZ3MtPmNvdW50OworCWdudGRl dl9kbWFidWYtPnBhZ2VzID0gYXJncy0+cGFnZXM7CisJZ250ZGV2X2RtYWJ1Zi0+dS5leHAucHJp diA9IGFyZ3MtPnByaXY7CisJZ250ZGV2X2RtYWJ1Zi0+dS5leHAubWFwID0gYXJncy0+bWFwOwor CisJZXhwX2luZm8uZXhwX25hbWUgPSBLQlVJTERfTU9ETkFNRTsKKwlpZiAoYXJncy0+ZGV2LT5k cml2ZXIgJiYgYXJncy0+ZGV2LT5kcml2ZXItPm93bmVyKQorCQlleHBfaW5mby5vd25lciA9IGFy Z3MtPmRldi0+ZHJpdmVyLT5vd25lcjsKKwllbHNlCisJCWV4cF9pbmZvLm93bmVyID0gVEhJU19N T0RVTEU7CisJZXhwX2luZm8ub3BzID0gJmRtYWJ1Zl9leHBfb3BzOworCWV4cF9pbmZvLnNpemUg PSBhcmdzLT5jb3VudCA8PCBQQUdFX1NISUZUOworCWV4cF9pbmZvLmZsYWdzID0gT19SRFdSOwor CWV4cF9pbmZvLnByaXYgPSBnbnRkZXZfZG1hYnVmOworCisJZ250ZGV2X2RtYWJ1Zi0+ZG1hYnVm ID0gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKKwlpZiAoSVNfRVJSKGdudGRldl9kbWFidWYt PmRtYWJ1ZikpIHsKKwkJcmV0ID0gUFRSX0VSUihnbnRkZXZfZG1hYnVmLT5kbWFidWYpOworCQln bnRkZXZfZG1hYnVmLT5kbWFidWYgPSBOVUxMOworCQlnb3RvIGZhaWw7CisJfQorCisJcmV0ID0g ZG1hX2J1Zl9mZChnbnRkZXZfZG1hYnVmLT5kbWFidWYsIE9fQ0xPRVhFQyk7CisJaWYgKHJldCA8 IDApCisJCWdvdG8gZmFpbDsKKworCWdudGRldl9kbWFidWYtPmZkID0gcmV0OworCWFyZ3MtPmZk ID0gcmV0OworCisJcHJfZGVidWcoIkV4cG9ydGluZyBETUEgYnVmZmVyIHdpdGggZmQgJWRcbiIs IHJldCk7CisKKwltdXRleF9sb2NrKCZhcmdzLT5kbWFidWZfcHJpdi0+bG9jayk7CisJbGlzdF9h ZGQoJmdudGRldl9kbWFidWYtPm5leHQsICZhcmdzLT5kbWFidWZfcHJpdi0+ZXhwX2xpc3QpOwor CW11dGV4X3VubG9jaygmYXJncy0+ZG1hYnVmX3ByaXYtPmxvY2spOworCXJldHVybiAwOworCitm YWlsOgorCWlmIChnbnRkZXZfZG1hYnVmLT5kbWFidWYpCisJCWRtYV9idWZfcHV0KGdudGRldl9k bWFidWYtPmRtYWJ1Zik7CisJa2ZyZWUoZ250ZGV2X2RtYWJ1Zik7CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHN0cnVjdCBnbnRkZXZfZ3JhbnRfbWFwICoKK2RtYWJ1Zl9leHBfYWxsb2NfYmFj a2luZ19zdG9yYWdlKHN0cnVjdCBnbnRkZXZfcHJpdiAqcHJpdiwgaW50IGRtYWJ1Zl9mbGFncywK KwkJCQkgaW50IGNvdW50KQoreworCXN0cnVjdCBnbnRkZXZfZ3JhbnRfbWFwICptYXA7CisKKwlp ZiAodW5saWtlbHkoY291bnQgPD0gMCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJ aWYgKChkbWFidWZfZmxhZ3MgJiBHTlRERVZfRE1BX0ZMQUdfV0MpICYmCisJICAgIChkbWFidWZf ZmxhZ3MgJiBHTlRERVZfRE1BX0ZMQUdfQ09IRVJFTlQpKSB7CisJCXByX2RlYnVnKCJXcm9uZyBk bWEtYnVmIGZsYWdzOiBlaXRoZXIgV0Mgb3IgY29oZXJlbnQsIG5vdCBib3RoXG4iKTsKKwkJcmV0 dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJbWFwID0gZ250ZGV2X2FsbG9jX21hcChwcml2 LCBjb3VudCwgZG1hYnVmX2ZsYWdzKTsKKwlpZiAoIW1hcCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVO T01FTSk7CisKKwlpZiAodW5saWtlbHkoZ250ZGV2X2FjY291bnRfbWFwcGVkX3BhZ2VzKGNvdW50 KSkpIHsKKwkJcHJfZGVidWcoImNhbid0IG1hcDogb3ZlciBsaW1pdFxuIik7CisJCWdudGRldl9w dXRfbWFwKE5VTEwsIG1hcCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwlyZXR1 cm4gbWFwOwogfQogCiBpbnQgZ250ZGV2X2RtYWJ1Zl9leHBfZnJvbV9yZWZzKHN0cnVjdCBnbnRk ZXZfcHJpdiAqcHJpdiwgaW50IGZsYWdzLAogCQkJCWludCBjb3VudCwgdTMyIGRvbWlkLCB1MzIg KnJlZnMsIHUzMiAqZmQpCiB7CisJc3RydWN0IGdudGRldl9ncmFudF9tYXAgKm1hcDsKKwlzdHJ1 Y3QgZ250ZGV2X2RtYWJ1Zl9leHBvcnRfYXJncyBhcmdzOworCWludCBpLCByZXQ7CisKIAkqZmQg PSAtMTsKLQlyZXR1cm4gLUVJTlZBTDsKKworCW1hcCA9IGRtYWJ1Zl9leHBfYWxsb2NfYmFja2lu Z19zdG9yYWdlKHByaXYsIGZsYWdzLCBjb3VudCk7CisJaWYgKElTX0VSUihtYXApKQorCQlyZXR1 cm4gUFRSX0VSUihtYXApOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJbWFw LT5ncmFudHNbaV0uZG9taWQgPSBkb21pZDsKKwkJbWFwLT5ncmFudHNbaV0ucmVmID0gcmVmc1tp XTsKKwl9CisKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKKwlnbnRkZXZfYWRkX21hcChwcml2 LCBtYXApOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CisKKwltYXAtPmZsYWdzIHw9IEdO VE1BUF9ob3N0X21hcDsKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisJbWFwLT5mbGFncyB8PSBH TlRNQVBfZGV2aWNlX21hcDsKKyNlbmRpZgorCisJcmV0ID0gZ250ZGV2X21hcF9ncmFudF9wYWdl cyhtYXApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWFyZ3MucHJpdiA9IHByaXY7 CisJYXJncy5tYXAgPSBtYXA7CisJYXJncy5kZXYgPSBwcml2LT5kbWFfZGV2OworCWFyZ3MuZG1h YnVmX3ByaXYgPSBwcml2LT5kbWFidWZfcHJpdjsKKwlhcmdzLmNvdW50ID0gbWFwLT5jb3VudDsK KwlhcmdzLnBhZ2VzID0gbWFwLT5wYWdlczsKKworCXJldCA9IGRtYWJ1Zl9leHBfZnJvbV9wYWdl cygmYXJncyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJKmZkID0gYXJncy5mZDsK KwlyZXR1cm4gMDsKKworb3V0OgorCWdudGRldl9yZW1vdmVfbWFwKHByaXYsIG1hcCk7CisJcmV0 dXJuIHJldDsKIH0KIAogLyogRE1BIGJ1ZmZlciBpbXBvcnQgc3VwcG9ydC4gKi8KQEAgLTYzLDYg KzUyNSwxMCBAQCBzdHJ1Y3QgZ250ZGV2X2RtYWJ1Zl9wcml2ICpnbnRkZXZfZG1hYnVmX2luaXQo dm9pZCkKIAlpZiAoIXByaXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCisJbXV0ZXhf aW5pdCgmcHJpdi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmV4cF9saXN0KTsKKwlJ TklUX0xJU1RfSEVBRCgmcHJpdi0+ZXhwX3dhaXRfbGlzdCk7CisKIAlyZXR1cm4gcHJpdjsKIH0K IApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ250ZGV2LmMgYi9kcml2ZXJzL3hlbi9nbnRkZXYu YwppbmRleCBlODI2NjBkODFkN2UuLjVmOTNjZDUzNDg0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy94 ZW4vZ250ZGV2LmMKKysrIGIvZHJpdmVycy94ZW4vZ250ZGV2LmMKQEAgLTI2Miw2ICsyNjIsMTYg QEAgdm9pZCBnbnRkZXZfcHV0X21hcChzdHJ1Y3QgZ250ZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBn bnRkZXZfZ3JhbnRfbWFwICptYXApCiAJZ250ZGV2X2ZyZWVfbWFwKG1hcCk7CiB9CiAKKyNpZmRl ZiBDT05GSUdfWEVOX0dOVERFVl9ETUFCVUYKK3ZvaWQgZ250ZGV2X3JlbW92ZV9tYXAoc3RydWN0 IGdudGRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZ250ZGV2X2dyYW50X21hcCAqbWFwKQoreworCW11 dGV4X2xvY2soJnByaXYtPmxvY2spOworCWxpc3RfZGVsKCZtYXAtPm5leHQpOworCWdudGRldl9w dXRfbWFwKE5VTEwgLyogYWxyZWFkeSByZW1vdmVkICovLCBtYXApOworCW11dGV4X3VubG9jaygm cHJpdi0+bG9jayk7Cit9CisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQg ZmluZF9ncmFudF9wdGVzKHB0ZV90ICpwdGUsIHBndGFibGVfdCB0b2tlbiwKLS0gCjIuMTcuMQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZl bCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94ZW4tZGV2ZWw=