From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v6 18/20] drm/dp_mst: Start tracking per-port VCPI allocations Date: Thu, 10 Jan 2019 14:57:52 -0500 Message-ID: <20190110195753.6234-19-lyude@redhat.com> References: <20190110195753.6234-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190110195753.6234-1-lyude@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, nouveau@lists.freedesktop.org, intel-gfx@lists.freedesktop.org Cc: Jerry Zuo , David Airlie , Harry Wentland List-Id: dri-devel@lists.freedesktop.org VGhlcmUgaGFzIGJlZW4gYSBUT0RPIHdhaXRpbmcgZm9yIHF1aXRlIGEgbG9uZyB0aW1lIGluCmRy bV9kcF9tc3RfdG9wb2xvZ3kuYzoKCgkvKiBXZSBjYW5ub3QgcmVseSBvbiBwb3J0LT52Y3BpLm51 bV9zbG90cyB0byB1cGRhdGUKCSAqIHRvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUg cG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJlbnQKCSAqIGJyYW5jaCBkZXZpY2Ugd2FzIHVu cGx1Z2dlZC4gVGhpcyBzaG91bGQgYmUgZml4ZWQgYnkgdHJhY2tpbmcKCSAqIHBlci1wb3J0IHNs b3QgYWxsb2NhdGlvbiBpbiBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlIGluc3RlYWQgb2YKCSAq IGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRvIHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVs ZWFzZS4KCSAqLwoKVGhhdCdzIG5vdCB0aGUgb25seSByZWFzb24gd2Ugc2hvdWxkIGZpeCB0aGlz OiBmb3JjaW5nIHRoZSBkcml2ZXIgdG8KdHJhY2sgdGhlIFZDUEkgYWxsb2NhdGlvbnMgdGhyb3Vn aG91dCBhIHN0YXRlJ3MgYXRvbWljIGNoZWNrIGlzCmVycm9yIHByb25lLCBiZWNhdXNlIGl0IG1l YW5zIHRoYXQgZXh0cmEgY2FyZSBoYXMgdG8gYmUgdGFrZW4gd2l0aCB0aGUKb3JkZXIgdGhhdCBk cm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIGFuZApkcm1fZHBfYXRvbWljX3JlbGVhc2Vf dmNwaV9zbG90cygpIGFyZSBjYWxsZWQgaW4gaW4gb3JkZXIgdG8gZW5zdXJlCmlkZW1wb3RlbmN5 LiBDdXJyZW50bHkgdGhlIG9ubHkgZHJpdmVyIGFjdHVhbGx5IHVzaW5nIHRoZXNlIGhlbHBlcnMs Cmk5MTUsIGRvZXNuJ3QgZXZlbiBkbyB0aGlzIGNvcnJlY3RseTogbXVsdGlwbGUgLT5iZXN0X2Vu Y29kZXIoKSBjaGVja3MKd2l0aCBpOTE1J3MgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3b3VsZCBu b3QgYmUgaWRlbXBvdGVudCBhbmQgd291bGQKb3Zlci1hbGxvY2F0ZSBWQ1BJIHNsb3RzLCBzb21l dGhpbmcgSSBsZWFybmVkIHRyeWluZyB0byBpbXBsZW1lbnQKZmFsbGJhY2sgcmV0cmFpbmluZyBp biBNU1QuCgpTbzogc2ltcGxpZnkgdGhpcyB3aG9sZSBtZXNzLCBhbmQgdGVhY2ggZHJtX2RwX2F0 b21pY19maW5kX3ZjcGlfc2xvdHMoKQphbmQgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xv dHMoKSB0byB0cmFjayB0aGUgVkNQSSBhbGxvY2F0aW9ucyBmb3IKZWFjaCBwb3J0LiBUaGlzIGFs bG93cyB1cyB0byBlbnN1cmUgaWRlbXBvdGVuY3kgd2l0aG91dCBoYXZpbmcgdG8gcmVseQpvbiB0 aGUgZHJpdmVyIGFzIG11Y2guIEFkZGl0aW9uYWxseTogdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQg dG8gZG8gYW55CmtpbmQgb2YgVkNQSSBzbG90IHRyYWNraW5nIGFueW1vcmUgaWYgaXQgZG9lc24n dCBuZWVkIGl0IGZvciBpdCdzIG93bgppbnRlcm5hbCBzdGF0ZS4KCkFkZGl0aW9uYWxseTsgdGhp cyBhZGRzIGEgbmV3IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKCkgaGVscGVyIHdoaWNoCm11c3Qg YmUgdXNlZCBieSBhdG9taWMgZHJpdmVycyB0byBwZXJmb3JtIHZhbGlkaXR5IGNoZWNrcyBmb3Ig dGhlIG5ldwpWQ1BJIGFsbG9jYXRpb25zIGluY3VycmVkIGJ5IGEgc3RhdGUuCgpBbHNvOiB1cGRh dGUgdGhlIGRvY3VtZW50YXRpb24gYW5kIG1ha2UgaXQgbW9yZSBvYnZpb3VzIHRoYXQgdGhlc2UK L211c3QvIGJlIGNhbGxlZCBieSAvYWxsLyBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIE1TVC4K CkNoYW5nZXMgc2luY2Ugdjk6CiogQWRkIHNvbWUgbWlzc2luZyBjaGFuZ2VzIHRoYXQgd2VyZSBy ZXF1ZXN0ZWQgYnkgZGFudmV0IHRoYXQgSSBmb3Jnb3QKICBhYm91dCBhZnRlciBJIHJlZGlkIGFs bCBvZiB0aGUga3JlZiBzdHVmZjoKICAqIFJlbW92ZSB1bm5lY2Vzc2FyeSBzdGF0ZSBjaGFuZ2Vz IGluIGludGVsX2RwX21zdF9hdG9taWNfY2hlY2sKICAqIENsZWFudXAgYXRvbWljIGNoZWNrIGxv Z2ljIGZvciBWQ1BJIGFsbG9jYXRpb25zIC0gYWxsIHdlIG5lZWQgdG8gY2hlY2sgaW4KICAgIGNv bXB1dGVfY29uZmlnIGlzIHdoZXRoZXIgb3Igbm90IHRoaXMgc3RhdGUgZGlzYWJsZXMgYSBDUlRD LCB0aGVuIGZyZWUKICAgIFZDUEkgYmFzZWQgb2ZmIHRoYXQKCkNoYW5nZXMgc2luY2Ugdjg6CiAq IEZpeCBjb21waWxlIGVycm9ycywgd2hvb3BzIQoKQ2hhbmdlcyBzaW5jZSB2NzoKIC0gRG9uJ3Qg Y2hlY2sgZm9yIG1peGVkIHN0YWxlL3ZhbGlkIFZDUEkgYWxsb2NhdGlvbnMsIGp1c3QgcmVseSBv bgogY29ubmVjdG9yIHJlZ2lzdHJhdGlvbiB0byBzdG9wIHN1Y2ggZXJyb25lb3VzIG1vZGVzZXRz CgpDaGFuZ2VzIHNpbmNlIHY2OgogLSBLZWVwIGEga3JlZiB0byBhbGwgb2YgdGhlIHBvcnRzIHdl IGhhdmUgYWxsb2NhdGlvbnMgb24uIFRoaXMgcmVxdWlyZWQKICAgYSBnb29kIGJpdCBvZiBjaGFu Z2luZyB0byB3aGVuIHdlIGNhbGwgZHJtX2RwX2ZpbmRfdmNwaV9zbG90cygpLAogICBtYWlubHkg dGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIG9ubHkgcmVkbyBWQ1BJIGFsbG9jYXRpb25z IG9uCiAgIGFjdHVhbCBtb2RlIG9yIENSVEMgY2hhbmdlcywgbm90IGNydGNfc3RhdGUtPmFjdGl2 ZSBjaGFuZ2VzLgogICBBZGRpdGlvbmFsbHksIHdlIG5vIGxvbmdlciB0YWtlIHRoZSByZWdpc3Ry YXRpb24gb2YgdGhlIERSTSBjb25uZWN0b3IKICAgZm9yIGVhY2ggcG9ydCBpbnRvIGFjY291bnQg YmVjYXVzZSBzbyBsb25nIGFzIHdlIGhhdmUgYSBrcmVmIHRvIHRoZQogICBwb3J0IGluIHRoZSBu ZXcgb3IgcHJldmlvdXMgYXRvbWljIHN0YXRlLCB0aGUgY29ubmVjdG9yIHdpbGwgc3RheQogICBy ZWdpc3RlcmVkLgogLSBVc2UgdGhlIHNtYWxsIGNoYW5nZXMgdG8gZHJtX2RwX3B1dF9wb3J0KCkg dG8gYWRkIGV2ZW4gbW9yZSBlcnJvcgogICBjaGVja2luZyB0byBtYWtlIG1pc3VzYWdlIG9mIHRo ZSBoZWxwZXJzIG1vcmUgb2J2aW91cy4gSSBhZGRlZCB0aGlzCiAgIGFmdGVyIGhhdmluZyB0byBj aGFzZSBkb3duIHZhcmlvdXMgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucyB0aGF0CiAgIHN0YXJ0 ZWQgcG9wcGluZyB1cCBmcm9tIHRoZSBuZXcgaGVscGVycyBzbyBubyBvbmUgZWxzZSBoYXMgdG8K ICAgdHJvdWJsZXNob290IHRoYXQuCiAtIE1vdmUgc29tZSBhY2NpZGVudGFsIERSTV9ERUJVR19L TVMoKSBjYWxscyB0byBEUk1fREVCVUdfQVRPTUlDKCkKIC0gVXBkYXRlIGRvY3VtZW50YXRpb24g YWdhaW4sIG5vdGUgdGhhdCBmaW5kL3JlbGVhc2UoKSBzaG91bGQgYm90aCBub3QgYmUKICAgY2Fs bGVkIG9uIHRoZSBzYW1lIHBvcnQgaW4gYSBzaW5nbGUgYXRvbWljIGNoZWNrIHBoYXNlIChidXQg bXVsdGlwbGUKICAgY2FsbHMgdG8gb25lIG9yIHRoZSBvdGhlciBpcyBPSykKCkNoYW5nZXMgc2lu Y2UgdjQ6CiAtIERvbid0IHNraXAgdGhlIGF0b21pYyBjaGVja3MgZm9yIFZDUEkgYWxsb2NhdGlv bnMgaWYgbm8gbmV3IFZDUEkKICAgYWxsb2NhdGlvbnMgaGFwcGVuIGluIGEgc3RhdGUuIFRoaXMg bWFrZXMgdGhlIG5leHQgY2hhbmdlIEknbSBhYm91dAogICB0byBsaXN0IGhlcmUgYSBsb3QgZWFz aWVyIHRvIGltcGxlbWVudC4KIC0gRG9uJ3QgaWdub3JlIFZDUEkgYWxsb2NhdGlvbnMgb24gZGVz dHJveWVkIHBvcnRzLCBpbnN0ZWFkIGVuc3VyZSB0aGF0CiAgIHdoZW4gcG9ydHMgYXJlIGRlc3Ry b3llZCBhbmQgc3RpbGwgaGF2ZSBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZQogICB0b3BvbG9neSBz dGF0ZSwgdGhlIG9ubHkgc3RhdGUgY2hhbmdlcyBhbGxvd2VkIGFyZSByZWxlYXNpbmcgc2FpZAog ICBwb3J0cycgVkNQSS4gVGhpcyBwcmV2ZW50cyBhIHN0YXRlIHdpdGggYSBtaXggb2YgVkNQSSBh bGxvY2F0aW9ucwogICBmcm9tIGRlc3Ryb3llZCBwb3J0cywgYW5kIGFsbG9jYXRpb25zIGZyb20g dmFsaWQgcG9ydHMuCgpDaGFuZ2VzIHNpbmNlIHYzOgogLSBEb24ndCByZWxlYXNlIFZDUEkgYWxs b2NhdGlvbnMgaW4gdGhlIHRvcG9sb2d5IHN0YXRlIGltbWVkaWF0ZWx5IGluCiAgIGRybV9kcF9h dG9taWNfcmVsZWFzZV92Y3BpX3Nsb3RzKCksIGluc3RlYWQgbWFyayB0aGVtIGFzIDAgYW5kIHNr aXAKICAgb3ZlciB0aGVtIGluIGRybV9kcF9tc3RfZHVwbGljYXRlX3N0YXRlKCkuIFRoaXMgbWFr ZXMgaXQgc28KICAgZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpcyBzdGlsbCBp ZGVtcG90ZW50IHdoaWxlIGFsc28KICAgdGhyb3dpbmcgd2FybmluZ3MgaWYgdGhlIGRyaXZlciBt ZXNzZXMgdXAgaXQncyBib29rIGtlZXBpbmcgYW5kIHRyaWVzCiAgIHRvIHJlbGVhc2UgVkNQSSBz bG90cyBvbiBhIHBvcnQgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZS1leGlzdGluZwogICBWQ1BJ IGFsbG9jYXRpb24gLSBkYW52ZXQKIC0gQ2hhbmdlIG1zdF9zdGF0ZS9zdGF0ZSBpbiBzb21lIGRl YnVnZ2luZyBtZXNzYWdlcyB0byAibXN0IHN0YXRlIgoKQ2hhbmdlcyBzaW5jZSB2MjoKIC0gVXNl IGttZW1kdXAoKSBmb3IgZHVwbGljYXRpbmcgTVNUIHN0YXRlIC0gZGFudmV0CiAtIE1vdmUgcG9y dCB2YWxpZGF0aW9uIG91dCBvZiBkdXBsaWNhdGUgc3RhdGUgY2FsbGJhY2sgLSBkYW52ZXQKIC0g SGFuZGxlIGxvb3BpbmcgdGhyb3VnaCBNU1QgdG9wb2xvZ3kgc3RhdGVzIGluCiAgIGRybV9kcF9t c3RfYXRvbWljX2NoZWNrKCkgc28gdGhlIGRyaXZlciBkb2Vzbid0IGhhdmUgdG8gZG8gaXQKIC0g Rml4IGRvY3VtZW50YXRpb24gaW4gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoKQogLSBN b3ZlIHRoZSBhdG9taWMgY2hlY2sgZm9yIGVhY2ggaW5kaXZpZHVhbCB0b3BvbG9neSBzdGF0ZSBp bnRvIGl0J3MKICAgb3duIGZ1bmN0aW9uLCByZWR1Y2VzIGluZGVudGluZwogLSBEb24ndCBjb25z aWRlciAic3RhbGUiIE1TVCBwb3J0cyB3aGVuIGNhbGN1bGF0aW5nIHRoZSBiYW5kd2lkdGgKICAg cmVxdWlyZW1lbnRzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9yaWdpbmFsbHkgd2UgcmVsaWVk IG9uIHRoZQogICBzdGF0ZSBkdXBsaWNhdGlvbiBmdW5jdGlvbnMgdG8gcHJ1bmUgYW55IHN0YWxl IHBvcnRzIGZyb20gdGhlIG5ldwogICBzdGF0ZSwgd2hpY2ggd291bGQgcHJldmVudCB1cyBmcm9t IGluY29ycmVjdGx5IGNvbnNpZGVyaW5nIHRoZWlyCiAgIGJhbmR3aWR0aCByZXF1aXJlbWVudHMg YWxvbmdzaWRlIGxlZ2l0aW1hdGUgbmV3IHBheWxvYWRzLgogLSBBZGQgZnVuY3Rpb24gcmVmZXJl bmNlcyBpbiBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cygpIC0gZGFudmV0CiAtIEFu bm90YXRlIGF0b21pYyBWQ1BJIGFuZCBhdG9taWMgY2hlY2sgZnVuY3Rpb25zIHdpdGggX19tdXN0 X2NoZWNrCiAgIC0gZGFudmV0CgpDaGFuZ2VzIHNpbmNlIHYxOgogLSBEb24ndCB1c2UgdGhlIG5v dy1yZW1vdmVkIC0+YXRvbWljX2NoZWNrKCkgZm9yIHByaXZhdGUgb2JqZWN0cyBob29rLAogICBq dXN0IGdpdmUgZHJpdmVycyBhIGZ1bmN0aW9uIHRvIGNhbGwgdGhlbXNlbHZlcwoKU2lnbmVkLW9m Zi1ieTogTHl1ZGUgUGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KUmV2aWV3ZWQtYnk6IERhbmllbCBW ZXR0ZXIgPGRhbmllbEBmZndsbC5jaD4KQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEByZWRoYXQu Y29tPgpDYzogSmVycnkgWnVvIDxKZXJyeS5adW9AYW1kLmNvbT4KQ2M6IEhhcnJ5IFdlbnRsYW5k IDxoYXJyeS53ZW50bGFuZEBhbWQuY29tPgpDYzogSnVzdG9uIExpIDxqdXN0b24ubGlAaW50ZWwu Y29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fZHBfbXN0X3RvcG9sb2d5LmMgfCAyNDcgKysr KysrKysrKysrKysrKysrKysrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3Bs YXkuYyAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMgICB8ICA1 NCArKystLS0KIGluY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmggICAgICAgfCAgMjMgKyst CiA0IGZpbGVzIGNoYW5nZWQsIDI2NiBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3kuYwppbmRleCBlMzQ5N2JjNDk0OTQuLjg4ZGI2 ZDdlMWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9tc3RfdG9wb2xvZ3ku YworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX21zdF90b3BvbG9neS5jCkBAIC0zMDExLDIx ICszMDExLDQyIEBAIHN0YXRpYyBpbnQgZHJtX2RwX2luaXRfdmNwaShzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKIH0KIAogLyoqCi0gKiBkcm1fZHBfYXRvbWljX2ZpbmRfdmNw aV9zbG90cygpIC0gRmluZCBhbmQgYWRkIHZjcGkgc2xvdHMgdG8gdGhlIHN0YXRlCisgKiBkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIC0gRmluZCBhbmQgYWRkIFZDUEkgc2xvdHMgdG8g dGhlIHN0YXRlCiAgKiBAc3RhdGU6IGdsb2JhbCBhdG9taWMgc3RhdGUKICAqIEBtZ3I6IE1TVCB0 b3BvbG9neSBtYW5hZ2VyIGZvciB0aGUgcG9ydAogICogQHBvcnQ6IHBvcnQgdG8gZmluZCB2Y3Bp IHNsb3RzIGZvcgogICogQHBibjogYmFuZHdpZHRoIHJlcXVpcmVkIGZvciB0aGUgbW9kZSBpbiBQ Qk4KICAqCi0gKiBSRVRVUk5TOgotICogVG90YWwgc2xvdHMgaW4gdGhlIGF0b21pYyBzdGF0ZSBh c3NpZ25lZCBmb3IgdGhpcyBwb3J0IG9yIGVycm9yCisgKiBBbGxvY2F0ZXMgVkNQSSBzbG90cyB0 byBAcG9ydCwgcmVwbGFjaW5nIGFueSBwcmV2aW91cyBWQ1BJIGFsbG9jYXRpb25zIGl0CisgKiBt YXkgaGF2ZSBoYWQuIEFueSBhdG9taWMgZHJpdmVycyB3aGljaCBzdXBwb3J0IE1TVCBtdXN0IGNh bGwgdGhpcyBmdW5jdGlvbgorICogaW4gdGhlaXIgJmRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcy5h dG9taWNfY2hlY2soKSBjYWxsYmFjayB0byBjaGFuZ2UgdGhlCisgKiBjdXJyZW50IFZDUEkgYWxs b2NhdGlvbiBmb3IgdGhlIG5ldyBzdGF0ZSwgYnV0IG9ubHkgd2hlbgorICogJmRybV9jcnRjX3N0 YXRlLm1vZGVfY2hhbmdlZCBvciAmZHJtX2NydGNfc3RhdGUuY29ubmVjdG9yc19jaGFuZ2VkIGlz IHNldAorICogdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCB1c2Vyc3BhY2UgYXBwbGljYXRp b25zIHRoYXQgc3RpbGwgdXNlIHRoZQorICogbGVnYWN5IG1vZGVzZXR0aW5nIFVBUEkuCisgKgor ICogQWxsb2NhdGlvbnMgc2V0IGJ5IHRoaXMgZnVuY3Rpb24gYXJlIG5vdCBjaGVja2VkIGFnYWlu c3QgdGhlIGJhbmR3aWR0aAorICogcmVzdHJhaW50cyBvZiBAbWdyIHVudGlsIHRoZSBkcml2ZXIg Y2FsbHMgZHJtX2RwX21zdF9hdG9taWNfY2hlY2soKS4KKyAqCisgKiBBZGRpdGlvbmFsbHksIGl0 IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZQor ICogQHBvcnQgYXMgbmVlZGVkLiBJdCBpcyBub3QgT0sgaG93ZXZlciwgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIGFuZAorICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSBpbiB0aGUg c2FtZSBhdG9taWMgY2hlY2sgcGhhc2UuCisgKgorICogU2VlIGFsc286CisgKiBkcm1fZHBfYXRv bWljX3JlbGVhc2VfdmNwaV9zbG90cygpCisgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpCisg KgorICogUmV0dXJuczoKKyAqIFRvdGFsIHNsb3RzIGluIHRoZSBhdG9taWMgc3RhdGUgYXNzaWdu ZWQgZm9yIHRoaXMgcG9ydCwgb3IgYSBuZWdhdGl2ZSBlcnJvcgorICogY29kZSBpZiB0aGUgcG9y dCBubyBsb25nZXIgZXhpc3RzCiAgKi8KIGludCBkcm1fZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90 cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJICBzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKIAkJCQkgIHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQs IGludCBwYm4pCiB7CiAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnRvcG9sb2d5 X3N0YXRlOwotCWludCByZXFfc2xvdHM7CisJc3RydWN0IGRybV9kcF92Y3BpX2FsbG9jYXRpb24g KnBvcywgKnZjcGkgPSBOVUxMOworCWludCBwcmV2X3Nsb3RzLCByZXFfc2xvdHMsIHJldDsKIAog CXRvcG9sb2d5X3N0YXRlID0gZHJtX2F0b21pY19nZXRfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRl LCBtZ3IpOwogCWlmIChJU19FUlIodG9wb2xvZ3lfc3RhdGUpKQpAQCAtMzAzNCwyMCArMzA1NSw1 NCBAQCBpbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNf c3RhdGUgKnN0YXRlLAogCXBvcnQgPSBkcm1fZHBfbXN0X3RvcG9sb2d5X2dldF9wb3J0X3ZhbGlk YXRlZChtZ3IsIHBvcnQpOwogCWlmIChwb3J0ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwot CXJlcV9zbG90cyA9IERJVl9ST1VORF9VUChwYm4sIG1nci0+cGJuX2Rpdik7Ci0JRFJNX0RFQlVH X0tNUygidmNwaSBzbG90cyByZXE9JWQsIGF2YWlsPSVkXG4iLAotCQkJcmVxX3Nsb3RzLCB0b3Bv bG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOwogCi0JaWYgKHJlcV9zbG90cyA+IHRvcG9sb2d5X3N0 YXRlLT5hdmFpbF9zbG90cykgewotCQlkcm1fZHBfbXN0X3RvcG9sb2d5X3B1dF9wb3J0KHBvcnQp OwotCQlyZXR1cm4gLUVOT1NQQzsKKwkvKiBGaW5kIHRoZSBjdXJyZW50IGFsbG9jYXRpb24gZm9y IHRoaXMgcG9ydCwgaWYgYW55ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZ0b3BvbG9n eV9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKKwkJaWYgKHBvcy0+cG9ydCA9PSBwb3J0KSB7CisJCQl2 Y3BpID0gcG9zOworCQkJcHJldl9zbG90cyA9IHZjcGktPnZjcGk7CisKKwkJCS8qCisJCQkgKiBU aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIHVubGVzcyB0aGUgZHJpdmVyIHRyaWVzCisJCQkgKiBy ZWxlYXNpbmcgYW5kIGFsbG9jYXRpbmcgdGhlIHNhbWUgVkNQSSBhbGxvY2F0aW9uLAorCQkJICog d2hpY2ggaXMgYW4gZXJyb3IKKwkJCSAqLworCQkJaWYgKFdBUk5fT04oIXByZXZfc2xvdHMpKSB7 CisJCQkJRFJNX0VSUk9SKCJjYW5ub3QgYWxsb2NhdGUgYW5kIHJlbGVhc2UgVkNQSSBvbiBbTVNU IFBPUlQ6JXBdIGluIHRoZSBzYW1lIHN0YXRlXG4iLAorCQkJCQkgIHBvcnQpOworCQkJCXJldHVy biAtRUlOVkFMOworCQkJfQorCisJCQlicmVhazsKKwkJfQogCX0KKwlpZiAoIXZjcGkpCisJCXBy ZXZfc2xvdHMgPSAwOworCisJcmVxX3Nsb3RzID0gRElWX1JPVU5EX1VQKHBibiwgbWdyLT5wYm5f ZGl2KTsKKworCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIFtNU1QgUE9SVDol cF0gVkNQSSAlZCAtPiAlZFxuIiwKKwkJCSBwb3J0LT5jb25uZWN0b3ItPmJhc2UuaWQsIHBvcnQt PmNvbm5lY3Rvci0+bmFtZSwKKwkJCSBwb3J0LCBwcmV2X3Nsb3RzLCByZXFfc2xvdHMpOworCisJ LyogQWRkIHRoZSBuZXcgYWxsb2NhdGlvbiB0byB0aGUgc3RhdGUgKi8KKwlpZiAoIXZjcGkpIHsK KwkJdmNwaSA9IGt6YWxsb2Moc2l6ZW9mKCp2Y3BpKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdmNw aSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQl0b3BvbG9neV9z dGF0ZS0+YXZhaWxfc2xvdHMgLT0gcmVxX3Nsb3RzOwotCURSTV9ERUJVR19LTVMoInZjcGkgc2xv dHMgYXZhaWw9JWQiLCB0b3BvbG9neV9zdGF0ZS0+YXZhaWxfc2xvdHMpOworCQlkcm1fZHBfbXN0 X2dldF9wb3J0X21hbGxvYyhwb3J0KTsKKwkJdmNwaS0+cG9ydCA9IHBvcnQ7CisJCWxpc3RfYWRk KCZ2Y3BpLT5uZXh0LCAmdG9wb2xvZ3lfc3RhdGUtPnZjcGlzKTsKKwl9CisJdmNwaS0+dmNwaSA9 IHJlcV9zbG90czsKIAorCXJldCA9IHJlcV9zbG90czsKK291dDoKIAlkcm1fZHBfbXN0X3RvcG9s b2d5X3B1dF9wb3J0KHBvcnQpOwotCXJldHVybiByZXFfc2xvdHM7CisJcmV0dXJuIHJldDsKIH0K IEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMpOwogCkBAIC0zMDU1 LDMxICszMTEwLDU3IEBAIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMpOwogICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKSAtIFJlbGVhc2UgYWxs b2NhdGVkIHZjcGkgc2xvdHMKICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZQogICogQG1n cjogTVNUIHRvcG9sb2d5IG1hbmFnZXIgZm9yIHRoZSBwb3J0Ci0gKiBAc2xvdHM6IG51bWJlciBv ZiB2Y3BpIHNsb3RzIHRvIHJlbGVhc2UKKyAqIEBwb3J0OiBUaGUgcG9ydCB0byByZWxlYXNlIHRo ZSBWQ1BJIHNsb3RzIGZyb20KICAqCi0gKiBSRVRVUk5TOgotICogMCBpZiBAc2xvdHMgd2VyZSBh ZGRlZCBiYWNrIHRvICZkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLT5hdmFpbF9zbG90cyBvcgot ICogbmVnYXRpdmUgZXJyb3IgY29kZQorICogUmVsZWFzZXMgYW55IFZDUEkgc2xvdHMgdGhhdCBo YXZlIGJlZW4gYWxsb2NhdGVkIHRvIGEgcG9ydCBpbiB0aGUgYXRvbWljCisgKiBzdGF0ZS4gQW55 IGF0b21pYyBkcml2ZXJzIHdoaWNoIHN1cHBvcnQgTVNUIG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9u IGluCisgKiB0aGVpciAmZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MuYXRvbWljX2NoZWNrKCkg Y2FsbGJhY2sgd2hlbiB0aGUKKyAqIGNvbm5lY3RvciB3aWxsIG5vIGxvbmdlciBoYXZlIFZDUEkg YWxsb2NhdGVkIChlLmcuIGJlY2F1c2UgaXQncyBDUlRDIHdhcworICogcmVtb3ZlZCkgd2hlbiBp dCBoYWQgVkNQSSBhbGxvY2F0ZWQgaW4gdGhlIHByZXZpb3VzIGF0b21pYyBzdGF0ZS4KKyAqCisg KiBJdCBpcyBPSyB0byBjYWxsIHRoaXMgZXZlbiBpZiBAcG9ydCBoYXMgYmVlbiByZW1vdmVkIGZy b20gdGhlIHN5c3RlbS4KKyAqIEFkZGl0aW9uYWxseSwgaXQgaXMgT0sgdG8gY2FsbCB0aGlzIGZ1 bmN0aW9uIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lCisgKiBAcG9ydCBhcyBuZWVkZWQuIEl0 IGlzIG5vdCBPSyBob3dldmVyLCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kCisgKiBkcm1fZHBf YXRvbWljX2ZpbmRfdmNwaV9zbG90cygpIG9uIHRoZSBzYW1lIEBwb3J0IGluIGEgc2luZ2xlIGF0 b21pYyBjaGVjaworICogcGhhc2UuCisgKgorICogU2VlIGFsc286CisgKiBkcm1fZHBfYXRvbWlj X2ZpbmRfdmNwaV9zbG90cygpCisgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVjaygpCisgKgorICog UmV0dXJuczoKKyAqIDAgaWYgYWxsIHNsb3RzIGZvciB0aGlzIHBvcnQgd2VyZSBhZGRlZCBiYWNr IHRvCisgKiAmZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZS5hdmFpbF9zbG90cyBvciBuZWdhdGl2 ZSBlcnJvciBjb2RlCiAgKi8KIGludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhz dHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1nciwKLQkJCQkgICAgIGludCBzbG90cykKKwkJCQkgICAgIHN0cnVj dCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lf c3RhdGUgKnRvcG9sb2d5X3N0YXRlOworCXN0cnVjdCBkcm1fZHBfdmNwaV9hbGxvY2F0aW9uICpw b3M7CisJYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAJdG9wb2xvZ3lfc3RhdGUgPSBkcm1fYXRvbWlj X2dldF9tc3RfdG9wb2xvZ3lfc3RhdGUoc3RhdGUsIG1ncik7CiAJaWYgKElTX0VSUih0b3BvbG9n eV9zdGF0ZSkpCiAJCXJldHVybiBQVFJfRVJSKHRvcG9sb2d5X3N0YXRlKTsKIAotCS8qIFdlIGNh bm5vdCByZWx5IG9uIHBvcnQtPnZjcGkubnVtX3Nsb3RzIHRvIHVwZGF0ZQotCSAqIHRvcG9sb2d5 X3N0YXRlLT5hdmFpbF9zbG90cyBhcyB0aGUgcG9ydCBtYXkgbm90IGV4aXN0IGlmIHRoZSBwYXJl bnQKLQkgKiBicmFuY2ggZGV2aWNlIHdhcyB1bnBsdWdnZWQuIFRoaXMgc2hvdWxkIGJlIGZpeGVk IGJ5IHRyYWNraW5nCi0JICogcGVyLXBvcnQgc2xvdCBhbGxvY2F0aW9uIGluIGRybV9kcF9tc3Rf dG9wb2xvZ3lfc3RhdGUgaW5zdGVhZCBvZgotCSAqIGRlcGVuZGluZyBvbiB0aGUgY2FsbGVyIHRv IHRlbGwgdXMgaG93IG1hbnkgc2xvdHMgdG8gcmVsZWFzZS4KLQkgKi8KLQl0b3BvbG9neV9zdGF0 ZS0+YXZhaWxfc2xvdHMgKz0gc2xvdHM7Ci0JRFJNX0RFQlVHX0tNUygidmNwaSBzbG90cyByZWxl YXNlZD0lZCwgYXZhaWw9JWRcbiIsCi0JCQlzbG90cywgdG9wb2xvZ3lfc3RhdGUtPmF2YWlsX3Ns b3RzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJnRvcG9sb2d5X3N0YXRlLT52Y3Bpcywg bmV4dCkgeworCQlpZiAocG9zLT5wb3J0ID09IHBvcnQpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJ CWJyZWFrOworCQl9CisJfQorCWlmIChXQVJOX09OKCFmb3VuZCkpIHsKKwkJRFJNX0VSUk9SKCJu byBWQ1BJIGZvciBbTVNUIFBPUlQ6JXBdIGZvdW5kIGluIG1zdCBzdGF0ZSAlcFxuIiwKKwkJCSAg cG9ydCwgJnRvcG9sb2d5X3N0YXRlLT5iYXNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJ RFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSBWQ1BJICVkIC0+IDBcbiIsIHBvcnQsIHBv cy0+dmNwaSk7CisJaWYgKHBvcy0+dmNwaSkgeworCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxv Yyhwb3J0KTsKKwkJcG9zLT52Y3BpID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MDEs MTUgKzM1ODIsNDEgQEAgc3RhdGljIHZvaWQgZHJtX2RwX2Rlc3Ryb3lfY29ubmVjdG9yX3dvcmso c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogc3RhdGljIHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0 ZSAqCiBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpv YmopCiB7Ci0Jc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGUgKnN0YXRlOworCXN0cnVj dCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlICpzdGF0ZSwgKm9sZF9zdGF0ZSA9CisJCXRvX2Rw X21zdF90b3BvbG9neV9zdGF0ZShvYmotPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxs b2NhdGlvbiAqcG9zLCAqdmNwaTsKIAotCXN0YXRlID0ga21lbWR1cChvYmotPnN0YXRlLCBzaXpl b2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBrbWVtZHVwKG9sZF9zdGF0ZSwgc2l6 ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghc3RhdGUpCiAJCXJldHVybiBOVUxMOwog CiAJX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3RhdGUob2JqLCAm c3RhdGUtPmJhc2UpOwogCisJSU5JVF9MSVNUX0hFQUQoJnN0YXRlLT52Y3Bpcyk7CisKKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KHBvcywgJm9sZF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKKwkJLyogUHJ1 bmUgbGVmdG92ZXIgZnJlZWQgVkNQSSBhbGxvY2F0aW9ucyAqLworCQlpZiAoIXBvcy0+dmNwaSkK KwkJCWNvbnRpbnVlOworCisJCXZjcGkgPSBrbWVtZHVwKHBvcywgc2l6ZW9mKCp2Y3BpKSwgR0ZQ X0tFUk5FTCk7CisJCWlmICghdmNwaSkKKwkJCWdvdG8gZmFpbDsKKworCQlkcm1fZHBfbXN0X2dl dF9wb3J0X21hbGxvYyh2Y3BpLT5wb3J0KTsKKwkJbGlzdF9hZGQoJnZjcGktPm5leHQsICZzdGF0 ZS0+dmNwaXMpOworCX0KKwogCXJldHVybiAmc3RhdGUtPmJhc2U7CisKK2ZhaWw6CisJbGlzdF9m b3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgdmNwaSwgJnN0YXRlLT52Y3BpcywgbmV4dCkgeworCQlk cm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3MtPnBvcnQpOworCQlrZnJlZShwb3MpOworCX0K KwlrZnJlZShzdGF0ZSk7CisKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZHJtX2Rw X21zdF9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKQEAgLTM1MTcs MTAgKzM2MjQsODggQEAgc3RhdGljIHZvaWQgZHJtX2RwX21zdF9kZXN0cm95X3N0YXRlKHN0cnVj dCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwKIHsKIAlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9z dGF0ZSAqbXN0X3N0YXRlID0KIAkJdG9fZHBfbXN0X3RvcG9sb2d5X3N0YXRlKHN0YXRlKTsKKwlz dHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiAqcG9zLCAqdG1wOworCisJbGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHBvcywgdG1wLCAmbXN0X3N0YXRlLT52Y3BpcywgbmV4dCkgeworCQkvKiBX ZSBvbmx5IGtlZXAgcmVmZXJlbmNlcyB0byBwb3J0cyB3aXRoIG5vbi16ZXJvIFZDUElzICovCisJ CWlmIChwb3MtPnZjcGkpCisJCQlkcm1fZHBfbXN0X3B1dF9wb3J0X21hbGxvYyhwb3MtPnBvcnQp OworCQlrZnJlZShwb3MpOworCX0KIAogCWtmcmVlKG1zdF9zdGF0ZSk7CiB9CiAKK3N0YXRpYyBp bmxpbmUgaW50Citkcm1fZHBfbXN0X2F0b21pY19jaGVja190b3BvbG9neV9zdGF0ZShzdHJ1Y3Qg ZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKKwkJCQkgICAgICAgc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUgKm1zdF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxs b2NhdGlvbiAqdmNwaTsKKwlpbnQgYXZhaWxfc2xvdHMgPSA2MzsKKworCWxpc3RfZm9yX2VhY2hf ZW50cnkodmNwaSwgJm1zdF9zdGF0ZS0+dmNwaXMsIG5leHQpIHsKKwkJLyogUmVsZWFzaW5nIFZD UEkgaXMgYWx3YXlzIE9LLWV2ZW4gaWYgdGhlIHBvcnQgaXMgZ29uZSAqLworCQlpZiAoIXZjcGkt PnZjcGkpIHsKKwkJCURSTV9ERUJVR19BVE9NSUMoIltNU1QgUE9SVDolcF0gcmVsZWFzZXMgYWxs IFZDUEkgc2xvdHNcbiIsCisJCQkJCSB2Y3BpLT5wb3J0KTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJRFJNX0RFQlVHX0FUT01JQygiW01TVCBQT1JUOiVwXSByZXF1aXJlcyAlZCB2Y3BpIHNsb3Rz XG4iLAorCQkJCSB2Y3BpLT5wb3J0LCB2Y3BpLT52Y3BpKTsKKworCQlhdmFpbF9zbG90cyAtPSB2 Y3BpLT52Y3BpOworCQlpZiAoYXZhaWxfc2xvdHMgPCAwKSB7CisJCQlEUk1fREVCVUdfQVRPTUlD KCJbTVNUIFBPUlQ6JXBdIG5vdCBlbm91Z2ggVkNQSSBzbG90cyBpbiBtc3Qgc3RhdGUgJXAgKGF2 YWlsPSVkKVxuIiwKKwkJCQkJIHZjcGktPnBvcnQsIG1zdF9zdGF0ZSwKKwkJCQkJIGF2YWlsX3Ns b3RzICsgdmNwaS0+dmNwaSk7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCX0KKwlEUk1fREVC VUdfQVRPTUlDKCJbTVNUIE1HUjolcF0gbXN0IHN0YXRlICVwIFZDUEkgYXZhaWw9JWQgdXNlZD0l ZFxuIiwKKwkJCSBtZ3IsIG1zdF9zdGF0ZSwgYXZhaWxfc2xvdHMsCisJCQkgNjMgLSBhdmFpbF9z bG90cyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBkcm1fZHBfbXN0X2F0b21pY19jaGVj ayAtIENoZWNrIHRoYXQgdGhlIG5ldyBzdGF0ZSBvZiBhbiBNU1QgdG9wb2xvZ3kgaW4gYW4KKyAq IGF0b21pYyB1cGRhdGUgaXMgdmFsaWQKKyAqIEBzdGF0ZTogUG9pbnRlciB0byB0aGUgbmV3ICZz dHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZQorICoKKyAqIENoZWNrcyB0aGUgZ2l2ZW4g dG9wb2xvZ3kgc3RhdGUgZm9yIGFuIGF0b21pYyB1cGRhdGUgdG8gZW5zdXJlIHRoYXQgaXQncwor ICogdmFsaWQuIFRoaXMgaW5jbHVkZXMgY2hlY2tpbmcgd2hldGhlciB0aGVyZSdzIGVub3VnaCBi YW5kd2lkdGggdG8gc3VwcG9ydAorICogdGhlIG5ldyBWQ1BJIGFsbG9jYXRpb25zIGluIHRoZSBh dG9taWMgdXBkYXRlLgorICoKKyAqIEFueSBhdG9taWMgZHJpdmVycyBzdXBwb3J0aW5nIERQIE1T VCBtdXN0IG1ha2Ugc3VyZSB0byBjYWxsIHRoaXMgYWZ0ZXIKKyAqIGNoZWNraW5nIHRoZSByZXN0 IG9mIHRoZWlyIHN0YXRlIGluIHRoZWlyCisgKiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzLmF0b21p Y19jaGVjaygpIGNhbGxiYWNrLgorICoKKyAqIFNlZSBhbHNvOgorICogZHJtX2RwX2F0b21pY19m aW5kX3ZjcGlfc2xvdHMoKQorICogZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoKQor ICoKKyAqIFJldHVybnM6CisgKgorICogMCBpZiB0aGUgbmV3IHN0YXRlIGlzIHZhbGlkLCBuZWdh dGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRybV9kcF9tc3RfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1ncjsKKwlzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSAq bXN0X3N0YXRlOworCWludCBpLCByZXQgPSAwOworCisJZm9yX2VhY2hfbmV3X21zdF9tZ3JfaW5f c3RhdGUoc3RhdGUsIG1nciwgbXN0X3N0YXRlLCBpKSB7CisJCXJldCA9IGRybV9kcF9tc3RfYXRv bWljX2NoZWNrX3RvcG9sb2d5X3N0YXRlKG1nciwgbXN0X3N0YXRlKTsKKwkJaWYgKHJldCkKKwkJ CWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kcF9tc3Rf YXRvbWljX2NoZWNrKTsKKwogY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIGRy bV9kcF9tc3RfdG9wb2xvZ3lfc3RhdGVfZnVuY3MgPSB7CiAJLmF0b21pY19kdXBsaWNhdGVfc3Rh dGUgPSBkcm1fZHBfbXN0X2R1cGxpY2F0ZV9zdGF0ZSwKIAkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUg PSBkcm1fZHBfbXN0X2Rlc3Ryb3lfc3RhdGUsCkBAIC0zNjAzLDkgKzM3ODgsNyBAQCBpbnQgZHJt X2RwX21zdF90b3BvbG9neV9tZ3JfaW5pdChzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3Ig Km1nciwKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAltc3Rfc3RhdGUtPm1nciA9IG1ncjsKLQotCS8q IG1heC4gdGltZSBzbG90cyAtIG9uZSBzbG90IGZvciBNVFAgaGVhZGVyICovCi0JbXN0X3N0YXRl LT5hdmFpbF9zbG90cyA9IDYzOworCUlOSVRfTElTVF9IRUFEKCZtc3Rfc3RhdGUtPnZjcGlzKTsK IAogCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfaW5pdChkZXYsICZtZ3ItPmJhc2UsCiAJCQkJICAg ICZtc3Rfc3RhdGUtPmJhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKaW5kZXgg MWNjNDQxZjA2YzczLi41ZGMwZGU4OWM0OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNw bGF5LmMKQEAgLTEyNzA5LDYgKzEyNzA5LDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2No ZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgICJbbW9kZXNldF0iIDogIltm YXN0c2V0XSIpOwogCX0KIAorCXJldCA9IGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0YXRlKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGFueV9tcykgewogCQlyZXQgPSBpbnRl bF9tb2Rlc2V0X2NoZWNrcyhzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2RwX21zdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHBfbXN0LmMK aW5kZXggY2RjZTBjNTE5ZjlhLi4zZjgzNDI5MzMzYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2RwX21zdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2RwX21zdC5jCkBAIC00MCw4ICs0MCwxMiBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29t cHV0ZV9jb25maWcoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciA9IGNvbm5fc3RhdGUtPmNvbm5lY3RvcjsKIAl2b2lkICpwb3J0 ID0gdG9faW50ZWxfY29ubmVjdG9yKGNvbm5lY3RvciktPnBvcnQ7CiAJc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlID0gcGlwZV9jb25maWctPmJhc2Uuc3RhdGU7CisJc3RydWN0IGRybV9j cnRjICpjcnRjID0gcGlwZV9jb25maWctPmJhc2UuY3J0YzsKKwlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKm9sZF9jcnRjX3N0YXRlID0KKwkJZHJtX2F0b21pY19nZXRfb2xkX2NydGNfc3RhdGUoc3Rh dGUsIGNydGMpOwogCWludCBicHA7Ci0JaW50IGxhbmVfY291bnQsIHNsb3RzID0gMDsKKwlpbnQg bGFuZV9jb3VudCwgc2xvdHMgPQorCQl0b19pbnRlbF9jcnRjX3N0YXRlKG9sZF9jcnRjX3N0YXRl KS0+ZHBfbV9uLnR1OwogCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9t b2RlID0gJnBpcGVfY29uZmlnLT5iYXNlLmFkanVzdGVkX21vZGU7CiAJaW50IG1zdF9wYm47CiAJ Ym9vbCBjb25zdGFudF9uID0gZHJtX2RwX2hhc19xdWlyaygmaW50ZWxfZHAtPmRlc2MsCkBAIC0x MDYsMzUgKzExMCwzOSBAQCBzdGF0aWMgYm9vbCBpbnRlbF9kcF9tc3RfY29tcHV0ZV9jb25maWco c3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIsCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRp YyBpbnQgaW50ZWxfZHBfbXN0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yLAotCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqbmV3X2Nvbm5fc3RhdGUpCitz dGF0aWMgaW50CitpbnRlbF9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsCisJCQkgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9z dGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBuZXdfY29ubl9zdGF0 ZS0+c3RhdGU7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKm9sZF9jb25uX3N0YXRlOwot CXN0cnVjdCBkcm1fY3J0YyAqb2xkX2NydGM7CisJc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg Km9sZF9jb25uX3N0YXRlID0KKwkJZHJtX2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShz dGF0ZSwgY29ubmVjdG9yKTsKKwlzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICppbnRlbF9jb25uZWN0 b3IgPQorCQl0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2NydGMg Km5ld19jcnRjID0gbmV3X2Nvbm5fc3RhdGUtPmNydGM7CiAJc3RydWN0IGRybV9jcnRjX3N0YXRl ICpjcnRjX3N0YXRlOwotCWludCBzbG90cywgcmV0ID0gMDsKKwlzdHJ1Y3QgZHJtX2RwX21zdF90 b3BvbG9neV9tZ3IgKm1ncjsKKwlpbnQgcmV0ID0gMDsKIAotCW9sZF9jb25uX3N0YXRlID0gZHJt X2F0b21pY19nZXRfb2xkX2Nvbm5lY3Rvcl9zdGF0ZShzdGF0ZSwgY29ubmVjdG9yKTsKLQlvbGRf Y3J0YyA9IG9sZF9jb25uX3N0YXRlLT5jcnRjOwotCWlmICghb2xkX2NydGMpCi0JCXJldHVybiBy ZXQ7Ci0KLQljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2NydGNfc3RhdGUoc3RhdGUs IG9sZF9jcnRjKTsKLQlzbG90cyA9IHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRw X21fbi50dTsKLQlpZiAoZHJtX2F0b21pY19jcnRjX25lZWRzX21vZGVzZXQoY3J0Y19zdGF0ZSkg JiYgc2xvdHMgPiAwKSB7Ci0JCXN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X21nciAqbWdyOwot CQlzdHJ1Y3QgZHJtX2VuY29kZXIgKm9sZF9lbmNvZGVyOworCWlmICghb2xkX2Nvbm5fc3RhdGUt PmNydGMpCisJCXJldHVybiAwOwogCi0JCW9sZF9lbmNvZGVyID0gb2xkX2Nvbm5fc3RhdGUtPmJl c3RfZW5jb2RlcjsKLQkJbWdyID0gJmVuY190b19tc3Qob2xkX2VuY29kZXIpLT5wcmltYXJ5LT5k cC5tc3RfbWdyOworCS8qIFdlIG9ubHkgd2FudCB0byBmcmVlIFZDUEkgaWYgdGhpcyBzdGF0ZSBk aXNhYmxlcyB0aGUgQ1JUQyBvbiB0aGlzCisJICogY29ubmVjdG9yCisJICovCisJaWYgKG5ld19j cnRjKSB7CisJCWNydGNfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0 ZSwgbmV3X2NydGMpOwogCi0JCXJldCA9IGRybV9kcF9hdG9taWNfcmVsZWFzZV92Y3BpX3Nsb3Rz KHN0YXRlLCBtZ3IsIHNsb3RzKTsKLQkJaWYgKHJldCkKLQkJCURSTV9ERUJVR19LTVMoImZhaWxl ZCByZWxlYXNpbmcgJWQgdmNwaSBzbG90czolZFxuIiwgc2xvdHMsIHJldCk7Ci0JCWVsc2UKLQkJ CXRvX2ludGVsX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSktPmRwX21fbi50dSA9IDA7CisJCWlmICgh Y3J0Y19zdGF0ZSB8fAorCQkgICAgIWRybV9hdG9taWNfY3J0Y19uZWVkc19tb2Rlc2V0KGNydGNf c3RhdGUpIHx8CisJCSAgICBjcnRjX3N0YXRlLT5lbmFibGUpCisJCQlyZXR1cm4gMDsKIAl9CisK KwltZ3IgPSAmZW5jX3RvX21zdChvbGRfY29ubl9zdGF0ZS0+YmVzdF9lbmNvZGVyKS0+cHJpbWFy eS0+ZHAubXN0X21ncjsKKwlyZXQgPSBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhz dGF0ZSwgbWdyLAorCQkJCQkgICAgICAgaW50ZWxfY29ubmVjdG9yLT5wb3J0KTsKKwogCXJldHVy biByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgg Yi9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCmluZGV4IGZhNTMzNTcxYjE2Yy4uOGM5 N2E1ZjkyYzQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZHBfbXN0X2hlbHBlci5oCisr KyBiL2luY2x1ZGUvZHJtL2RybV9kcF9tc3RfaGVscGVyLmgKQEAgLTQyNSw5ICs0MjUsMTUgQEAg c3RydWN0IGRybV9kcF9wYXlsb2FkIHsKIAogI2RlZmluZSB0b19kcF9tc3RfdG9wb2xvZ3lfc3Rh dGUoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X3N0YXRlLCBi YXNlKQogCitzdHJ1Y3QgZHJtX2RwX3ZjcGlfYWxsb2NhdGlvbiB7CisJc3RydWN0IGRybV9kcF9t c3RfcG9ydCAqcG9ydDsKKwlpbnQgdmNwaTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5leHQ7Cit9Owor CiBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9zdGF0ZSB7CiAJc3RydWN0IGRybV9wcml2YXRl X3N0YXRlIGJhc2U7Ci0JaW50IGF2YWlsX3Nsb3RzOworCXN0cnVjdCBsaXN0X2hlYWQgdmNwaXM7 CiAJc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3I7CiB9OwogCkBAIC02MzksMTQg KzY0NSwxNyBAQCBpbnQgX19tdXN0X2NoZWNrCiBkcm1fZHBfbXN0X3RvcG9sb2d5X21ncl9yZXN1 bWUoc3RydWN0IGRybV9kcF9tc3RfdG9wb2xvZ3lfbWdyICptZ3IpOwogc3RydWN0IGRybV9kcF9t c3RfdG9wb2xvZ3lfc3RhdGUgKmRybV9hdG9taWNfZ2V0X21zdF90b3BvbG9neV9zdGF0ZShzdHJ1 Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUsCiAJCQkJCQkJCSAgICBzdHJ1Y3QgZHJtX2RwX21z dF90b3BvbG9neV9tZ3IgKm1ncik7Ci1pbnQgZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xvdHMo c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAotCQkJCSAgc3RydWN0IGRybV9kcF9tc3Rf dG9wb2xvZ3lfbWdyICptZ3IsCi0JCQkJICBzdHJ1Y3QgZHJtX2RwX21zdF9wb3J0ICpwb3J0LCBp bnQgcGJuKTsKLWludCBkcm1fZHBfYXRvbWljX3JlbGVhc2VfdmNwaV9zbG90cyhzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGUsCi0JCQkJICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9n eV9tZ3IgKm1nciwKLQkJCQkgICAgIGludCBzbG90cyk7CitpbnQgX19tdXN0X2NoZWNrCitkcm1f ZHBfYXRvbWljX2ZpbmRfdmNwaV9zbG90cyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs CisJCQkgICAgICBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKKwkJCSAgICAg IHN0cnVjdCBkcm1fZHBfbXN0X3BvcnQgKnBvcnQsIGludCBwYm4pOworaW50IF9fbXVzdF9jaGVj aworZHJtX2RwX2F0b21pY19yZWxlYXNlX3ZjcGlfc2xvdHMoc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlLAorCQkJCSBzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKKwkJ CQkgc3RydWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCk7CiBpbnQgZHJtX2RwX3NlbmRfcG93ZXJf dXBkb3duX3BoeShzdHJ1Y3QgZHJtX2RwX21zdF90b3BvbG9neV9tZ3IgKm1nciwKIAkJCQkgc3Ry dWN0IGRybV9kcF9tc3RfcG9ydCAqcG9ydCwgYm9vbCBwb3dlcl91cCk7CitpbnQgX19tdXN0X2No ZWNrIGRybV9kcF9tc3RfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0 ZSk7CiAKIHZvaWQgZHJtX2RwX21zdF9nZXRfcG9ydF9tYWxsb2Moc3RydWN0IGRybV9kcF9tc3Rf cG9ydCAqcG9ydCk7CiB2b2lkIGRybV9kcF9tc3RfcHV0X3BvcnRfbWFsbG9jKHN0cnVjdCBkcm1f ZHBfbXN0X3BvcnQgKnBvcnQpOwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK