From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH] drm: Global atomic state handling Date: Wed, 5 Nov 2014 15:22:34 +0100 Message-ID: <1415197354-16625-1-git-send-email-daniel.vetter@ffwll.ch> References: <1415195131-12649-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: Received: from mail-wg0-f47.google.com (mail-wg0-f47.google.com [74.125.82.47]) by gabe.freedesktop.org (Postfix) with ESMTP id 37D816E922 for ; Wed, 5 Nov 2014 06:22:24 -0800 (PST) Received: by mail-wg0-f47.google.com with SMTP id a1so1026940wgh.20 for ; Wed, 05 Nov 2014 06:22:23 -0800 (PST) In-Reply-To: <1415195131-12649-1-git-send-email-daniel.vetter@ffwll.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" 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 YWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uCgp2MTM6IFJldmlldyBmcm9tIFNlYW46Ci0ga2VybmVs ZG9jIHNwZWxsaW5nIGZpeGVzCi0gRG9uJ3Qgb3ZlcmFsbG9jYXRlIHN0YXRlcy0+cGxhbmVzLgot IEhhbmRsZSBOVUxMIGNydGMgaW4gc2V0X2NydGNfZm9yX2Nvbm5lY3Rvci4KCnYxNDogU3ByaW5r bGUgX19tdXN0X2NoZWNrIG92ZXIgYWxsIGZ1bmN0aW9ucyB3aGljaCBkbyB3YWl0L3dvdW5kCmxv Y2tpbmcgdG8gbWFrZSBzdXJlIGNhbGxlcnMgZG9uJ3QgZm9yZ2V0IHRoaXMuIFNpbmNlIEkgaGF2 ZSA7LSkKCnYxNTogQmUgbW9yZSBleHBsaWNpdCBpbiB0aGUga2VybmVsZG9jIHdoZW4gZnVuY3Rp b25zIGNhbiByZXR1cm4KLUVERUFETEsgd2hhdCB0byBkby4gQW5kIHRoYXQgZXZlcnkgb3RoZXIg LWVycm5vIGlzIGZhdGFsLgoKdjIwOiBJbmRlbnQgd2l0aCB0YWJzIGluc3RlYWQgb2Ygc3BhY2Us IHNwb3R0ZWQgYnkgQW5kZXIuCgpDYzogQW5kZXIgQ29uc2VsdmFuIGRlIE9saXZlaXJhIDxjb25z ZWx2YW4yQGdtYWlsLmNvbT4KQ2M6IERhbmllbCBUaG9tcHNvbiA8ZGFuaWVsLnRob21wc29uQGxp bmFyby5vcmc+CkNjOiBGZW5nZ3VhbmcgV3UgPGZlbmdndWFuZy53dUBpbnRlbC5jb20+CkNjOiBT ZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KQ2M6IE1hdHQgUm9wZXIgPG1hdHRoZXcu ZC5yb3BlckBpbnRlbC5jb20+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9t aXVtLm9yZz4KU2lnbmVkLW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZnds bC5jaD4KLS0tCiBEb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgfCAgIDQgKwogZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2F0 b21pYy5jICAgfCA2MDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IGluY2x1ZGUvZHJtL2RybV9hdG9taWMuaCAgICAgICB8ICA2NSArKysrKwogaW5jbHVkZS9kcm0v ZHJtX2NydGMuaCAgICAgICAgIHwgIDM1ICsrKwogNSBmaWxlcyBjaGFuZ2VkLCA3MDUgaW5zZXJ0 aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fYXRvbWlj LmgKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwgYi9Eb2N1bWVu dGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKaW5kZXggZjgzZDNiNmVhNGU1Li43NDg1MTNiMzQwMjUg MTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAorKysgYi9Eb2N1bWVu dGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKQEAgLTk5Niw2ICs5OTYsMTAgQEAgaW50IG1heF93aWR0 aCwgbWF4X2hlaWdodDs8L3N5bm9wc2lzPgogIUVkcml2ZXJzL2dwdS9kcm0vZHJtX21vZGVzLmMK ICAgICA8L3NlY3QyPgogICAgIDxzZWN0Mj4KKyAgICAgIDx0aXRsZT5BdG9taWMgTW9kZSBTZXR0 aW5nIEZ1bmN0aW9uIFJlZmVyZW5jZTwvdGl0bGU+CishRWRyaXZlcnMvZ3B1L2RybS9kcm1fYXRv bWljLmMKKyAgICA8L3NlY3QyPgorICAgIDxzZWN0Mj4KICAgICAgIDx0aXRsZT5GcmFtZSBCdWZm ZXIgQ3JlYXRpb248L3RpdGxlPgogICAgICAgPHN5bm9wc2lzPnN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKigqZmJfY3JlYXRlKShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICAgc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggOTI5MmE3NjFlYTZkLi5jNWUzN2Rj NDU5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKQEAgLTE0LDcgKzE0LDcgQEAgZHJtLXkgICAgICAgOj0JZHJtX2F1 dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKIAkJZHJtX2luZm8ubyBkcm1fZGVidWdmcy5v IGRybV9lbmNvZGVyX3NsYXZlLm8gXAogCQlkcm1fdHJhY2VfcG9pbnRzLm8gZHJtX2dsb2JhbC5v IGRybV9wcmltZS5vIFwKIAkJZHJtX3JlY3QubyBkcm1fdm1hX21hbmFnZXIubyBkcm1fZmxpcF93 b3JrLm8gXAotCQlkcm1fbW9kZXNldF9sb2NrLm8KKwkJZHJtX21vZGVzZXRfbG9jay5vIGRybV9h dG9taWMubwogCiBkcm0tJChDT05GSUdfQ09NUEFUKSArPSBkcm1faW9jMzIubwogZHJtLSQoQ09O RklHX0RSTV9HRU1fQ01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0 b21pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYWQxNWE4OGMw Zjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwpAQCAt MCwwICsxLDYwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSZWQgSGF0CisgKiBDb3B5 cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3Jz OgorICogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgorICogRGFuaWVsIFZldHRlciA8 ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KKyAqLworCisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgor I2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxw ZXIuaD4KKworc3RhdGljIHZvaWQga2ZyZWVfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUg KnN0YXRlKQoreworCWtmcmVlKHN0YXRlLT5jb25uZWN0b3JzKTsKKwlrZnJlZShzdGF0ZS0+Y29u bmVjdG9yX3N0YXRlcyk7CisJa2ZyZWUoc3RhdGUtPmNydGNzKTsKKwlrZnJlZShzdGF0ZS0+Y3J0 Y19zdGF0ZXMpOworCWtmcmVlKHN0YXRlLT5wbGFuZXMpOworCWtmcmVlKHN0YXRlLT5wbGFuZV9z dGF0ZXMpOworCWtmcmVlKHN0YXRlKTsKK30KKworLyoqCisgKiBkcm1fYXRvbWljX3N0YXRlX2Fs bG9jIC0gYWxsb2NhdGUgYXRvbWljIHN0YXRlCisgKiBAZGV2OiBEUk0gZGV2aWNlCisgKgorICog VGhpcyBhbGxvY2F0ZXMgYW4gZW1wdHkgYXRvbWljIHN0YXRlIHRvIHRyYWNrIHVwZGF0ZXMuCisg Ki8KK3N0cnVjdCBkcm1fYXRvbWljX3N0YXRlICoKK2RybV9hdG9taWNfc3RhdGVfYWxsb2Moc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGU7 CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICgh c3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmNydGNzID0ga2NhbGxvYyhkZXYtPm1v ZGVfY29uZmlnLm51bV9jcnRjLAorCQkJICAgICAgIHNpemVvZigqc3RhdGUtPmNydGNzKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFzdGF0ZS0+Y3J0Y3MpCisJCWdvdG8gZmFpbDsKKwlzdGF0ZS0+Y3J0 Y19zdGF0ZXMgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2NydGMsCisJCQkJICAgICBz aXplb2YoKnN0YXRlLT5jcnRjX3N0YXRlcyksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUtPmNy dGNfc3RhdGVzKQorCQlnb3RvIGZhaWw7CisJc3RhdGUtPnBsYW5lcyA9IGtjYWxsb2MoZGV2LT5t b2RlX2NvbmZpZy5udW1fdG90YWxfcGxhbmUsCisJCQkJc2l6ZW9mKCpzdGF0ZS0+cGxhbmVzKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZS0+cGxhbmVzKQorCQlnb3RvIGZhaWw7CisJc3RhdGUt PnBsYW5lX3N0YXRlcyA9IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fdG90YWxfcGxhbmUs CisJCQkJICAgICAgc2l6ZW9mKCpzdGF0ZS0+cGxhbmVfc3RhdGVzKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFzdGF0ZS0+cGxhbmVfc3RhdGVzKQorCQlnb3RvIGZhaWw7CisJc3RhdGUtPmNvbm5lY3Rv cnMgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3RvciwKKwkJCQkgICAgc2l6 ZW9mKCpzdGF0ZS0+Y29ubmVjdG9ycyksCisJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghc3Rh dGUtPmNvbm5lY3RvcnMpCisJCWdvdG8gZmFpbDsKKwlzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlcyA9 IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLAorCQkJCQkgIHNpemVvZigq c3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXMpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghc3Rh dGUtPmNvbm5lY3Rvcl9zdGF0ZXMpCisJCWdvdG8gZmFpbDsKKworCXN0YXRlLT5kZXYgPSBkZXY7 CisKKwlEUk1fREVCVUdfS01TKCJBbGxvY2F0ZSBhdG9taWMgc3RhdGUgJXBcbiIsIHN0YXRlKTsK KworCXJldHVybiBzdGF0ZTsKK2ZhaWw6CisJa2ZyZWVfc3RhdGUoc3RhdGUpOworCisJcmV0dXJu IE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc3RhdGVfYWxsb2MpOworCisvKioK KyAqIGRybV9hdG9taWNfc3RhdGVfY2xlYXIgLSBjbGVhciBzdGF0ZSBvYmplY3QKKyAqIEBzdGF0 ZTogYXRvbWljIHN0YXRlCisgKgorICogV2hlbiB0aGUgdy93IG11dGV4IGFsZ29yaXRobSBkZXRl Y3RzIGEgZGVhZGxvY2sgd2UgbmVlZCB0byBiYWNrIG9mZiBhbmQgZHJvcAorICogYWxsIGxvY2tz LiBTbyBzb21lb25lIGVsc2UgY291bGQgc25lYWsgaW4gYW5kIGNoYW5nZSB0aGUgY3VycmVudCBt b2Rlc2V0CisgKiBjb25maWd1cmF0aW9uLiBXaGljaCBtZWFucyB0aGF0IGFsbCB0aGUgc3RhdGUg YXNzZW1ibGVkIGluIEBzdGF0ZSBpcyBubworICogbG9uZ2VyIGFuIGF0b21pYyB1cGRhdGUgdG8g dGhlIGN1cnJlbnQgc3RhdGUsIGJ1dCB0byBzb21lIGFyYml0cmFyeSBlYXJsaWVyCisgKiBzdGF0 ZS4gV2hpY2ggY291bGQgYnJlYWsgYXNzdW1wdGlvbnMgdGhlIGRyaXZlcidzIC0+YXRvbWljX2No ZWNrIGxpa2VseQorICogcmVsaWVzIG9uLgorICoKKyAqIEhlbmNlIHdlIG11c3QgY2xlYXIgYWxs IGNhY2hlZCBzdGF0ZSBhbmQgY29tcGxldGVseSBzdGFydCBvdmVyLCB1c2luZyB0aGlzCisgKiBm dW5jdGlvbi4KKyAqLwordm9pZCBkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3RhdGUtPmRl djsKKwlpbnQgaTsKKworCURSTV9ERUJVR19LTVMoIkNsZWFyaW5nIGF0b21pYyBzdGF0ZSAlcFxu Iiwgc3RhdGUpOworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bW9kZV9jb25maWcubnVtX2Nvbm5l Y3RvcjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBzdGF0ZS0+ Y29ubmVjdG9yc1tpXTsKKworCQlpZiAoIWNvbm5lY3RvcikKKwkJCWNvbnRpbnVlOworCisJCWNv bm5lY3Rvci0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKGNvbm5lY3RvciwKKwkJCQkJCSAg ICAgICBzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IGRldi0+bW9kZV9jb25maWcubnVtX2NydGM7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2NydGMgKmNy dGMgPSBzdGF0ZS0+Y3J0Y3NbaV07CisKKwkJaWYgKCFjcnRjKQorCQkJY29udGludWU7CisKKwkJ Y3J0Yy0+ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKGNydGMsCisJCQkJCQkgIHN0YXRlLT5j cnRjX3N0YXRlc1tpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGRldi0+bW9kZV9jb25maWcu bnVtX3RvdGFsX3BsYW5lOyBpKyspIHsKKwkJc3RydWN0IGRybV9wbGFuZSAqcGxhbmUgPSBzdGF0 ZS0+cGxhbmVzW2ldOworCisJCWlmICghcGxhbmUpCisJCQljb250aW51ZTsKKworCQlwbGFuZS0+ ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKHBsYW5lLAorCQkJCQkJICAgc3RhdGUtPnBsYW5l X3N0YXRlc1tpXSk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3N0YXRlX2NsZWFy KTsKKworLyoqCisgKiBkcm1fYXRvbWljX3N0YXRlX2ZyZWUgLSBmcmVlIGFsbCBtZW1vcnkgZm9y IGFuIGF0b21pYyBzdGF0ZQorICogQHN0YXRlOiBhdG9taWMgc3RhdGUgdG8gZGVhbGxvY2F0ZQor ICoKKyAqIFRoaXMgZnJlZXMgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYW4gYXRvbWljIHN0 YXRlLCBpbmNsdWRpbmcgYWxsIHRoZQorICogcGVyLW9iamVjdCBzdGF0ZSBmb3IgcGxhbmVzLCBj cnRjcyBhbmQgY29ubmVjdG9ycy4KKyAqLwordm9pZCBkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCWRybV9hdG9taWNfc3RhdGVfY2xlYXIo c3RhdGUpOworCisJRFJNX0RFQlVHX0tNUygiRnJlZWluZyBhdG9taWMgc3RhdGUgJXBcbiIsIHN0 YXRlKTsKKworCWtmcmVlX3N0YXRlKHN0YXRlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21p Y19zdGF0ZV9mcmVlKTsKKworLyoqCisgKiBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlIC0gZ2V0 IGNydGMgc3RhdGUKKyAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZSBvYmplY3QKKyAqIEBj cnRjOiBjcnRjIHRvIGdldCBzdGF0ZSBvYmplY3QgZm9yCisgKgorICogVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRoZSBjcnRjIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY3J0YywgYWxsb2NhdGluZyBpdCBp ZgorICogbmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0aGUgcmVsZXZhbnQgY3J0YyBsb2NrIHRv IG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZQorICogaXMgY29uc2lzdGVudC4KKyAqCisgKiBSZXR1 cm5zOgorICoKKyAqIEVpdGhlciB0aGUgYWxsb2NhdGVkIHN0YXRlIG9yIHRoZSBlcnJvciBjb2Rl IGVuY29kZWQgaW50byB0aGUgcG9pbnRlci4gV2hlbgorICogdGhlIGVycm9yIGlzIEVERUFETEsg dGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5kIHRoZQor ICogZW50aXJlIGF0b21pYyBzZXF1ZW5jZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90aGVyIGVy cm9ycyBhcmUgZmF0YWwuCisgKi8KK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqCitkcm1fYXRvbWlj X2dldF9jcnRjX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgc3Ry dWN0IGRybV9jcnRjICpjcnRjKQoreworCWludCByZXQsIGluZGV4OworCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKworCWluZGV4ID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7CisK KwlpZiAoc3RhdGUtPmNydGNfc3RhdGVzW2luZGV4XSkKKwkJcmV0dXJuIHN0YXRlLT5jcnRjX3N0 YXRlc1tpbmRleF07CisKKwlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjcnRjLT5tdXRleCwgc3Rh dGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJ Y3J0Y19zdGF0ZSA9IGNydGMtPmZ1bmNzLT5hdG9taWNfZHVwbGljYXRlX3N0YXRlKGNydGMpOwor CWlmICghY3J0Y19zdGF0ZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzdGF0ZS0+ Y3J0Y19zdGF0ZXNbaW5kZXhdID0gY3J0Y19zdGF0ZTsKKwlzdGF0ZS0+Y3J0Y3NbaW5kZXhdID0g Y3J0YzsKKwljcnRjX3N0YXRlLT5zdGF0ZSA9IHN0YXRlOworCisJRFJNX0RFQlVHX0tNUygiQWRk ZWQgW0NSVEM6JWRdICVwIHN0YXRlIHRvICVwXG4iLAorCQkgICAgICBjcnRjLT5iYXNlLmlkLCBj cnRjX3N0YXRlLCBzdGF0ZSk7CisKKwlyZXR1cm4gY3J0Y19zdGF0ZTsKK30KK0VYUE9SVF9TWU1C T0woZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19nZXRf cGxhbmVfc3RhdGUgLSBnZXQgcGxhbmUgc3RhdGUKKyAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBz dGF0ZSBvYmplY3QKKyAqIEBwbGFuZTogcGxhbmUgdG8gZ2V0IHN0YXRlIG9iamVjdCBmb3IKKyAq CisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHBsYW5lIHN0YXRlIGZvciB0aGUgZ2l2ZW4g cGxhbmUsIGFsbG9jYXRpbmcgaXQgaWYKKyAqIG5lZWRlZC4gSXQgd2lsbCBhbHNvIGdyYWIgdGhl IHJlbGV2YW50IHBsYW5lIGxvY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRlCisgKiBpcyBj b25zaXN0ZW50LgorICoKKyAqIFJldHVybnM6CisgKgorICogRWl0aGVyIHRoZSBhbGxvY2F0ZWQg c3RhdGUgb3IgdGhlIGVycm9yIGNvZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVuCisg KiB0aGUgZXJyb3IgaXMgRURFQURMSyB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0 ZWQgYSBkZWFkbG9jayBhbmQgdGhlCisgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3QgYmUg cmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqCitkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21p Y19zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCWludCBy ZXQsIGluZGV4OworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlOworCisJaW5k ZXggPSBkcm1fcGxhbmVfaW5kZXgocGxhbmUpOworCisJaWYgKHN0YXRlLT5wbGFuZV9zdGF0ZXNb aW5kZXhdKQorCQlyZXR1cm4gc3RhdGUtPnBsYW5lX3N0YXRlc1tpbmRleF07CisKKwkvKgorCSAq IFRPRE86IFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIHBlci1wbGFuZSBtdXRleGVzLiBTbyBpbnN0 ZWFkIG9mIHRyeWluZworCSAqIGNyYXp5IHRyaWNrcyB3aXRoIGRlZmVycmluZyBwbGFuZS0+Y3J0 YyBhbmQgaG9waW5nIGZvciB0aGUgYmVzdCBqdXN0CisJICogZ3JhYiBhbGwgY3J0YyBsb2Nrcy4g T25jZSB3ZSBoYXZlIHBlci1wbGFuZSBsb2NrcyB3ZSBtdXN0IHVwZGF0ZSB0aGlzCisJICogdG8g b25seSB0YWtlIHRoZSBwbGFuZSBtdXRleC4KKwkgKi8KKwlyZXQgPSBkcm1fbW9kZXNldF9sb2Nr X2FsbF9jcnRjcyhzdGF0ZS0+ZGV2LCBzdGF0ZS0+YWNxdWlyZV9jdHgpOworCWlmIChyZXQpCisJ CXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlwbGFuZV9zdGF0ZSA9IHBsYW5lLT5mdW5jcy0+YXRv bWljX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSk7CisJaWYgKCFwbGFuZV9zdGF0ZSkKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisKKwlzdGF0ZS0+cGxhbmVfc3RhdGVzW2luZGV4XSA9IHBsYW5l X3N0YXRlOworCXN0YXRlLT5wbGFuZXNbaW5kZXhdID0gcGxhbmU7CisJcGxhbmVfc3RhdGUtPnN0 YXRlID0gc3RhdGU7CisKKwlEUk1fREVCVUdfS01TKCJBZGRlZCBbUExBTkU6JWRdICVwIHN0YXRl IHRvICVwXG4iLAorCQkgICAgICBwbGFuZS0+YmFzZS5pZCwgcGxhbmVfc3RhdGUsIHN0YXRlKTsK KworCWlmIChwbGFuZV9zdGF0ZS0+Y3J0YykgeworCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNy dGNfc3RhdGU7CisKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3Rh dGUsCisJCQkJCQkgICAgICAgcGxhbmVfc3RhdGUtPmNydGMpOworCQlpZiAoSVNfRVJSKGNydGNf c3RhdGUpKQorCQkJcmV0dXJuIEVSUl9DQVNUKGNydGNfc3RhdGUpOworCX0KKworCXJldHVybiBw bGFuZV9zdGF0ZTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19nZXRfcGxhbmVfc3RhdGUp OworCisvKioKKyAqIGRybV9hdG9taWNfZ2V0X2Nvbm5lY3Rvcl9zdGF0ZSAtIGdldCBjb25uZWN0 b3Igc3RhdGUKKyAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZSBvYmplY3QKKyAqIEBjb25u ZWN0b3I6IGNvbm5lY3RvciB0byBnZXQgc3RhdGUgb2JqZWN0IGZvcgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gcmV0dXJucyB0aGUgY29ubmVjdG9yIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29ubmVjdG9y LAorICogYWxsb2NhdGluZyBpdCBpZiBuZWVkZWQuIEl0IHdpbGwgYWxzbyBncmFiIHRoZSByZWxl dmFudCBjb25uZWN0b3IgbG9jayB0bworICogbWFrZSBzdXJlIHRoYXQgdGhlIHN0YXRlIGlzIGNv bnNpc3RlbnQuCisgKgorICogUmV0dXJuczoKKyAqCisgKiBFaXRoZXIgdGhlIGFsbG9jYXRlZCBz dGF0ZSBvciB0aGUgZXJyb3IgY29kZSBlbmNvZGVkIGludG8gdGhlIHBvaW50ZXIuIFdoZW4KKyAq IHRoZSBlcnJvciBpcyBFREVBRExLIHRoZW4gdGhlIHcvdyBtdXRleCBjb2RlIGhhcyBkZXRlY3Rl ZCBhIGRlYWRsb2NrIGFuZCB0aGUKKyAqIGVudGlyZSBhdG9taWMgc2VxdWVuY2UgbXVzdCBiZSBy ZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICovCitzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqCitkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCWludCByZXQsIGluZGV4OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZp ZyA9ICZjb25uZWN0b3ItPmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5lY3Rvcl9zdGF0ZTsKKworCWluZGV4ID0gZHJtX2Nvbm5lY3Rvcl9pbmRleChj b25uZWN0b3IpOworCisJaWYgKHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2luZGV4XSkKKwkJcmV0 dXJuIHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2luZGV4XTsKKworCXJldCA9IGRybV9tb2Rlc2V0 X2xvY2soJmNvbmZpZy0+Y29ubmVjdGlvbl9tdXRleCwgc3RhdGUtPmFjcXVpcmVfY3R4KTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJY29ubmVjdG9yX3N0YXRlID0gY29u bmVjdG9yLT5mdW5jcy0+YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShjb25uZWN0b3IpOworCWlmICgh Y29ubmVjdG9yX3N0YXRlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXN0YXRlLT5j b25uZWN0b3Jfc3RhdGVzW2luZGV4XSA9IGNvbm5lY3Rvcl9zdGF0ZTsKKwlzdGF0ZS0+Y29ubmVj dG9yc1tpbmRleF0gPSBjb25uZWN0b3I7CisJY29ubmVjdG9yX3N0YXRlLT5zdGF0ZSA9IHN0YXRl OworCisJRFJNX0RFQlVHX0tNUygiQWRkZWQgW0NPTk5FQ1RPUjolZF0gJXAgc3RhdGUgdG8gJXBc biIsCisJCSAgICAgIGNvbm5lY3Rvci0+YmFzZS5pZCwgY29ubmVjdG9yX3N0YXRlLCBzdGF0ZSk7 CisKKwlpZiAoY29ubmVjdG9yX3N0YXRlLT5jcnRjKSB7CisJCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZTsKKworCQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0 ZShzdGF0ZSwKKwkJCQkJCSAgICAgICBjb25uZWN0b3Jfc3RhdGUtPmNydGMpOworCQlpZiAoSVNf RVJSKGNydGNfc3RhdGUpKQorCQkJcmV0dXJuIEVSUl9DQVNUKGNydGNfc3RhdGUpOworCX0KKwor CXJldHVybiBjb25uZWN0b3Jfc3RhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0 X2Nvbm5lY3Rvcl9zdGF0ZSk7CisKKy8qKgorICogZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxh bmUgLSBzZXQgY3J0YyBmb3IgcGxhbmUKKyAqIEBwbGFuZV9zdGF0ZTogYXRvbWljIHN0YXRlIG9i amVjdCBmb3IgdGhlIHBsYW5lCisgKiBAY3J0YzogY3J0YyB0byB1c2UgZm9yIHRoZSBwbGFuZQor ICoKKyAqIENoYW5naW5nIHRoZSBhc3NpZ25lZCBjcnRjIGZvciBhIHBsYW5lIHJlcXVpcmVzIHVz IHRvIGdyYWIgdGhlIGxvY2sgYW5kIHN0YXRlCisgKiBmb3IgdGhlIG5ldyBjcnRjLCBhcyBuZWVk ZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbGwgdGhlc2UgZGV0YWlscworICogYmVz aWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2JqZWN0IGl0c2VsZi4KKyAq CisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWlsIHdpdGggLUVERUFETEsg b3IgLUVOT01FTS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURMSworICogdGhlbiB0aGUgdy93IG11 dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5kIHRoZSBlbnRpcmUgYXRvbWljCisg KiBzZXF1ZW5jZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90aGVyIGVycm9ycyBhcmUgZmF0YWwu CisgKi8KK2ludAorZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7 CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJaWYgKGNydGMpIHsKKwkJ Y3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRl LAorCQkJCQkJICAgICAgIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQorCQkJcmV0 dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisJfQorCisJcGxhbmVfc3RhdGUtPmNydGMgPSBjcnRj OworCisJaWYgKGNydGMpCisJCURSTV9ERUJVR19LTVMoIkxpbmsgcGxhbmUgc3RhdGUgJXAgdG8g W0NSVEM6JWRdXG4iLAorCQkJICAgICAgcGxhbmVfc3RhdGUsIGNydGMtPmJhc2UuaWQpOworCWVs c2UKKwkJRFJNX0RFQlVHX0tNUygiTGluayBwbGFuZSBzdGF0ZSAlcCB0byBbTk9DUlRDXVxuIiwg cGxhbmVfc3RhdGUpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNf c2V0X2NydGNfZm9yX3BsYW5lKTsKKworLyoqCisgKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9j b25uZWN0b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVjdG9yCisgKiBAY29ubl9zdGF0ZTogYXRvbWlj IHN0YXRlIG9iamVjdCBmb3IgdGhlIGNvbm5lY3RvcgorICogQGNydGM6IGNydGMgdG8gdXNlIGZv ciB0aGUgY29ubmVjdG9yCisgKgorICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEg Y29ubmVjdG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5kCisgKiBzdGF0ZSBmb3Ig dGhlIG5ldyBjcnRjLCBhcyBuZWVkZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbGwg dGhlc2UKKyAqIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3Rh dGUgb2JqZWN0IGl0c2VsZi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGNh biBmYWlsIHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4gV2hlbiB0aGUgZXJyb3IgaXMgRURFQURM SworICogdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5k IHRoZSBlbnRpcmUgYXRvbWljCisgKiBzZXF1ZW5jZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90 aGVyIGVycm9ycyBhcmUgZmF0YWwuCisgKi8KK2ludAorZHJtX2F0b21pY19zZXRfY3J0Y19mb3Jf Y29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAorCQkJCSAg c3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19z dGF0ZTsKKworCWlmIChjcnRjKSB7CisJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRj X3N0YXRlKGNvbm5fc3RhdGUtPnN0YXRlLCBjcnRjKTsKKwkJaWYgKElTX0VSUihjcnRjX3N0YXRl KSkKKwkJCXJldHVybiBQVFJfRVJSKGNydGNfc3RhdGUpOworCX0KKworCWNvbm5fc3RhdGUtPmNy dGMgPSBjcnRjOworCisJaWYgKGNydGMpCisJCURSTV9ERUJVR19LTVMoIkxpbmsgY29ubmVjdG9y IHN0YXRlICVwIHRvIFtDUlRDOiVkXVxuIiwKKwkJCSAgICAgIGNvbm5fc3RhdGUsIGNydGMtPmJh c2UuaWQpOworCWVsc2UKKwkJRFJNX0RFQlVHX0tNUygiTGluayBjb25uZWN0b3Igc3RhdGUgJXAg dG8gW05PQ1JUQ11cbiIsCisJCQkgICAgICBjb25uX3N0YXRlKTsKKworCXJldHVybiAwOworfQor RVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3IpOworCisvKioK KyAqIGRybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMgLSBhZGQgY29ubmVjdG9ycyBm b3IgY3J0YworICogQHN0YXRlOiBhdG9taWMgc3RhdGUKKyAqIEBjcnRjOiBEUk0gY3J0YworICoK KyAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBhbmQgYWRk cyBhbGwgY29ubmVjdG9ycworICogY3VycmVudGx5IHVzaW5nIEBjcnRjIHRvIHRoZSBhdG9taWMg Y29uZmlndXJhdGlvbiBAc3RhdGUuIE5vdGUgdGhhdCB0aGlzCisgKiBmdW5jdGlvbiBtdXN0IGFj cXVpcmUgdGhlIGNvbm5lY3Rpb24gbXV0ZXguIFRoaXMgY2FuIHBvdGVudGlhbGx5IGNhdXNlCisg KiB1bm5lZWRlZCBzZXJhbGl6YXRpb24gaWYgdGhlIHVwZGF0ZSBpcyBqdXN0IGZvciB0aGUgcGxh bmVzIG9uIG9uZSBjcnRjLiBIZW5jZQorICogZHJpdmVycyBhbmQgaGVscGVycyBzaG91bGQgb25s eSBjYWxsIHRoaXMgd2hlbiByZWFsbHkgbmVlZGVkIChlLmcuIHdoZW4gYQorICogZnVsbCBtb2Rl c2V0IG5lZWRzIHRvIGhhcHBlbiBkdWUgdG8gc29tZSBjaGFuZ2UpLgorICoKKyAqIFJldHVybnM6 CisgKiAwIG9uIHN1Y2Nlc3Mgb3IgY2FuIGZhaWwgd2l0aCAtRURFQURMSyBvciAtRU5PTUVNLiBX aGVuIHRoZSBlcnJvciBpcyBFREVBRExLCisgKiB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMg ZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQgdGhlIGVudGlyZSBhdG9taWMKKyAqIHNlcXVlbmNlIG11 c3QgYmUgcmVzdGFydGVkLiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworaW50Citk cm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9t b2RlX2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNv bm5fc3RhdGU7CisJaW50IHJldDsKKworCXJldCA9IGRybV9tb2Rlc2V0X2xvY2soJmNvbmZpZy0+ Y29ubmVjdGlvbl9tdXRleCwgc3RhdGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJRFJNX0RFQlVHX0tNUygiQWRkaW5nIGFsbCBjdXJyZW50IGNvbm5lY3RvcnMg Zm9yIFtDUlRDOiVkXSB0byAlcFxuIiwKKwkJICAgICAgY3J0Yy0+YmFzZS5pZCwgc3RhdGUpOwor CisJLyoKKwkgKiBDaGFuZ2VkIGNvbm5lY3RvcnMgYXJlIGFscmVhZHkgaW4gQHN0YXRlLCBzbyBv bmx5IG5lZWQgdG8gbG9vayBhdCB0aGUKKwkgKiBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisJICov CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZjb25maWctPmNvbm5lY3Rvcl9saXN0 LCBoZWFkKSB7CisJCWlmIChjb25uZWN0b3ItPnN0YXRlLT5jcnRjICE9IGNydGMpCisJCQljb250 aW51ZTsKKworCQljb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0 YXRlLCBjb25uZWN0b3IpOworCQlpZiAoSVNfRVJSKGNvbm5fc3RhdGUpKQorCQkJcmV0dXJuIFBU Ul9FUlIoY29ubl9zdGF0ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRy bV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMpOworCisvKioKKyAqIGRybV9hdG9taWNf Y29ubmVjdG9yc19mb3JfY3J0YyAtIGNvdW50IG51bWJlciBvZiBjb25uZWN0ZWQgb3V0cHV0cwor ICogQHN0YXRlOiBhdG9taWMgc3RhdGUKKyAqIEBjcnRjOiBEUk0gY3J0YworICoKKyAqIFRoaXMg ZnVuY3Rpb24gY291bnRzIGFsbCBjb25uZWN0b3JzIHdoaWNoIHdpbGwgYmUgY29ubmVjdGVkIHRv IEBjcnRjCisgKiBhY2NvcmRpbmcgdG8gQHN0YXRlLiBVc2VmdWwgdG8gcmVjb21wdXRlIHRoZSBl bmFibGUgc3RhdGUgZm9yIEBjcnRjLgorICovCitpbnQKK2RybV9hdG9taWNfY29ubmVjdG9yc19m b3JfY3J0YyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgICAgICAgc3RydWN0 IGRybV9jcnRjICpjcnRjKQoreworCWludCBuY29ubmVjdG9ycyA9IHN0YXRlLT5kZXYtPm1vZGVf Y29uZmlnLm51bV9jb25uZWN0b3I7CisJaW50IGksIG51bV9jb25uZWN0ZWRfY29ubmVjdG9ycyA9 IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmNvbm5lY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKKworCQljb25uX3N0YXRlID0gc3RhdGUtPmNv bm5lY3Rvcl9zdGF0ZXNbaV07CisKKwkJaWYgKGNvbm5fc3RhdGUgJiYgY29ubl9zdGF0ZS0+Y3J0 YyA9PSBjcnRjKQorCQkJbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3JzKys7CisJfQorCisJRFJNX0RF QlVHX0tNUygiU3RhdGUgJXAgaGFzICVpIGNvbm5lY3RvcnMgZm9yIFtDUlRDOiVkXVxuIiwKKwkJ ICAgICAgc3RhdGUsIG51bV9jb25uZWN0ZWRfY29ubmVjdG9ycywgY3J0Yy0+YmFzZS5pZCk7CisK KwlyZXR1cm4gbnVtX2Nvbm5lY3RlZF9jb25uZWN0b3JzOworfQorRVhQT1JUX1NZTUJPTChkcm1f YXRvbWljX2Nvbm5lY3RvcnNfZm9yX2NydGMpOworCisvKioKKyAqIGRybV9hdG9taWNfbGVnYWN5 X2JhY2tvZmYgLSBsb2NraW5nIGJhY2tvZmYgZm9yIGxlZ2FjeSBpb2N0bHMKKyAqIEBzdGF0ZTog YXRvbWljIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBieSBsZWdh Y3kgZW50cnkgcG9pbnRzIHdoaWNoIGRvbid0IHVuZGVyc3RhbmQKKyAqIC1FREVBRExLIHNlbWFu dGljcy4gRm9yIHNpbXBsaWNpdHkgdGhpcyBvbmUgd2lsbCBncmFiIGFsbCBtb2Rlc2V0IGxvY2tz IGFmdGVyCisgKiAgdGhlIHNsb3dwYXRoIGNvbXBsZXRlZC4KKyAqLwordm9pZCBkcm1fYXRvbWlj X2xlZ2FjeV9iYWNrb2ZmKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQg cmV0OworCityZXRyeToKKwlkcm1fbW9kZXNldF9iYWNrb2ZmKHN0YXRlLT5hY3F1aXJlX2N0eCk7 CisKKwlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZzdGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZy5jb25u ZWN0aW9uX211dGV4LAorCQkJICAgICAgIHN0YXRlLT5hY3F1aXJlX2N0eCk7CisJaWYgKHJldCkK KwkJZ290byByZXRyeTsKKwlyZXQgPSBkcm1fbW9kZXNldF9sb2NrX2FsbF9jcnRjcyhzdGF0ZS0+ ZGV2LAorCQkJCQkgc3RhdGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0KQorCQlnb3RvIHJldHJ5 OworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2xlZ2FjeV9iYWNrb2ZmKTsKKworLyoqCisg KiBkcm1fYXRvbWljX2NoZWNrX29ubHkgLSBjaGVjayB3aGV0aGVyIGEgZ2l2ZW4gY29uZmlnIHdv dWxkIHdvcmsKKyAqIEBzdGF0ZTogYXRvbWljIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2sKKyAqCisg KiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIC1FREVBRExLIGlmIHRoZSBkcml2 ZXIgbmVlZGVkIHRvIGFjcXVpcmUKKyAqIG1vcmUgbG9ja3MgYnV0IGVuY291bnRlcmVkIGEgZGVh ZGxvY2suIFRoZSBjYWxsZXIgbXVzdCB0aGVuIGRvIHRoZSB1c3VhbCB3L3cKKyAqIGJhY2tvZmYg ZGFuY2UgYW5kIHJlc3RhcnQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgorICoKKyAqIFJl dHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4K KyAqLworaW50IGRybV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUpCit7CisJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5kZXYt Pm1vZGVfY29uZmlnOworCisJRFJNX0RFQlVHX0tNUygiY2hlY2tpbmcgJXBcbiIsIHN0YXRlKTsK KworCWlmIChjb25maWctPmZ1bmNzLT5hdG9taWNfY2hlY2spCisJCXJldHVybiBjb25maWctPmZ1 bmNzLT5hdG9taWNfY2hlY2soc3RhdGUtPmRldiwgc3RhdGUpOworCWVsc2UKKwkJcmV0dXJuIDA7 Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfY2hlY2tfb25seSk7CisKKy8qKgorICogZHJt X2F0b21pY19jb21taXQgLSBjb21taXQgY29uZmlndXJhdGlvbiBhdG9taWNhbGx5CisgKiBAc3Rh dGU6IGF0b21pYyBjb25maWd1cmF0aW9uIHRvIGNoZWNrCisgKgorICogTm90ZSB0aGF0IHRoaXMg ZnVuY3Rpb24gY2FuIHJldHVybiAtRURFQURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0byBhY3F1 aXJlCisgKiBtb3JlIGxvY2tzIGJ1dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2NrLiBUaGUgY2FsbGVy IG11c3QgdGhlbiBkbyB0aGUgdXN1YWwgdy93CisgKiBiYWNrb2ZmIGRhbmNlIGFuZCByZXN0YXJ0 LiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqCisgKiBBbHNvIG5vdGUgdGhhdCBvbiBz dWNjZXNzZnVsIGV4ZWN1dGlvbiBvd25lcnNoaXAgb2YgQHN0YXRlIGlzIHRyYW5zZmVycmVkCisg KiBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB0byB0aGUgZnVuY3Rpb24gaXRzZWxm LiBUaGUgY2FsbGVyIG11c3Qgbm90CisgKiBmcmVlIG9yIGluIGFueSBvdGhlciB3YXkgYWNjZXNz IEBzdGF0ZS4gSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRoZW4gdGhlIGNhbGxlcgorICogbXVzdCBj bGVhbiB1cCBAc3RhdGUgaXRzZWxmLgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3Ms IG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9hdG9taWNfY29t bWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9jb25maWc7CisJaW50IHJldDsKKwor CXJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJu IHJldDsKKworCURSTV9ERUJVR19LTVMoImNvbW1pdGluZyAlcFxuIiwgc3RhdGUpOworCisJcmV0 dXJuIGNvbmZpZy0+ZnVuY3MtPmF0b21pY19jb21taXQoc3RhdGUtPmRldiwgc3RhdGUsIGZhbHNl KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19jb21taXQpOworCisvKioKKyAqIGRybV9h dG9taWNfYXN5bmNfY29tbWl0IC0gYXRvbWljJmFzeW5jIGNvbmZpZ3VyYXRpb24gY29tbWl0Cisg KiBAc3RhdGU6IGF0b21pYyBjb25maWd1cmF0aW9uIHRvIGNoZWNrCisgKgorICogTm90ZSB0aGF0 IHRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiAtRURFQURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0 byBhY3F1aXJlCisgKiBtb3JlIGxvY2tzIGJ1dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2NrLiBUaGUg Y2FsbGVyIG11c3QgdGhlbiBkbyB0aGUgdXN1YWwgdy93CisgKiBiYWNrb2ZmIGRhbmNlIGFuZCBy ZXN0YXJ0LiBBbGwgb3RoZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqCisgKiBBbHNvIG5vdGUgdGhh dCBvbiBzdWNjZXNzZnVsIGV4ZWN1dGlvbiBvd25lcnNoaXAgb2YgQHN0YXRlIGlzIHRyYW5zZmVy cmVkCisgKiBmcm9tIHRoZSBjYWxsZXIgb2YgdGhpcyBmdW5jdGlvbiB0byB0aGUgZnVuY3Rpb24g aXRzZWxmLiBUaGUgY2FsbGVyIG11c3Qgbm90CisgKiBmcmVlIG9yIGluIGFueSBvdGhlciB3YXkg YWNjZXNzIEBzdGF0ZS4gSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRoZW4gdGhlIGNhbGxlcgorICog bXVzdCBjbGVhbiB1cCBAc3RhdGUgaXRzZWxmLgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1 Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRybV9hdG9t aWNfYXN5bmNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1 Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmc3RhdGUtPmRldi0+bW9kZV9jb25maWc7CisJ aW50IHJldDsKKworCXJldCA9IGRybV9hdG9taWNfY2hlY2tfb25seShzdGF0ZSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCURSTV9ERUJVR19LTVMoImNvbW1pdGluZyAlcCBhc3luY2hy b25vdXNseVxuIiwgc3RhdGUpOworCisJcmV0dXJuIGNvbmZpZy0+ZnVuY3MtPmF0b21pY19jb21t aXQoc3RhdGUtPmRldiwgc3RhdGUsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2FzeW5jX2NvbW1pdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljLmggYi9p bmNsdWRlL2RybS9kcm1fYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwLi41YmIxNWY1NTBjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1f YXRvbWljLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBSZWQg SGF0CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycC4KKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFks CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhP UihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us CisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKiBBdXRob3JzOgorICogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwuY29tPgorICogRGFu aWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KKyAqLworCisjaWZuZGVmIERSTV9B VE9NSUNfSF8KKyNkZWZpbmUgRFJNX0FUT01JQ19IXworCitzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqIF9fbXVzdF9jaGVjaworZHJtX2F0b21pY19zdGF0ZV9hbGxvYyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpOwordm9pZCBkcm1fYXRvbWljX3N0YXRlX2ZyZWUoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKTsKKworc3RydWN0IGRybV9jcnRjX3N0YXRlICogX19tdXN0X2NoZWNr Citkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSwKKwkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUg KiBfX211c3RfY2hlY2sKK2RybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgIHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKTsKK3N0cnVj dCBkcm1fY29ubmVjdG9yX3N0YXRlICogX19tdXN0X2NoZWNrCitkcm1fYXRvbWljX2dldF9jb25u ZWN0b3Jfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworCitpbnQgX19tdXN0X2NoZWNrCitkcm1f YXRvbWljX3NldF9jcnRjX2Zvcl9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9z dGF0ZSwKKwkJCSAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitpbnQgX19tdXN0X2NoZWNr Citkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKmNvbm5fc3RhdGUsCisJCQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworaW50IF9f bXVzdF9jaGVjaworZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2lu dAorZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRjKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworCit2b2lkIGRybV9h dG9taWNfbGVnYWN5X2JhY2tvZmYoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKKwor aW50IF9fbXVzdF9jaGVjayBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKTsKK2ludCBfX211c3RfY2hlY2sgZHJtX2F0b21pY19jb21taXQoc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKK2ludCBfX211c3RfY2hlY2sgZHJtX2F0b21pY19h c3luY19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKKworI2VuZGlmIC8q IERSTV9BVE9NSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9p bmNsdWRlL2RybS9kcm1fY3J0Yy5oCmluZGV4IDM1NTQ4NjhkYmYwOS4uYjE3MjgxN2UxMGM3IDEw MDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9j cnRjLmgKQEAgLTc5NCw2ICs3OTQsMzIgQEAgc3RydWN0IGRybV9icmlkZ2UgewogfTsKIAogLyoq CisgKiBzdHJ1Y3Qgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgLSB0aGUgZ2xvYmFsIHN0YXRlIG9i amVjdCBmb3IgYXRvbWljIHVwZGF0ZXMKKyAqIEBkZXY6IHBhcmVudCBEUk0gZGV2aWNlCisgKiBA ZmxhZ3M6IHN0YXRlIGZsYWdzIGxpa2UgYXN5bmMgdXBkYXRlCisgKiBAcGxhbmVzOiBwb2ludGVy IHRvIGFycmF5IG9mIHBsYW5lIHBvaW50ZXJzCisgKiBAcGxhbmVfc3RhdGVzOiBwb2ludGVyIHRv IGFycmF5IG9mIHBsYW5lIHN0YXRlcyBwb2ludGVycworICogQGNydGNzOiBwb2ludGVyIHRvIGFy cmF5IG9mIENSVEMgcG9pbnRlcnMKKyAqIEBjcnRjX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBv ZiBDUlRDIHN0YXRlcyBwb2ludGVycworICogQGNvbm5lY3RvcnM6IHBvaW50ZXIgdG8gYXJyYXkg b2YgY29ubmVjdG9yIHBvaW50ZXJzCisgKiBAY29ubmVjdG9yX3N0YXRlczogcG9pbnRlciB0byBh cnJheSBvZiBjb25uZWN0b3Igc3RhdGVzIHBvaW50ZXJzCisgKiBAYWNxdWlyZV9jdHg6IGFjcXVp cmUgY29udGV4dCBmb3IgdGhpcyBhdG9taWMgbW9kZXNldCBzdGF0ZSB1cGRhdGUKKyAqLworc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CisJdWludDMy X3QgZmxhZ3M7CisJc3RydWN0IGRybV9wbGFuZSAqKnBsYW5lczsKKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlICoqcGxhbmVfc3RhdGVzOworCXN0cnVjdCBkcm1fY3J0YyAqKmNydGNzOworCXN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqKmNydGNfc3RhdGVzOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICoq Y29ubmVjdG9yczsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqKmNvbm5lY3Rvcl9zdGF0 ZXM7CisKKwlzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmFjcXVpcmVfY3R4OworfTsK KworCisvKioKICAqIHN0cnVjdCBkcm1fbW9kZV9zZXQgLSBuZXcgdmFsdWVzIGZvciBhIENSVEMg Y29uZmlnIGNoYW5nZQogICogQGZiOiBmcmFtZWJ1ZmZlciB0byB1c2UgZm9yIG5ldyBjb25maWcK ICAqIEBjcnRjOiBDUlRDIHdob3NlIGNvbmZpZ3VyYXRpb24gd2UncmUgYWJvdXQgdG8gY2hhbmdl CkBAIC04MjQsNiArODUwLDkgQEAgc3RydWN0IGRybV9tb2RlX3NldCB7CiAgKiBzdHJ1Y3QgZHJt X21vZGVfY29uZmlnX2Z1bmNzIC0gYmFzaWMgZHJpdmVyIHByb3ZpZGVkIG1vZGUgc2V0dGluZyBm dW5jdGlvbnMKICAqIEBmYl9jcmVhdGU6IGNyZWF0ZSBhIG5ldyBmcmFtZWJ1ZmZlciBvYmplY3QK ICAqIEBvdXRwdXRfcG9sbF9jaGFuZ2VkOiBmdW5jdGlvbiB0byBoYW5kbGUgb3V0cHV0IGNvbmZp Z3VyYXRpb24gY2hhbmdlcworICogQGF0b21pY19jaGVjazogY2hlY2sgd2hldGhlciBhIGdpdmUg YXRvbWljIHN0YXRlIHVwZGF0ZSBpcyBwb3NzaWJsZQorICogQGF0b21pY19jb21taXQ6IGNvbW1p dCBhbiBhdG9taWMgc3RhdGUgdXBkYXRlIHByZXZpb3VzbHkgdmVyaWZpZWQgd2l0aAorICogCWF0 b21pY19jaGVjaygpCiAgKgogICogU29tZSBnbG9iYWwgKGkuZS4gbm90IHBlci1DUlRDLCBjb25u ZWN0b3IsIGV0YykgbW9kZSBzZXR0aW5nIGZ1bmN0aW9ucyB0aGF0CiAgKiBpbnZvbHZlIGRyaXZl cnMuCkBAIC04MzMsNiArODYyLDEyIEBAIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3Mgewog CQkJCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCQkJCQkgICAgIHN0cnVjdCBk cm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCk7CiAJdm9pZCAoKm91dHB1dF9wb2xsX2NoYW5nZWQp KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCisJaW50ICgqYXRvbWljX2NoZWNrKShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICphKTsKKwlp bnQgKCphdG9taWNfY29tbWl0KShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqYSwKKwkJCSAgICAgYm9vbCBhc3luYyk7CiB9OwogCiAvKioK LS0gCjIuMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcK aHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=