From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH] drm: Global atomic state handling Date: Tue, 4 Nov 2014 23:07:49 +0100 Message-ID: <1415138869-12060-1-git-send-email-daniel.vetter@ffwll.ch> References: <1415137030-16319-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-wi0-f178.google.com (mail-wi0-f178.google.com [209.85.212.178]) by gabe.freedesktop.org (Postfix) with ESMTP id 77E076E57C for ; Tue, 4 Nov 2014 14:07:40 -0800 (PST) Received: by mail-wi0-f178.google.com with SMTP id q5so361882wiv.11 for ; Tue, 04 Nov 2014 14:07:39 -0800 (PST) In-Reply-To: <1415137030-16319-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 ZSA7LSkKCkNjOiBGZW5nZ3VhbmcgV3UgPGZlbmdndWFuZy53dUBpbnRlbC5jb20+CkNjOiBTZWFu IFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9yZz4KQ2M6IE1hdHQgUm9wZXIgPG1hdHRoZXcuZC5y b3BlckBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0 ZXJAZmZ3bGwuY2g+CgpmaXh1cCBmb3IgZ2xvYmFsIGF0b21pYyBzdGF0ZSBoYW5kbGluZwotLS0K IGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9k cm1fYXRvbWljLmMgfCA1OTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oICAgICB8ICA2NSArKysrKwogaW5jbHVkZS9k cm0vZHJtX2NydGMuaCAgICAgICB8ICAzNSArKysKIDQgZmlsZXMgY2hhbmdlZCwgNjk1IGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pYy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2F0b21p Yy5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCmluZGV4IDkyOTJhNzYxZWE2ZC4uYzVlMzdkYzQ1OWVlIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl CkBAIC0xNCw3ICsxNCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBk cm1fY2FjaGUubyBcCiAJCWRybV9pbmZvLm8gZHJtX2RlYnVnZnMubyBkcm1fZW5jb2Rlcl9zbGF2 ZS5vIFwKIAkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9iYWwubyBkcm1fcHJpbWUubyBcCiAJ CWRybV9yZWN0Lm8gZHJtX3ZtYV9tYW5hZ2VyLm8gZHJtX2ZsaXBfd29yay5vIFwKLQkJZHJtX21v ZGVzZXRfbG9jay5vCisJCWRybV9tb2Rlc2V0X2xvY2subyBkcm1fYXRvbWljLm8KIAogZHJtLSQo Q09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KIGRybS0kKENPTkZJR19EUk1fR0VNX0NNQV9I RUxQRVIpICs9IGRybV9nZW1fY21hX2hlbHBlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2F0b21pYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmJmM2NkYzIxMzNlNAotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKQEAgLTAsMCArMSw1OTQgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdAorICogQ29weXJpZ2h0IChDKSAyMDE0IElu dGVsIENvcnAuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisg KiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg d2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNv cGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQor ICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dp bmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRX QVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVY UFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUg Q09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqIFJvYiBDbGFyayA8 cm9iZGNsYXJrQGdtYWlsLmNvbT4KKyAqIERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3 bGwuY2g+CisgKi8KKworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJt X2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKK3N0YXRpYyB2 b2lkIGtmcmVlX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlrZnJl ZShzdGF0ZS0+Y29ubmVjdG9ycyk7CisJa2ZyZWUoc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXMpOwor CWtmcmVlKHN0YXRlLT5jcnRjcyk7CisJa2ZyZWUoc3RhdGUtPmNydGNfc3RhdGVzKTsKKwlrZnJl ZShzdGF0ZS0+cGxhbmVzKTsKKwlrZnJlZShzdGF0ZS0+cGxhbmVfc3RhdGVzKTsKKwlrZnJlZShz dGF0ZSk7Cit9CisKKy8qKgorICogZHJtX2F0b21pY19zdGF0ZV9hbGxvYyAtIGFsbG9jYXRlIGF0 b21pYyBzdGF0ZQorICogQGRldjogRFJNIGRldmljZQorICoKKyAqIFRoaXMgYWxsb2NhdGVzIGFu IGVtcHR5IGF0b21pYyBzdGF0ZSB0byB0cmFjayB1cGRhdGVzLgorICovCitzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqCitkcm1fYXRvbWljX3N0YXRlX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCisJc3RhdGUgPSBremFs bG9jKHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4g TlVMTDsKKworCXN0YXRlLT5jcnRjcyA9IGtjYWxsb2MoZGV2LT5tb2RlX2NvbmZpZy5udW1fY3J0 YywKKwkJCSAgICAgICBzaXplb2YoKnN0YXRlLT5jcnRjcyksIEdGUF9LRVJORUwpOworCWlmICgh c3RhdGUtPmNydGNzKQorCQlnb3RvIGZhaWw7CisJc3RhdGUtPmNydGNfc3RhdGVzID0ga2NhbGxv YyhkZXYtPm1vZGVfY29uZmlnLm51bV9jcnRjLAorCQkJCSAgICAgc2l6ZW9mKCpzdGF0ZS0+Y3J0 Y19zdGF0ZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5jcnRjX3N0YXRlcykKKwkJZ290 byBmYWlsOworCXN0YXRlLT5wbGFuZXMgPSBrY2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX3Rv dGFsX3BsYW5lLAorCQkJCXNpemVvZigqc3RhdGUtPnBsYW5lcyksIEdGUF9LRVJORUwpOworCWlm ICghc3RhdGUtPnBsYW5lcykKKwkJZ290byBmYWlsOworCXN0YXRlLT5wbGFuZV9zdGF0ZXMgPSBr Y2FsbG9jKGRldi0+bW9kZV9jb25maWcubnVtX3RvdGFsX3BsYW5lLAorCQkJCSAgICAgIHNpemVv Zigqc3RhdGUtPnBsYW5lX3N0YXRlcyksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUtPnBsYW5l X3N0YXRlcykKKwkJZ290byBmYWlsOworCXN0YXRlLT5jb25uZWN0b3JzID0ga2NhbGxvYyhkZXYt Pm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IsCisJCQkJICAgIHNpemVvZigqc3RhdGUtPmNvbm5l Y3RvcnMpLAorCQkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5jb25uZWN0b3JzKQor CQlnb3RvIGZhaWw7CisJc3RhdGUtPmNvbm5lY3Rvcl9zdGF0ZXMgPSBrY2FsbG9jKGRldi0+bW9k ZV9jb25maWcubnVtX2Nvbm5lY3RvciwKKwkJCQkJICBzaXplb2YoKnN0YXRlLT5jb25uZWN0b3Jf c3RhdGVzKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRlLT5jb25uZWN0b3Jfc3Rh dGVzKQorCQlnb3RvIGZhaWw7CisKKwlzdGF0ZS0+ZGV2ID0gZGV2OworCisJRFJNX0RFQlVHX0tN UygiQWxsb2NhdGUgYXRvbWljIHN0YXRlICVwXG4iLCBzdGF0ZSk7CisKKwlyZXR1cm4gc3RhdGU7 CitmYWlsOgorCWtmcmVlX3N0YXRlKHN0YXRlKTsKKworCXJldHVybiBOVUxMOworfQorRVhQT1JU X1NZTUJPTChkcm1fYXRvbWljX3N0YXRlX2FsbG9jKTsKKworLyoqCisgKiBkcm1fYXRvbWljX3N0 YXRlX2NsZWFyIC0gY2xlYXIgc3RhdGUgb2JqZWN0CisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQor ICoKKyAqIFdoZW4gdGhlIHcvdyBtdXRleCBhbGdvcml0aG0gZGV0ZWN0cyBhIGRlYWRsb2NrIHdl IG5lZWQgdG8gYmFjayBvZmYgYW5kIGRyb3AKKyAqIGFsbCBsb2Nrcy4gU28gc29tZW9uZSBlbHNl IGNvdWxkIHNuZWFrIGluIGFuZCBjaGFuZ2UgdGhlIGN1cnJlbnQgbW9kZXNldAorICogY29uZmln dXJhdGlvbi4gV2hpY2ggbWVhbnMgdGhhdCBhbGwgdGhlIHN0YXRlIGFzc2VtYmxlZCBpbiBAc3Rh dGUgaXMgbm8KKyAqIGxvbmdlciBhbiBhdG9taWMgdXBkYXRlIHRvIHRoZSBjdXJyZW50IHN0YXRl LCBidXQgdG8gc29tZSBhcmJpdHJhcnkgZWFybGllcgorICogc3RhdGUuIFdoaWNoIGNvdWxkIGJy ZWFrIGFzc3VtcHRpb25zIHRoZSBkcml2ZXIncyAtPmF0b21pY19jaGVjayBsaWtlbHkKKyAqIHJl bGllcyBvbi4KKyAqCisgKiBIZW5jZSB3ZSBtdXN0IGNsZWFyIGFsbCBjYWNoZWQgc3RhdGUgYW5k IGNvbXBsZXRlbHkgc3RhcnQgb3ZlciwgdXNpbmcgdGhpcworICogZnVuY3Rpb24uCisgKi8KK3Zv aWQgZHJtX2F0b21pY19zdGF0ZV9jbGVhcihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7CisJaW50IGk7CisKKwlE Uk1fREVCVUdfS01TKCJDbGVhcmluZyBhdG9taWMgc3RhdGUgJXBcbiIsIHN0YXRlKTsKKworCWZv ciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3I7IGkrKykgeworCQlz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gc3RhdGUtPmNvbm5lY3RvcnNbaV07CisK KwkJaWYgKCFjb25uZWN0b3IpCisJCQljb250aW51ZTsKKworCQljb25uZWN0b3ItPmZ1bmNzLT5h dG9taWNfZGVzdHJveV9zdGF0ZShjb25uZWN0b3IsCisJCQkJCQkgICAgICAgc3RhdGUtPmNvbm5l Y3Rvcl9zdGF0ZXNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmln Lm51bV9jcnRjOyBpKyspIHsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gc3RhdGUtPmNydGNz W2ldOworCisJCWlmICghY3J0YykKKwkJCWNvbnRpbnVlOworCisJCWNydGMtPmZ1bmNzLT5hdG9t aWNfZGVzdHJveV9zdGF0ZShjcnRjLAorCQkJCQkJICBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaV0pOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1vZGVfY29uZmlnLm51bV90b3RhbF9wbGFuZTsg aSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gc3RhdGUtPnBsYW5lc1tpXTsKKwor CQlpZiAoIXBsYW5lKQorCQkJY29udGludWU7CisKKwkJcGxhbmUtPmZ1bmNzLT5hdG9taWNfZGVz dHJveV9zdGF0ZShwbGFuZSwKKwkJCQkJCSAgIHN0YXRlLT5wbGFuZV9zdGF0ZXNbaV0pOworCX0K K30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19zdGF0ZV9jbGVhcik7CisKKy8qKgorICogZHJt X2F0b21pY19zdGF0ZV9mcmVlIC0gZnJlZSBhbGwgbWVtb3J5IGZvciBhbiBhdG9taWMgc3RhdGUK KyAqIEBzdGF0ZTogYXRvbWljIHN0YXRlIHRvIGRlYWxsb2NhdGUKKyAqCisgKiBUaGlzIGZyZWVz IGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFuIGF0b21pYyBzdGF0ZSwgaW5jbHVkaW5nIGFs bCB0aGUKKyAqIHBlci1vYmplY3Qgc3RhdGUgZm9yIHBsYW5lcywgY3J0Y3MgYW5kIGNvbm5lY3Rv cnMuCisgKi8KK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlICpzdGF0ZSkKK3sKKwlkcm1fYXRvbWljX3N0YXRlX2NsZWFyKHN0YXRlKTsKKworCURSTV9E RUJVR19LTVMoIkZyZWVpbmcgYXRvbWljIHN0YXRlICVwXG4iLCBzdGF0ZSk7CisKKwlrZnJlZV9z dGF0ZShzdGF0ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc3RhdGVfZnJlZSk7CisK Ky8qKgorICogZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZSAtIGdldCBjcnRjIHN0YXRlCisgKiBA c3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0CisgKiBAY3J0YzogY3J0YyB0byBnZXQg c3RhdGUgb2JqZWN0IGZvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY3J0YyBz dGF0ZSBmb3IgdGhlIGdpdmVuIGNydGMsIGFsbG9jYXRpbmcgaXQgaWYKKyAqIG5lZWRlZC4gSXQg d2lsbCBhbHNvIGdyYWIgdGhlIHJlbGV2YW50IGNydGMgbG9jayB0byBtYWtlIHN1cmUgdGhhdCB0 aGUgc3RhdGUKKyAqIGlzIGNvbnNpc3RlbnQuCisgKgorICogUmV0dXJuczoKKyAqCisgKiBFaXRo ZXIgdGhlIGFsbG9jYXRlZCBzdGF0ZSBvciB0aGUgZXJyb3IgY29kZSBlbmNvZGVkIGludG8gdGhl IHBvaW50ZXIuIFdoZW4KKyAqIHRoZSBlcnJvciBpcyBFREVBRExLIHRoZW4gdGhlIHcvdyBtdXRl eCBjb2RlIGhhcyBkZXRlY3RlZCBhIGRlYWRsb2NrIGFuZCB0aGUKKyAqIGVudGlyZSBhdG9taWMg c2VxdWVuY2UgbXVzdCBiZSByZXN0YXJ0ZWQuIEFsbCBvdGhlciBlcnJvcnMgYXJlIGZhdGFsLgor ICovCitzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKgorZHJtX2F0b21pY19nZXRfY3J0Y19zdGF0ZShz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgIHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3Rh dGU7CisKKwlpbmRleCA9IGRybV9jcnRjX2luZGV4KGNydGMpOworCisJaWYgKHN0YXRlLT5jcnRj X3N0YXRlc1tpbmRleF0pCisJCXJldHVybiBzdGF0ZS0+Y3J0Y19zdGF0ZXNbaW5kZXhdOworCisJ cmV0ID0gZHJtX21vZGVzZXRfbG9jaygmY3J0Yy0+bXV0ZXgsIHN0YXRlLT5hY3F1aXJlX2N0eCk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWNydGNfc3RhdGUgPSBjcnRj LT5mdW5jcy0+YXRvbWljX2R1cGxpY2F0ZV9zdGF0ZShjcnRjKTsKKwlpZiAoIWNydGNfc3RhdGUp CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJc3RhdGUtPmNydGNfc3RhdGVzW2luZGV4 XSA9IGNydGNfc3RhdGU7CisJc3RhdGUtPmNydGNzW2luZGV4XSA9IGNydGM7CisJY3J0Y19zdGF0 ZS0+c3RhdGUgPSBzdGF0ZTsKKworCURSTV9ERUJVR19LTVMoIkFkZGVkIFtDUlRDOiVkXSAlcCBz dGF0ZSB0byAlcFxuIiwKKwkJICAgICAgY3J0Yy0+YmFzZS5pZCwgY3J0Y19zdGF0ZSwgc3RhdGUp OworCisJcmV0dXJuIGNydGNfc3RhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUpOworCisvKioKKyAqIGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlIC0gZ2V0 IHBsYW5lIHN0YXRlCisgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0CisgKiBA cGxhbmU6IHBsYW5lIHRvIGdldCBzdGF0ZSBvYmplY3QgZm9yCisgKgorICogVGhpcyBmdW5jdGlv biByZXR1cm5zIHRoZSBwbGFuZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIHBsYW5lLCBhbGxvY2F0aW5n IGl0IGlmCisgKiBuZWVkZWQuIEl0IHdpbGwgYWxzbyBncmFiIHRoZSByZWxldmFudCBwbGFuZSBs b2NrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZQorICogaXMgY29uc2lzdGVudC4KKyAqCisg KiBSZXR1cm5zOgorICoKKyAqIEVpdGhlciB0aGUgYWxsb2NhdGVkIHN0YXRlIG9yIHRoZSBlcnJv ciBjb2RlIGVuY29kZWQgaW50byB0aGUgcG9pbnRlci4gV2hlbgorICogdGhlIGVycm9yIGlzIEVE RUFETEsgdGhlbiB0aGUgdy93IG11dGV4IGNvZGUgaGFzIGRldGVjdGVkIGEgZGVhZGxvY2sgYW5k IHRoZQorICogZW50aXJlIGF0b21pYyBzZXF1ZW5jZSBtdXN0IGJlIHJlc3RhcnRlZC4gQWxsIG90 aGVyIGVycm9ycyBhcmUgZmF0YWwuCisgKi8KK3N0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKgorZHJt X2F0b21pY19nZXRfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAor CQkJICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlpbnQgcmV0LCBpbmRleDsKKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZTsKKworCWluZGV4ID0gZHJtX3BsYW5lX2lu ZGV4KHBsYW5lKTsKKworCWlmIChzdGF0ZS0+cGxhbmVfc3RhdGVzW2luZGV4XSkKKwkJcmV0dXJu IHN0YXRlLT5wbGFuZV9zdGF0ZXNbaW5kZXhdOworCisJLyoKKwkgKiBUT0RPOiBXZSBjdXJyZW50 bHkgZG9uJ3QgaGF2ZSBwZXItcGxhbmUgbXV0ZXhlcy4gU28gaW5zdGVhZCBvZiB0cnlpbmcKKwkg KiBjcmF6eSB0cmlja3Mgd2l0aCBkZWZlcnJpbmcgcGxhbmUtPmNydGMgYW5kIGhvcGluZyBmb3Ig dGhlIGJlc3QganVzdAorCSAqIGdyYWIgYWxsIGNydGMgbG9ja3MuIE9uY2Ugd2UgaGF2ZSBwZXIt cGxhbmUgbG9ja3Mgd2UgbXVzdCB1cGRhdGUgdGhpcworCSAqIHRvIG9ubHkgdGFrZSB0aGUgcGxh bmUgbXV0ZXguCisJICovCisJcmV0ID0gZHJtX21vZGVzZXRfbG9ja19hbGxfY3J0Y3Moc3RhdGUt PmRldiwgc3RhdGUtPmFjcXVpcmVfY3R4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihy ZXQpOworCisJcGxhbmVfc3RhdGUgPSBwbGFuZS0+ZnVuY3MtPmF0b21pY19kdXBsaWNhdGVfc3Rh dGUocGxhbmUpOworCWlmICghcGxhbmVfc3RhdGUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCisJc3RhdGUtPnBsYW5lX3N0YXRlc1tpbmRleF0gPSBwbGFuZV9zdGF0ZTsKKwlzdGF0ZS0+ cGxhbmVzW2luZGV4XSA9IHBsYW5lOworCXBsYW5lX3N0YXRlLT5zdGF0ZSA9IHN0YXRlOworCisJ RFJNX0RFQlVHX0tNUygiQWRkZWQgW1BMQU5FOiVkXSAlcCBzdGF0ZSB0byAlcFxuIiwKKwkJICAg ICAgcGxhbmUtPmJhc2UuaWQsIHBsYW5lX3N0YXRlLCBzdGF0ZSk7CisKKwlpZiAocGxhbmVfc3Rh dGUtPmNydGMpIHsKKwkJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJCWNy dGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jcnRjX3N0YXRlKHN0YXRlLAorCQkJCQkJICAgICAg IHBsYW5lX3N0YXRlLT5jcnRjKTsKKwkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkKKwkJCXJldHVy biBFUlJfQ0FTVChjcnRjX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gcGxhbmVfc3RhdGU7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKTsKKworLyoqCisgKiBkcm1f YXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUgLSBnZXQgY29ubmVjdG9yIHN0YXRlCisgKiBAc3Rh dGU6IGdsb2JhbCBhdG9taWMgc3RhdGUgb2JqZWN0CisgKiBAY29ubmVjdG9yOiBjb25uZWN0b3Ig dG8gZ2V0IHN0YXRlIG9iamVjdCBmb3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl IGNvbm5lY3RvciBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbm5lY3RvciwKKyAqIGFsbG9jYXRpbmcg aXQgaWYgbmVlZGVkLiBJdCB3aWxsIGFsc28gZ3JhYiB0aGUgcmVsZXZhbnQgY29ubmVjdG9yIGxv Y2sgdG8KKyAqIG1ha2Ugc3VyZSB0aGF0IHRoZSBzdGF0ZSBpcyBjb25zaXN0ZW50LgorICoKKyAq IFJldHVybnM6CisgKgorICogRWl0aGVyIHRoZSBhbGxvY2F0ZWQgc3RhdGUgb3IgdGhlIGVycm9y IGNvZGUgZW5jb2RlZCBpbnRvIHRoZSBwb2ludGVyLiBXaGVuCisgKiB0aGUgZXJyb3IgaXMgRURF QURMSyB0aGVuIHRoZSB3L3cgbXV0ZXggY29kZSBoYXMgZGV0ZWN0ZWQgYSBkZWFkbG9jayBhbmQg dGhlCisgKiBlbnRpcmUgYXRvbWljIHNlcXVlbmNlIG11c3QgYmUgcmVzdGFydGVkLiBBbGwgb3Ro ZXIgZXJyb3JzIGFyZSBmYXRhbC4KKyAqLworc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKgor ZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSwKKwkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlpbnQgcmV0 LCBpbmRleDsKKwlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmY29ubmVjdG9yLT5k ZXYtPm1vZGVfY29uZmlnOworCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3Jf c3RhdGU7CisKKwlpbmRleCA9IGRybV9jb25uZWN0b3JfaW5kZXgoY29ubmVjdG9yKTsKKworCWlm IChzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tpbmRleF0pCisJCXJldHVybiBzdGF0ZS0+Y29ubmVj dG9yX3N0YXRlc1tpbmRleF07CisKKwlyZXQgPSBkcm1fbW9kZXNldF9sb2NrKCZjb25maWctPmNv bm5lY3Rpb25fbXV0ZXgsIHN0YXRlLT5hY3F1aXJlX2N0eCk7CisJaWYgKHJldCkKKwkJcmV0dXJu IEVSUl9QVFIocmV0KTsKKworCWNvbm5lY3Rvcl9zdGF0ZSA9IGNvbm5lY3Rvci0+ZnVuY3MtPmF0 b21pY19kdXBsaWNhdGVfc3RhdGUoY29ubmVjdG9yKTsKKwlpZiAoIWNvbm5lY3Rvcl9zdGF0ZSkK KwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzdGF0ZS0+Y29ubmVjdG9yX3N0YXRlc1tp bmRleF0gPSBjb25uZWN0b3Jfc3RhdGU7CisJc3RhdGUtPmNvbm5lY3RvcnNbaW5kZXhdID0gY29u bmVjdG9yOworCWNvbm5lY3Rvcl9zdGF0ZS0+c3RhdGUgPSBzdGF0ZTsKKworCURSTV9ERUJVR19L TVMoIkFkZGVkIFtDT05ORUNUT1I6JWRdICVwIHN0YXRlIHRvICVwXG4iLAorCQkgICAgICBjb25u ZWN0b3ItPmJhc2UuaWQsIGNvbm5lY3Rvcl9zdGF0ZSwgc3RhdGUpOworCisJaWYgKGNvbm5lY3Rv cl9zdGF0ZS0+Y3J0YykgeworCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisK KwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoc3RhdGUsCisJCQkJCQkg ICAgICAgY29ubmVjdG9yX3N0YXRlLT5jcnRjKTsKKwkJaWYgKElTX0VSUihjcnRjX3N0YXRlKSkK KwkJCXJldHVybiBFUlJfQ0FTVChjcnRjX3N0YXRlKTsKKwl9CisKKwlyZXR1cm4gY29ubmVjdG9y X3N0YXRlOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3RhdGUp OworCisvKioKKyAqIGRybV9hdG9taWNfc2V0X2NydGNfZm9yX3BsYW5lIC0gc2V0IGNydGMgZm9y IHBsYW5lCisgKiBAcGxhbmVfc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBwbGFu ZQorICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUgcGxhbmUKKyAqCisgKiBDaGFuZ2luZyB0 aGUgYXNzaWduZWQgY3J0YyBmb3IgYSBwbGFuZSByZXF1aXJlcyB1cyB0byBncmFiIHRoZSBsb2Nr IGFuZCBzdGF0ZQorICogZm9yIHRoZSBuZXcgY3J0YywgYXMgbmVlZGVkLiBUaGlzIGZ1bmN0aW9u IHRha2VzIGNhcmUgb2YgYWxsIHRoZXNlIGRldGFpbHMKKyAqIGJlc2lkZXMgdXBkYXRpbmcgdGhl IHBvaW50ZXIgaW4gdGhlIHN0YXRlIG9iamVjdCBpdHNlbGYuCisgKgorICogUmV0dXJuczoKKyAq IDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVBRExLIG9yIC1FTk9NRU0uCisgKi8K K2ludAorZHJtX2F0b21pY19zZXRfY3J0Y19mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcGxhbmVfc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCisJaWYgKGNydGMpIHsKKwkJY3J0Y19z dGF0ZSA9IGRybV9hdG9taWNfZ2V0X2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAorCQkJ CQkJICAgICAgIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNfc3RhdGUpKQorCQkJcmV0dXJuIFBU Ul9FUlIoY3J0Y19zdGF0ZSk7CisJfQorCisJcGxhbmVfc3RhdGUtPmNydGMgPSBjcnRjOworCisJ aWYgKGNydGMpCisJCURSTV9ERUJVR19LTVMoIkxpbmsgcGxhbmUgc3RhdGUgJXAgdG8gW0NSVEM6 JWRdXG4iLAorCQkJICAgICAgcGxhbmVfc3RhdGUsIGNydGMtPmJhc2UuaWQpOworCWVsc2UKKwkJ RFJNX0RFQlVHX0tNUygiTGluayBwbGFuZSBzdGF0ZSAlcCB0byBbTk9DUlRDXVxuIiwgcGxhbmVf c3RhdGUpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2Ny dGNfZm9yX3BsYW5lKTsKKworLyoqCisgKiBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0 b3IgLSBzZXQgY3J0YyBmb3IgY29ubmVjdG9yCisgKiBAY29ubl9zdGF0ZTogYXRvbWljIHN0YXRl IG9iamVjdCBmb3IgdGhlIGNvbm5lY3RvcgorICogQGNydGM6IGNydGMgdG8gdXNlIGZvciB0aGUg Y29ubmVjdG9yCisgKgorICogQ2hhbmdpbmcgdGhlIGFzc2lnbmVkIGNydGMgZm9yIGEgY29ubmVj dG9yIHJlcXVpcmVzIHVzIHRvIGdyYWIgdGhlIGxvY2sgYW5kCisgKiBzdGF0ZSBmb3IgdGhlIG5l dyBjcnRjLCBhcyBuZWVkZWQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiBhbGwgdGhlc2UK KyAqIGRldGFpbHMgYmVzaWRlcyB1cGRhdGluZyB0aGUgcG9pbnRlciBpbiB0aGUgc3RhdGUgb2Jq ZWN0IGl0c2VsZi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzIG9yIGNhbiBmYWls IHdpdGggLUVERUFETEsgb3IgLUVOT01FTS4KKyAqLworaW50Citkcm1fYXRvbWljX3NldF9jcnRj X2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCisJ CQkJICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpj cnRjX3N0YXRlOworCisJaWYgKGNydGMpIHsKKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0 X2NydGNfc3RhdGUoY29ubl9zdGF0ZS0+c3RhdGUsIGNydGMpOworCQlpZiAoSVNfRVJSKGNydGNf c3RhdGUpKQorCQkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisJfQorCisJY29ubl9zdGF0 ZS0+Y3J0YyA9IGNydGM7CisKKwlpZiAoY3J0YykKKwkJRFJNX0RFQlVHX0tNUygiTGluayBjb25u ZWN0b3Igc3RhdGUgJXAgdG8gW0NSVEM6JWRdXG4iLAorCQkJICAgICAgY29ubl9zdGF0ZSwgY3J0 Yy0+YmFzZS5pZCk7CisJZWxzZQorCQlEUk1fREVCVUdfS01TKCJMaW5rIGNvbm5lY3RvciBzdGF0 ZSAlcCB0byBbTk9DUlRDXVxuIiwKKwkJCSAgICAgIGNvbm5fc3RhdGUpOworCisJcmV0dXJuIDA7 Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3Rvcik7CisK Ky8qKgorICogZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyAtIGFkZCBjb25uZWN0 b3JzIGZvciBjcnRjCisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQorICogQGNydGM6IERSTSBjcnRj CisgKgorICogVGhpcyBmdW5jdGlvbiB3YWxrcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFu ZCBhZGRzIGFsbCBjb25uZWN0b3JzCisgKiBjdXJyZW50bHkgdXNpbmcgQGNydGMgdG8gdGhlIGF0 b21pYyBjb25maWd1cmF0aW9uIEBzdGF0ZS4gTm90ZSB0aGF0IHRoaXMKKyAqIGZ1bmN0aW9uIG11 c3QgYWNxdWlyZSB0aGUgY29ubmVjdGlvbiBtdXRleC4gVGhpcyBjYW4gcG90ZW50aWFsbHkgY2F1 c2UKKyAqIHVubmVlZGVkIHNlcmFsaXphdGlvbiBpZiB0aGUgdXBkYXRlIGlzIGp1c3QgZm9yIHRo ZSBwbGFuZXMgb24gb25lIGNydGMuIEhlbmNlCisgKiBkcml2ZXJzIGFuZCBoZWxwZXJzIHNob3Vs ZCBvbmx5IGNhbGwgdGhpcyB3aGVuIHJlYWxseSBuZWVkZWQgKGUuZy4gd2hlbiBhCisgKiBmdWxs IG1vZGVzZXQgbmVlZHMgdG8gaGFwcGVuIGR1ZSB0byBzb21lIGNoYW5nZSkuCisgKgorICogUmV0 dXJuczoKKyAqIDAgb24gc3VjY2VzcyBvciBjYW4gZmFpbCB3aXRoIC1FREVBRExLIG9yIC1FTk9N RU0uCisgKi8KK2ludAorZHJtX2F0b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdHJ1Y3Qg ZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkJICAgc3RydWN0IGRybV9jcnRjICpjcnRjKQor eworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2LT5tb2RlX2Nv bmZpZzsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBkcm1fY29u bmVjdG9yX3N0YXRlICpjb25uX3N0YXRlOworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fbW9kZXNl dF9sb2NrKCZjb25maWctPmNvbm5lY3Rpb25fbXV0ZXgsIHN0YXRlLT5hY3F1aXJlX2N0eCk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCURSTV9ERUJVR19LTVMoIkFkZGluZyBhbGwgY3Vy cmVudCBjb25uZWN0b3JzIGZvciBbQ1JUQzolZF0gdG8gJXBcbiIsCisJCSAgICAgIGNydGMtPmJh c2UuaWQsIHN0YXRlKTsKKworCS8qCisJICogQ2hhbmdlZCBjb25uZWN0b3JzIGFyZSBhbHJlYWR5 IGluIEBzdGF0ZSwgc28gb25seSBuZWVkIHRvIGxvb2sgYXQgdGhlCisJICogY3VycmVudCBjb25m aWd1cmF0aW9uLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmY29uZmln LT5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoY29ubmVjdG9yLT5zdGF0ZS0+Y3J0YyAh PSBjcnRjKQorCQkJY29udGludWU7CisKKwkJY29ubl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2Nv bm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKKwkJaWYgKElTX0VSUihjb25uX3N0YXRl KSkKKwkJCXJldHVybiBQVFJfRVJSKGNvbm5fc3RhdGUpOworCX0KKworCXJldHVybiAwOworfQor RVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzKTsKKworLyoq CisgKiBkcm1fYXRvbWljX2Nvbm5lY3RvcnNfZm9yX2NydGMgLSBjb3VudCBudW1iZXIgb2YgY29u bmVjdGVkIG91dHB1dHMKKyAqIEBzdGF0ZTogYXRvbWljIHN0YXRlCisgKiBAY3J0YzogRFJNIGNy dGMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvdW50cyBhbGwgY29ubmVjdG9ycyB3aGljaCB3aWxs IGJlIGNvbm5lY3RlZCB0byBAY3J0YworICogYWNjb3JkaW5nIHRvIEBzdGF0ZS4gVXNlZnVsIHRv IHJlY29tcHV0ZSB0aGUgZW5hYmxlIHN0YXRlIGZvciBAY3J0Yy4KKyAqLworaW50Citkcm1fYXRv bWljX2Nvbm5lY3RvcnNfZm9yX2NydGMoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAor CQkJICAgICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlpbnQgbmNvbm5lY3RvcnMgPSBz dGF0ZS0+ZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yOworCWludCBpLCBudW1fY29ubmVj dGVkX2Nvbm5lY3RvcnMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5jb25uZWN0b3JzOyBpKysp IHsKKwkJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7CisKKwkJY29ubl9z dGF0ZSA9IHN0YXRlLT5jb25uZWN0b3Jfc3RhdGVzW2ldOworCisJCWlmIChjb25uX3N0YXRlICYm IGNvbm5fc3RhdGUtPmNydGMgPT0gY3J0YykKKwkJCW51bV9jb25uZWN0ZWRfY29ubmVjdG9ycysr OworCX0KKworCURSTV9ERUJVR19LTVMoIlN0YXRlICVwIGhhcyAlaSBjb25uZWN0b3JzIGZvciBb Q1JUQzolZF1cbiIsCisJCSAgICAgIHN0YXRlLCBudW1fY29ubmVjdGVkX2Nvbm5lY3RvcnMsIGNy dGMtPmJhc2UuaWQpOworCisJcmV0dXJuIG51bV9jb25uZWN0ZWRfY29ubmVjdG9yczsKK30KK0VY UE9SVF9TWU1CT0woZHJtX2F0b21pY19jb25uZWN0b3JzX2Zvcl9jcnRjKTsKKworLyoqCisgKiBk cm1fYXRvbWljX2xlZ2FjeV9iYWNrb2ZmIC0gbG9ja2luZyBiYWNrb2ZmIGZvciBsZWdhY3kgaW9j dGxzCisgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxk IGJlIHVzZWQgYnkgbGVnYWN5IGVudHJ5IHBvaW50cyB3aGljaCBkb24ndCB1bmRlcnN0YW5kCisg KiAtRURFQURMSyBzZW1hbnRpY3MuIEZvciBzaW1wbGljaXR5IHRoaXMgb25lIHdpbGwgZ3JhYiBh bGwgbW9kZXNldCBsb2NrcyBhZnRlcgorICogIHRoZSBzbG93cGF0aCBjb21wbGV0ZWQuCisgKi8K K3ZvaWQgZHJtX2F0b21pY19sZWdhY3lfYmFja29mZihzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUpCit7CisJaW50IHJldDsKKworcmV0cnk6CisJZHJtX21vZGVzZXRfYmFja29mZihzdGF0 ZS0+YWNxdWlyZV9jdHgpOworCisJcmV0ID0gZHJtX21vZGVzZXRfbG9jaygmc3RhdGUtPmRldi0+ bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCwKKwkJCSAgICAgICBzdGF0ZS0+YWNxdWlyZV9j dHgpOworCWlmIChyZXQpCisJCWdvdG8gcmV0cnk7CisJcmV0ID0gZHJtX21vZGVzZXRfbG9ja19h bGxfY3J0Y3Moc3RhdGUtPmRldiwKKwkJCQkJIHN0YXRlLT5hY3F1aXJlX2N0eCk7CisJaWYgKHJl dCkKKwkJZ290byByZXRyeTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19sZWdhY3lfYmFj a29mZik7CisKKy8qKgorICogZHJtX2F0b21pY19jaGVja19vbmx5IC0gY2hlY2sgd2hldGhlciBh IGdpdmVuIGNvbmZpZyB3b3VsZCB3b3JrCisgKiBAc3RhdGU6IGF0b21pYyBjb25maWd1cmF0aW9u IHRvIGNoZWNrCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIHJldHVybiAtRURF QURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0byBhY3F1aXJlCisgKiBtb3JlIGxvY2tzIGJ1dCBl bmNvdW50ZXJlZCBhIGRlYWRsb2NrLiBUaGUgY2FsbGVyIG11c3QgdGhlbiBkbyB0aGUgdXN1YWwg dy93CisgKiBiYWNrb2ZmIGRhbmNlIGFuZCByZXN0YXJ0LgorICoKKyAqIFJldHVybnM6CisgKiAw IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50IGRy bV9hdG9taWNfY2hlY2tfb25seShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJ c3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5kZXYtPm1vZGVfY29uZmln OworCisJRFJNX0RFQlVHX0tNUygiY2hlY2tpbmcgJXBcbiIsIHN0YXRlKTsKKworCWlmIChjb25m aWctPmZ1bmNzLT5hdG9taWNfY2hlY2spCisJCXJldHVybiBjb25maWctPmZ1bmNzLT5hdG9taWNf Y2hlY2soc3RhdGUtPmRldiwgc3RhdGUpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CitFWFBPUlRf U1lNQk9MKGRybV9hdG9taWNfY2hlY2tfb25seSk7CisKKy8qKgorICogZHJtX2F0b21pY19jb21t aXQgLSBjb21taXQgY29uZmlndXJhdGlvbiBhdG9taWNhbGx5CisgKiBAc3RhdGU6IGF0b21pYyBj b25maWd1cmF0aW9uIHRvIGNoZWNrCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2Fu IHJldHVybiAtRURFQURMSyBpZiB0aGUgZHJpdmVyIG5lZWRlZCB0byBhY3F1aXJlCisgKiBtb3Jl IGxvY2tzIGJ1dCBlbmNvdW50ZXJlZCBhIGRlYWRsb2NrLiBUaGUgY2FsbGVyIG11c3QgdGhlbiBk byB0aGUgdXN1YWwgdy93CisgKiBiYWNrb2ZmIGRhbmNlIGFuZCByZXN0YXJ0LgorICoKKyAqIEFs c28gbm90ZSB0aGF0IG9uIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG93bmVyc2hpcCBvZiBAc3RhdGUg aXMgdHJhbnNmZXJyZWQKKyAqIGZyb20gdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHRvIHRo ZSBmdW5jdGlvbiBpdHNlbGYuIFRoZSBjYWxsZXIgbXVzdCBub3QKKyAqIGZyZWUgb3IgaW4gYW55 IG90aGVyIHdheSBhY2Nlc3MgQHN0YXRlLiBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdGhlbiB0aGUg Y2FsbGVyCisgKiBtdXN0IGNsZWFuIHVwIEBzdGF0ZSBpdHNlbGYuCisgKgorICogUmV0dXJuczoK KyAqIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitp bnQgZHJtX2F0b21pY19jb21taXQoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQorewor CXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZzdGF0ZS0+ZGV2LT5tb2RlX2NvbmZp ZzsKKwlpbnQgcmV0OworCisJcmV0ID0gZHJtX2F0b21pY19jaGVja19vbmx5KHN0YXRlKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJRFJNX0RFQlVHX0tNUygiY29tbWl0aW5nICVwXG4i LCBzdGF0ZSk7CisKKwlyZXR1cm4gY29uZmlnLT5mdW5jcy0+YXRvbWljX2NvbW1pdChzdGF0ZS0+ ZGV2LCBzdGF0ZSwgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2NvbW1pdCk7 CisKKy8qKgorICogZHJtX2F0b21pY19hc3luY19jb21taXQgLSBhdG9taWMmYXN5bmMgY29uZmln dXJhdGlvbiBjb21taXQKKyAqIEBzdGF0ZTogYXRvbWljIGNvbmZpZ3VyYXRpb24gdG8gY2hlY2sK KyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gcmV0dXJuIC1FREVBRExLIGlmIHRo ZSBkcml2ZXIgbmVlZGVkIHRvIGFjcXVpcmUKKyAqIG1vcmUgbG9ja3MgYnV0IGVuY291bnRlcmVk IGEgZGVhZGxvY2suIFRoZSBjYWxsZXIgbXVzdCB0aGVuIGRvIHRoZSB1c3VhbCB3L3cKKyAqIGJh Y2tvZmYgZGFuY2UgYW5kIHJlc3RhcnQuCisgKgorICogQWxzbyBub3RlIHRoYXQgb24gc3VjY2Vz c2Z1bCBleGVjdXRpb24gb3duZXJzaGlwIG9mIEBzdGF0ZSBpcyB0cmFuc2ZlcnJlZAorICogZnJv bSB0aGUgY2FsbGVyIG9mIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGZ1bmN0aW9uIGl0c2VsZi4gVGhl IGNhbGxlciBtdXN0IG5vdAorICogZnJlZSBvciBpbiBhbnkgb3RoZXIgd2F5IGFjY2VzcyBAc3Rh dGUuIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0aGVuIHRoZSBjYWxsZXIKKyAqIG11c3QgY2xlYW4g dXAgQHN0YXRlIGl0c2VsZi4KKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBkcm1fYXRvbWljX2FzeW5jX2Nv bW1pdChzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9tb2Rl X2NvbmZpZyAqY29uZmlnID0gJnN0YXRlLT5kZXYtPm1vZGVfY29uZmlnOworCWludCByZXQ7CisK KwlyZXQgPSBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3RhdGUpOworCWlmIChyZXQpCisJCXJldHVy biByZXQ7CisKKwlEUk1fREVCVUdfS01TKCJjb21taXRpbmcgJXAgYXN5bmNocm9ub3VzbHlcbiIs IHN0YXRlKTsKKworCXJldHVybiBjb25maWctPmZ1bmNzLT5hdG9taWNfY29tbWl0KHN0YXRlLT5k ZXYsIHN0YXRlLCB0cnVlKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0b21pY19hc3luY19jb21t aXQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oIGIvaW5jbHVkZS9kcm0v ZHJtX2F0b21pYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWJi MTVmNTUwYzQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCkBA IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgUmVkIEhhdAorICogQ29w eXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnAuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBp bgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu CisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9y czoKKyAqIFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KKyAqIERhbmllbCBWZXR0ZXIg PGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+CisgKi8KKworI2lmbmRlZiBEUk1fQVRPTUlDX0hfCisj ZGVmaW5lIERSTV9BVE9NSUNfSF8KKworc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKiBfX211c3Rf Y2hlY2sKK2RybV9hdG9taWNfc3RhdGVfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2 b2lkIGRybV9hdG9taWNfc3RhdGVfY2xlYXIoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KTsKK3ZvaWQgZHJtX2F0b21pY19zdGF0ZV9mcmVlKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSk7CisKK3N0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqIF9fbXVzdF9jaGVjaworZHJtX2F0b21p Y19nZXRfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJCQkgIHN0 cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICogX19tdXN0X2No ZWNrCitkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAq c3RhdGUsCisJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSk7CitzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9zdGF0ZSAqIF9fbXVzdF9jaGVjaworZHJtX2F0b21pY19nZXRfY29ubmVjdG9yX3N0YXRl KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKTsKKworaW50IF9fbXVzdF9jaGVjaworZHJtX2F0b21pY19zZXRf Y3J0Y19mb3JfcGxhbmUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGUsCisJCQkg ICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOworaW50IF9fbXVzdF9jaGVjaworZHJtX2F0b21p Y19zZXRfY3J0Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25u X3N0YXRlLAorCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKK2ludCBfX211c3RfY2hlY2sK K2RybV9hdG9taWNfYWRkX2FmZmVjdGVkX2Nvbm5lY3RvcnMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLAorCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitpbnQKK2RybV9hdG9t aWNfY29ubmVjdG9yc19mb3JfY3J0YyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCisJ CQkgICAgICAgc3RydWN0IGRybV9jcnRjICpjcnRjKTsKKwordm9pZCBkcm1fYXRvbWljX2xlZ2Fj eV9iYWNrb2ZmKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7CisKK2ludCBfX211c3Rf Y2hlY2sgZHJtX2F0b21pY19jaGVja19vbmx5KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSk7CitpbnQgX19tdXN0X2NoZWNrIGRybV9hdG9taWNfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSk7CitpbnQgX19tdXN0X2NoZWNrIGRybV9hdG9taWNfYXN5bmNfY29tbWl0 KHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7CisKKyNlbmRpZiAvKiBEUk1fQVRPTUlD X0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0v ZHJtX2NydGMuaAppbmRleCAzNTU0ODY4ZGJmMDkuLjA3Yzg4YWQ2NDIzNCAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC03 OTQsNiArNzk0LDMyIEBAIHN0cnVjdCBkcm1fYnJpZGdlIHsKIH07CiAKIC8qKgorICogc3RydWN0 IHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlIC0gdGhlIGdsb2JhbCBzdGF0ZSBvYmplY3QgZm9yIGF0 b21pYyB1cGRhdGVzCisgKiBAZGV2OiBwYXJlbnQgRFJNIGRldmljZQorICogQGZsYWdzOiBzdGF0 ZSBmbGFncyBsaWtlIGFzeW5jIHVwZGF0ZQorICogQHBsYW5lczogcG9pbnRlciB0byBhcnJheSBv ZiBwbGFuZSBwb2ludGVycworICogQHBsYW5lX3N0YXRlczogcG9pbnRlciB0byBhcnJheSBvZiBw bGFuZSBzdGF0ZXMgcG9pbnRlcnMKKyAqIEBjcnRjczogcG9pbnRlciB0byBhcnJheSBvZiBDUlRD IHBvaW50ZXJzCisgKiBAY3J0Y19zdGF0ZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgQ1JUQyBzdGF0 ZXMgcG9pbnRlcnMKKyAqIEBjb25uZWN0b3JzOiBwb2ludGVyIHRvIGFycmF5IG9mIGNvbm5lY3Rv ciBwb2ludGVycworICogQGNvbm5lY3Rvcl9zdGF0ZXM6IHBvaW50ZXIgdG8gYXJyYXkgb2YgY29u bmVjdG9yIHN0YXRlcyBwb2ludGVycworICogQGFjcXVpcmVfY3R4OiBhY3F1aXJlIGNvbnRleHQg Zm9yIHRoaXMgYXRvbWljIG1vZGVzZXQgc3RhdGUgdXBkYXRlCisgKi8KK3N0cnVjdCBkcm1fYXRv bWljX3N0YXRlIHsKKyAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworICAgICAgIHVpbnQz Ml90IGZsYWdzOworICAgICAgIHN0cnVjdCBkcm1fcGxhbmUgKipwbGFuZXM7CisgICAgICAgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqKnBsYW5lX3N0YXRlczsKKyAgICAgICBzdHJ1Y3QgZHJtX2Ny dGMgKipjcnRjczsKKyAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKipjcnRjX3N0YXRlczsK KyAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqKmNvbm5lY3RvcnM7CisgICAgICAgc3RydWN0 IGRybV9jb25uZWN0b3Jfc3RhdGUgKipjb25uZWN0b3Jfc3RhdGVzOworCisgICAgICAgc3RydWN0 IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4ICphY3F1aXJlX2N0eDsKK307CisKKworLyoqCiAgKiBz dHJ1Y3QgZHJtX21vZGVfc2V0IC0gbmV3IHZhbHVlcyBmb3IgYSBDUlRDIGNvbmZpZyBjaGFuZ2UK ICAqIEBmYjogZnJhbWVidWZmZXIgdG8gdXNlIGZvciBuZXcgY29uZmlnCiAgKiBAY3J0YzogQ1JU QyB3aG9zZSBjb25maWd1cmF0aW9uIHdlJ3JlIGFib3V0IHRvIGNoYW5nZQpAQCAtODI0LDYgKzg1 MCw5IEBAIHN0cnVjdCBkcm1fbW9kZV9zZXQgewogICogc3RydWN0IGRybV9tb2RlX2NvbmZpZ19m dW5jcyAtIGJhc2ljIGRyaXZlciBwcm92aWRlZCBtb2RlIHNldHRpbmcgZnVuY3Rpb25zCiAgKiBA ZmJfY3JlYXRlOiBjcmVhdGUgYSBuZXcgZnJhbWVidWZmZXIgb2JqZWN0CiAgKiBAb3V0cHV0X3Bv bGxfY2hhbmdlZDogZnVuY3Rpb24gdG8gaGFuZGxlIG91dHB1dCBjb25maWd1cmF0aW9uIGNoYW5n ZXMKKyAqIEBhdG9taWNfY2hlY2s6IGNoZWNrIHdoZXRoZXIgYSBnaXZlIGF0b21pYyBzdGF0ZSB1 cGRhdGUgaXMgcG9zc2libGUKKyAqIEBhdG9taWNfY29tbWl0OiBjb21taXQgYW4gYXRvbWljIHN0 YXRlIHVwZGF0ZSBwcmV2aW91c2x5IHZlcmlmaWVkIHdpdGgKKyAqIAlhdG9taWNfY2hlY2soKQog ICoKICAqIFNvbWUgZ2xvYmFsIChpLmUuIG5vdCBwZXItQ1JUQywgY29ubmVjdG9yLCBldGMpIG1v ZGUgc2V0dGluZyBmdW5jdGlvbnMgdGhhdAogICogaW52b2x2ZSBkcml2ZXJzLgpAQCAtODMzLDYg Kzg2MiwxMiBAQCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHsKIAkJCQkJICAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkJICAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21k MiAqbW9kZV9jbWQpOwogCXZvaWQgKCpvdXRwdXRfcG9sbF9jaGFuZ2VkKShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKKworCWludCAoKmF0b21pY19jaGVjaykoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqYSk7CisJaW50ICgqYXRvbWljX2Nv bW1pdCkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKmEsCisJCQkgICAgIGJvb2wgYXN5bmMpOwogfTsKIAogLyoqCi0tIAoyLjEuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK