From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 06/17] drm: Global atomic state handling Date: Sun, 2 Nov 2014 14:19:19 +0100 Message-ID: <1414934370-11924-7-git-send-email-daniel.vetter@ffwll.ch> References: <1414934370-11924-1-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1414934370-11924-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: DRI Development Cc: Daniel Vetter , Intel Graphics Development , Fengguang Wu List-Id: dri-devel@lists.freedesktop.org U29tZSBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBSb2IncyBwYXRjaGVzIGFnYWluOgotIERyb3Bw ZWQgdGhlIGNvbW1pdHRlZCBhbmQgY2hlY2tlZCBib29sZWFucy4gQ2hlY2tpbmcgd2lsbCBiZQog IGludGVybmFsbHkgZW5mb3JjZWQgYnkgYWx3YXlzIGNhbGxpbmcgLT5hdG9taWNfY2hlY2sgYmVm b3JlCiAgLT5hdG9taWNfY29tbWl0LiBBbmQgYXN5bmMgaGFuZGxpbmcgbmVlZHMgdG8gYmUgc29s dmVkIGRpZmZlcmVudGx5CiAgYmVjYXVzZSB0aGUgY3VycmVudCBzY2hlbWUgY29tcGxldGVseSBz aWRlLXN0ZXBzIHd3IG11dGV4IGRlYWRsb2NrCiAgYXZvaWRhbmNlIChhbmQgc28gZWl0aGVyIHJl aW52ZW50cyBhIG5ldyBkZWFkbG9jayBhdm9pZGFuY2Ugd2hlZWwgb3IKICBsaWtlIHRoZSBjdXJy ZW50IGNvZGUganVzdCBkZWFkbG9ja3MpLgoKLSBTdGF0ZSBmb3IgY29ubmVjdG9ycyBuZWVkZWQg dG8gYmUgYWRkZWQsIHNpbmNlIG5vdyB0aGV5IGhhdmUgYQogIGZ1bGwtYmxvd24gZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAoc28gdGhhdCBkcml2ZXJzIGhhdmUgc29tZXRoaW5nIHRvCiAgYXR0YWNoIHRo ZWlyIG93biBzdHVmZiB0bykuCgotIFJlZmNvdW50aW5nIGlzIGdvbmUuIEkgcGxhbmUgdG8gc29s dmUgYXN5bmMgdXBkYXRlcyBkaWZmZXJlbnRseSwKICBzaW5jZSB0aGUgbG9jay1wYXNzaW5nIHNj aGVtZSBkb2Vzbid0IGN1dCBpdCAoc2luY2UgaXQgYWJ1c2VzIHd3CiAgbXV0ZXhlcykuIEVzc2Vu dGlhbGx5IHdoYXQgd2UgbmVlZCBmb3IgYXN5bmMgaXMgYSBzaW1wbGUgb3duZXJzaGlwCiAgdHJh bnNmZXIgZnJvbSB0aGUgY2FsbGVyIHRvIHRoZSBkcml2ZXIuIFRoYXQgZG9lc24ndCBuZWVkIGZ1 bGwtYmxvd24KICByZWZjb3VudGluZy4KCi0gVGhlIGFjcXVpcmUgY3R4IGlzIGEgcG9pbnRlci4g UmVhbCBhdG9taWMgY2FsbGVycyBzaG91bGQgaGF2ZSB0aGF0CiAgb24gdGhlaXIgc3RhY2ssIGxl Z2FjeSBlbnRyeSBwb2ludHMgbmVlZCB0byBwdXQgdGhlIHJpZ2h0IG9uZQogIChvYnRhaW5lZCBi eSBkcm1fbW9kZXNldF9sZWdhY3lfYWN1aXJlX2N0eCkgaW4gdGhlcmUuCgotIEkndmUgZHJvcHBl ZCBhbGwgaG9va3MgZXhjZXB0IGNoZWNrL2NvbW1pdC4gQWxsIHRoZSBiZWdpbi9lbmQKICBoYW5k bGluZyBpcyBkb25lIGJ5IGNvcmUgZnVuY3Rpb25zIGFuZCBpcyB0aGUgc2FtZS4KCi0gY29tbWl0 L2NoZWNrIGFyZSBqdXN0IHRoaW4gd3JhcHBlcnMgdGhhdCBlbnN1cmUgdGhhdCAtPmNoZWNrIGlz CiAgYWx3YXlzIGNhbGxlZC4KCi0gVG8gaGVscCBvdXQgd2l0aCBsb2NraW5nIGluIHRoZSBsZWdh Y3kgaW1wbGVtZW50YXRpb25zIEkndmUgYWRkZWQgYQogIGhlbHBlciB0byBqdXN0IGdyYWIgYWxs IGxvY2tzIGluIHRoZSBiYWNrb2ZmIGNhc2UuCgp2MjogQWRkIG5vdGljZXMgdGhhdCBjaGVjay9j b21taXQgY2FuIGZhaWwgd2l0aCBFREVBRExLLgoKdjM6Ci0gTW9yZSBjb25zaXN0ZW50IG5hbWlu ZyBmb3Igc3RhdGVfYWxsb2MuCi0gQWRkIHN0YXRlX2NsZWFyIHdoaWNoIGlzIG5lZWRlZCBmb3Ig YmFja29mZiBhbmQgcmV0cnkuCgp2NDogUGxhbmVzL2Nvbm5lY3RvcnMgY2FuIHN3aXRjaCBiZXR3 ZWVuIGNydGNzLCBhbmQgd2UgbmVlZCB0byBiZQpjYXJlZnVsIHRoYXQgd2UgZ3JhYiB0aGUgc3Rh dGUgKGFuZCBsb2NrcykgZm9yIGJvdGggdGhlIG9sZCBhbmQgbmV3CmNydGMuIEltcHJvdmUgdGhl IGludGVyZmFjZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoaXMuCgp2NTogQWRkIGZ1bmN0aW9ucyB0 byBncmFiIGFmZmVjdGVkIGNvbm5lY3RvcnMgZm9yIGEgY3J0YyBhbmQgdG8gcmVjb21wdXRlCnRo ZSBjcnRjLT5lbmFibGUgc3RhdGUuIFRoaXMgaXMgdXNlZnVsIGZvciBib3RoIGhlbHBlciBhbmQg YXRvbWljIGlvY3RsCmNvZGUgd2hlbiBlLmcuIHJlbW92aW5nIGEgY29ubmVjdG9yLgoKdjY6IFNx dWFzaCBpbiBmaXh1cCBmcm9tIEZlbmdndWFuZyB0byB1c2UgRVJSX0NBU1QuCgp2NzogQWRkIGRl YnVnIG91dHB1dC4KCnY4OiBNYWtlIGNoZWNrcGF0Y2ggaGFwcHkgYWJvdXQga2NhbGxvYyBhcmd1 bWVudCBvcmRlcmluZy4KCnY5OiBJbXByb3ZlIGtlcm5lbGRvYyBpbiBkcm1fY3J0Yy5oCgp2MTA6 Ci0gRml4IGFub3RoZXIga2NhbGxvYyBhcmd1bWVudCBtaXNvcmRlciBJJ3ZlIG1pc3NlZC4KLSBN b3JlIHBvbGlzaCBmb3Iga2VybmVsZG9jLgoKdjExOiBDbGFyaWZ5IHRoZSBvd25lcnNoaXAgcnVs ZXMgZm9yIHRoZSBzdGF0ZSBvYmplY3QuIFRoZSBuZXcgcnVsZSBpcwp0aGF0IGEgc3VjY2Vzc2Z1 bCBkcm1fYXRvbWljX2NvbW1pdCAod2hldGhlciBzeW5jaHJvbm91cyBvciBhc255YykKYWx3YXlz IGluaGVyaXRzIHRoZSBzdGF0ZSBhbmQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBjbGVhbi11cC4g VGhhdAp3YXkgYXN5bmMgYW5kIHN5bmMgLT5jb21taXQgZnVuY3Rpb25zIGFyZSBtb3JlIHNpbWls YXIuCgp2MTI6IEEgZmV3IGJ1Z2ZpeGVzOgotIEFzc2lnbiBzdGF0ZS0+c3RhdGUgcG9pbnRlcnMg Y29ycmVjdGx5IHdoZW4gZ3JhYmJpbmcgc3RhdGUgb2JqZWN0cyAtCiAgd2UgbmVlZCB0byBsaW5r IHRoZW0gdXAgd2l0aCB0aGUgZ2xvYmFsIHN0YXRlLgotIEhhbmRsZSBhIE5VTEwgY3J0YyBpbiBz ZXRfY3J0Y19mb3JfcGxhbmUgdG8gc2ltcGxpZnkgY29kZSBmbG93IGEgYml0CiAgZm9yIHRoZSBj YWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uCgpDYzogRmVuZ2d1YW5nIFd1IDxmZW5nZ3Vhbmcud3VA aW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIGRyaXZl cnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgfCA1ODggKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oICAgICB8ICA2MyArKysr KwogaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAgICB8ICAzNSArKysKIDQgZmlsZXMgY2hhbmdl ZCwgNjg3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9k cm0vZHJtX2F0b21pYy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IGEzMTQ5ZTIwYTI0OS4uMmU4OWNkNTBjMTRm IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8g ZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCiAJCWRybV9pbmZvLm8gZHJtX2RlYnVnZnMubyBkcm1f ZW5jb2Rlcl9zbGF2ZS5vIFwKIAkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9iYWwubyBkcm1f cHJpbWUubyBcCiAJCWRybV9yZWN0Lm8gZHJtX3ZtYV9tYW5hZ2VyLm8gZHJtX2ZsaXBfd29yay5v IFwKLQkJZHJtX21vZGVzZXRfbG9jay5vCisJCWRybV9tb2Rlc2V0X2xvY2subyBkcm1fYXRvbWlj Lm8KIAogZHJtLSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KIGRybS0kKENPTkZJR19E Uk1fR0VNX0NNQV9IRUxQRVIpICs9IGRybV9nZW1fY21hX2hlbHBlci5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM2ZGI4YTQ4Y2FkNgot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKQEAgLTAsMCAr MSw1ODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdAorICogQ29weXJpZ2h0 IChDKSAyMDE0IEludGVsIENvcnAuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICog YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S CisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAq IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KKyAqIERhbmllbCBWZXR0ZXIgPGRhbmll bC52ZXR0ZXJAZmZ3bGwuY2g+CisgKi8KKworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+ CisKK3N0YXRpYyB2b2lkIGtmcmVlX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSkKK3sKKwlrZnJlZShzdGF0ZS0+Y29ubmVjdG9ycyk7CisJa2ZyZWUoc3RhdGUtPmNvbm5lY3Rv cl9zdGF0ZXMpOworCWtmcmVlKHN0YXRlLT5jcnRjcyk7CisJa2ZyZWUoc3RhdGUtPmNydGNfc3Rh dGVzKTsKKwlrZnJlZShzdGF0ZS0+cGxhbmVzKTsKKwlrZnJlZShzdGF0ZS0+cGxhbmVfc3RhdGVz KTsKKwlrZnJlZShzdGF0ZSk7Cit9CisKKy8qKgorICogZHJtX2F0b21pY19zdGF0ZV9hbGxvYyAt IGFsbG9jYXRlIGF0b21pYyBzdGF0ZQorICogQGRldjogRFJNIGRldmljZQorICoKKyAqIFRoaXMg YWxsb2NhdGVzIGFuIGVtcHR5IGF0b21pYyBzdGF0ZSB0byB0cmFjayB1cGRhdGVzLgorICovCitz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqCitkcm1fYXRvbWljX3N0YXRlX2FsbG9jKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCisJ c3RhdGUgPSBremFsbG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRl KQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXRlLT5jcnRjcyA9IGtjYWxsb2MoZGV2LT5tb2RlX2Nv bmZpZy5udW1fY3J0YywKKwkJCSAgICAgICBzaXplb2YoKnN0YXRlLT5jcnRjcyksIEdGUF9LRVJO RUwpOworCWlmICghc3RhdGUtPmNydGNzKQorCQlnb3RvIGZhaWw7CisJc3RhdGUtPmNydGNfc3Rh dGVzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAorCQkJCSAgICAgc2l6ZW9m KCpzdGF0ZS0+Y3J0Y19zdGF0ZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5jcnRjX3N0 YXRlcykKKwkJZ290byBmYWlsOworCXN0YXRlLT5wbGFuZXMgPSBrY2FsbG9jKGRldi0+bW9kZV9j b25maWcubnVtX3RvdGFsX3BsYW5lLAorCQkJCXNpemVvZigqc3RhdGUtPnBsYW5lX3N0YXRlcyks IEdGUF9LRVJORUwpOworCWlmICghc3RhdGUtPnBsYW5lcykKKwkJZ290byBmYWlsOworCXN0YXRl LT5wbGFuZV9zdGF0ZXMgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX3RvdGFsX3BsYW5l LAorCQkJCSAgICAgIHNpemVvZigqc3RhdGUtPnBsYW5lX3N0YXRlcyksIEdGUF9LRVJORUwpOwor CWlmICghc3RhdGUtPnBsYW5lX3N0YXRlcykKKwkJZ290byBmYWlsOworCXN0YXRlLT5jb25uZWN0 b3JzID0ga2NhbGxvYyhkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsCisJCQkJICAgIHNp emVvZigqc3RhdGUtPmNvbm5lY3RvcnMpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0 YXRlLT5jb25uZWN0b3JzKQorCQlnb3RvIGZhaWw7CisJc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXMg PSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKKwkJCQkJICBzaXplb2Yo KnN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0 YXRlLT5jb25uZWN0b3Jfc3RhdGVzKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ZS0+ZGV2ID0gZGV2 OworCisJRFJNX0RFQlVHX0tNUygiQWxsb2NhdGUgYXRvbWljIHN0YXRlICVwXG4iLCBzdGF0ZSk7 CisKKwlyZXR1cm4gc3RhdGU7CitmYWlsOgorCWtmcmVlX3N0YXRlKHN0YXRlKTsKKworCXJldHVy biBOVUxMOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3N0YXRlX2FsbG9jKTsKKworLyoq CisgKiBkcm1fYXRvbWljX3N0YXRlX2NsZWFyIC0gY2xlYXIgc3RhdGUgb2JqZWN0CisgKiBAc3Rh dGU6IGF0b21pYyBzdGF0ZQorICoKKyAqIFdoZW4gdGhlIHcvdyBtdXRleCBhbGdvcml0aG0gZGV0 ZWN0cyBhIGRlYWRsb2NrIHdlIG5lZWQgdG8gYmFjayBvZmYgYW5kIGRyb3AKKyAqIGFsbCBsb2Nr cy4gU28gc29tZW9uZSBlbHNlIGNvdWxkIHNuZWFrIGluIGFuZCBjaGFuZ2UgdGhlIGN1cnJlbnQg bW9kZXNldAorICogY29uZmlndXJhdGlvbi4gV2hpY2ggbWVhbnMgdGhhdCBhbGwgdGhlIHN0YXRl IGFzc2VtYmxlZCBpbiBAc3RhdGUgaXMgbm8KKyAqIGxvbmdlciBhbiBhdG9taWMgdXBkYXRlIHRv IHRoZSBjdXJyZW50IHN0YXRlLCBidXQgdG8gc29tZSBhcmJpdHJhcnkgZWFybGllcgorICogc3Rh dGUuIFdoaWNoIGNvdWxkIGJyZWFrIGFzc3VtcHRpb25zIHRoZSBkcml2ZXIncyAtPmF0b21pY19j aGVjayBsaWtlbHkKKyAqIHJlbGllcyBvbi4KKyAqCisgKiBIZW5jZSB3ZSBtdXN0IGNsZWFyIGFs bCBjYWNoZWQgc3RhdGUgYW5kIGNvbXBsZXRlbHkgc3RhcnQgb3ZlciwgdXNpbmcgdGhpcworICog ZnVuY3Rpb24uCisgKi8KK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5k ZXY7CisJaW50IGk7CisKKwlEUk1fREVCVUdfS01TKCJDbGVhcmluZyBhdG9taWMgc3RhdGUgJXBc biIsIHN0YXRlKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmlnLm51bV9jb25u ZWN0b3I7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gc3RhdGUt PmNvbm5lY3RvcnNbaV07CisKKwkJaWYgKCFjb25uZWN0b3IpCisJCQljb250aW51ZTsKKworCQlj b25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZGVzdHJveV9zdGF0ZShjb25uZWN0b3IsCisJCQkJCQkg ICAgICAgc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkg PCBkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjOyBpKyspIHsKKwkJc3RydWN0IGRybV9jcnRjICpj cnRjID0gc3RhdGUtPmNydGNzW2ldOworCisJCWlmICghY3J0YykKKwkJCWNvbnRpbnVlOworCisJ CWNydGMtPmZ1bmNzLT5hdG9taWNfZGVzdHJveV9zdGF0ZShjcnRjLAorCQkJCQkJICBzdGF0ZS0+ Y3J0Y19zdGF0ZXNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmln Lm51bV90b3RhbF9wbGFuZTsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gc3Rh dGUtPnBsYW5lc1tpXTsKKworCQlpZiAoIXBsYW5lKQorCQkJY29udGludWU7CisKKwkJcGxhbmUt PmZ1bmNzLT5hdG9taWNfZGVzdHJveV9zdGF0ZShwbGFuZSwKKwkJCQkJCSAgIHN0YXRlLT5wbGFu ZV9zdGF0ZXNbaV0pOworCX0KK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zdGF0ZV9jbGVh cik7CisKKy8qKgorICogZHJtX2F0b21pY19zdGF0ZV9mcmVlIC0gZnJlZSBhbGwgbWVtb3J5IGZv ciBhbiBhdG9taWMgc3RhdGUKKyAqIEBzdGF0ZTogYXRvbWljIHN0YXRlIHRvIGRlYWxsb2NhdGUK KyAqCisgKiBUaGlzIGZyZWVzIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFuIGF0b21pYyBz dGF0ZSwgaW5jbHVkaW5nIGFsbCB0aGUKKyAqIHBlci1vYmplY3Qgc3RhdGUgZm9yIHBsYW5lcywg Y3J0Y3MgYW5kIGNvbm5lY3RvcnMuCisgKi8KK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlkcm1fYXRvbWljX3N0YXRlX2NsZWFy KHN0YXRlKTsKKworCURSTV9ERUJVR19LTVMoIkZyZWVpbmcgYXRvbWljIHN0YXRlICVwXG4iLCBz dGF0ZSk7CisKKwlrZnJlZV9zdGF0ZShzdGF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfc3RhdGVfZnJlZSk7CisKKy8qKgorICogZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZSAtIGdl dCBjcnRjIHN0YXRlCisgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0CisgKiBA Y3J0YzogY3J0YyB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgorICoKKyAqIFRoaXMgZnVuY3Rpb25z IHJldHVybnMgdGhlIGNydGMgc3RhdGUgZm9yIHRoZSBnaXZlbiBjcnRjLCBhbGxvY2F0aW5nIGl0 IGlmCisgKiBuZWVkZWQuIEl0IHdpbGwgYWxzbyBncmFiIHRoZSByZWxldmFudCBjcnRjIGxvY2sg dG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRlCisgKiBpcyBjb25zaXN0ZW50LgorICoKKyAqIFJl dHVybnM6CisgKgorICogRWl0aGVyIHRoZSBhbGxvY2F0ZWQgc3RhdGUgb3IgdGhlIGVycm9yIGNv ZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVuCisgKiB0aGUgZXJyb3IgaXMgRURFQURM SyB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhl CisgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIg ZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworc3RydWN0IGRybV9jcnRjX3N0YXRlICoKK2RybV9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICBz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaW50IHJldCwgaW5kZXg7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJaW5kZXggPSBkcm1fY3J0Y19pbmRleChjcnRjKTsK KworCWlmIChzdGF0ZS0+Y3J0Y19zdGF0ZXNbaW5kZXhdKQorCQlyZXR1cm4gc3RhdGUtPmNydGNf c3RhdGVzW2luZGV4XTsKKworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNydGMtPm11dGV4LCBz dGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisK KwljcnRjX3N0YXRlID0gY3J0Yy0+ZnVuY3MtPmF0b21pY19kdXBsaWNhdGVfc3RhdGUoY3J0Yyk7 CisJaWYgKCFjcnRjX3N0YXRlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXN0YXRl LT5jcnRjX3N0YXRlc1tpbmRleF0gPSBjcnRjX3N0YXRlOworCXN0YXRlLT5jcnRjc1tpbmRleF0g PSBjcnRjOworCWNydGNfc3RhdGUtPnN0YXRlID0gc3RhdGU7CisKKwlEUk1fREVCVUdfS01TKCJB ZGRlZCBbQ1JUQzolZF0gJXAgc3RhdGUgdG8gJXBcbiIsCisJCSAgICAgIGNydGMtPmJhc2UuaWQs IGNydGNfc3RhdGUsIHN0YXRlKTsKKworCXJldHVybiBjcnRjX3N0YXRlOworfQorRVhQT1JUX1NZ TUJPTChkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKTsKKworLyoqCisgKiBkcm1fYXRvbWljX2dl dF9wbGFuZV9zdGF0ZSAtIGdldCBwbGFuZSBzdGF0ZQorICogQHN0YXRlOiBnbG9iYWwgYXRvbWlj IHN0YXRlIG9iamVjdAorICogQHBsYW5lOiBwbGFuZSB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgor ICoKKyAqIFRoaXMgZnVuY3Rpb25zIHJldHVybnMgdGhlIHBsYW5lIHN0YXRlIGZvciB0aGUgZ2l2 ZW4gcGxhbmUsIGFsbG9jYXRpbmcgaXQgaWYKKyAqIG5lZWRlZC4gSXQgd2lsbCBhbHNvIGdyYWIg dGhlIHJlbGV2YW50IHBsYW5lIGxvY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRlCisgKiBp cyBjb25zaXN0ZW50LgorICoKKyAqIFJldHVybnM6CisgKgorICogRWl0aGVyIHRoZSBhbGxvY2F0 ZWQgc3RhdGUgb3IgdGhlIGVycm9yIGNvZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVu CisgKiB0aGUgZXJyb3IgaXMgRURFQURMSyB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0 ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlCisgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3Qg YmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSAqCitkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCWlu dCByZXQsIGluZGV4OworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJ aW5kZXggPSBkcm1fcGxhbmVfaW5kZXgocGxhbmUpOworCisJaWYgKHN0YXRlLT5wbGFuZV9zdGF0 ZXNbaW5kZXhdKQorCQlyZXR1cm4gc3RhdGUtPnBsYW5lX3N0YXRlc1tpbmRleF07CisKKwkvKgor CSAqIFRPRE86IFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIHBlci1wbGFuZSBtdXRleGVzLiBTbyBp bnN0ZWFkIG9mIHRyeWluZworCSAqIGNyYXp5IHRyaWNrcyB3aXRoIGRlZmVycmluZyBwbGFuZS0+ Y3J0YyBhbmQgaG9waW5nIGZvciB0aGUgYmVzdCBqdXN0CisJICogZ3JhYiBhbGwgY3J0YyBsb2Nr cy4gT25jZSB3ZSBoYXZlIHBlci1wbGFuZSBsb2NrcyB3ZSBtdXN0IHVwZGF0ZSB0aGlzCisJICog dG8gb25seSB0YWtlIHRoZSBwbGFuZSBtdXRleC4KKwkgKi8KKwlyZXQgPSBkcm1fbW9kZXNldF9s b2NrX2FsbF9jcnRjcyhzdGF0ZS0+ZGV2LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQp CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlwbGFuZV9zdGF0ZSA9IHBsYW5lLT5mdW5jcy0+ YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSk7CisJaWYgKCFwbGFuZV9zdGF0ZSkKKwkJcmV0 dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzdGF0ZS0+cGxhbmVfc3RhdGVzW2luZGV4XSA9IHBs YW5lX3N0YXRlOworCXN0YXRlLT5wbGFuZXNbaW5kZXhdID0gcGxhbmU7CisJcGxhbmVfc3RhdGUt PnN0YXRlID0gc3RhdGU7CisKKwlEUk1fREVCVUdfS01TKCJBZGRlZCBbUExBTkU6JWRdICVwIHN0 YXRlIHRvICVwXG4iLAorCQkgICAgICBwbGFuZS0+YmFzZS5pZCwgcGxhbmVfc3RhdGUsIHN0YXRl KTsKKworCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YykgeworCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUg KmNydGNfc3RhdGU7CisKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUo c3RhdGUsCisJCQkJCQkgICAgICAgcGxhbmVfc3RhdGUtPmNydGMpOworCQlpZiAoSVNfRVJSKGNy dGNfc3RhdGUpKQorCQkJcmV0dXJuIEVSUl9DQVNUKGNydGNfc3RhdGUpOworCX0KKworCXJldHVy biBwbGFuZV9zdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19nZXRfcGxhbmVfc3Rh dGUpOworCisvKioKKyAqIGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZSAtIGdldCBjb25u ZWN0b3Igc3RhdGUKKyAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZSBvYmplY3QKKyAqIEBj b25uZWN0b3I6IGNvbm5lY3RvciB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgorICoKKyAqIFRoaXMg ZnVuY3Rpb25zIHJldHVybnMgdGhlIGNvbm5lY3RvciBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbm5l Y3RvciwKKyAqIGFsbG9jYXRpbmcgaXQgaWYgbmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0aGUg cmVsZXZhbnQgY29ubmVjdG9yIGxvY2sgdG8KKyAqIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZSBp cyBjb25zaXN0ZW50LgorICoKKyAqIFJldHVybnM6CisgKgorICogRWl0aGVyIHRoZSBhbGxvY2F0 ZWQgc3RhdGUgb3IgdGhlIGVycm9yIGNvZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVu CisgKiB0aGUgZXJyb3IgaXMgRURFQURMSyB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0 ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlCisgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3Qg YmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworc3RydWN0IGRy bV9jb25uZWN0b3Jfc3RhdGUgKgorZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpj b25maWcgPSAmY29ubmVjdG9yLT5kZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBkcm1fY29ubmVj dG9yX3N0YXRlICpjb25uZWN0b3Jfc3RhdGU7CisKKwlpbmRleCA9IGRybV9jb25uZWN0b3JfaW5k ZXgoY29ubmVjdG9yKTsKKworCWlmIChzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tpbmRleF0pCisJ CXJldHVybiBzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tpbmRleF07CisKKwlyZXQgPSBkcm1fbW9k ZXNldF9sb2NrKCZjb25maWctPmNvbm5lY3Rpb25fbXV0ZXgsIHN0YXRlLT5hY3F1aXJlX2N0eCk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWNvbm5lY3Rvcl9zdGF0ZSA9 IGNvbm5lY3Rvci0+ZnVuY3MtPmF0b21pY19kdXBsaWNhdGVfc3RhdGUoY29ubmVjdG9yKTsKKwlp ZiAoIWNvbm5lY3Rvcl9zdGF0ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzdGF0 ZS0+Y29ubmVjdG9yX3N0YXRlc1tpbmRleF0gPSBjb25uZWN0b3Jfc3RhdGU7CisJc3RhdGUtPmNv bm5lY3RvcnNbaW5kZXhdID0gY29ubmVjdG9yOworCWNvbm5lY3Rvcl9zdGF0ZS0+c3RhdGUgPSBz dGF0ZTsKKworCURSTV9ERUJVR19LTVMoIkFkZGVkIFtDT05ORUNUT1I6JWRdICVwIHN0YXRlIHRv ICVwXG4iLAorCQkgICAgICBjb25uZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvcl9zdGF0ZSwgc3Rh dGUpOworCisJaWYgKGNvbm5lY3Rvcl9zdGF0ZS0+Y3J0YykgeworCQlzdHJ1Y3QgZHJtX2NydGNf c3RhdGUgKmNydGNfc3RhdGU7CisKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNf c3RhdGUoc3RhdGUsCisJCQkJCQkgICAgICAgY29ubmVjdG9yX3N0YXRlLT5jcnRjKTsKKwkJaWYg KElTX0VSUihjcnRjX3N0YXRlKSkKKwkJCXJldHVybiBFUlJfQ0FTVChjcnRjX3N0YXRlKTsKKwl9 CisKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXRlOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2dldF9jb25uZWN0b3Jfc3RhdGUpOworCisvKioKKyAqIGRybV9hdG9taWNfc2V0X2NydGNfZm9y X3BsYW5lIC0gc2V0IGNydGMgZm9yIHBsYW5lCisgKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0 ZSBvYmplY3QgZm9yIHRoZSBwbGFuZQorICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUgcGxh bmUKKyAqCisgKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQgY3J0YyBmb3IgYSBwbGFuZSByZXF1aXJl cyB1cyB0byBncmFiIHRoZSBsb2NrIGFuZCBzdGF0ZQorICogZm9yIHRoZSBuZXcgY3J0YywgYXMg bmVlZGVkLiBUaGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlIGRldGFpbHMKKyAq IGJlc2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlIHN0YXRlIG9iamVjdCBpdHNlbGYu CisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVB RExLIG9yIC1FTk9NRU0uCisgKi8KK2ludAorZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUo c3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJ aWYgKGNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxh bmVfc3RhdGUtPnN0YXRlLAorCQkJCQkJICAgICAgIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNf c3RhdGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisJfQorCisJcGxhbmVfc3Rh dGUtPmNydGMgPSBjcnRjOworCisJaWYgKGNydGMpCisJCURSTV9ERUJVR19LTVMoIkxpbmsgcGxh bmUgc3RhdGUgJXAgdG8gW0NSVEM6JWRdXG4iLAorCQkJICAgICAgcGxhbmVfc3RhdGUsIGNydGMt PmJhc2UuaWQpOworCWVsc2UKKwkJRFJNX0RFQlVHX0tNUygiTGluayBwbGFuZSBzdGF0ZSAlcCB0 byBbTk9DUlRDXVxuIiwgcGxhbmVfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lKTsKKworLyoqCisgKiBkcm1fYXRvbWlj X3NldF9jcnRjX2Zvcl9jb25uZWN0b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVjdG9yCisgKiBAY29u bl9zdGF0ZTogYXRvbWljIHN0YXRlIG9iamVjdCBmb3IgdGhlIGNvbm5lY3RvcgorICogQGNydGM6 IGNydGMgdG8gdXNlIGZvciB0aGUgY29ubmVjdG9yCisgKgorICogQ2hhbmdpbmcgdGhlIGFzc2ln bmVkIGNydGMgZm9yIGEgY29ubmVjdG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5k CisgKiBzdGF0ZSBmb3IgdGhlIG5ldyBjcnRjLCBhcyBuZWVkZWQuIFRoaXMgZnVuY3Rpb24gdGFr ZXMgY2FyZSBvZiBhbGwgdGhlc2UKKyAqIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9p bnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBv biBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4KKyAqLworaW50 Citkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUsCisJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9t aWNfZ2V0X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsIGNydGMpOworCWlmIChJU19FUlIo Y3J0Y19zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCisJY29ubl9zdGF0 ZS0+Y3J0YyA9IGNydGM7CisKKwlEUk1fREVCVUdfS01TKCJMaW5rIGNvbm5lY3RvciBzdGF0ZSAl cCB0byBbQ1JUQzolZF1cbiIsCisJCSAgICAgIGNvbm5fc3RhdGUsIGNydGMtPmJhc2UuaWQpOwor CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nv bm5lY3Rvcik7CisKKy8qKgorICogZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyAt IGFkZCBjb25uZWN0b3JzIGZvciBjcnRjCisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQorICogQGNy dGM6IERSTSBjcnRjCisgKgorICogVGhpcyBmdW5jdGlvbnMgd2Fsa3MgdGhlIGN1cnJlbnQgY29u ZmlndXJhdGlvbiBhbmQgYWRkcyBhbGwgY29ubmVjdG9ycworICogY3VycmVudGx5IHVzaW5nIEBj cnRjIHRvIHRoZSBhdG9taWMgY29uZmlndXJhdGlvbiBAc3RhdGUuIE5vdGUgdGhhdCB0aGlzCisg KiBmdW5jdGlvbiBtdXN0IGFjcXVpcmUgdGhlIGNvbm5lY3Rpb24gbXV0ZXguIFRoaXMgY2FuIHBv dGVudGlhbGx5IGNhdXNlCisgKiB1bm5lZWRlZCBzZXJhbGl6YXRpb24gaWYgdGhlIHVwZGF0ZSBp cyBqdXN0IGZvciB0aGUgcGxhbmVzIG9uIG9uZSBjcnRjLiBIZW5jZQorICogZHJpdmVycyBhbmQg aGVscGVycyBzaG91bGQgb25seSBjYWxsIHRoaXMgd2hlbiByZWFsbHkgbmVlZGVkIChlLmcuIHdo ZW4gYQorICogZnVsbCBtb2Rlc2V0IG5lZWRzIHRvIGhhcHBlbiBkdWUgdG8gc29tZSBjaGFuZ2Up LgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZhaWwgd2l0aCAtRURF QURMSyBvciAtRU5PTUVNLgorICovCitpbnQKK2RybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5l Y3RvcnMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJCSAgIHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmc3RhdGUt PmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKKwlpbnQgcmV0OworCisJcmV0 ID0gZHJtX21vZGVzZXRfbG9jaygmY29uZmlnLT5jb25uZWN0aW9uX211dGV4LCBzdGF0ZS0+YWNx dWlyZV9jdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlEUk1fREVCVUdfS01TKCJB ZGRpbmcgYWxsIGN1cnJlbnQgY29ubmVjdG9ycyBmb3IgW0NSVEM6JWRdIHRvICVwXG4iLAorCQkg ICAgICBjcnRjLT5iYXNlLmlkLCBzdGF0ZSk7CisKKwkvKgorCSAqIENoYW5nZWQgY29ubmVjdG9y cyBhcmUgYWxyZWFkeSBpbiBAc3RhdGUsIHNvIG9ubHkgbmVlZCB0byBsb29rIGF0IHRoZQorCSAq IGN1cnJlbnQgY29uZmlndXJhdGlvbi4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5l Y3RvciwgJmNvbmZpZy0+Y29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGNvbm5lY3Rvci0+ c3RhdGUtPmNydGMgIT0gY3J0YykKKwkJCWNvbnRpbnVlOworCisJCWNvbm5fc3RhdGUgPSBkcm1f YXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGNvbm5lY3Rvcik7CisJCWlmIChJU19F UlIoY29ubl9zdGF0ZSkpCisJCQlyZXR1cm4gUFRSX0VSUihjb25uX3N0YXRlKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVj dG9ycyk7CisKKy8qKgorICogZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRjIC0gY291bnQg bnVtYmVyIG9mIGNvbm5lY3RlZCBvdXRwdXRzCisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQorICog QGNydGM6IERSTSBjcnRjCisgKgorICogVGhpcyBmdW5jdGlvbiBjb3VudHMgYWxsIGNvbm5lY3Rv cnMgd2hpY2ggd2lsbCBiZSBjb25uZWN0ZWQgdG8gQGNydGMKKyAqIGFjY29yZGluZyB0byBAc3Rh dGUuIFVzZWZ1bCB0byByZWNvbXB1dGUgdGhlIGVuYWJsZSBzdGF0ZSBmb3IgQGNydGMuCisgKi8K K2ludAorZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJaW50IG5j b25uZWN0b3JzID0gc3RhdGUtPmRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvcjsKKwlpbnQg aSwgbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3JzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuY29u bmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRl OworCisJCWNvbm5fc3RhdGUgPSBzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tpXTsKKworCQlpZiAo Y29ubl9zdGF0ZSAmJiBjb25uX3N0YXRlLT5jcnRjID09IGNydGMpCisJCQludW1fY29ubmVjdGVk X2Nvbm5lY3RvcnMrKzsKKwl9CisKKwlEUk1fREVCVUdfS01TKCJTdGF0ZSAlcCBoYXMgJWkgY29u bmVjdG9ycyBmb3IgW0NSVEM6JWRdXG4iLAorCQkgICAgICBzdGF0ZSwgbnVtX2Nvbm5lY3RlZF9j b25uZWN0b3JzLCBjcnRjLT5iYXNlLmlkKTsKKworCXJldHVybiBudW1fY29ubmVjdGVkX2Nvbm5l Y3RvcnM7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfY29ubmVjdG9yc19mb3JfY3J0Yyk7 CisKKy8qKgorICogZHJtX2F0b21pY19sZWdhY3lfYmFja29mZiAtIGxvY2tpbmcgYmFja29mZiBm b3IgbGVnYWN5IGlvY3RscworICogQHN0YXRlOiBhdG9taWMgc3RhdGUKKyAqCisgKiBUaGlzIGZ1 bmN0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IGxlZ2FjeSBlbnRyeSBwb2ludHMgd2hpY2ggZG9uJ3Qg dW5kZXJzdGFuZAorICogLUVERUFETEsgc2VtYW50aWNzLiBGb3Igc2ltcGxpY2l0eSB0aGlzIG9u ZSB3aWxsIGdyYWIgYWxsIG1vZGVzZXQgbG9ja3MgYWZ0ZXIKKyAqICB0aGUgc2xvd3BhdGggY29t cGxldGVkLgorICovCit2b2lkIGRybV9hdG9taWNfbGVnYWN5X2JhY2tvZmYoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQ7CisKK3JldHJ5OgorCWRybV9tb2Rlc2V0 X2JhY2tvZmYoc3RhdGUtPmFjcXVpcmVfY3R4KTsKKworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2so JnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsCisJCQkgICAgICAgc3Rh dGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0KQorCQlnb3RvIHJldHJ5OworCXJldCA9IGRybV9t b2Rlc2V0X2xvY2tfYWxsX2NydGNzKHN0YXRlLT5kZXYsCisJCQkJCSBzdGF0ZS0+YWNxdWlyZV9j dHgpOworCWlmIChyZXQpCisJCWdvdG8gcmV0cnk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfbGVnYWN5X2JhY2tvZmYpOworCisvKioKKyAqIGRybV9hdG9taWNfY2hlY2tfb25seSAtIGNo ZWNrIHdoZXRoZXIgYSBnaXZlbiBjb25maWcgd291bGQgd29yaworICogQHN0YXRlOiBhdG9taWMg Y29uZmlndXJhdGlvbiB0byBjaGVjaworICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNh biByZXR1cm4gLUVERUFETEsgaWYgdGhlIGRyaXZlciBuZWVkZWQgdG8gYWNxdWlyZQorICogbW9y ZSBsb2NrcyBidXQgZW5jb3VudGVyZWQgYSBkZWFkbG9jay4gVGhlIGNhbGxlciBtdXN0IHRoZW4g ZG8gdGhlIHVzdWFsIHcvdworICogYmFja29mZiBkYW5jZSBhbmQgcmVzdGFydC4KKyAqCisgKiBS ZXR1cm5zOgorICogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUu CisgKi8KK2ludCBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKQoreworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2 LT5tb2RlX2NvbmZpZzsKKworCURSTV9ERUJVR19LTVMoImNoZWNraW5nICVwXG4iLCBzdGF0ZSk7 CisKKwlpZiAoY29uZmlnLT5mdW5jcy0+YXRvbWljX2NoZWNrKQorCQlyZXR1cm4gY29uZmlnLT5m dW5jcy0+YXRvbWljX2NoZWNrKHN0YXRlLT5kZXYsIHN0YXRlKTsKKwllbHNlCisJCXJldHVybiAw OworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2NoZWNrX29ubHkpOworCisvKioKKyAqIGRy bV9hdG9taWNfY29tbWl0IC0gY29tbWl0IGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseQorICogQHN0 YXRlOiBhdG9taWMgY29uZmlndXJhdGlvbiB0byBjaGVjaworICoKKyAqIE5vdGUgdGhhdCB0aGlz IGZ1bmN0aW9uIGNhbiByZXR1cm4gLUVERUFETEsgaWYgdGhlIGRyaXZlciBuZWVkZWQgdG8gYWNx dWlyZQorICogbW9yZSBsb2NrcyBidXQgZW5jb3VudGVyZWQgYSBkZWFkbG9jay4gVGhlIGNhbGxl ciBtdXN0IHRoZW4gZG8gdGhlIHVzdWFsIHcvdworICogYmFja29mZiBkYW5jZSBhbmQgcmVzdGFy dC4KKyAqCisgKiBBbHNvIG5vdGUgdGhhdCBvbiBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvd25lcnNo aXAgb2YgQHN0YXRlIGlzIHRyYW5zZmVycmVkCisgKiBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBm dW5jdGlvbiB0byB0aGUgZnVuY3Rpb24gaXRzZWxmLiBUaGUgY2FsbGVyIG11c3Qgbm90CisgKiBm cmVlIG9yIGluIGFueSBvdGhlciB3YXkgYWNjZXNzIEBzdGF0ZS4gSWYgdGhlIGZ1bmN0aW9uIGZh aWxzIHRoZW4gdGhlIGNhbGxlcgorICogbXVzdCBjbGVhbiB1cCBAc3RhdGUgaXRzZWxmLgorICoK KyAqIFJldHVybnM6CisgKiAwIG9uIGV0dWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuCisgKi8KK2ludCBkcm1fYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5k ZXYtPm1vZGVfY29uZmlnOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fYXRvbWljX2NoZWNrX29u bHkoc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlEUk1fREVCVUdfS01TKCJj b21taXRpbmcgJXBcbiIsIHN0YXRlKTsKKworCXJldHVybiBjb25maWctPmZ1bmNzLT5hdG9taWNf Y29tbWl0KHN0YXRlLT5kZXYsIHN0YXRlLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9h dG9taWNfY29tbWl0KTsKKworLyoqCisgKiBkcm1fYXRvbWljX2FzeW5jX2NvbW1pdCAtIGF0b21p YyZhc3luYyBvbmZpZ3VyYXRpb24gY29tbWl0CisgKiBAc3RhdGU6IGF0b21pYyBjb25maWd1cmF0 aW9uIHRvIGNoZWNrCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiAt RURFQURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0byBhY3F1aXJlCisgKiBtb3JlIGxvY2tzIGJ1 dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2NrLiBUaGUgY2FsbGVyIG11c3QgdGhlbiBkbyB0aGUgdXN1 YWwgdy93CisgKiBiYWNrb2ZmIGRhbmNlIGFuZCByZXN0YXJ0LgorICoKKyAqIEFsc28gbm90ZSB0 aGF0IG9uIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBAc3RhdGUgaXMgdHJhbnNm ZXJyZWQKKyAqIGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIHRoZSBmdW5jdGlv biBpdHNlbGYuIFRoZSBjYWxsZXIgbXVzdCBub3QKKyAqIGZyZWUgb3IgaW4gYW55IG90aGVyIHdh eSBhY2Nlc3MgQHN0YXRlLiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdGhlbiB0aGUgY2FsbGVyCisg KiBtdXN0IGNsZWFuIHVwIEBzdGF0ZSBpdHNlbGYuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24g c3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgZHJtX2F0 b21pY19hc3luY19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0 cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZzsK KwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJRFJNX0RFQlVHX0tNUygiY29tbWl0aW5nICVwIGFzeW5j aHJvbm91c2x5XG4iLCBzdGF0ZSk7CisKKwlyZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2Nv bW1pdChzdGF0ZS0+ZGV2LCBzdGF0ZSwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9t aWNfYXN5bmNfY29tbWl0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaCBi L2luY2x1ZGUvZHJtL2RybV9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjc1MzgxMjAzNGU3MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvZHJtL2Ry bV9hdG9taWMuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFJl ZCBIYXQKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3JwLgorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwg YmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVU SE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT RSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgor ICoKKyAqIEF1dGhvcnM6CisgKiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+CisgKiBE YW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgorICovCisKKyNpZm5kZWYgRFJN X0FUT01JQ19IXworI2RlZmluZSBEUk1fQVRPTUlDX0hfCisKK3N0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICoKK2RybV9hdG9taWNfc3RhdGVfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2 b2lkIGRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KTsKK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSk7CisKK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCitkcm1fYXRvbWljX2dldF9jcnRjX3N0 YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3RydWN0IGRybV9jcnRj ICpjcnRjKTsKK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKgorZHJtX2F0b21pY19nZXRfcGxhbmVf c3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpOworc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKgorZHJtX2F0b21pY19n ZXRfY29ubmVjdG9yX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAg ICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKKworaW50IGRybV9hdG9taWNf c2V0X2NydGNfZm9yX3BsYW5lKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAor CQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludCBkcm1fYXRvbWljX3NldF9jcnRjX2Zv cl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCisJCQkJ ICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludAorZHJtX2F0b21pY19hZGRfYWZmZWN0 ZWRfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICAgc3Ry dWN0IGRybV9jcnRjICpjcnRjKTsKK2ludAorZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRj KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpOworCit2b2lkIGRybV9hdG9taWNfbGVnYWN5X2JhY2tvZmYoc3RydWN0IGRybV9h dG9taWNfc3RhdGUgKnN0YXRlKTsKKworaW50IGRybV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOworaW50IGRybV9hdG9taWNfY29tbWl0KHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7CitpbnQgZHJtX2F0b21pY19hc3luY19jb21taXQoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKKworI2VuZGlmIC8qIERSTV9BVE9NSUNfSF8g Ki8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9pbmNsdWRlL2RybS9kcm1f Y3J0Yy5oCmluZGV4IDk4NDcwMDlhZDQ1MS4uYzNjZTViMzZkYTVmIDEwMDY0NAotLS0gYS9pbmNs dWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTc5OSw2 ICs3OTksMzIgQEAgc3RydWN0IGRybV9icmlkZ2UgewogfTsKIAogLyoqCisgKiBzdHJ1Y3Qgc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgLSB0aGUgZ2xvYmFsIHN0YXRlIG9iamVjdCBmb3IgYXRvbWlj IHVwZGF0ZXMKKyAqIEBkZXY6IHBhcmVudCBEUk0gZGV2aWNlCisgKiBAZmxhZ3M6IHN0YXRlIGZs YWdzIGxpa2UgYXN5bmMgdXBkYXRlCisgKiBAcGxhbmVzOiBwb2ludGVyIHRvIGFycmF5IG9mIHBs YW5lIHBvaW50ZXJzCisgKiBAcGxhbmVfc3RhdGVzOiBwb2ludGVyIHRvIGFycmF5IG9mIHBsYW5l IHN0YXRlcyBwb2ludGVycworICogQGNydGNzOiBwb2ludGVyIHRvIGFycmF5IG9mIENSVEMgcG9p bnRlcnMKKyAqIEBjcnRjX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBvZiBDUlRDIHN0YXRlcyBw b2ludGVycworICogQGNvbm5lY3RvcnM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgY29ubmVjdG9yIHBv aW50ZXJzCisgKiBAY29ubmVjdG9yX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBvZiBjb25uZWN0 b3Igc3RhdGVzIHBvaW50ZXJzCisgKiBAYWNxdWlyZV9jdHg6IGFjcXVpcmUgY29udGV4dCBmb3Ig dGhpcyBhdG9taWMgbW9kZXNldCBzdGF0ZSB1cGRhdGUKKyAqLworc3RydWN0IGRybV9hdG9taWNf c3RhdGUgeworICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisgICAgICAgdWludDMyX3Qg ZmxhZ3M7CisgICAgICAgc3RydWN0IGRybV9wbGFuZSAqKnBsYW5lczsKKyAgICAgICBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0YXRlICoqcGxhbmVfc3RhdGVzOworICAgICAgIHN0cnVjdCBkcm1fY3J0YyAq KmNydGNzOworICAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqKmNydGNfc3RhdGVzOworICAg ICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICoqY29ubmVjdG9yczsKKyAgICAgICBzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqKmNvbm5lY3Rvcl9zdGF0ZXM7CisKKyAgICAgICBzdHJ1Y3QgZHJt X21vZGVzZXRfYWNxdWlyZV9jdHggKmFjcXVpcmVfY3R4OworfTsKKworCisvKioKICAqIHN0cnVj dCBkcm1fbW9kZV9zZXQgLSBuZXcgdmFsdWVzIGZvciBhIENSVEMgY29uZmlnIGNoYW5nZQogICog QGZiOiBmcmFtZWJ1ZmZlciB0byB1c2UgZm9yIG5ldyBjb25maWcKICAqIEBjcnRjOiBDUlRDIHdo b3NlIGNvbmZpZ3VyYXRpb24gd2UncmUgYWJvdXQgdG8gY2hhbmdlCkBAIC04MjksNiArODU1LDkg QEAgc3RydWN0IGRybV9tb2RlX3NldCB7CiAgKiBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNz IC0gYmFzaWMgZHJpdmVyIHByb3ZpZGVkIG1vZGUgc2V0dGluZyBmdW5jdGlvbnMKICAqIEBmYl9j cmVhdGU6IGNyZWF0ZSBhIG5ldyBmcmFtZWJ1ZmZlciBvYmplY3QKICAqIEBvdXRwdXRfcG9sbF9j aGFuZ2VkOiBmdW5jdGlvbiB0byBoYW5kbGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gY2hhbmdlcwor ICogQGF0b21pY19jaGVjazogY2hlY2sgd2hldGhlciBhIGdpdmUgYXRvbWljIHN0YXRlIHVwZGF0 ZSBpcyBwb3NzaWJsZQorICogQGF0b21pY19jb21taXQ6IGNvbW1pdCBhbiBhdG9taWMgc3RhdGUg dXBkYXRlIHByZXZpb3VzbHkgdmVyaWZpZWQgd2l0aAorICogCWF0b21pY19jaGVjaygpCiAgKgog ICogU29tZSBnbG9iYWwgKGkuZS4gbm90IHBlci1DUlRDLCBjb25uZWN0b3IsIGV0YykgbW9kZSBz ZXR0aW5nIGZ1bmN0aW9ucyB0aGF0CiAgKiBpbnZvbHZlIGRyaXZlcnMuCkBAIC04MzgsNiArODY3 LDEyIEBAIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgewogCQkJCQkgICAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2LAogCQkJCQkgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpt b2RlX2NtZCk7CiAJdm9pZCAoKm91dHB1dF9wb2xsX2NoYW5nZWQpKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOworCisJaW50ICgqYXRvbWljX2NoZWNrKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAor CQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICphKTsKKwlpbnQgKCphdG9taWNfY29tbWl0 KShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqYSwKKwkJCSAgICAgYm9vbCBhc3luYyk7CiB9OwogCiAvKioKLS0gCjIuMS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=