From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [PATCH 02/59] drm/i915: Make intel_logical_ring_begin() static Date: Thu, 19 Mar 2015 12:30:07 +0000 Message-ID: <1426768264-16996-3-git-send-email-John.C.Harrison@Intel.com> References: <1426768264-16996-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 04E756EA02 for ; Thu, 19 Mar 2015 05:31:08 -0700 (PDT) In-Reply-To: <1426768264-16996-1-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KClRoZSBvbmx5 IHVzYWdlIG9mIGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbigpIGlzIHdpdGhpbiBpbnRlbF9scmMu YyBzbyBpdCBjYW4gYmUKbWFkZSBzdGF0aWMuIFRvIGF2b2lkIGEgZm9yd2FyZCBkZWNsYXJhdGlv biBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLCBpdCBhbmQgYnVuY2gKb2Ygb3RoZXIgZnVuY3Rpb25z IGhhdmUgYmVlbiBzaHVmZmxlZCB1cHdhcmRzLgoKRm9yOiBWSVotNTExNQpTaWduZWQtb2ZmLWJ5 OiBKb2huIEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIHwgIDQ3NCArKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmggfCAgICAzIC0K IDIgZmlsZXMgY2hhbmdlZCwgMjM3IGluc2VydGlvbnMoKyksIDI0MCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCmluZGV4IGZjYjA3NGIuLmNhZDQzMDAgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2xyYy5jCkBAIC02MTEsNiArNjExLDI0MyBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0 c19tb3ZlX3RvX2dwdShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKIAlyZXR1cm4g bG9naWNhbF9yaW5nX2ludmFsaWRhdGVfYWxsX2NhY2hlcyhyaW5nYnVmLCBjdHgpOwogfQogCitz dGF0aWMgaW50IGxvZ2ljYWxfcmluZ19hbGxvY19yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmcsCisJCQkJICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2YXRlID0gcmluZy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJ aWYgKHJpbmctPm91dHN0YW5kaW5nX2xhenlfcmVxdWVzdCkKKwkJcmV0dXJuIDA7CisKKwlyZXF1 ZXN0ID0ga3phbGxvYyhzaXplb2YoKnJlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAocmVxdWVz dCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjdHggIT0gcmluZy0+ZGVmYXVs dF9jb250ZXh0KSB7CisJCXJldCA9IGludGVsX2xyX2NvbnRleHRfcGluKHJpbmcsIGN0eCk7CisJ CWlmIChyZXQpIHsKKwkJCWtmcmVlKHJlcXVlc3QpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0K KworCWtyZWZfaW5pdCgmcmVxdWVzdC0+cmVmKTsKKwlyZXF1ZXN0LT5yaW5nID0gcmluZzsKKwly ZXF1ZXN0LT51bmlxID0gZGV2X3ByaXZhdGUtPnJlcXVlc3RfdW5pcSsrOworCisJcmV0ID0gaTkx NV9nZW1fZ2V0X3NlcW5vKHJpbmctPmRldiwgJnJlcXVlc3QtPnNlcW5vKTsKKwlpZiAocmV0KSB7 CisJCWludGVsX2xyX2NvbnRleHRfdW5waW4ocmluZywgY3R4KTsKKwkJa2ZyZWUocmVxdWVzdCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmVxdWVzdC0+Y3R4ID0gY3R4OworCWk5MTVfZ2VtX2Nv bnRleHRfcmVmZXJlbmNlKHJlcXVlc3QtPmN0eCk7CisJcmVxdWVzdC0+cmluZ2J1ZiA9IGN0eC0+ ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmOworCisJcmluZy0+b3V0c3RhbmRpbmdfbGF6eV9yZXF1 ZXN0ID0gcmVxdWVzdDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dpY2FsX3Jpbmdf d2FpdF9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAorCQkJCSAgICAg aW50IGJ5dGVzKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5y aW5nOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKKwlpbnQgcmV0Owor CisJaWYgKGludGVsX3Jpbmdfc3BhY2UocmluZ2J1ZikgPj0gYnl0ZXMpCisJCXJldHVybiAwOwor CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZXF1ZXN0LCAmcmluZy0+cmVxdWVzdF9saXN0LCBsaXN0 KSB7CisJCS8qCisJCSAqIFRoZSByZXF1ZXN0IHF1ZXVlIGlzIHBlci1lbmdpbmUsIHNvIGNhbiBj b250YWluIHJlcXVlc3RzCisJCSAqIGZyb20gbXVsdGlwbGUgcmluZ2J1ZmZlcnMuIEhlcmUsIHdl IG11c3QgaWdub3JlIGFueSB0aGF0CisJCSAqIGFyZW4ndCBmcm9tIHRoZSByaW5nYnVmZmVyIHdl J3JlIGNvbnNpZGVyaW5nLgorCQkgKi8KKwkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCA9IHJl cXVlc3QtPmN0eDsKKwkJaWYgKGN0eC0+ZW5naW5lW3JpbmctPmlkXS5yaW5nYnVmICE9IHJpbmdi dWYpCisJCQljb250aW51ZTsKKworCQkvKiBXb3VsZCBjb21wbGV0aW9uIG9mIHRoaXMgcmVxdWVz dCBmcmVlIGVub3VnaCBzcGFjZT8gKi8KKwkJaWYgKF9faW50ZWxfcmluZ19zcGFjZShyZXF1ZXN0 LT50YWlsLCByaW5nYnVmLT50YWlsLAorCQkJCSAgICAgICByaW5nYnVmLT5zaXplKSA+PSBieXRl cykgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoJnJlcXVlc3QtPmxpc3QgPT0gJnJpbmct PnJlcXVlc3RfbGlzdCkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlyZXQgPSBpOTE1X3dhaXRfcmVx dWVzdChyZXF1ZXN0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaTkxNV9nZW1fcmV0 aXJlX3JlcXVlc3RzX3JpbmcocmluZyk7CisKKwlyZXR1cm4gaW50ZWxfcmluZ19zcGFjZShyaW5n YnVmKSA+PSBieXRlcyA/IDAgOiAtRU5PU1BDOworfQorCisvKgorICogaW50ZWxfbG9naWNhbF9y aW5nX2FkdmFuY2VfYW5kX3N1Ym1pdCgpIC0gYWR2YW5jZSB0aGUgdGFpbCBhbmQgc3VibWl0IHRo ZSB3b3JrbG9hZAorICogQHJpbmdidWY6IExvZ2ljYWwgUmluZ2J1ZmZlciB0byBhZHZhbmNlLgor ICoKKyAqIFRoZSB0YWlsIGlzIHVwZGF0ZWQgaW4gb3VyIGxvZ2ljYWwgcmluZ2J1ZmZlciBzdHJ1 Y3QsIG5vdCBpbiB0aGUgYWN0dWFsIGNvbnRleHQuIFdoYXQKKyAqIHJlYWxseSBoYXBwZW5zIGR1 cmluZyBzdWJtaXNzaW9uIGlzIHRoYXQgdGhlIGNvbnRleHQgYW5kIGN1cnJlbnQgdGFpbCB3aWxs IGJlIHBsYWNlZAorICogb24gYSBxdWV1ZSB3YWl0aW5nIGZvciB0aGUgRUxTUCB0byBiZSByZWFk eSB0byBhY2NlcHQgYSBuZXcgY29udGV4dCBzdWJtaXNzaW9uLiBBdCB0aGF0CisgKiBwb2ludCwg dGhlIHRhaWwgKmluc2lkZSogdGhlIGNvbnRleHQgaXMgdXBkYXRlZCBhbmQgdGhlIEVMU1Agd3Jp dHRlbiB0by4KKyAqLworc3RhdGljIHZvaWQKK2ludGVsX2xvZ2ljYWxfcmluZ19hZHZhbmNlX2Fu ZF9zdWJtaXQoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCisJCQkJICAgICAgc3Ry dWN0IGludGVsX2NvbnRleHQgKmN0eCwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl cXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdi dWYtPnJpbmc7CisKKwlpbnRlbF9sb2dpY2FsX3JpbmdfYWR2YW5jZShyaW5nYnVmKTsKKworCWlm IChpbnRlbF9yaW5nX3N0b3BwZWQocmluZykpCisJCXJldHVybjsKKworCWV4ZWNsaXN0c19jb250 ZXh0X3F1ZXVlKHJpbmcsIGN0eCwgcmluZ2J1Zi0+dGFpbCwgcmVxdWVzdCk7Cit9CisKK3N0YXRp YyBpbnQgbG9naWNhbF9yaW5nX3dhaXRfZm9yX3NwYWNlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVy ICpyaW5nYnVmLAorCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LAorCQkJCSAg ICAgICBpbnQgYnl0ZXMpCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdi dWYtPnJpbmc7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVk IGxvbmcgZW5kOworCWludCByZXQ7CisKKwlyZXQgPSBsb2dpY2FsX3Jpbmdfd2FpdF9yZXF1ZXN0 KHJpbmdidWYsIGJ5dGVzKTsKKwlpZiAocmV0ICE9IC1FTk9TUEMpCisJCXJldHVybiByZXQ7CisK KwkvKiBGb3JjZSB0aGUgY29udGV4dCBzdWJtaXNzaW9uIGluIGNhc2Ugd2UgaGF2ZSBiZWVuIHNr aXBwaW5nIGl0ICovCisJaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2VfYW5kX3N1Ym1pdChyaW5n YnVmLCBjdHgsIE5VTEwpOworCisJLyogV2l0aCBHRU0gdGhlIGhhbmdjaGVjayB0aW1lciBzaG91 bGQga2ljayB1cyBvdXQgb2YgdGhlIGxvb3AsCisJICogbGVhdmluZyBpdCBlYXJseSBydW5zIHRo ZSByaXNrIG9mIGNvcnJ1cHRpbmcgR0VNIHN0YXRlIChkdWUKKwkgKiB0byBydW5uaW5nIG9uIGFs bW9zdCB1bnRlc3RlZCBjb2RlcGF0aHMpLiBCdXQgb24gcmVzdW1lCisJICogdGltZXJzIGRvbid0 IHdvcmsgeWV0LCBzbyBwcmV2ZW50IGEgY29tcGxldGUgaGFuZyBpbiB0aGF0CisJICogY2FzZSBi eSBjaG9vc2luZyBhbiBpbnNhbmVseSBsYXJnZSB0aW1lb3V0LiAqLworCWVuZCA9IGppZmZpZXMg KyA2MCAqIEhaOworCisJcmV0ID0gMDsKKwlkbyB7CisJCWlmIChpbnRlbF9yaW5nX3NwYWNlKHJp bmdidWYpID49IGJ5dGVzKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDEpOworCisJCWlmIChkZXZf cHJpdi0+bW0uaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJ cmV0ID0gLUVSRVNUQVJUU1lTOworCQkJYnJlYWs7CisJCX0KKworCQlyZXQgPSBpOTE1X2dlbV9j aGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJvciwKKwkJCQkJICAgZGV2X3ByaXYtPm1tLmlu dGVycnVwdGlibGUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVfYWZ0ZXIo amlmZmllcywgZW5kKSkgeworCQkJcmV0ID0gLUVCVVNZOworCQkJYnJlYWs7CisJCX0KKwl9IHdo aWxlICgxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3dy YXBfYnVmZmVyKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAorCQkJCSAgICBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY3R4KQoreworCXVpbnQzMl90IF9faW9tZW0gKnZpcnQ7CisJaW50 IHJlbSA9IHJpbmdidWYtPnNpemUgLSByaW5nYnVmLT50YWlsOworCisJaWYgKHJpbmdidWYtPnNw YWNlIDwgcmVtKSB7CisJCWludCByZXQgPSBsb2dpY2FsX3Jpbmdfd2FpdF9mb3Jfc3BhY2Uocmlu Z2J1ZiwgY3R4LCByZW0pOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXZp cnQgPSByaW5nYnVmLT52aXJ0dWFsX3N0YXJ0ICsgcmluZ2J1Zi0+dGFpbDsKKwlyZW0gLz0gNDsK Kwl3aGlsZSAocmVtLS0pCisJCWlvd3JpdGUzMihNSV9OT09QLCB2aXJ0KyspOworCisJcmluZ2J1 Zi0+dGFpbCA9IDA7CisJaW50ZWxfcmluZ191cGRhdGVfc3BhY2UocmluZ2J1Zik7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBsb2dpY2FsX3JpbmdfcHJlcGFyZShzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZ2J1ZiwKKwkJCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4LCBpbnQg Ynl0ZXMpCit7CisJaW50IHJldDsKKworCWlmICh1bmxpa2VseShyaW5nYnVmLT50YWlsICsgYnl0 ZXMgPiByaW5nYnVmLT5lZmZlY3RpdmVfc2l6ZSkpIHsKKwkJcmV0ID0gbG9naWNhbF9yaW5nX3dy YXBfYnVmZmVyKHJpbmdidWYsIGN0eCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJu IHJldDsKKwl9CisKKwlpZiAodW5saWtlbHkocmluZ2J1Zi0+c3BhY2UgPCBieXRlcykpIHsKKwkJ cmV0ID0gbG9naWNhbF9yaW5nX3dhaXRfZm9yX3NwYWNlKHJpbmdidWYsIGN0eCwgYnl0ZXMpOwor CQlpZiAodW5saWtlbHkocmV0KSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKKy8qKgorICogaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKCkgLSBwcmVwYXJlIHRoZSBsb2dp Y2FsIHJpbmdidWZmZXIgdG8gYWNjZXB0IHNvbWUgY29tbWFuZHMKKyAqCisgKiBAcmluZ2J1Zjog TG9naWNhbCByaW5nYnVmZmVyLgorICogQG51bV9kd29yZHM6IG51bWJlciBvZiBEV09SRHMgdGhh dCB3ZSBwbGFuIHRvIHdyaXRlIHRvIHRoZSByaW5nYnVmZmVyLgorICoKKyAqIFRoZSByaW5nYnVm ZmVyIG1pZ2h0IG5vdCBiZSByZWFkeSB0byBhY2NlcHQgdGhlIGNvbW1hbmRzIHJpZ2h0IGF3YXkg KG1heWJlIGl0IG5lZWRzIHRvCisgKiBiZSB3cmFwcGVkLCBvciB3YWl0IGEgYml0IGZvciB0aGUg dGFpbCB0byBiZSB1cGRhdGVkKS4gVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIHRoYXQKKyAq IGFuZCBhbHNvIHByZWFsbG9jYXRlcyBhIHJlcXVlc3QgKGV2ZXJ5IHdvcmtsb2FkIHN1Ym1pc3Np b24gaXMgc3RpbGwgbWVkaWF0ZWQgdGhyb3VnaAorICogcmVxdWVzdHMsIHNhbWUgYXMgaXQgZGlk IHdpdGggbGVnYWN5IHJpbmdidWZmZXIgc3VibWlzc2lvbikuCisgKgorICogUmV0dXJuOiBub24t emVybyBpZiB0aGUgcmluZ2J1ZmZlciBpcyBub3QgcmVhZHkgdG8gYmUgd3JpdHRlbiB0by4KKyAq Lworc3RhdGljIGludCBpbnRlbF9sb2dpY2FsX3JpbmdfYmVnaW4oc3RydWN0IGludGVsX3Jpbmdi dWZmZXIgKnJpbmdidWYsCisJCQkJICAgIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgsIGludCBu dW1fZHdvcmRzKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcgPSByaW5nYnVmLT5y aW5nOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByaW5nLT5kZXY7CisJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJ cmV0ID0gaTkxNV9nZW1fY2hlY2tfd2VkZ2UoJmRldl9wcml2LT5ncHVfZXJyb3IsCisJCQkJICAg ZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisK KwlyZXQgPSBsb2dpY2FsX3JpbmdfcHJlcGFyZShyaW5nYnVmLCBjdHgsIG51bV9kd29yZHMgKiBz aXplb2YodWludDMyX3QpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogUHJlYWxs b2NhdGUgdGhlIG9sciBiZWZvcmUgdG91Y2hpbmcgdGhlIHJpbmcgKi8KKwlyZXQgPSBsb2dpY2Fs X3JpbmdfYWxsb2NfcmVxdWVzdChyaW5nLCBjdHgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlyaW5nYnVmLT5zcGFjZSAtPSBudW1fZHdvcmRzICogc2l6ZW9mKHVpbnQzMl90KTsKKwly ZXR1cm4gMDsKK30KKwogLyoqCiAgKiBleGVjbGlzdHNfc3VibWlzc2lvbigpIC0gc3VibWl0IGEg YmF0Y2hidWZmZXIgZm9yIGV4ZWN1dGlvbiwgRXhlY2xpc3RzIHN0eWxlCiAgKiBAZGV2OiBEUk0g ZGV2aWNlLgpAQCAtNzg3LDMwICsxMDI0LDYgQEAgaW50IGxvZ2ljYWxfcmluZ19mbHVzaF9hbGxf Y2FjaGVzKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAogCXJldHVybiAwOwogfQog Ci0vKgotICogaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFuY2VfYW5kX3N1Ym1pdCgpIC0gYWR2YW5j ZSB0aGUgdGFpbCBhbmQgc3VibWl0IHRoZSB3b3JrbG9hZAotICogQHJpbmdidWY6IExvZ2ljYWwg UmluZ2J1ZmZlciB0byBhZHZhbmNlLgotICoKLSAqIFRoZSB0YWlsIGlzIHVwZGF0ZWQgaW4gb3Vy IGxvZ2ljYWwgcmluZ2J1ZmZlciBzdHJ1Y3QsIG5vdCBpbiB0aGUgYWN0dWFsIGNvbnRleHQuIFdo YXQKLSAqIHJlYWxseSBoYXBwZW5zIGR1cmluZyBzdWJtaXNzaW9uIGlzIHRoYXQgdGhlIGNvbnRl eHQgYW5kIGN1cnJlbnQgdGFpbCB3aWxsIGJlIHBsYWNlZAotICogb24gYSBxdWV1ZSB3YWl0aW5n IGZvciB0aGUgRUxTUCB0byBiZSByZWFkeSB0byBhY2NlcHQgYSBuZXcgY29udGV4dCBzdWJtaXNz aW9uLiBBdCB0aGF0Ci0gKiBwb2ludCwgdGhlIHRhaWwgKmluc2lkZSogdGhlIGNvbnRleHQgaXMg dXBkYXRlZCBhbmQgdGhlIEVMU1Agd3JpdHRlbiB0by4KLSAqLwotc3RhdGljIHZvaWQKLWludGVs X2xvZ2ljYWxfcmluZ19hZHZhbmNlX2FuZF9zdWJtaXQoc3RydWN0IGludGVsX3JpbmdidWZmZXIg KnJpbmdidWYsCi0JCQkJICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKLQkJCQkgICAg ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCi17Ci0Jc3RydWN0IGludGVs X2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Ci0KLQlpbnRlbF9sb2dpY2FsX3Jpbmdf YWR2YW5jZShyaW5nYnVmKTsKLQotCWlmIChpbnRlbF9yaW5nX3N0b3BwZWQocmluZykpCi0JCXJl dHVybjsKLQotCWV4ZWNsaXN0c19jb250ZXh0X3F1ZXVlKHJpbmcsIGN0eCwgcmluZ2J1Zi0+dGFp bCwgcmVxdWVzdCk7Ci19Ci0KIHN0YXRpYyBpbnQgaW50ZWxfbHJfY29udGV4dF9waW4oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAkJc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCkKIHsK QEAgLTg1NSwyMTkgKzEwNjgsNiBAQCB2b2lkIGludGVsX2xyX2NvbnRleHRfdW5waW4oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZywKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbG9naWNhbF9yaW5n X2FsbG9jX3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywKLQkJCQkgICAgICBz dHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQotewotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxdWVzdDsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXZhdGUgPSByaW5n LT5kZXYtPmRldl9wcml2YXRlOwotCWludCByZXQ7Ci0KLQlpZiAocmluZy0+b3V0c3RhbmRpbmdf bGF6eV9yZXF1ZXN0KQotCQlyZXR1cm4gMDsKLQotCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZigq cmVxdWVzdCksIEdGUF9LRVJORUwpOwotCWlmIChyZXF1ZXN0ID09IE5VTEwpCi0JCXJldHVybiAt RU5PTUVNOwotCi0JaWYgKGN0eCAhPSByaW5nLT5kZWZhdWx0X2NvbnRleHQpIHsKLQkJcmV0ID0g aW50ZWxfbHJfY29udGV4dF9waW4ocmluZywgY3R4KTsKLQkJaWYgKHJldCkgewotCQkJa2ZyZWUo cmVxdWVzdCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCi0Ja3JlZl9pbml0KCZyZXF1ZXN0 LT5yZWYpOwotCXJlcXVlc3QtPnJpbmcgPSByaW5nOwotCXJlcXVlc3QtPnVuaXEgPSBkZXZfcHJp dmF0ZS0+cmVxdWVzdF91bmlxKys7Ci0KLQlyZXQgPSBpOTE1X2dlbV9nZXRfc2Vxbm8ocmluZy0+ ZGV2LCAmcmVxdWVzdC0+c2Vxbm8pOwotCWlmIChyZXQpIHsKLQkJaW50ZWxfbHJfY29udGV4dF91 bnBpbihyaW5nLCBjdHgpOwotCQlrZnJlZShyZXF1ZXN0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0K LQlyZXF1ZXN0LT5jdHggPSBjdHg7Ci0JaTkxNV9nZW1fY29udGV4dF9yZWZlcmVuY2UocmVxdWVz dC0+Y3R4KTsKLQlyZXF1ZXN0LT5yaW5nYnVmID0gY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdi dWY7Ci0KLQlyaW5nLT5vdXRzdGFuZGluZ19sYXp5X3JlcXVlc3QgPSByZXF1ZXN0OwotCXJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGxvZ2ljYWxfcmluZ193YWl0X3JlcXVlc3Qoc3RydWN0IGlu dGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCi0JCQkJICAgICBpbnQgYnl0ZXMpCi17Ci0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Ci0Jc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0OwotCWludCByZXQ7Ci0KLQlpZiAoaW50ZWxfcmluZ19zcGFj ZShyaW5nYnVmKSA+PSBieXRlcykKLQkJcmV0dXJuIDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KHJlcXVlc3QsICZyaW5nLT5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKLQkJLyoKLQkJICogVGhlIHJl cXVlc3QgcXVldWUgaXMgcGVyLWVuZ2luZSwgc28gY2FuIGNvbnRhaW4gcmVxdWVzdHMKLQkJICog ZnJvbSBtdWx0aXBsZSByaW5nYnVmZmVycy4gSGVyZSwgd2UgbXVzdCBpZ25vcmUgYW55IHRoYXQK LQkJICogYXJlbid0IGZyb20gdGhlIHJpbmdidWZmZXIgd2UncmUgY29uc2lkZXJpbmcuCi0JCSAq LwotCQlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4ID0gcmVxdWVzdC0+Y3R4OwotCQlpZiAoY3R4 LT5lbmdpbmVbcmluZy0+aWRdLnJpbmdidWYgIT0gcmluZ2J1ZikKLQkJCWNvbnRpbnVlOwotCi0J CS8qIFdvdWxkIGNvbXBsZXRpb24gb2YgdGhpcyByZXF1ZXN0IGZyZWUgZW5vdWdoIHNwYWNlPyAq LwotCQlpZiAoX19pbnRlbF9yaW5nX3NwYWNlKHJlcXVlc3QtPnRhaWwsIHJpbmdidWYtPnRhaWws Ci0JCQkJICAgICAgIHJpbmdidWYtPnNpemUpID49IGJ5dGVzKSB7Ci0JCQlicmVhazsKLQkJfQot CX0KLQotCWlmICgmcmVxdWVzdC0+bGlzdCA9PSAmcmluZy0+cmVxdWVzdF9saXN0KQotCQlyZXR1 cm4gLUVOT1NQQzsKLQotCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KHJlcXVlc3QpOwotCWlmIChy ZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhyaW5n KTsKLQotCXJldHVybiBpbnRlbF9yaW5nX3NwYWNlKHJpbmdidWYpID49IGJ5dGVzID8gMCA6IC1F Tk9TUEM7Ci19Ci0KLXN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3dhaXRfZm9yX3NwYWNlKHN0cnVj dCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAotCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfY29u dGV4dCAqY3R4LAotCQkJCSAgICAgICBpbnQgYnl0ZXMpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJp bmctPmRldjsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9w cml2YXRlOwotCXVuc2lnbmVkIGxvbmcgZW5kOwotCWludCByZXQ7Ci0KLQlyZXQgPSBsb2dpY2Fs X3Jpbmdfd2FpdF9yZXF1ZXN0KHJpbmdidWYsIGJ5dGVzKTsKLQlpZiAocmV0ICE9IC1FTk9TUEMp Ci0JCXJldHVybiByZXQ7Ci0KLQkvKiBGb3JjZSB0aGUgY29udGV4dCBzdWJtaXNzaW9uIGluIGNh c2Ugd2UgaGF2ZSBiZWVuIHNraXBwaW5nIGl0ICovCi0JaW50ZWxfbG9naWNhbF9yaW5nX2FkdmFu Y2VfYW5kX3N1Ym1pdChyaW5nYnVmLCBjdHgsIE5VTEwpOwotCi0JLyogV2l0aCBHRU0gdGhlIGhh bmdjaGVjayB0aW1lciBzaG91bGQga2ljayB1cyBvdXQgb2YgdGhlIGxvb3AsCi0JICogbGVhdmlu ZyBpdCBlYXJseSBydW5zIHRoZSByaXNrIG9mIGNvcnJ1cHRpbmcgR0VNIHN0YXRlIChkdWUKLQkg KiB0byBydW5uaW5nIG9uIGFsbW9zdCB1bnRlc3RlZCBjb2RlcGF0aHMpLiBCdXQgb24gcmVzdW1l Ci0JICogdGltZXJzIGRvbid0IHdvcmsgeWV0LCBzbyBwcmV2ZW50IGEgY29tcGxldGUgaGFuZyBp biB0aGF0Ci0JICogY2FzZSBieSBjaG9vc2luZyBhbiBpbnNhbmVseSBsYXJnZSB0aW1lb3V0LiAq LwotCWVuZCA9IGppZmZpZXMgKyA2MCAqIEhaOwotCi0JcmV0ID0gMDsKLQlkbyB7Ci0JCWlmIChp bnRlbF9yaW5nX3NwYWNlKHJpbmdidWYpID49IGJ5dGVzKQotCQkJYnJlYWs7Ci0KLQkJbXNsZWVw KDEpOwotCi0JCWlmIChkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSAmJiBzaWduYWxfcGVuZGlu ZyhjdXJyZW50KSkgewotCQkJcmV0ID0gLUVSRVNUQVJUU1lTOwotCQkJYnJlYWs7Ci0JCX0KLQot CQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJvciwKLQkJCQkJ ICAgZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0K LQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSkgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJ YnJlYWs7Ci0JCX0KLQl9IHdoaWxlICgxKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBp bnQgbG9naWNhbF9yaW5nX3dyYXBfYnVmZmVyKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5n YnVmLAotCQkJCSAgICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQotewotCXVpbnQzMl90IF9f aW9tZW0gKnZpcnQ7Ci0JaW50IHJlbSA9IHJpbmdidWYtPnNpemUgLSByaW5nYnVmLT50YWlsOwot Ci0JaWYgKHJpbmdidWYtPnNwYWNlIDwgcmVtKSB7Ci0JCWludCByZXQgPSBsb2dpY2FsX3Jpbmdf d2FpdF9mb3Jfc3BhY2UocmluZ2J1ZiwgY3R4LCByZW0pOwotCi0JCWlmIChyZXQpCi0JCQlyZXR1 cm4gcmV0OwotCX0KLQotCXZpcnQgPSByaW5nYnVmLT52aXJ0dWFsX3N0YXJ0ICsgcmluZ2J1Zi0+ dGFpbDsKLQlyZW0gLz0gNDsKLQl3aGlsZSAocmVtLS0pCi0JCWlvd3JpdGUzMihNSV9OT09QLCB2 aXJ0KyspOwotCi0JcmluZ2J1Zi0+dGFpbCA9IDA7Ci0JaW50ZWxfcmluZ191cGRhdGVfc3BhY2Uo cmluZ2J1Zik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBsb2dpY2FsX3JpbmdfcHJl cGFyZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKLQkJCQlzdHJ1Y3QgaW50ZWxf Y29udGV4dCAqY3R4LCBpbnQgYnl0ZXMpCi17Ci0JaW50IHJldDsKLQotCWlmICh1bmxpa2VseShy aW5nYnVmLT50YWlsICsgYnl0ZXMgPiByaW5nYnVmLT5lZmZlY3RpdmVfc2l6ZSkpIHsKLQkJcmV0 ID0gbG9naWNhbF9yaW5nX3dyYXBfYnVmZmVyKHJpbmdidWYsIGN0eCk7Ci0JCWlmICh1bmxpa2Vs eShyZXQpKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAodW5saWtlbHkocmluZ2J1Zi0+c3Bh Y2UgPCBieXRlcykpIHsKLQkJcmV0ID0gbG9naWNhbF9yaW5nX3dhaXRfZm9yX3NwYWNlKHJpbmdi dWYsIGN0eCwgYnl0ZXMpOwotCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCXJldHVybiByZXQ7Ci0J fQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaW50ZWxfbG9naWNhbF9yaW5nX2JlZ2luKCkg LSBwcmVwYXJlIHRoZSBsb2dpY2FsIHJpbmdidWZmZXIgdG8gYWNjZXB0IHNvbWUgY29tbWFuZHMK LSAqCi0gKiBAcmluZ2J1ZjogTG9naWNhbCByaW5nYnVmZmVyLgotICogQG51bV9kd29yZHM6IG51 bWJlciBvZiBEV09SRHMgdGhhdCB3ZSBwbGFuIHRvIHdyaXRlIHRvIHRoZSByaW5nYnVmZmVyLgot ICoKLSAqIFRoZSByaW5nYnVmZmVyIG1pZ2h0IG5vdCBiZSByZWFkeSB0byBhY2NlcHQgdGhlIGNv bW1hbmRzIHJpZ2h0IGF3YXkgKG1heWJlIGl0IG5lZWRzIHRvCi0gKiBiZSB3cmFwcGVkLCBvciB3 YWl0IGEgYml0IGZvciB0aGUgdGFpbCB0byBiZSB1cGRhdGVkKS4gVGhpcyBmdW5jdGlvbiB0YWtl cyBjYXJlIG9mIHRoYXQKLSAqIGFuZCBhbHNvIHByZWFsbG9jYXRlcyBhIHJlcXVlc3QgKGV2ZXJ5 IHdvcmtsb2FkIHN1Ym1pc3Npb24gaXMgc3RpbGwgbWVkaWF0ZWQgdGhyb3VnaAotICogcmVxdWVz dHMsIHNhbWUgYXMgaXQgZGlkIHdpdGggbGVnYWN5IHJpbmdidWZmZXIgc3VibWlzc2lvbikuCi0g KgotICogUmV0dXJuOiBub24temVybyBpZiB0aGUgcmluZ2J1ZmZlciBpcyBub3QgcmVhZHkgdG8g YmUgd3JpdHRlbiB0by4KLSAqLwotaW50IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3Qg aW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiwKLQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQg KmN0eCwgaW50IG51bV9kd29yZHMpCi17Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyA9 IHJpbmdidWYtPnJpbmc7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJpbmctPmRldjsKLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWlu dCByZXQ7Ci0KLQlyZXQgPSBpOTE1X2dlbV9jaGVja193ZWRnZSgmZGV2X3ByaXYtPmdwdV9lcnJv ciwKLQkJCQkgICBkZXZfcHJpdi0+bW0uaW50ZXJydXB0aWJsZSk7Ci0JaWYgKHJldCkKLQkJcmV0 dXJuIHJldDsKLQotCXJldCA9IGxvZ2ljYWxfcmluZ19wcmVwYXJlKHJpbmdidWYsIGN0eCwgbnVt X2R3b3JkcyAqIHNpemVvZih1aW50MzJfdCkpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0K LQkvKiBQcmVhbGxvY2F0ZSB0aGUgb2xyIGJlZm9yZSB0b3VjaGluZyB0aGUgcmluZyAqLwotCXJl dCA9IGxvZ2ljYWxfcmluZ19hbGxvY19yZXF1ZXN0KHJpbmcsIGN0eCk7Ci0JaWYgKHJldCkKLQkJ cmV0dXJuIHJldDsKLQotCXJpbmdidWYtPnNwYWNlIC09IG51bV9kd29yZHMgKiBzaXplb2YodWlu dDMyX3QpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGludGVsX2xvZ2ljYWxfcmluZ193 b3JrYXJvdW5kc19lbWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsCiAJCQkJCSAgICAg ICBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY3R4KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuaApp bmRleCBhZGI3MzFlNC4uYWM4ZjgxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfbHJjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKQEAgLTYz LDkgKzYzLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHN0 cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLAogCWlvd3JpdGUzMihkYXRhLCByaW5nYnVm LT52aXJ0dWFsX3N0YXJ0ICsgcmluZ2J1Zi0+dGFpbCk7CiAJcmluZ2J1Zi0+dGFpbCArPSA0Owog fQotaW50IGludGVsX2xvZ2ljYWxfcmluZ19iZWdpbihzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAq cmluZ2J1ZiwKLQkJCSAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCwKLQkJCSAgICAgaW50 IG51bV9kd29yZHMpOwogCiAvKiBMb2dpY2FsIFJpbmcgQ29udGV4dHMgKi8KIHZvaWQgaW50ZWxf bHJfY29udGV4dF9mcmVlKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjdHgpOwotLSAKMS43LjkuNQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK