From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: [PATCH 2/2] drm/atomic-helper: nonblocking commit support Date: Thu, 2 Jun 2016 11:56:46 +0200 Message-ID: <1464861406-9783-2-git-send-email-daniel.vetter@ffwll.ch> References: <1464818821-5736-23-git-send-email-daniel.vetter@ffwll.ch> <1464861406-9783-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-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id EBC476EB52 for ; Thu, 2 Jun 2016 09:56:55 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id a136so14353044wme.0 for ; Thu, 02 Jun 2016 02:56:55 -0700 (PDT) In-Reply-To: <1464861406-9783-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 Stone , Daniel Vetter , Intel Graphics Development , Tomeu Vizoso , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org RGVzaWduIGlkZWFzOgoKLSBzcGxpdCB1cCB0aGUgYWN0dWFsIGNvbW1pdCBpbnRvIGRpZmZlcmVu dCBwaGFzZXMsIGFuZCBoYXZlCiAgY29tcGxldGlvbnMgZm9yIGVhY2ggb2YgdGhlbS4gVGhpcyB3 aWxsIGJlIHVzZWZ1bCBmb3IgdGhlIGZ1dHVyZQogIHdoZW4gd2Ugd2FudCB0byBpbnRlcmxlYXZl IHBoYXNlcyBtdWNoIG1vcmUgYWdncmVzc2l2ZWx5LCBmb3IgZS5nLgogIHF1ZXVlIGRlcHRoID4g MS4gRm9yIG5vdCBpdCdzIGp1c3QgYSBtaW5pbWFsIG9wdGltaXphdGlvbiBjb21wYXJlZAogIHRv IGN1cnJlbnQgY29tbW9uIG5vbmJsb2NraW5nIGltcGxlbWVudGF0aW9uIHBhdHRlcm5zIGZyb20g ZHJpdmVycywKICB3aGljaCBhbGwgc3RhbGwgZm9yIHRoZSBlbnRpcmUgY29tbWl0IHRvIGNvbXBs ZXRlLCBpbmNsdWRpbmcgdmJsYW5rCiAgd2FpdHMgYW5kIGNsZWFudXBzLgoKLSBFeHRyYWN0IGEg c2VwYXJhdGUgYXRvbWljX2NvbW1pdF9odyBob29rIHNpbmNlIHRoYXQncyB0aGUgcGFydCBtb3N0 CiAgZHJpdmVycyB3aWxsIG5lZWQgdG8gb3ZlcndyaXRlLCBob3BlZnVsbHkgYWxsb3dpbmcgZXZl biBtb3JlIHNoYXJlZAogIGNvZGUuCgotIEVuZm9yY2UgRUJVU1kgc2VhbW50aWNzIGJ5IGF0dGFj aGluZyBvbmUgb2YgdGhlIGNvbXBsZXRpb25zIHRvIHRoZQogIGZsaXBfZG9uZSB2YmxhbmsgZXZl bnQuIFNpZGUgYmVuZWZpdCBvZiBmb3JjaW5nIGF0b21pYyBkcml2ZXJzIHVzaW5nCiAgdGhlc2Ug aGVscGVycyB0byBpbXBsZW1lbnQgZXZlbnQgaGFuZGxpZ24gYXQgbGVhc3Qgc2VtaS1jb3JyZWN0 LiBJJ20KICBldmlsIHRoYXQgd2F5IDstKQoKLSBSaWRpY3Vsb3VzbHkgbW9kdWxhciwgYXMgdXN1 YWwuCgotIFRoZSBtYWluIHRyYWNraW5nIHVuaXQgZm9yIGEgY29tbWl0IHN0YXlzIHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlLAogIGFuZCB0aGUgb3duZXJzaGlwIHJ1bGVzIGZvciB0aGF0IGFyZSB1 bmNoYW5nZWQuIE93bmVyc2hpcCBzdGlsbAogIGdldHMgdHJhbnNmZXJyZWQgdG8gdGhlIGRyaXZl ciAoYW5kIHN1YnNlcXVlbnRseSB0byB0aGUgd29ya2VyKSBvbgogIHN1Y2Nlc3NmdWwgY29tbWl0 cy4gV2hhdCBpcyBhZGRlZCBpcyBhIHNtYWxsLCBwZXItY3J0YywgcmVmY291bnRlZAogIHN0cnVj dHVyZSB0byB0cmFjayBwZW5kaW5nIGNvbW1pdHMgY2FsbGVkIHN0cnVjdCBkcm1fY3J0Y19jb21t aXQuCiAgTm8gYWN0dWFsIHN0YXRlIGlzIGF0dGFjaGVkIHRvIHRoYXQgdGhvdWdoLCBpdCdzIHB1 cmVseSBmb3Igb3JkZXJpbmcKICBhbmQgd2FpdGluZy4KCi0gRGVwZW5kZW5jaWVzIGFyZSBpbXBs aWNpdGx5IGhhbmRsZWQgYnkgYXNzdW1pbmcgdGhhdCBhbnkgQ1JUQyBwYXJ0CiAgb2YgJmRybV9h dG9taWNfc3RhdGUgaXMgYSBkZXBlbmRlbmN5LCBhbmQgdGhhdCB0aGUgY3VycmVudCBjb21taXQK ICBtdXN0IHdhaXQgZm9yIGFueSBjb21taXRzIHRvIGNvbXBsZXRlIG9uIHRob3NlIENSVEMuIFRo aXMgd2F5CiAgZHJpdmVycyBjYW4gZWFzaWx5IGFkZCBtb3JlIGRlcGVuY2llcyB1c2luZwogIGRy bV9hdG9taWNfZ2V0X2NydGNfc3RhdGUoKSwgd2hpY2ggaXMgdmVyeSBuYXR1cmFsIHNpbmNlIGlu IG1vc3QKICBjYXNlIGEgZGVwZW5kZW5jeSBleGlzdHMgaWZmIHRoZXJlJ3Mgc29tZSBiaXQgb2Yg c3RhdGUgdGhhdCBuZWVkcyB0bwogIGJlIGNyb3NzIGNoZWNrZWQuCgogIFJlbW92aW5nIGRlcGVu Y2llcyBpcyBub3QgcG9zc2libGUsIGRyaXZlcnMgc2ltcGx5IG5lZWQgdG8gYmUKICBjYXJlZnVs IHRvIG5vdCBpbmNsdWRlIGV2ZXJ5IENSVEMgaW4gYSBjb21taXQgaWYgdGhhdCdzIG5vdAogIG5l Y2Vzc2FyeS4gV2hpY2ggaXMgYSBnb29kIGlkZWEgYW55d2F5LCBzaW5jZSB0aGF0IGFsc28gYXZv aWRzCiAgd3dfbXV0ZXggbG9jayBjb250ZW50aW9uLgoKLSBRdWV1ZSBkZXB0aCA+IDEgc2VlcyBz b21lIHByZXAgd29yayBpbiB0aGlzIHBhdGNoIGJ5IGFkZGluZyBhIHN0YWxsCiAgcGFyYW1hdGVy IHRvIGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGVzKCkuIFRvIGJlIGFibGUgdG8gcHVzaAog IGNvbW1pdHMgZW50aXJlbHkgZnJlZS1zdGFuZGluZyBhbmQgaW4gYSBkZWVwZXIgcXVldWUgdGhy b3VnaCB0aGUKICBiYWNrLWVuZCB0aGUgZHJpdmVyIG11c3Qgbm90IGFjY2VzcyBhbnkgb2JqLT5z dGF0ZSBwb2ludGVycy4gVGhpcwogIG1lYW5zIHdlIG5lZWQgdG8gdHJhY2sgdGhlIG9sZCBzdGF0 ZSBpbiBkcm1fYXRvbWljX3N0YXRlIChtdWNoCiAgZWFzaWVyIHdpdGggdGhlIGNvbnNvbGlkYXRl ZCBhcnJheXMpLCBhbmQgcGFzcyB0aGVtIGFsbCBleHBsaWNpdGx5CiAgdG8gZHJpdmVyIGJhY2tl bmRzICh0aGlzIHdpbGwgYmUgc2VyaW91cyBhbW91bnRzIG9mIGNodXJuKS4KCiAgT25jZSB0aGF0 J3MgZG9uZSBzdGFsbCBjYW4gYmUgc2V0IHRvIGZhbHNlIGluIHN3YXBfc3RhdGVzLgoKRmVhdHVy ZXM6IENvbnRhaW5zIGJ1Z3MgYmVjYXVzZSB0b3RhbGx5IHVudGVzdGVkLgoKdjI6IERvbnQgYXNr IGZvciBmbGlwX2RvbmUgc2lnbmFsbGluZyB3aGVuIHRoZSBDUlRDIGlzIG9mZiBhbmQgc3RheXMK b2ZmOiBEcml2ZXJzIGRvbid0IGhhbmRsZSBldmVudHMgaW4gdGhhdCBjYXNlLiBJbnN0ZWFkIGNv bXBsZXRlIHJpZ2h0CmF3YXkuIFRoaXMgd2F5IGZ1dHVyZSBjb21taXRzIGRvbid0IG5lZWQgdG8g aGF2ZSBzcGVjaWFsLWNhc2UgbG9naWMsCmJ1dCBjYW4ga2VlcCBibG9ja2luZyBmb3IgdGhlIGZs aXBfZG9uZSBjb21wbGV0aW9uLgoKdjM6IFRvbnMgb2YgZml4ZXM6Ci0gU3RhbGwgZm9yIHByZWNl ZWRpbmcgY29tbWl0IGZvciByZWFsLCBub3QgdGhlIGN1cnJlbnQgb25lIGJ5CiAgYWNjaWRlbnQu Ci0gQWRkIFdBUk5fT04gaW4gY2FzZSBkcml2ZXJzIGRvbid0IGZpcmUgdGhlIGRybSBldmVudC4K LSBEb24ndCBkb3VibGUtZnJlZSBkcm0gZXZlbnRzLgoKdjQ6IE1ha2UgbGVnYWN5IGN1cnNvciBu b3Qgc3RhbGwuCgp2NTogRXh0ZW5kIHRoZSBoZWxwZXIgaG9vayB0byBjb3ZlciB0aGUgZW50aXJl IGNvbW1pdCB0YWlsLiBTb21lCmRyaXZlcnMgbmVlZCBzcGVjaWFsIGNvZGUgZm9yIGNsZWFudXAg YW5kIHZibGFuayB3YWl0aW5nLCB0aGlzIG1ha2VzCml0IGEgYml0IG1vcmUgdXNlZnVsLiBJbnNw aXJlZCBieSB0aGUgcm9ja2NoaXAgZHJpdmVyLgoKdjY6IEFkZCBXQVJOX09OIHRvIGNhdGNoIGRy aXZlcnMgd2hvIGZvcmdldCB0byBzZW5kIG91dCB0aGUKZHJtIGV2ZW50LgoKdjc6IEZpeHVwIHRo ZSBzdGFsbHMgaW4gc3dhcF9zdGF0ZSBmb3IgcmVhbCEhCgp2ODoKLSBGaXh1cCB0cmFpbGluZyB3 aGl0ZXNwYWNlLCBzcG90dGVkIGJ5IE1hYXJ0ZW4uCi0gQWN0dWFsbHkgd2FpdCBmb3IgZmxpcF9k b25lIGluIGNsZWFudXBfZG9uZSwgbGlrZSB0aGUgY29tbWVudCBzYXlzCiAgd2Ugc2hvdWxkIGRv LiBUaGFua3MgYSBsb3QgZm9yIFRvbWV1IGZvciBoZWxwaW5nIHdpdGggZGVidWdnaW5nIHRoaXMK ICBvbi4KCnY5OiBOb3cgd2l0aCBhd2Vzb21lIGtlcm5lbGRvYyEKCnYxMDogU3BsaXQgb3V0IGRy bV9jcnRjX2NvbW1pdCB0cmFja2luZyBpbmZyYXN0cnVjdHVyZS4KClRlc3RlZC1ieTogVG9tZXUg Vml6b3NvIDx0b21ldS52aXpvc29AY29sbGFib3JhLmNvbT4KQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0 IDxtYWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+CkNjOiBUb21ldSBWaXpvc28gPHRv bWV1LnZpem9zb0BnbWFpbC5jb20+CkNjOiBEYW5pZWwgU3RvbmUgPGRhbmllbHNAY29sbGFib3Jh LmNvbT4KVGVzdGVkLWJ5OiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KU2lnbmVk LW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Ci0tLQogZHJp dmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgICAgICB8IDQ3NSArKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tCiBpbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oICAgICAg ICAgIHwgICA4ICsKIGluY2x1ZGUvZHJtL2RybV9jcnRjLmggICAgICAgICAgICAgICAgICAgfCAg IDYgKwogaW5jbHVkZS9kcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaCB8ICAzOSArKysK IDQgZmlsZXMgY2hhbmdlZCwgNDg5IGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKaW5kZXggNjUxMjhmMjU4Zjg0Li4yOTAzMThkNmY1 YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCkBAIC0xMTE2LDIyICsxMTE2LDE3 IEBAIGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX3ZibGFua3Moc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyk7 CiAKIC8qKgotICogZHJtX2F0b21pY19oZWxwZXJfY29tbWl0IC0gY29tbWl0IHZhbGlkYXRlZCBz dGF0ZSBvYmplY3QKLSAqIEBkZXY6IERSTSBkZXZpY2UKLSAqIEBzdGF0ZTogdGhlIGRyaXZlciBz dGF0ZSBvYmplY3QKLSAqIEBub25ibG9ja2luZzogd2hldGhlciBub25ibG9ja2luZyBiZWhhdmlv ciBpcyByZXF1ZXN0ZWQuCisgKiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbCAtIGNvbW1p dCBhdG9taWMgdXBkYXRlIHRvIGhhcmR3YXJlCisgKiBAc3RhdGU6IG5ldyBtb2Rlc2V0IHN0YXRl IHRvIGJlIGNvbW1pdHRlZAogICoKLSAqIFRoaXMgZnVuY3Rpb24gY29tbWl0cyBhIHdpdGggZHJt X2F0b21pY19oZWxwZXJfY2hlY2soKSBwcmUtdmFsaWRhdGVkIHN0YXRlCi0gKiBvYmplY3QuIFRo aXMgY2FuIHN0aWxsIGZhaWwgd2hlbiBlLmcuIHRoZSBmcmFtZWJ1ZmZlciByZXNlcnZhdGlvbiBm YWlscy4gRm9yCi0gKiBub3cgdGhpcyBkb2Vzbid0IGltcGxlbWVudCBub25ibG9ja2luZyBjb21t aXRzLgorICogVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbmF0aW9uIGZvciB0aGUgLT5hdG9t aWNfY29tbWl0X3RhaWwoKSBob29rIG9mIHRoZQorICogJmRybV9tb2RlX2NvbmZpZ19oZWxwZXJf ZnVuY3MgdnRhYmxlLgogICoKLSAqIE5vdGUgdGhhdCByaWdodCBub3cgdGhpcyBmdW5jdGlvbiBk b2VzIG5vdCBzdXBwb3J0IG5vbmJsb2NraW5nIGNvbW1pdHMsIGhlbmNlCi0gKiBkcml2ZXIgd3Jp dGVycyBtdXN0IGltcGxlbWVudCB0aGVpciBvd24gdmVyc2lvbiBmb3Igbm93LiBBbHNvIG5vdGUg dGhhdCB0aGUKLSAqIGRlZmF1bHQgb3JkZXJpbmcgb2YgaG93IHRoZSB2YXJpb3VzIHN0YWdlcyBh cmUgY2FsbGVkIGlzIHRvIG1hdGNoIHRoZSBsZWdhY3kKLSAqIG1vZGVzZXQgaGVscGVyIGxpYnJh cnkgY2xvc2VzdC4gT25lIHBlY3VsaWFyaXR5IG9mIHRoYXQgaXMgdGhhdCBpdCBkb2Vzbid0Ci0g KiBtZXNoIHdlbGwgd2l0aCBydW50aW1lIFBNIGF0IGFsbC4KKyAqIE5vdGUgdGhhdCB0aGUgZGVm YXVsdCBvcmRlcmluZyBvZiBob3cgdGhlIHZhcmlvdXMgc3RhZ2VzIGFyZSBjYWxsZWQgaXMgdG8K KyAqIG1hdGNoIHRoZSBsZWdhY3kgbW9kZXNldCBoZWxwZXIgbGlicmFyeSBjbG9zZXN0LiBPbmUg cGVjdWxpYXJpdHkgb2YgdGhhdCBpcworICogdGhhdCBpdCBkb2Vzbid0IG1lc2ggd2VsbCB3aXRo IHJ1bnRpbWUgUE0gYXQgYWxsLgogICoKLSAqIEZvciBkcml2ZXJzIHN1cHBvcnRpbmcgcnVudGlt ZSBQTSB0aGUgcmVjb21tZW5kZWQgc2VxdWVuY2UgaXMKKyAqIEZvciBkcml2ZXJzIHN1cHBvcnRp bmcgcnVudGltZSBQTSB0aGUgcmVjb21tZW5kZWQgc2VxdWVuY2UgaXMgaW5zdGVhZCA6OgogICoK ICAqICAgICBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkZXYsIHN0 YXRlKTsKICAqCkBAIC0xMTM5LDcgKzExMzQsNzMgQEAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2hlbHBlcl93YWl0X2Zvcl92YmxhbmtzKTsKICAqCiAgKiAgICAgZHJtX2F0b21pY19oZWxwZXJf Y29tbWl0X3BsYW5lcyhkZXYsIHN0YXRlLCB0cnVlKTsKICAqCi0gKiBTZWUgdGhlIGtlcm5lbGRv YyBlbnRyaWVzIGZvciB0aGVzZSB0aHJlZSBmdW5jdGlvbnMgZm9yIG1vcmUgZGV0YWlscy4KKyAq IGZvciBjb21taXR0aW5nIHRoZSBhdG9taWMgdXBkYXRlIHRvIGhhcmR3YXJlLiAgU2VlIHRoZSBr ZXJuZWxkb2MgZW50cmllcyBmb3IKKyAqIHRoZXNlIHRocmVlIGZ1bmN0aW9ucyBmb3IgbW9yZSBk ZXRhaWxzLgorICovCit2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF90YWlsKHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gc3Rh dGUtPmRldjsKKworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRl diwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkZXYsIHN0YXRl LCBmYWxzZSk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRl diwgc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUoc3RhdGUpOwor CisJZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIHN0YXRlKTsKKworCWRy bV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOworfQorRVhQT1JUX1NZ TUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbCk7CisKK3ZvaWQgY29tbWl0X3RhaWwo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBzdGF0ZS0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzICpm dW5jczsKKworCWZ1bmNzID0gZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZTsKKworCWRy bV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2ZlbmNlcyhkZXYsIHN0YXRlKTsKKworCWRybV9hdG9t aWNfaGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcyhzdGF0ZSk7CisKKwlpZiAoZnVuY3MgJiYg ZnVuY3MtPmF0b21pY19jb21taXRfdGFpbCkKKwkJZnVuY3MtPmF0b21pY19jb21taXRfdGFpbChz dGF0ZSk7CisJZWxzZQorCQlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbChzdGF0ZSk7CisK Kwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25lKHN0YXRlKTsKKworCWRybV9h dG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0 YXRlLAorCQkJCQkJICAgICAgY29tbWl0X3dvcmspOworCWNvbW1pdF90YWlsKHN0YXRlKTsKK30K KworLyoqCisgKiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQgLSBjb21taXQgdmFsaWRhdGVkIHN0 YXRlIG9iamVjdAorICogQGRldjogRFJNIGRldmljZQorICogQHN0YXRlOiB0aGUgZHJpdmVyIHN0 YXRlIG9iamVjdAorICogQG5vbmJsb2NrOiB3aGV0aGVyIG5vbmJsb2NraW5nIGJlaGF2aW9yIGlz IHJlcXVlc3RlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNvbW1pdHMgYSB3aXRoIGRybV9hdG9t aWNfaGVscGVyX2NoZWNrKCkgcHJlLXZhbGlkYXRlZCBzdGF0ZQorICogb2JqZWN0LiBUaGlzIGNh biBzdGlsbCBmYWlsIHdoZW4gZS5nLiB0aGUgZnJhbWVidWZmZXIgcmVzZXJ2YXRpb24gZmFpbHMu IFRoaXMKKyAqIGZ1bmN0aW9uIGltcGxlbWVudHMgbm9uYmxvY2tpbmcgY29tbWl0cywgdXNpbmcK KyAqIGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdCgpIGFuZCByZWxhdGVkIGZ1bmN0aW9u cy4KKyAqCisgKiBOb3RlIHRoYXQgcmlnaHQgbm93IHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3Vw cG9ydCBub25ibG9ja2luZyBjb21taXRzLCBoZW5jZQorICogZHJpdmVyIHdyaXRlcnMgbXVzdCBp bXBsZW1lbnQgdGhlaXIgb3duIHZlcnNpb24gZm9yIG5vdy4KKyAqCisgKiBDb21taXR0aW5nIHRo ZSBhY3R1YWwgaGFyZHdhcmUgc3RhdGUgaXMgZG9uZSB0aHJvdWdoIHRoZQorICogLT5hdG9taWNf Y29tbWl0X3RhaWwoKSBjYWxsYmFjayBvZiB0aGUgJmRybV9tb2RlX2NvbmZpZ19oZWxwZXJfZnVu Y3MgdnRhYmxlLAorICogb3IgaXQncyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRybV9hdG9taWNf aGVscGVyX2NvbW1pdF90YWlsKCkuCiAgKgogICogUkVUVVJOUwogICogWmVybyBmb3Igc3VjY2Vz cyBvciAtZXJybm8uCkBAIC0xMTUwLDggKzEyMTEsMTEgQEAgaW50IGRybV9hdG9taWNfaGVscGVy X2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogewogCWludCByZXQ7CiAKLQlpZiAobm9u YmxvY2spCi0JCXJldHVybiAtRUJVU1k7CisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfc2V0dXBf Y29tbWl0KHN0YXRlLCBub25ibG9jayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCUlO SVRfV09SSygmc3RhdGUtPmNvbW1pdF93b3JrLCBjb21taXRfd29yayk7CiAKIAlyZXQgPSBkcm1f YXRvbWljX2hlbHBlcl9wcmVwYXJlX3BsYW5lcyhkZXYsIHN0YXRlKTsKIAlpZiAocmV0KQpAQCAt MTE3OSwyMSArMTI0MywxNiBAQCBpbnQgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0KHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCiAJICogdXBkYXRlLiBXaGljaCBpcyBpbXBvcnRhbnQgc2luY2UgY29t cG9zaXRvcnMgbmVlZCB0byBmaWd1cmUgb3V0IHRoZQogCSAqIGNvbXBvc2l0aW9uIG9mIHRoZSBu ZXh0IGZyYW1lIHJpZ2h0IGFmdGVyIGhhdmluZyBzdWJtaXR0ZWQgdGhlCiAJICogY3VycmVudCBs YXlvdXQuCisJICoKKwkgKiBOT1RFOiBDb21taXQgd29yayBoYXMgbXVsdGlwbGUgcGhhc2VzLCBm aXJzdCBoYXJkd2FyZSBjb21taXQsIHRoZW4KKwkgKiBjbGVhbnVwLiBXZSB3YW50IHRoZW0gdG8g b3ZlcmxhcCwgaGVuY2UgbmVlZCBzeXN0ZW1fdW5ib3VuZF93cSB0bworCSAqIG1ha2Ugc3VyZSB3 b3JrIGl0ZW1zIGRvbid0IGFydGlmaWNhbGx5IHN0YWxsIG9uIGVhY2ggYW5vdGhlci4KIAkgKi8K IAotCWRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2ZlbmNlcyhkZXYsIHN0YXRlKTsKLQotCWRy bV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Rpc2FibGVzKGRldiwgc3RhdGUpOwotCi0J ZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkZXYsIHN0YXRlLCBmYWxzZSk7Ci0KLQlk cm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRldiwgc3RhdGUpOwotCi0J ZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkZXYsIHN0YXRlKTsKLQotCWRybV9h dG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRldiwgc3RhdGUpOwotCi0JZHJtX2F0b21pY19z dGF0ZV9mcmVlKHN0YXRlKTsKKwlpZiAobm9uYmxvY2spCisJCXF1ZXVlX3dvcmsoc3lzdGVtX3Vu Ym91bmRfd3EsICZzdGF0ZS0+Y29tbWl0X3dvcmspOworCWVsc2UKKwkJY29tbWl0X3RhaWwoc3Rh dGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjAyLDEyICsxMjYxLDcgQEAgRVhQT1JUX1NZTUJP TChkcm1fYXRvbWljX2hlbHBlcl9jb21taXQpOwogLyoqCiAgKiBET0M6IGltcGxlbWVudGluZyBu b25ibG9ja2luZyBjb21taXQKICAqCi0gKiBGb3Igbm93IHRoZSBhdG9taWMgaGVscGVycyBkb24n dCBzdXBwb3J0IG5vbmJsb2NraW5nIGNvbW1pdCBkaXJlY3RseS4gSWYKLSAqIHRoZXJlIGlzIHJl YWwgbmVlZCBpdCBjb3VsZCBiZSBhZGRlZCB0aG91Z2gsIHVzaW5nIHRoZSBkbWEtYnVmIGZlbmNl Ci0gKiBpbmZyYXN0cnVjdHVyZSBmb3IgZ2VuZXJpYyBzeW5jaHJvbml6YXRpb24gd2l0aCBvdXRz dGFuZGluZyByZW5kZXJpbmcuCi0gKgotICogRm9yIG5vdyBkcml2ZXJzIGhhdmUgdG8gaW1wbGVt ZW50IG5vbmJsb2NraW5nIGNvbW1pdCB0aGVtc2VsdmVzLCB3aXRoIHRoZQotICogZm9sbG93aW5n IHNlcXVlbmNlIGJlaW5nIHRoZSByZWNvbW1lbmRlZCBvbmU6CisgKiBOb25ibG9ja2luZyBhdG9t aWMgY29tbWl0cyBoYXZlIHRvIGJlIGltcGxlbWVudGVkIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVu Y2U6CiAgKgogICogMS4gUnVuIGRybV9hdG9taWNfaGVscGVyX3ByZXBhcmVfcGxhbmVzKCkgZmly c3QuIFRoaXMgaXMgdGhlIG9ubHkgZnVuY3Rpb24KICAqIHdoaWNoIGNvbW1pdCBuZWVkcyB0byBj YWxsIHdoaWNoIGNhbiBmYWlsLCBzbyB3ZSB3YW50IHRvIHJ1biBpdCBmaXJzdCBhbmQKQEAgLTEy MTksMTAgKzEyNzMsMTQgQEAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBlcl9jb21taXQp OwogICogY2FuY2VsbGVkIHVwZGF0ZXMuIE5vdGUgdGhhdCBpdCBpcyBpbXBvcnRhbnQgdG8gZW5z dXJlIHRoYXQgdGhlIGZyYW1lYnVmZmVyCiAgKiBjbGVhbnVwIGlzIHN0aWxsIGRvbmUgd2hlbiBj YW5jZWxsaW5nLgogICoKLSAqIEZvciBzdWZmaWNpZW50IHBhcmFsbGVsaXNtIGl0IGlzIHJlY29t bWVuZGVkIHRvIGhhdmUgYSB3b3JrIGl0ZW0gcGVyIGNydGMKLSAqIChmb3IgdXBkYXRlcyB3aGlj aCBkb24ndCB0b3VjaCBnbG9iYWwgc3RhdGUpIGFuZCBhIGdsb2JhbCBvbmUuIFRoZW4gd2Ugb25s eQotICogbmVlZCB0byBzeW5jaHJvbml6ZSB3aXRoIHRoZSBjcnRjIHdvcmsgaXRlbXMgZm9yIGNo YW5nZWQgY3J0Y3MgYW5kIHRoZSBnbG9iYWwKLSAqIHdvcmsgaXRlbSwgd2hpY2ggYWxsb3dzIG5p Y2UgY29uY3VycmVudCB1cGRhdGVzIG9uIGRpc2pvaW50IHNldHMgb2YgY3J0Y3MuCisgKiBBc3lu Y2hyb25vdXMgd29ya2VycyBuZWVkIHRvIGhhdmUgc3VmZmljaWVudCBwYXJhbGxlbGlzbSB0byBi ZSBhYmxlIHRvIHJ1bgorICogZGlmZmVyZW50IGF0b21pYyBjb21taXRzIG9uIGRpZmZlcmVudCBD UlRDcyBpbiBwYXJhbGxlbC4gVGhlIHNpbXBsZXN0IHdheSB0bworICogYWNoaXZlIHRoaXMgaXMg YnkgcnVubmluZyB0aGVtIG9uIHRoZSAmc3lzdGVtX3VuYm91bmRfd3Egd29yayBxdWV1ZS4gTm90 ZQorICogdGhhdCBkcml2ZXJzIGFyZSBub3QgcmVxdWlyZWQgdG8gc3BsaXQgdXAgYXRvbWljIGNv bW1pdHMgYW5kIHJ1biBhbgorICogaW5kaXZpZHVhbCBjb21taXQgaW4gcGFyYWxsZWwgLSB1c2Vy c3BhY2UgaXMgc3VwcG9zZWQgdG8gZG8gdGhhdCBpZiBpdCBjYXJlcy4KKyAqIEJ1dCBpdCBtaWdo dCBiZSBiZW5lZmljaWFsIHRvIGRvIHRoYXQgZm9yIG1vZGVzZXRzLCBzaW5jZSB0aG9zZSBuZWNl c3NhcmlseQorICogbXVzdCBiZSBkb25lIGFzIG9uZSBnbG9iYWwgb3BlcmF0aW9uLCBhbmQgZW5h Ymxpbmcgb3IgZGlzYWJsaW5nIGEgQ1JUQyBjYW4KKyAqIHRha2UgYSBsb25nIHRpbWUuIEJ1dCBl dmVuIHRoYXQgaXMgbm90IHJlcXVpcmVkLgogICoKICAqIDMuIFRoZSBzb2Z0d2FyZSBzdGF0ZSBp cyB1cGRhdGVkIHN5bmNocm9ub3VzbHkgd2l0aAogICogZHJtX2F0b21pY19oZWxwZXJfc3dhcF9z dGF0ZSgpLiBEb2luZyB0aGlzIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIGFsbCBtb2Rlc2V0CkBA IC0xMjM1LDcgKzEyOTMsMzA5IEBAIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY29t bWl0KTsKICAqIGNvbW1pdCBoZWxwZXJzOiBhKSBwcmUtcGxhbmUgY29tbWl0IGIpIHBsYW5lIGNv bW1pdCBjKSBwb3N0LXBsYW5lIGNvbW1pdCBhbmQKICAqIHRoZW4gY2xlYW5pbmcgdXAgdGhlIGZy YW1lYnVmZmVycyBhZnRlciB0aGUgb2xkIGZyYW1lYnVmZmVyIGlzIG5vIGxvbmdlcgogICogYmVp bmcgZGlzcGxheWVkLgorICoKKyAqIFRoZSBhYm92ZSBzY2hlbWUgaXMgaW1wbGVtZW50ZWQgaW4g dGhlIGF0b21pYyBoZWxwZXIgbGlicmFyaWVzIGluCisgKiBkcm1fYXRvbWljX2hlbHBlcl9jb21t aXQoKSB1c2luZyBhIGJ1bmNoIG9mIGhlbHBlciBmdW5jdGlvbnMuIFNlZQorICogZHJtX2F0b21p Y19oZWxwZXJfc2V0dXBfY29tbWl0KCkgZm9yIGEgc3RhcnRpbmcgcG9pbnQuCisgKi8KKworc3Rh dGljIGludCBzdGFsbF9jaGVja3Moc3RydWN0IGRybV9jcnRjICpjcnRjLCBib29sIG5vbmJsb2Nr KQoreworCXN0cnVjdCBkcm1fY3J0Y19jb21taXQgKmNvbW1pdCwgKnN0YWxsX2NvbW1pdCA9IE5V TEw7CisJYm9vbCBjb21wbGV0ZWQgPSB0cnVlOworCWludCBpLCByZXQgPSAwOworCisJc3Bpbl9s b2NrKCZjcnRjLT5jb21taXRfbG9jayk7CisJaSA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShj b21taXQsICZjcnRjLT5jb21taXRfbGlzdCwgY29tbWl0X2VudHJ5KSB7CisJCWlmIChpID09IDAp IHsKKwkJCWNvbXBsZXRlZCA9IHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21taXQtPmZsaXBf ZG9uZSk7CisJCQkvKiBVc2Vyc3BhY2UgaXMgbm90IGFsbG93ZWQgdG8gZ2V0IGFoZWFkIG9mIHRo ZSBwcmV2aW91cworCQkJICogY29tbWl0IHdpdGggbm9uYmxvY2tpbmcgb25lcy4gKi8KKwkJCWlm ICghY29tcGxldGVkICYmIG5vbmJsb2NrKSB7CisJCQkJc3Bpbl91bmxvY2soJmNydGMtPmNvbW1p dF9sb2NrKTsKKwkJCQlyZXR1cm4gLUVCVVNZOworCQkJfQorCQl9IGVsc2UgaWYgKGkgPT0gMSkg eworCQkJc3RhbGxfY29tbWl0ID0gY29tbWl0OworCQkJZHJtX2NydGNfY29tbWl0X2dldChzdGFs bF9jb21taXQpOworCQl9IGVsc2UKKwkJCWJyZWFrOworCisJCWkrKzsKKwl9CisJc3Bpbl91bmxv Y2soJmNydGMtPmNvbW1pdF9sb2NrKTsKKworCWlmICghc3RhbGxfY29tbWl0KQorCQlyZXR1cm4g MDsKKworCS8qIFdlIGRvbid0IHdhbnQgdG8gbGV0IGNvbW1pdHMgZ2V0IGFoZWFkIG9mIGNsZWFu dXAgd29yayB0b28gbXVjaCwKKwkgKiBzdGFsbGluZyBvbiAybmQgcHJldmlvdXMgY29tbWl0IG1l YW5zIHRyaXBsZS1idWZmZXIgd29uJ3QgZXZlciBzdGFsbC4KKwkgKi8KKwlyZXQgPSB3YWl0X2Zv cl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmY29tbWl0LT5jbGVhbnVwX2RvbmUs CisJCQkJCQkJMTAqSFopOworCWlmIChyZXQgPT0gMCkKKwkJRFJNX0VSUk9SKCJbQ1JUQzolZDol c10gY2xlYW51cF9kb25lIHRpbWVkIG91dFxuIiwKKwkJCSAgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+ bmFtZSk7CisKKwlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykKKwkJcmV0ID0gLUVJTlRSOworCisJ ZHJtX2NydGNfY29tbWl0X3B1dChzdGFsbF9jb21taXQpOworCisJcmV0dXJuIHJldDsKK30KKwor LyoqCisgKiBkcm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQgLSBzZXR1cCBwb3NzaWJsZSBu b25ibG9ja2luZyBjb21taXQKKyAqIEBzdGF0ZTogbmV3IG1vZGVzZXQgc3RhdGUgdG8gYmUgY29t bWl0dGVkCisgKiBAbm9uYmxvY2s6IHdoZXRoZXIgbm9uYmxvY2tpbmcgYmVoYXZpb3IgaXMgcmVx dWVzdGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgQHN0YXRlIHRvIGJlIHVzZWQg YnkgdGhlIGF0b21pYyBoZWxwZXIncyBzdXBwb3J0IGZvcgorICogbm9uYmxvY2tpbmcgY29tbWl0 cy4gRHJpdmVycyB1c2luZyB0aGUgbm9uYmxvY2tpbmcgY29tbWl0IGluZnJhc3RydWN0dXJlCisg KiBzaG91bGQgYWx3YXlzIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZWlyIC0+YXRvbWljX2Nv bW1pdCBob29rLgorICoKKyAqIFRvIGJlIGFibGUgdG8gdXNlIHRoaXMgc3VwcG9ydCBkcml2ZXJz IG5lZWQgdG8gdXNlIGEgZmV3IG1vcmUgaGVscGVyCisgKiBmdW5jdGlvbnMuIGRybV9hdG9taWNf aGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcygpIG11c3QgYmUgY2FsbGVkIGJlZm9yZQorICog YWN0dWFsbHkgY29tbWl0dGluZyB0aGUgaGFyZHdhcmUgc3RhdGUsIGFuZCBmb3Igbm9uYmxvY2tp bmcgY29tbWl0cyB0aGlzIGNhbGwKKyAqIG11c3QgYmUgcGxhY2VkIGluIHRoZSBhc3luYyB3b3Jr ZXIuIFNlZSBhbHNvIGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoKQorICogYW5kIGl0J3Mg c3RhbGwgcGFyYW1ldGVyLCBmb3Igd2hlbiBhIGRyaXZlcidzIGNvbW1pdCBob29rcyBsb29rIGF0 IHRoZQorICogLT5zdGF0ZSBwb2ludGVycyBvZiBzdHJ1Y3QgJmRybV9jcnRjLCAmZHJtX3BsYW5l IG9yICZkcm1fY29ubmVjdG9yIGRpcmVjdGx5LgorICoKKyAqIENvbXBsZXRpb24gb2YgdGhlIGhh cmR3YXJlIGNvbW1pdCBzdGVwIG11c3QgYmUgc2lnbmFsbGVkIHVzaW5nCisgKiBkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfaHdfZG9uZSgpLiBBZnRlciB0aGlzIHN0ZXAgdGhlIGRyaXZlciBpcyBu b3QgYWxsb3dlZAorICogdG8gcmVhZCBvciBjaGFuZ2UgYW55IHBlcm1hbmVudCBzb2Z0d2FyZSBv ciBoYXJkd2FyZSBtb2Rlc2V0IHN0YXRlLiBUaGUgb25seQorICogZXhjZXB0aW9uIGlzIHN0YXRl IHByb3RlY3RlZCBieSBvdGhlciBtZWFucyB0aGFuICZkcm1fbW9kZXNldF9sb2NrIGxvY2tzLgor ICogT25seSB0aGUgZnJlZSBzdGFuZGluZyBAc3RhdGUgd2l0aCBwb2ludGVycyB0byB0aGUgb2xk IHN0YXRlIHN0cnVjdHVyZXMgY2FuCisgKiBiZSBpbnNwZWN0ZWQsIGUuZy4gdG8gY2xlYW4gdXAg b2xkIGJ1ZmZlcnMgdXNpbmcKKyAqIGRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKCku CisgKgorICogQXQgdGhlIHZlcnkgZW5kLCBiZWZvcmUgY2xlYW5pbmcgdXAgQHN0YXRlIGRyaXZl cnMgbXVzdCBjYWxsCisgKiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfY2xlYW51cF9kb25lKCku CisgKgorICogVGhpcyBpcyBhbGwgaW1wbGVtZW50ZWQgYnkgaW4gZHJtX2F0b21pY19oZWxwZXJf Y29tbWl0KCksIGdpdmluZyBkcml2ZXJzIGEKKyAqIGNvbXBsZXRlIGFuZCBlc2F5LXRvLXVzZSBk ZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBhdG9taWNfY29tbWl0KCkgaG9vay4KKyAqCisg KiBUaGUgdHJhY2tpbmcgb2YgYXN5bmNocm9ub3VzbHkgZXhlY3V0ZWQgYW5kIHN0aWxsIHBlbmRp bmcgY29tbWl0cyBpcyBkb25lCisgKiB1c2luZyB0aGUgY29yZSBzdHJ1Y3R1cmUgJmRybV9jcnRj X2NvbW1pdC4KKyAqCisgKiBSZXR1cm5zOgorICoKKyAqIDAgb24gc3VjY2Vzcy4gLUVCVVNZIHdo ZW4gdXNlcnNwYWNlIHNjaGVkdWxlcyBub25ibG9ja2luZyBjb21taXRzIHRvbyBmYXN0LAorICog LUVOT01FTSBvbiBhbGxvY2F0aW9uIGZhaWx1cmVzIGFuZCAtRUlOVFIgd2hlbiBhIHNpZ25hbCBp cyBwZW5kaW5nLgorICovCitpbnQgZHJtX2F0b21pY19oZWxwZXJfc2V0dXBfY29tbWl0KHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSwKKwkJCQkgICBib29sIG5vbmJsb2NrKQoreworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7 CisJc3RydWN0IGRybV9jcnRjX2NvbW1pdCAqY29tbWl0OworCWludCBpLCByZXQ7CisKKwlmb3Jf ZWFjaF9jcnRjX2luX3N0YXRlKHN0YXRlLCBjcnRjLCBjcnRjX3N0YXRlLCBpKSB7CisJCWNvbW1p dCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21taXQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb21taXQp CisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpbml0X2NvbXBsZXRpb24oJmNvbW1pdC0+ZmxpcF9k b25lKTsKKwkJaW5pdF9jb21wbGV0aW9uKCZjb21taXQtPmh3X2RvbmUpOworCQlpbml0X2NvbXBs ZXRpb24oJmNvbW1pdC0+Y2xlYW51cF9kb25lKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNvbW1pdC0+ Y29tbWl0X2VudHJ5KTsKKwkJa3JlZl9pbml0KCZjb21taXQtPnJlZik7CisJCWNvbW1pdC0+Y3J0 YyA9IGNydGM7CisKKwkJc3RhdGUtPmNydGNzW2ldLmNvbW1pdCA9IGNvbW1pdDsKKworCQlyZXQg PSBzdGFsbF9jaGVja3MoY3J0Yywgbm9uYmxvY2spOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKKworCQkvKiBEcml2ZXJzIG9ubHkgc2VuZCBvdXQgZXZlbnRzIHdoZW4gYXQgbGVhc3QgZWl0 aGVyIGN1cnJlbnQgb3IKKwkJICogbmV3IENSVEMgc3RhdGUgaXMgYWN0aXZlLiBDb21wbGV0ZSBy aWdodCBhd2F5IGlmIGV2ZXJ5dGhpbmcKKwkJICogc3RheXMgb2ZmLiAqLworCQlpZiAoIWNydGMt PnN0YXRlLT5hY3RpdmUgJiYgIWNydGNfc3RhdGUtPmFjdGl2ZSkgeworCQkJY29tcGxldGVfYWxs KCZjb21taXQtPmZsaXBfZG9uZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIExlZ2FjeSBj dXJzb3IgdXBkYXRlcyBhcmUgZnVsbHkgdW5zeW5jZWQuICovCisJCWlmIChzdGF0ZS0+bGVnYWN5 X2N1cnNvcl91cGRhdGUpIHsKKwkJCWNvbXBsZXRlX2FsbCgmY29tbWl0LT5mbGlwX2RvbmUpOwor CQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWNydGNfc3RhdGUtPmV2ZW50KSB7CisJCQljb21t aXQtPmV2ZW50ID0ga3phbGxvYyhzaXplb2YoKmNvbW1pdC0+ZXZlbnQpLAorCQkJCQkJR0ZQX0tF Uk5FTCk7CisJCQlpZiAoIWNvbW1pdC0+ZXZlbnQpCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJ CWNydGNfc3RhdGUtPmV2ZW50ID0gY29tbWl0LT5ldmVudDsKKwkJfQorCisJCWNydGNfc3RhdGUt PmV2ZW50LT5iYXNlLmNvbXBsZXRpb24gPSAmY29tbWl0LT5mbGlwX2RvbmU7CisJfQorCisJcmV0 dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfaGVscGVyX3NldHVwX2NvbW1pdCk7 CisKKworc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19jb21taXQgKnByZWNlZWRpbmdfY29tbWl0KHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGNfY29tbWl0ICpjb21taXQ7 CisJaW50IGkgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb21taXQsICZjcnRjLT5jb21t aXRfbGlzdCwgY29tbWl0X2VudHJ5KSB7CisJCS8qIHNraXAgdGhlIGZpcnN0IGVudHJ5LCB0aGF0 J3MgdGhlIGN1cnJlbnQgY29tbWl0ICovCisJCWlmIChpID09IDEpCisJCQlyZXR1cm4gY29tbWl0 OworCQlpKys7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogZHJtX2F0b21pY19o ZWxwZXJfd2FpdF9mb3JfZGVwZW5kZW5jaWVzIC0gc2V0dXAgcG9zc2libGUgbm9uYmxvY2tpbmcg Y29tbWl0CisgKiBAc3RhdGU6IG5ldyBtb2Rlc2V0IHN0YXRlIHRvIGJlIGNvbW1pdHRlZAorICoK KyAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgZm9yIGFsbCBwcmVjZWVkaW5nIGNvbW1pdHMgdGhhdCB0 b3VjaCB0aGUgc2FtZSBDUlRDIGFzCisgKiBAc3RhdGUgdG8gYm90aCBiZSBjb21taXR0ZWQgdG8g dGhlIGhhcmR3YXJlIChhcyBzaWduYWxsZWQgYnkKKyAqIGRybV9hdG9taWNfSGVscGVyX2NvbW1p dF9od19kb25lKSBhbmQgZXhlY3V0ZWQgYnkgdGhlIGhhcmR3YXJlIChhcyBzaWduYWxsZWQKKyAq IGJ5IGNhbGxpbmcgZHJtX2NydGNfdmJsYW5rX3NlbmRfZXZlbnQgb24gdGhlIGV2ZW50IG1lbWJl ciBvZgorICogJmRybV9jcnRjX3N0YXRlKS4KKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgdGhlIGF0 b21pYyBoZWxwZXIgc3VwcG9ydCBmb3Igbm9uYmxvY2tpbmcgY29tbWl0cywgc2VlCisgKiBkcm1f YXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQoKSBmb3IgYW4gb3ZlcnZpZXcuCisgKi8KK3ZvaWQg ZHJtX2F0b21pY19oZWxwZXJfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXN0cnVjdCBkcm1fY3J0Y19jb21taXQgKmNvbW1pdDsK KwlpbnQgaTsKKwlsb25nIHJldDsKKworCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNy dGMsIGNydGNfc3RhdGUsIGkpIHsKKwkJc3Bpbl9sb2NrKCZjcnRjLT5jb21taXRfbG9jayk7CisJ CWNvbW1pdCA9IHByZWNlZWRpbmdfY29tbWl0KGNydGMpOworCQlpZiAoY29tbWl0KQorCQkJZHJt X2NydGNfY29tbWl0X2dldChjb21taXQpOworCQlzcGluX3VubG9jaygmY3J0Yy0+Y29tbWl0X2xv Y2spOworCisJCWlmICghY29tbWl0KQorCQkJY29udGludWU7CisKKwkJcmV0ID0gd2FpdF9mb3Jf Y29tcGxldGlvbl90aW1lb3V0KCZjb21taXQtPmh3X2RvbmUsCisJCQkJCQkgIDEwKkhaKTsKKwkJ aWYgKHJldCA9PSAwKQorCQkJRFJNX0VSUk9SKCJbQ1JUQzolZDolc10gaHdfZG9uZSB0aW1lZCBv dXRcbiIsCisJCQkJICBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKKworCQkvKiBDdXJyZW50 bHkgbm8gc3VwcG9ydCBmb3Igb3ZlcndyaXRpbmcgZmxpcHMsIGhlbmNlCisJCSAqIHN0YWxsIGZv ciBwcmV2aW91cyBvbmUgdG8gZXhlY3V0ZSBjb21wbGV0ZWx5LiAqLworCQlyZXQgPSB3YWl0X2Zv cl9jb21wbGV0aW9uX3RpbWVvdXQoJmNvbW1pdC0+ZmxpcF9kb25lLAorCQkJCQkJICAxMCpIWik7 CisJCWlmIChyZXQgPT0gMCkKKwkJCURSTV9FUlJPUigiW0NSVEM6JWQ6JXNdIGZsaXBfZG9uZSB0 aW1lZCBvdXRcbiIsCisJCQkJICBjcnRjLT5iYXNlLmlkLCBjcnRjLT5uYW1lKTsKKworCQlkcm1f Y3J0Y19jb21taXRfcHV0KGNvbW1pdCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChkcm1fYXRvbWlj X2hlbHBlcl93YWl0X2Zvcl9kZXBlbmRlbmNpZXMpOworCisvKioKKyAqIGRybV9hdG9taWNfaGVs cGVyX2NvbW1pdF9od19kb25lIC0gc2V0dXAgcG9zc2libGUgbm9uYmxvY2tpbmcgY29tbWl0Cisg KiBAc3RhdGU6IG5ldyBtb2Rlc2V0IHN0YXRlIHRvIGJlIGNvbW1pdHRlZAorICoKKyAqIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBzaWduYWwgY29tcGxldGlvbiBvZiB0aGUgaGFyZHdhcmUgY29t bWl0IHN0ZXAuIEFmdGVyCisgKiB0aGlzIHN0ZXAgdGhlIGRyaXZlciBpcyBub3QgYWxsb3dlZCB0 byByZWFkIG9yIGNoYW5nZSBhbnkgcGVybWFuZW50IHNvZnR3YXJlCisgKiBvciBoYXJkd2FyZSBt b2Rlc2V0IHN0YXRlLiBUaGUgb25seSBleGNlcHRpb24gaXMgc3RhdGUgcHJvdGVjdGVkIGJ5IG90 aGVyCisgKiBtZWFucyB0aGFuICZkcm1fbW9kZXNldF9sb2NrIGxvY2tzLgorICoKKyAqIERyaXZl cnMgc2hvdWxkIHRyeSB0byBwb3N0cG9uZSBhbnkgZXhwZW5zaXZlIG9yIGRlbGF5ZWQgY2xlYW51 cCB3b3JrIGFmdGVyCisgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqCisgKiBUaGlzIGlz IHBhcnQgb2YgdGhlIGF0b21pYyBoZWxwZXIgc3VwcG9ydCBmb3Igbm9uYmxvY2tpbmcgY29tbWl0 cywgc2VlCisgKiBkcm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQoKSBmb3IgYW4gb3ZlcnZp ZXcuCiAgKi8KK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUoc3RydWN0IGRy bV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKwlzdHJ1 Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGU7CisJc3RydWN0IGRybV9jcnRjX2NvbW1pdCAq Y29tbWl0OworCWludCBpOworCisJZm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0Yywg Y3J0Y19zdGF0ZSwgaSkgeworCQljb21taXQgPSBzdGF0ZS0+Y3J0Y3NbaV0uY29tbWl0OworCQlp ZiAoIWNvbW1pdCkKKwkJCWNvbnRpbnVlOworCisJCS8qIGJhY2tlbmQgbXVzdCBoYXZlIGNvbnN1 bWVkIGFueSBldmVudCBieSBub3cgKi8KKwkJV0FSTl9PTihjcnRjLT5zdGF0ZS0+ZXZlbnQpOwor CQlzcGluX2xvY2soJmNydGMtPmNvbW1pdF9sb2NrKTsKKwkJY29tcGxldGVfYWxsKCZjb21taXQt Pmh3X2RvbmUpOworCQlzcGluX3VubG9jaygmY3J0Yy0+Y29tbWl0X2xvY2spOworCX0KK30KK0VY UE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUpOworCisvKioKKyAq IGRybV9hdG9taWNfaGVscGVyX3dhaXRfZm9yX2RlcGVuZGVuY2llcyAtIHNldHVwIHBvc3NpYmxl IG5vbmJsb2NraW5nIGNvbW1pdAorICogQHN0YXRlOiBuZXcgbW9kZXNldCBzdGF0ZSB0byBiZSBj b21taXR0ZWQKKyAqCisgKiBUaGlzIHNpZ25hbHMgY29tcGxldGlvbiBvZiB0aGUgYXRvbWljIHVw ZGF0ZSBAc3RhdGUsIGluY2x1ZGluZyBhbnkgY2xlYW51cAorICogd29yay4gSWYgdXNlZCwgaXQg bXVzdCBiZSBjYWxsZWQgcmlnaHQgYmVmb3JlIGNhbGxpbmcKKyAqIGRybV9hdG9taWNfc3RhdGVf ZnJlZSgpLgorICoKKyAqIFRoaXMgaXMgcGFydCBvZiB0aGUgYXRvbWljIGhlbHBlciBzdXBwb3J0 IGZvciBub25ibG9ja2luZyBjb21taXRzLCBzZWUKKyAqIGRybV9hdG9taWNfaGVscGVyX3NldHVw X2NvbW1pdCgpIGZvciBhbiBvdmVydmlldy4KKyAqLwordm9pZCBkcm1fYXRvbWljX2hlbHBlcl9j b21taXRfY2xlYW51cF9kb25lKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlz dHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRl OworCXN0cnVjdCBkcm1fY3J0Y19jb21taXQgKmNvbW1pdDsKKwlpbnQgaTsKKwlsb25nIHJldDsK KworCWZvcl9lYWNoX2NydGNfaW5fc3RhdGUoc3RhdGUsIGNydGMsIGNydGNfc3RhdGUsIGkpIHsK KwkJY29tbWl0ID0gc3RhdGUtPmNydGNzW2ldLmNvbW1pdDsKKwkJaWYgKFdBUk5fT04oIWNvbW1p dCkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2soJmNydGMtPmNvbW1pdF9sb2NrKTsKKwkJ Y29tcGxldGVfYWxsKCZjb21taXQtPmNsZWFudXBfZG9uZSk7CisJCVdBUk5fT04oIXRyeV93YWl0 X2Zvcl9jb21wbGV0aW9uKCZjb21taXQtPmh3X2RvbmUpKTsKKworCQkvKiBjb21taXRfbGlzdCBi b3Jyb3dzIG91ciByZWZlcmVuY2UsIG5lZWQgdG8gcmVtb3ZlIGJlZm9yZSB3ZQorCQkgKiBjbGVh biB1cCBvdXIgZHJtX2F0b21pY19zdGF0ZS4gQnV0IG9ubHkgYWZ0ZXIgaXQgYWN0dWFsbHkKKwkJ ICogY29tcGxldGVkLCBvdGhlcndpc2Ugc3Vic2VxdWVudCBjb21taXRzIHdvbid0IHN0YWxsIHBy b3Blcmx5LiAqLworCQlpZiAodHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oJmNvbW1pdC0+ZmxpcF9k b25lKSkgeworCQkJbGlzdF9kZWwoJmNvbW1pdC0+Y29tbWl0X2VudHJ5KTsKKwkJCXNwaW5fdW5s b2NrKCZjcnRjLT5jb21taXRfbG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNwaW5fdW5s b2NrKCZjcnRjLT5jb21taXRfbG9jayk7CisKKwkJLyogV2UgbXVzdCB3YWl0IGZvciB0aGUgdmJs YW5rIGV2ZW50IHRvIHNpZ25hbCBvdXIgY29tcGxldGlvbgorCQkgKiBiZWZvcmUgcmVsZWFzaW5n IG91ciByZWZlcmVuY2UsIHNpbmNlIHRoZSB2Ymxhbmsgd29yayBkb2VzCisJCSAqIG5vdCBob2xk IGEgcmVmZXJlbmNlIG9mIGl0cyBvd24uICovCisJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25f dGltZW91dCgmY29tbWl0LT5mbGlwX2RvbmUsCisJCQkJCQkgIDEwKkhaKTsKKwkJaWYgKHJldCA9 PSAwKQorCQkJRFJNX0VSUk9SKCJbQ1JUQzolZDolc10gZmxpcF9kb25lIHRpbWVkIG91dFxuIiwK KwkJCQkgIGNydGMtPmJhc2UuaWQsIGNydGMtPm5hbWUpOworCisJCXNwaW5fbG9jaygmY3J0Yy0+ Y29tbWl0X2xvY2spOworCQlsaXN0X2RlbCgmY29tbWl0LT5jb21taXRfZW50cnkpOworCQlzcGlu X3VubG9jaygmY3J0Yy0+Y29tbWl0X2xvY2spOworCX0KK30KK0VYUE9SVF9TWU1CT0woZHJtX2F0 b21pY19oZWxwZXJfY29tbWl0X2NsZWFudXBfZG9uZSk7CiAKIC8qKgogICogZHJtX2F0b21pY19o ZWxwZXJfcHJlcGFyZV9wbGFuZXMgLSBwcmVwYXJlIHBsYW5lIHJlc291cmNlcyBiZWZvcmUgY29t bWl0CkBAIC0xNTU2LDE3ICsxOTE2LDQ1IEBAIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxw ZXJfY2xlYW51cF9wbGFuZXMpOwogICoKICAqIDUuIENhbGwgZHJtX2F0b21pY19oZWxwZXJfY2xl YW51cF9wbGFuZXMoKSB3aXRoIEBzdGF0ZSwgd2hpY2ggc2luY2Ugc3RlcCAzCiAgKiBjb250YWlu cyB0aGUgb2xkIHN0YXRlLiBBbHNvIGRvIGFueSBvdGhlciBjbGVhbnVwIHJlcXVpcmVkIHdpdGgg dGhhdCBzdGF0ZS4KKyAqCisgKiBAc3RhbGwgbXVzdCBiZSBzZXQgd2hlbiBub25ibG9ja2luZyBj b21taXRzIGZvciB0aGlzIGRyaXZlciBkaXJlY3RseSBhY2Nlc3MKKyAqIHRoZSAtPnN0YXRlIHBv aW50ZXIgb2YgJmRybV9wbGFuZSwgJmRybV9jcnRjIG9yICZkcm1fY29ubmVjdG9yLiBXaXRoIHRo ZQorICogY3VycmVudCBhdG9taWMgaGVscGVycyB0aGlzIGlzIGFsbW9zdCBhbHdheXMgdGhlIGNh c2UsIHNpbmNlIHRoZSBoZWxwZXJzCisgKiBkb24ndCBwYXNzIHRoZSByaWdodCBzdGF0ZSBzdHJ1 Y3R1cmVzIHRvIHRoZSBjYWxsYmFja3MuCiAgKi8KIHZvaWQgZHJtX2F0b21pY19oZWxwZXJfc3dh cF9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJICBib29sIHN0YWxs KQogewogCWludCBpOworCWxvbmcgcmV0OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7CiAJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGU7CiAJc3RydWN0IGRy bV9jcnRjICpjcnRjOwogCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKIAlzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZTsKIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsKKwlzdHJ1Y3QgZHJtX2NydGNfY29tbWl0ICpjb21taXQ7CisKKwlpZiAoc3RhbGwpIHsKKwkJ Zm9yX2VhY2hfY3J0Y19pbl9zdGF0ZShzdGF0ZSwgY3J0YywgY3J0Y19zdGF0ZSwgaSkgeworCQkJ c3Bpbl9sb2NrKCZjcnRjLT5jb21taXRfbG9jayk7CisJCQljb21taXQgPSBsaXN0X2ZpcnN0X2Vu dHJ5X29yX251bGwoJmNydGMtPmNvbW1pdF9saXN0LAorCQkJCQlzdHJ1Y3QgZHJtX2NydGNfY29t bWl0LCBjb21taXRfZW50cnkpOworCQkJaWYgKGNvbW1pdCkKKwkJCQlkcm1fY3J0Y19jb21taXRf Z2V0KGNvbW1pdCk7CisJCQlzcGluX3VubG9jaygmY3J0Yy0+Y29tbWl0X2xvY2spOworCisJCQlp ZiAoIWNvbW1pdCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlv bl90aW1lb3V0KCZjb21taXQtPmh3X2RvbmUsCisJCQkJCQkJICAxMCpIWik7CisJCQlpZiAocmV0 ID09IDApCisJCQkJRFJNX0VSUk9SKCJbQ1JUQzolZDolc10gaHdfZG9uZSB0aW1lZCBvdXRcbiIs CisJCQkJCSAgY3J0Yy0+YmFzZS5pZCwgY3J0Yy0+bmFtZSk7CisJCQlkcm1fY3J0Y19jb21taXRf cHV0KGNvbW1pdCk7CisJCX0KKwl9CiAKIAlmb3JfZWFjaF9jb25uZWN0b3JfaW5fc3RhdGUoc3Rh dGUsIGNvbm5lY3RvciwgY29ubl9zdGF0ZSwgaSkgewogCQljb25uZWN0b3ItPnN0YXRlLT5zdGF0 ZSA9IHN0YXRlOwpAQCAtMTU3OCw2ICsxOTY2LDE1IEBAIHZvaWQgZHJtX2F0b21pY19oZWxwZXJf c3dhcF9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCWNydGMtPnN0YXRl LT5zdGF0ZSA9IHN0YXRlOwogCQlzd2FwKHN0YXRlLT5jcnRjc1tpXS5zdGF0ZSwgY3J0Yy0+c3Rh dGUpOwogCQljcnRjLT5zdGF0ZS0+c3RhdGUgPSBOVUxMOworCisJCWlmIChzdGF0ZS0+Y3J0Y3Nb aV0uY29tbWl0KSB7CisJCQlzcGluX2xvY2soJmNydGMtPmNvbW1pdF9sb2NrKTsKKwkJCWxpc3Rf YWRkKCZzdGF0ZS0+Y3J0Y3NbaV0uY29tbWl0LT5jb21taXRfZW50cnksCisJCQkJICZjcnRjLT5j b21taXRfbGlzdCk7CisJCQlzcGluX3VubG9jaygmY3J0Yy0+Y29tbWl0X2xvY2spOworCisJCQlz dGF0ZS0+Y3J0Y3NbaV0uY29tbWl0LT5ldmVudCA9IE5VTEw7CisJCX0KIAl9CiAKIAlmb3JfZWFj aF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRlLCBpKSB7CmRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS9kcm1fYXRvbWljX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0 b21pY19oZWxwZXIuaAppbmRleCAwMjc2NDQ3MjI1ZWQuLjVmYjhjMzA2ZTE2YiAxMDA2NDQKLS0t IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pY19oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9kcm1f YXRvbWljX2hlbHBlci5oCkBAIC0zOCw2ICszOCw3IEBAIGludCBkcm1fYXRvbWljX2hlbHBlcl9j aGVja19wbGFuZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUpOwogaW50IGRybV9hdG9taWNfaGVscGVyX2NoZWNrKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRl KTsKK3ZvaWQgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlKTsKIGludCBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAogCQkJ ICAgICBib29sIG5vbmJsb2NrKTsKQEAgLTc0LDYgKzc1LDEzIEBAIHZvaWQgZHJtX2F0b21pY19o ZWxwZXJfZGlzYWJsZV9wbGFuZXNfb25fY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiB2b2lk IGRybV9hdG9taWNfaGVscGVyX3N3YXBfc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0 YXRlLAogCQkJCSAgYm9vbCBzdGFsbCk7CiAKKy8qIG5vbmJsb2NraW5nIGNvbW1pdCBoZWxwZXJz ICovCitpbnQgZHJtX2F0b21pY19oZWxwZXJfc2V0dXBfY29tbWl0KHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSwKKwkJCQkgICBib29sIG5vbmJsb2NrKTsKK3ZvaWQgZHJtX2F0b21pY19o ZWxwZXJfd2FpdF9mb3JfZGVwZW5kZW5jaWVzKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSk7Cit2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9od19kb25lKHN0cnVjdCBkcm1fYXRv bWljX3N0YXRlICpzdGF0ZSk7Cit2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9jbGVhbnVw X2RvbmUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKKwogLyogaW1wbGVtZW50YXRp b25zIGZvciBsZWdhY3kgaW50ZXJmYWNlcyAqLwogaW50IGRybV9hdG9taWNfaGVscGVyX3VwZGF0 ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAkJCQkgICBzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0v ZHJtX2NydGMuaAppbmRleCBjZjRhYWQwOTI5ZDkuLmFjNDNiNzEyNzM2NyAxMDA2NDQKLS0tIGEv aW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC0x NzQ5LDYgKzE3NDksOSBAQCBzdHJ1Y3QgZHJtX2JyaWRnZSB7CiAgKiBUaGUgaW1wb3J0YW50IGJp dCB0byBrbm93IGlzIHRoYXQgY2xlYW51cF9kb25lIGlzIHRoZSB0ZXJtaW5hbCBldmVudCwgYnV0 IHRoZQogICogb3JkZXJpbmcgYmV0d2VlbiBmbGlwX2RvbmUgYW5kIGh3X2RvbmUgaXMgZW50aXJl bHkgdXAgdG8gdGhlIHNwZWNpZmljIGRyaXZlcgogICogYW5kIG1vZGVzZXQgc3RhdGUgY2hhbmdl LgorICoKKyAqIEZvciBhbiBpbXBsZW1lbnRhdGlvbiBvZiBob3cgdG8gdXNlIHRoaXMgbG9vayBh dAorICogZHJtX2F0b21pY19oZWxwZXJfc2V0dXBfY29tbWl0KCkgZnJvbSB0aGUgYXRvbWljIGhl bHBlciBsaWJyYXJ5LgogICovCiBzdHJ1Y3QgZHJtX2NydGNfY29tbWl0IHsKIAkvKioKQEAgLTIy MDgsNiArMjIxMSw3IEBAIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgewogICogQGFzeW5j X3BhZ2VfZmxpcDogZG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IGFzeW5jIGZsaXBzIG9uIHRoZSBw cmltYXJ5IHBsYW5lPwogICogQGN1cnNvcl93aWR0aDogaGludCB0byB1c2Vyc3BhY2UgZm9yIG1h eCBjdXJzb3Igd2lkdGgKICAqIEBjdXJzb3JfaGVpZ2h0OiBoaW50IHRvIHVzZXJzcGFjZSBmb3Ig bWF4IGN1cnNvciBoZWlnaHQKKyAqIEBoZWxwZXJfcHJpdmF0ZTogbWlkLWxheWVyIHByaXZhdGUg ZGF0YQogICoKICAqIENvcmUgbW9kZSByZXNvdXJjZSB0cmFja2luZyBzdHJ1Y3R1cmUuICBBbGwg Q1JUQywgZW5jb2RlcnMsIGFuZCBjb25uZWN0b3JzCiAgKiBlbnVtZXJhdGVkIGJ5IHRoZSBkcml2 ZXIgYXJlIGFkZGVkIGhlcmUsIGFzIGFyZSBnbG9iYWwgcHJvcGVydGllcy4gIFNvbWUKQEAgLTIz MjcsNiArMjMzMSw4IEBAIHN0cnVjdCBkcm1fbW9kZV9jb25maWcgewogCiAJLyogY3Vyc29yIHNp emUgKi8KIAl1aW50MzJfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisKKwlzdHJ1Y3Qg ZHJtX21vZGVfY29uZmlnX2hlbHBlcl9mdW5jcyAqaGVscGVyX3ByaXZhdGU7CiB9OwogCiAvKioK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVzLmggYi9p bmNsdWRlL2RybS9kcm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oCmluZGV4IGQ0NjE5ZGMyZWVj Yi4uNDcyM2ZiOTZiYzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fbW9kZXNldF9oZWxw ZXJfdnRhYmxlcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVz LmgKQEAgLTkyNSw0ICs5MjUsNDMgQEAgc3RhdGljIGlubGluZSB2b2lkIGRybV9wbGFuZV9oZWxw ZXJfYWRkKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXBsYW5lLT5oZWxwZXJfcHJpdmF0ZSA9 IGZ1bmNzOwogfQogCisvKioKKyAqIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNz IC0gZ2xvYmFsIG1vZGVzZXQgaGVscGVyIG9wZXJhdGlvbnMKKyAqCisgKiBUaGVzZSBoZWxwZXIg ZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHRoZSBhdG9taWMgaGVscGVycy4KKyAqLworc3RydWN0IGRy bV9tb2RlX2NvbmZpZ19oZWxwZXJfZnVuY3MgeworCS8qKgorCSAqIEBhdG9taWNfY29tbWl0X3Rh aWw6CisJICoKKwkgKiBUaGlzIGhvb2sgaXMgdXNlZCBieSB0aGUgZGVmYXVsdCBhdG9taWNfY29t bWl0KCkgaG9vayBpbXBsZW1lbnRlZCBpbgorCSAqIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdCgp IHRvZ2V0aGVyIHdpdGggdGhlIG5vbmJsb2NraW5nIGNvbW1pdAorCSAqIGhlbHBlcnMgKHNlZSBk cm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQoKSBmb3IgYSBzdGFydGluZyBwb2ludCkKKwkg KiB0byBpbXBsZW1lbnQgYmxvY2tpbmcgYW5kIG5vbmJsb2NraW5nIGNvbW1pdHMgZWFzaWx5LiBJ dCBpcyBub3QgdXNlZAorCSAqIGJ5IHRoZSBhdG9taWMgaGVscGVycworCSAqCisJICogVGhpcyBo b29rIHNob3VsZCBmaXJzdCBjb21taXQgdGhlIGdpdmVuIGF0b21pYyBzdGF0ZSB0byB0aGUgaGFy ZHdhcmUuCisJICogQnV0IGRyaXZlcnMgY2FuIGFkZCBtb3JlIHdhaXRpbmcgY2FsbHMgYXQgdGhl IHN0YXJ0IG9mIHRoZWlyCisJICogaW1wbGVtZW50YXRpb24sIGUuZy4gdG8gd2FpdCBmb3IgZHJp dmVyLWludGVybmFsIHJlcXVlc3QgZm9yIGltcGxpY2l0CisJICogc3luY2luZywgYmVmb3JlIHN0 YXJ0aW5nIHRvIGNvbW1pdCB0aGUgdXBkYXRlIHRvIHRoZSBoYXJkd2FyZS4KKwkgKgorCSAqIEFm dGVyIHRoZSBhdG9taWMgdXBkYXRlIGlzIGNvbW1pdHRlZCB0byB0aGUgaGFyZHdhcmUgdGhpcyBo b29rIG5lZWRzCisJICogdG8gY2FsbCBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfaHdfZG9uZSgp LiBUaGVuIHdhaXQgZm9yIHRoZSB1cGF0ZQorCSAqIHRvIGJlIGV4ZWN1dGVkIGJ5IHRoZSBoYXJk d2FyZSwgZm9yIGV4YW1wbGUgdXNpbmcKKwkgKiBkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92 YmxhbmtzKCksIGFuZCB0aGVuIGNsZWFuIHVwIHRoZSBvbGQKKwkgKiBmcmFtZWJ1ZmZlcnMgdXNp bmcgZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoKS4KKwkgKgorCSAqIFdoZW4gZGlz YWJsaW5nIGEgQ1JUQyB0aGlzIGhvb2sgX211c3RfIHN0YWxsIGZvciB0aGUgY29tbWl0IHRvCisJ ICogY29tcGxldGUuIFZibGFuayB3YWl0cyBkb24ndCB3b3JrIG9uIGRpc2FibGVkIENSVEMsIGhl bmNlIHRoZSBjb3JlCisJICogY2FuJ3QgdGFrZSBjYXJlIG9mIHRoaXMuIEFuZCBpdCBhbHNvIGNh bid0IHJlbHkgb24gdGhlIHZibGFuayBldmVudCwKKwkgKiBzaW5jZSB0aGF0IGNhbiBiZSBzaWdu YWxsZWQgYWxyZWFkeSB3aGVuIHRoZSBzY3JlZW4gc2hvd3MgYmxhY2ssCisJICogd2hpY2ggY2Fu IGhhcHBlbiBtdWNoIGVhcmxpZXIgdGhhbiB0aGUgbGFzdCBoYXJkd2FyZSBhY2Nlc3MgbmVlZGVk IHRvCisJICogc2h1dCBvZmYgdGhlIGRpc3BsYXkgcGlwZWxpbmUgY29tcGxldGVseS4KKwkgKgor CSAqIFRoaXMgaG9vayBpcyBvcHRpb25hbCwgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMK KwkgKiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfdGFpbCgpLgorCSAqLworCXZvaWQgKCphdG9t aWNfY29tbWl0X3RhaWwpKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cit9OworCiAj ZW5kaWYKLS0gCjIuOC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmkt ZGV2ZWwK