From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id C5F336E7D2 for ; Wed, 20 May 2020 11:26:49 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Wed, 20 May 2020 13:26:37 +0200 Message-Id: <20200520112642.15688-4-zbigniew.kempczynski@intel.com> In-Reply-To: <20200520112642.15688-1-zbigniew.kempczynski@intel.com> References: <20200520112642.15688-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v7 3/8] lib/intel_batchbuffer: Introduce intel_bb List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Chris Wilson List-ID: U2ltcGxlIGJhdGNoYnVmZmVyIGZhY2lsaXR5IHdoaWNoIGdhdGhlcnMgYW5kIG91dHB1dHMgcmVs b2NhdGlvbnMuCgp2MjogbWFrZSBiYiBhcGkgbW9yZSBjb25zaXN0ZW50IGFuZCB1bml2ZXJzYWwK djM6IGZpeCBjb21waWxpbmcgaXNzdWVzIG9uIG5vbi14ODYgYXJjaAp2NDogYWRkIGluZGV4aW5n IHRyZWUgYW5kIG1hcmtpbmcgb2JqZWN0IGFzIHJlbmRlciB0YXJnZXQKdjU6IHJhbmRvbWl6aW5n IGFkZHJlc3NlcyB0byBhdm9pZCByZWxvY2F0aW9ucwp2NjogZml4IGludmFsaWQgcmVhbGxvY2F0 aW9uIHNpemUgKENocmlzKQoKU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcgS2VtcGN6ecWEc2tpIDx6 Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxzb24gPGNocmlzQGNo cmlzLXdpbHNvbi5jby51az4KLS0tCiBsaWIvaW50ZWxfYmF0Y2hidWZmZXIuYyB8IDQ3NyArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvaW50ZWxfYmF0Y2hidWZm ZXIuaCB8IDEwMSArKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNTc4IGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIuYyBiL2xpYi9pbnRlbF9iYXRjaGJ1 ZmZlci5jCmluZGV4IGYxYTQ1YjQ3Li5lZmZjZmY0ZiAxMDA2NDQKLS0tIGEvbGliL2ludGVsX2Jh dGNoYnVmZmVyLmMKKysrIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKQEAgLTMwLDYgKzMwLDcg QEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFz c2VydC5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgogCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVk ZSAiZHJtdGVzdC5oIgpAQCAtNDEsOSArNDIsMTEgQEAKICNpbmNsdWRlICJyZW5kZXJjb3B5Lmgi CiAjaW5jbHVkZSAibWVkaWFfZmlsbC5oIgogI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCisj aW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgogI2luY2x1ZGUgIm1lZGlhX3NwaW4uaCIKICNpbmNs dWRlICJncGdwdV9maWxsLmgiCiAjaW5jbHVkZSAiaWd0X2F1eC5oIgorI2luY2x1ZGUgImlndF9y YW5kLmgiCiAjaW5jbHVkZSAiaTgzMF9yZWcuaCIKIAogI2luY2x1ZGUgPGk5MTVfZHJtLmg+CkBA IC0xMTcxLDMgKzExNzQsNDc3IEBAIGlndF9tZWRpYV9zcGluZnVuY190IGlndF9nZXRfbWVkaWFf c3BpbmZ1bmMoaW50IGRldmlkKQogCiAJcmV0dXJuIHNwaW47CiB9CisKKy8qIEludGVsIGJhdGNo YnVmZmVyIHYyICovCitzdGF0aWMgYm9vbCBpbnRlbF9iYl9kZWJ1Z190cmVlID0gZmFsc2U7CisK Ky8qCisgKiBfX3JlYWxsb2NhdGVfb2JqZWN0czoKKyAqIEBpYmI6IHBvaW50ZXIgdG8gaW50ZWxf YmIKKyAqCisgKiBJbmNyZWFzZXMgbnVtYmVyIG9mIG9iamVjdHMgaWYgbmVjZXNzYXJ5LgorICov CitzdGF0aWMgdm9pZCBfX3JlYWxsb2NhdGVfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikK K3sKKwl1aW50MzJfdCBudW07CisKKwlpZiAoaWJiLT5udW1fb2JqZWN0cyA9PSBpYmItPmFsbG9j YXRlZF9vYmplY3RzKSB7CisJCW51bSA9IDQwOTYgLyBzaXplb2YoKmliYi0+b2JqZWN0cyk7CisJ CWliYi0+b2JqZWN0cyA9IHJlYWxsb2MoaWJiLT5vYmplY3RzLAorCQkJCSAgICAgICBzaXplb2Yo KmliYi0+b2JqZWN0cykgKgorCQkJCSAgICAgICAobnVtICsgaWJiLT5hbGxvY2F0ZWRfb2JqZWN0 cykpOworCQlpZ3RfYXNzZXJ0KGliYi0+b2JqZWN0cyk7CisJCWliYi0+YWxsb2NhdGVkX29iamVj dHMgKz0gbnVtOworCisJCW1lbXNldCgmaWJiLT5vYmplY3RzW2liYi0+bnVtX29iamVjdHNdLAkw LAorCQkgICAgICAgbnVtICogc2l6ZW9mKCppYmItPm9iamVjdHMpKTsKKwl9Cit9CisKKy8qKgor ICogX19pbnRlbF9iYl9jcmVhdGU6CisgKiBAaTkxNTogZHJtIGZkCisgKiBAc2l6ZTogc2l6ZSBv ZiB0aGUgYmF0Y2hidWZmZXIKKyAqCisgKiBSZXR1cm5zOgorICoKKyAqIFBvaW50ZXIgdGhlIGlu dGVsX2JiLCBhc3NlcnRzIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBpbnRlbF9iYiAqaW50ZWxf YmJfY3JlYXRlKGludCBpOTE1LCB1aW50MzJfdCBzaXplKQoreworCXN0cnVjdCBpbnRlbF9iYiAq aWJiID0gY2FsbG9jKDEsIHNpemVvZigqaWJiKSk7CisJdWludDY0X3QgZ3R0X3NpemU7CisKKwlp Z3RfYXNzZXJ0KGliYik7CisKKwlpYmItPmk5MTUgPSBpOTE1OworCWliYi0+ZGV2aWQgPSBpbnRl bF9nZXRfZHJtX2RldmlkKGk5MTUpOworCWliYi0+Z2VuID0gaW50ZWxfZ2VuKGliYi0+ZGV2aWQp OworCWliYi0+aGFuZGxlID0gZ2VtX2NyZWF0ZShpOTE1LCBzaXplKTsKKwlpYmItPnNpemUgPSBz aXplOworCWliYi0+YmF0Y2ggPSBjYWxsb2MoMSwgc2l6ZSk7CisJaWd0X2Fzc2VydChpYmItPmJh dGNoKTsKKwlpYmItPnB0ciA9IGliYi0+YmF0Y2g7CisJaWJiLT5wcm5nID0gKHVpbnQzMl90KSB0 b191c2VyX3BvaW50ZXIoaWJiKTsKKworCWd0dF9zaXplID0gZ2VtX2FwZXJ0dXJlX3NpemUoaTkx NSk7CisJaWYgKCFnZW1fdXNlc19mdWxsX3BwZ3R0KGk5MTUpKQorCQlndHRfc2l6ZSAvPSAyOwor CWlmICgoZ3R0X3NpemUgLSAxKSA+PiAzMikKKwkJaWJiLT5zdXBwb3J0c180OGJfYWRkcmVzcyA9 IHRydWU7CisJaWJiLT5ndHRfc2l6ZSA9IGd0dF9zaXplOworCisJX19yZWFsbG9jYXRlX29iamVj dHMoaWJiKTsKKwlpbnRlbF9iYl9hZGRfb2JqZWN0KGliYiwgaWJiLT5oYW5kbGUsIDAsIGZhbHNl KTsKKworCXJldHVybiBpYmI7Cit9CisKKy8qCisgKiB0ZGVzdHJveSgpIGNhbGxzIGZyZWUgZnVu Y3Rpb24gZm9yIGVhY2ggbm9kZSwgYnV0IHdlIHNwcmVhZCB0cmVlCisgKiBvbiBvYmplY3RzIGFy cmF5LCBzbyBkbyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZCBfX2RvX25vdGhpbmcodm9pZCAq bm9kZSkKK3sKKwkodm9pZCkgbm9kZTsKK30KKworLyoqCisgKiBpbnRlbF9iYl9kZXN0cm95Ogor ICogQGliYjogcG9pbnRlciB0byBpbnRlbF9iYgorICoKKyAqIEZyZWVzIGFsbCByZWxvY2F0aW9u cyAvIG9iamVjdHMgYWxsb2NhdGVkIGR1cmluZyBmaWxsaW5nIHRoZSBiYXRjaC4KKyAqLwordm9p ZCBpbnRlbF9iYl9kZXN0cm95KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQoreworCXVpbnQzMl90IGk7 CisKKwlpZ3RfYXNzZXJ0KGliYik7CisKKwkvKiBGcmVlIHJlbG9jYXRpb25zICovCisJZm9yIChp ID0gMDsgaSA8IGliYi0+bnVtX29iamVjdHM7IGkrKykKKwkJZnJlZShmcm9tX3VzZXJfcG9pbnRl cihpYmItPm9iamVjdHNbaV0ucmVsb2NzX3B0cikpOworCisJZnJlZShpYmItPm9iamVjdHMpOwor CXRkZXN0cm95KGliYi0+cm9vdCwgX19kb19ub3RoaW5nKTsKKworCW11bm1hcChpYmItPmJhdGNo LCBpYmItPnNpemUpOworCWdlbV9jbG9zZShpYmItPmk5MTUsIGliYi0+aGFuZGxlKTsKKworCWZy ZWUoaWJiKTsKK30KKworLyoqCisgKiBpbnRlbF9iYl9zZXRfZGVidWc6CisgKiBAaWJiOiBwb2lu dGVyIHRvIGludGVsX2JiCisgKiBAZGVidWc6IHRydWUgLyBmYWxzZQorICoKKyAqIFNldHMgZGVi dWcgdG8gdHJ1ZSAvIGZhbHNlLiBFeGVjYnVmIGlzIHRoZW4gY2FsbGVkIHN5bmNocm9ub3VzbHkg YW5kCisgKiBvYmplY3QvcmVsb2MgYXJyYXlzIGFyZSBwcmludGVkIGFmdGVyIGV4ZWN1dGlvbi4K KyAqLwordm9pZCBpbnRlbF9iYl9zZXRfZGVidWcoc3RydWN0IGludGVsX2JiICppYmIsIGJvb2wg ZGVidWcpCit7CisJaWJiLT5kZWJ1ZyA9IGRlYnVnOworfQorCitzdGF0aWMgaW50IF9fY29tcGFy ZV9vYmplY3RzKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqbzEgPSBwMSwgKm8yID0gcDI7CisKKwlyZXR1 cm4gKGludCkgKChpbnQ2NF90KSBvMS0+aGFuZGxlIC0gKGludDY0X3QpIG8yLT5oYW5kbGUpOwor fQorCisvKioKKyAqIGludGVsX2JiX2FkZF9vYmplY3Q6CisgKiBAaWJiOiBwb2ludGVyIHRvIGlu dGVsX2JiCisgKiBAaGFuZGxlOiB3aGljaCBoYW5kbGUgdG8gYWRkIHRvIG9iamVjdHMgYXJyYXkK KyAqIEBvZmZzZXQ6IHByZXN1bWVkIG9mZnNldCBvZiB0aGUgb2JqZWN0IHdoZW4gSTkxNV9FWEVD X05PX1JFTE9DIGZsYWcgaXMKKyAqIHVzZWQgaW4gZXhlY2J1ZiBjYWxsCisgKiBAd3JpdGU6IGRv ZXMgYSBoYW5kbGUgaXMgYSByZW5kZXIgdGFyZ2V0CisgKgorICogRnVuY3Rpb24gYWRkcyBvciB1 cGRhdGVzIGV4ZWNvYmogc2xvdCBpbiBiYiBvYmplY3RzIGFycmF5IGFuZAorICogaW4gdGhlIG9i amVjdCB0cmVlLiBXaGVuIG9iamVjdCBpcyBhIHJlbmRlciB0YXJnZXQgaXQgaGFzIHRvCisgKiBi ZSBtYXJrZWQgd2l0aCBFWEVDX09CSkVDVF9XUklURSBmbGFnLgorICovCitzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqCitpbnRlbF9iYl9hZGRfb2JqZWN0KHN0cnVjdCBpbnRlbF9i YiAqaWJiLCB1aW50MzJfdCBoYW5kbGUsCisJCSAgICB1aW50NjRfdCBvZmZzZXQsIGJvb2wgd3Jp dGUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKm9iamVjdDsKKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqKmZvdW5kOworCXVpbnQzMl90IGk7CisKKwlf X3JlYWxsb2NhdGVfb2JqZWN0cyhpYmIpOworCisJaSA9IGliYi0+bnVtX29iamVjdHM7CisJb2Jq ZWN0ID0gJmliYi0+b2JqZWN0c1tpXTsKKwlvYmplY3QtPmhhbmRsZSA9IGhhbmRsZTsKKworCWZv dW5kID0gdHNlYXJjaCgodm9pZCAqKSBvYmplY3QsICZpYmItPnJvb3QsIF9fY29tcGFyZV9vYmpl Y3RzKTsKKworCWlmICgqZm91bmQgPT0gb2JqZWN0KQorCQlpYmItPm51bV9vYmplY3RzKys7CisJ ZWxzZQorCQlvYmplY3QgPSAqZm91bmQ7CisKKwkvKiBBc3NpZ24gYWRkcmVzcyBvbmNlICovCisJ aWYgKG9iamVjdC0+b2Zmc2V0ID09IDApIHsKKwkJaWYgKG9mZnNldCkgeworCQkJb2JqZWN0LT5v ZmZzZXQgPSBvZmZzZXQ7CisJCX0gZWxzZSB7CisJCQkvKiByYW5kb21pemUgdGhlIGFkZHJlc3Ms IHdlIHRyeSB0byBhdm9pZCByZWxvY2F0aW9ucyAqLworCQkJb2Zmc2V0ID0gaGFyc19wZXRydXNr YV9mNTRfMV9yYW5kb202NCgmaWJiLT5wcm5nKTsKKwkJCW9mZnNldCAmPSAoaWJiLT5ndHRfc2l6 ZSAtIDEpOworCQkJb2Zmc2V0ICY9IH4oNDA5NiAtIDEpOworCQkJb2JqZWN0LT5vZmZzZXQgPSBv ZmZzZXQ7CisJCX0KKwl9CisKKwlpZiAod3JpdGUpCisJCW9iamVjdC0+ZmxhZ3MgfD0gRVhFQ19P QkpFQ1RfV1JJVEU7CisKKwlpZiAoaWJiLT5zdXBwb3J0c180OGJfYWRkcmVzcykKKwkJb2JqZWN0 LT5mbGFncyB8PSBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUzsKKworCXJldHVybiBv YmplY3Q7Cit9CisKKy8qCisgKiBpbnRlbF9iYl9hZGRfcmVsb2M6CisgKiBAaWJiOiBwb2ludGVy IHRvIGludGVsX2JiCisgKiBAaGFuZGxlOiBvYmplY3QgaGFuZGxlIHdoaWNoIGFkZHJlc3Mgd2ls bCBiZSB0YWtlbiB0byBwYXRjaCB0aGUgYmIKKyAqIEByZWFkX2RvbWFpbnM6IGdlbSBkb21haW4g Yml0cyBmb3IgdGhlIHJlbG9jYXRpb24KKyAqIEB3cml0ZV9kb21haW46IGdlbSBkb21haW4gYml0 IGZvciB0aGUgcmVsb2NhdGlvbgorICogQGRlbHRhOiBkZWx0YSB2YWx1ZSB0byBhZGQgdG8gQGJ1 ZmZlcidzIGdwdSBhZGRyZXNzCisgKiBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIGJiIHRvIGJlIHBh dGNoZWQKKyAqIEBwcmVzdW1lZF9vZmZzZXQ6IGFkZHJlc3Mgb2YgdGhlIG9iamVjdCBpbiBhZGRy ZXNzIHNwYWNlLCBpbXBvcnRhbnQgZm9yCisgKiBJOTE1X0VYRUNfTk9fUkVMT0MgZmxhZworICoK KyAqIEZ1bmN0aW9uIGFsbG9jYXRlcyBhZGRpdGlvbmFsIHJlbG9jYXRpb24gc2xvdCBpbiByZWxv YyBhcnJheSBmb3IgYSBoYW5kbGUuCisgKiBJdCBhbHNvIGltcGxpY2l0bHkgYWRkcyBoYW5kbGUg aW4gdGhlIG9iamVjdHMgYXJyYXkgaWYgb2JqZWN0IGRvZXNuJ3QKKyAqIGV4aXN0cyBidXQgZG9l c24ndCBtYXJrIGl0IGFzIGEgcmVuZGVyIHRhcmdldC4KKyAqLworc3RhdGljIHVpbnQ2NF90IGlu dGVsX2JiX2FkZF9yZWxvYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCQkgICB1aW50MzJfdCBo YW5kbGUsCisJCQkJICAgdWludDMyX3QgcmVhZF9kb21haW5zLAorCQkJCSAgIHVpbnQzMl90IHdy aXRlX2RvbWFpbiwKKwkJCQkgICB1aW50NjRfdCBkZWx0YSwKKwkJCQkgICB1aW50NjRfdCBvZmZz ZXQsCisJCQkJICAgdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0KQoreworCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyICpvYmplY3Q7CisJdWludDMyX3QgaTsKKworCW9iamVjdCA9IGludGVsX2JiX2Fk ZF9vYmplY3QoaWJiLCBoYW5kbGUsIHByZXN1bWVkX29mZnNldCwgZmFsc2UpOworCisJcmVsb2Nz ID0gaWJiLT5yZWxvY3M7CisJaWYgKGliYi0+bnVtX3JlbG9jcyA9PSBpYmItPmFsbG9jYXRlZF9y ZWxvY3MpIHsKKwkJaWJiLT5hbGxvY2F0ZWRfcmVsb2NzICs9IDQwOTYgLyBzaXplb2YoKnJlbG9j cyk7CisJCXJlbG9jcyA9IHJlYWxsb2MocmVsb2NzLCBzaXplb2YoKnJlbG9jcykgKiBpYmItPmFs bG9jYXRlZF9yZWxvY3MpOworCQlpZ3RfYXNzZXJ0KHJlbG9jcyk7CisJCWliYi0+cmVsb2NzID0g cmVsb2NzOworCX0KKworCWkgPSBpYmItPm51bV9yZWxvY3MrKzsKKwltZW1zZXQoJnJlbG9jc1tp XSwgMCwgc2l6ZW9mKCpyZWxvY3MpKTsKKwlyZWxvY3NbaV0udGFyZ2V0X2hhbmRsZSA9IGhhbmRs ZTsKKwlyZWxvY3NbaV0ucmVhZF9kb21haW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jc1tpXS53 cml0ZV9kb21haW4gPSB3cml0ZV9kb21haW47CisJcmVsb2NzW2ldLmRlbHRhID0gZGVsdGE7CisJ cmVsb2NzW2ldLm9mZnNldCA9IG9mZnNldDsKKwlyZWxvY3NbaV0ucHJlc3VtZWRfb2Zmc2V0ID0g b2JqZWN0LT5vZmZzZXQ7CisKKwlpZ3RfZGVidWcoImFkZCByZWxvYzogaGFuZGxlOiAldSwgci93 OiAweCV4LzB4JXgsICIKKwkJICAiZGVsdGE6IDB4JSIgUFJJeDY0ICIsICIKKwkJICAib2Zmc2V0 OiAweCUiIFBSSXg2NCAiLCAiCisJCSAgInBvZmZzZXQ6IDB4JSIgUFJJeDY0ICJcbiIsCisJCSAg aGFuZGxlLCByZWFkX2RvbWFpbnMsIHdyaXRlX2RvbWFpbiwKKwkJICBkZWx0YSwgb2Zmc2V0LCBw cmVzdW1lZF9vZmZzZXQpOworCisJcmV0dXJuIG9iamVjdC0+b2Zmc2V0OworfQorCisvKioKKyAq IGludGVsX2JiX2VtaXRfcmVsb2M6CisgKiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCisgKiBA aGFuZGxlOiBvYmplY3QgaGFuZGxlIHdoaWNoIGFkZHJlc3Mgd2lsbCBiZSB0YWtlbiB0byBwYXRj aCB0aGUgYmIKKyAqIEByZWFkX2RvbWFpbnM6IGdlbSBkb21haW4gYml0cyBmb3IgdGhlIHJlbG9j YXRpb24KKyAqIEB3cml0ZV9kb21haW46IGdlbSBkb21haW4gYml0IGZvciB0aGUgcmVsb2NhdGlv bgorICogQGRlbHRhOiBkZWx0YSB2YWx1ZSB0byBhZGQgdG8gQGJ1ZmZlcidzIGdwdSBhZGRyZXNz CisgKiBAcHJlc3VtZWRfb2Zmc2V0OiBhZGRyZXNzIG9mIHRoZSBvYmplY3QgaW4gYWRkcmVzcyBz cGFjZSwgaW1wb3J0YW50IGZvcgorICogSTkxNV9FWEVDX05PX1JFTE9DIGZsYWcKKyAqIEB3cml0 ZTogZG9lcyBhIGhhbmRsZSBpcyBhIHJlbmRlciB0YXJnZXQKKyAqCisgKiBGdW5jdGlvbiBwcmVw YXJlcyByZWxvY2F0aW9uIChleGVjb2JqIGlmIHJlcXVpcmVkICsgcmVsb2MpIGFuZCBlbWl0cwor ICogb2Zmc2V0IGluIGJiLiBGb3IgSTkxNV9FWEVDX05PX1JFTE9DIHByZXN1bWVkX29mZnNldCBp cyBhIGhpbnQgd2UgYWxyZWFkeQorICogaGF2ZSBvYmplY3QgaW4gdmFsaWQgcGxhY2UgYW5kIHJl bG9jYXRpb24gc3RlcCBjYW4gYmUgc2tpcHBlZCBpbiB0aGlzIGNhc2UuCisgKgorICogTm90ZTog ZGVsdGEgaXMgdmFsdWUgYWRkZWQgdG8gYWRkcmVzcywgbW9zdGx5IHVzZWQgd2hlbiBzb21lIGlu c3RydWN0aW9ucworICogcmVxdWlyZSBtb2RpZnktYml0IHNldCB0byBhcHBseSBjaGFuZ2UuIFdo aWNoIGRlbHRhIGlzIHZhbGlkIGRlcGVuZHMKKyAqIG9uIGluc3RydWN0aW9uIChzZWUgaW5zdHJ1 Y3Rpb24gc3BlY2lmaWNhdGlvbikuCisgKi8KK3VpbnQ2NF90IGludGVsX2JiX2VtaXRfcmVsb2Mo c3RydWN0IGludGVsX2JiICppYmIsCisJCQkgdWludDMyX3QgaGFuZGxlLAorCQkJIHVpbnQzMl90 IHJlYWRfZG9tYWlucywKKwkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4sCisJCQkgdWludDY0X3Qg ZGVsdGEsCisJCQkgdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0KQoreworCXVpbnQ2NF90IGFkZHJl c3M7CisKKwlpZ3RfYXNzZXJ0KGliYik7CisKKwlhZGRyZXNzID0gaW50ZWxfYmJfYWRkX3JlbG9j KGliYiwgaGFuZGxlLCByZWFkX2RvbWFpbnMsIHdyaXRlX2RvbWFpbiwKKwkJCQkgICAgIGRlbHRh LCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwKKwkJCQkgICAgIHByZXN1bWVkX29mZnNldCk7CisKKwlp bnRlbF9iYl9vdXQoaWJiLCBkZWx0YSArIGFkZHJlc3MpOworCWlmIChpYmItPmdlbiA+PSA4KQor CQlpbnRlbF9iYl9vdXQoaWJiLCBhZGRyZXNzID4+IDMyKTsKKworCXJldHVybiBhZGRyZXNzOwor fQorCisvKioKKyAqIGludGVsX2JiX29mZnNldF9yZWxvYzoKKyAqIEBpYmI6IHBvaW50ZXIgdG8g aW50ZWxfYmIKKyAqIEBoYW5kbGU6IG9iamVjdCBoYW5kbGUgd2hpY2ggYWRkcmVzcyB3aWxsIGJl IHRha2VuIHRvIHBhdGNoIHRoZSBiYgorICogQHJlYWRfZG9tYWluczogZ2VtIGRvbWFpbiBiaXRz IGZvciB0aGUgcmVsb2NhdGlvbgorICogQHdyaXRlX2RvbWFpbjogZ2VtIGRvbWFpbiBiaXQgZm9y IHRoZSByZWxvY2F0aW9uCisgKiBAb2Zmc2V0OiBvZmZzZXQgd2l0aGluIGJiIHRvIGJlIHBhdGNo ZWQKKyAqIEBwcmVzdW1lZF9vZmZzZXQ6IGFkZHJlc3Mgb2YgdGhlIG9iamVjdCBpbiBhZGRyZXNz IHNwYWNlLCBpbXBvcnRhbnQgZm9yCisgKiBJOTE1X0VYRUNfTk9fUkVMT0MgZmxhZworICoKKyAq IEZ1bmN0aW9uIHByZXBhcmVzIHJlbG9jYXRpb24gKGV4ZWNvYmogaWYgcmVxdWlyZWQgKyByZWxv YykuIEl0IGl0IHVzZWQKKyAqIGZvciBlZGl0aW5nIGJhdGNoYnVmZmVyIHZpYSBtb2RpZnlpbmcg c3RydWN0dXJlcy4gSXQgbWVhbnMgd2hlbiB3ZSdyZQorICogcHJlcGFyaW5nIGJhdGNoYnVmZmVy IGl0IGlzIG1vcmUgZGVzY3JpcHRpdmUgdG8gZWRpdCB0aGUgc3RydWN0dXJlCisgKiB0aGFuIGVt aXR0aW5nIGR3b3Jkcy4gQnV0IGl0IHJlcXVpcmUgZm9yIHNvbWUgZmllbGRzIHRvIHBvaW50IHRo ZQorICogcmVsb2NhdGlvbi4gRm9yIHRoYXQgY2FzZSBAb2Zmc2V0IGlzIHBhc3NlZCBieSB0aGUg dXNlciBhbmQgaXQgcG9pbnRzCisgKiB0byB0aGUgb2Zmc2V0IGluIGJiIHdoZXJlIHRoZSByZWxv Y2F0aW9uIHdpbGwgYmUgYXBwbGllZC4KKyAqLwordWludDY0X3QgaW50ZWxfYmJfb2Zmc2V0X3Jl bG9jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJ CSAgICAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkgICAgICAgdWludDMyX3Qgd3JpdGVf ZG9tYWluLAorCQkJICAgICAgIHVpbnQzMl90IG9mZnNldCwKKwkJCSAgICAgICB1aW50NjRfdCBw cmVzdW1lZF9vZmZzZXQpCit7CisJaWd0X2Fzc2VydChpYmIpOworCisJcmV0dXJuIGludGVsX2Ji X2FkZF9yZWxvYyhpYmIsIGhhbmRsZSwgcmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4sCisJCQkJ ICAwLCBvZmZzZXQsIHByZXN1bWVkX29mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2Ji X2R1bXBfZXhlY2J1ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmKQor eworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmplY3RzOworCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzLCAqcmVsb2M7CisJaW50IGksIGo7 CisKKwlpZ3RfaW5mbygiZXhlY2J1ZiBiYXRjaCBsZW46ICV1LCBzdGFydCBvZmZzZXQ6IDB4JXgs ICIKKwkJICJEUjE6IDB4JXgsIERSNDogMHgleCwgIgorCQkgIm51bSBjbGlwOiAldSwgY2xpcHB0 cjogMHglbGx4LCAiCisJCSAiZmxhZ3M6IDB4JWxseCwgcnN2ZDE6IDB4JWxseCwgcnN2ZDI6IDB4 JWxseFxuIiwKKwkJIGV4ZWNidWYtPmJhdGNoX2xlbiwgZXhlY2J1Zi0+YmF0Y2hfc3RhcnRfb2Zm c2V0LAorCQkgZXhlY2J1Zi0+RFIxLCBleGVjYnVmLT5EUjQsCisJCSBleGVjYnVmLT5udW1fY2xp cHJlY3RzLCBleGVjYnVmLT5jbGlwcmVjdHNfcHRyLAorCQkgZXhlY2J1Zi0+ZmxhZ3MsIGV4ZWNi dWYtPnJzdmQxLCBleGVjYnVmLT5yc3ZkMik7CisKKwlpZ3RfaW5mbygiZXhlY2J1ZiBidWZmZXJf Y291bnQ6ICVkXG4iLCBleGVjYnVmLT5idWZmZXJfY291bnQpOworCWZvciAoaSA9IDA7IGkgPCBl eGVjYnVmLT5idWZmZXJfY291bnQ7IGkrKykgeworCQlvYmplY3RzID0gJigoc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIgKikKKwkJCSAgICBmcm9tX3VzZXJfcG9pbnRlcihleGVjYnVm LT5idWZmZXJzX3B0cikpW2ldOworCQlyZWxvY3MgPSBmcm9tX3VzZXJfcG9pbnRlcihvYmplY3Rz LT5yZWxvY3NfcHRyKTsKKwkJaWd0X2luZm8oIiBbJWRdIGhhbmRsZTogJXUsIHJlbG9jX2NvdW50 OiAlZCwgcmVsb2NfcHRyOiAlcCwgIgorCQkJICJhbGlnbjogMHglbGx4LCBvZmZzZXQ6IDB4JWxs eCwgZmxhZ3M6IDB4JWxseCwgIgorCQkJICJyc3ZkMTogMHglbGx4LCByc3ZkMjogMHglbGx4XG4i LAorCQkJIGksIG9iamVjdHMtPmhhbmRsZSwgb2JqZWN0cy0+cmVsb2NhdGlvbl9jb3VudCwKKwkJ CSByZWxvY3MsCisJCQkgb2JqZWN0cy0+YWxpZ25tZW50LAorCQkJIG9iamVjdHMtPm9mZnNldCwg b2JqZWN0cy0+ZmxhZ3MsCisJCQkgb2JqZWN0cy0+cnN2ZDEsIG9iamVjdHMtPnJzdmQyKTsKKwkJ aWYgKG9iamVjdHMtPnJlbG9jYXRpb25fY291bnQpIHsKKwkJCWlndF9pbmZvKCJcdGV4ZWNidWYg cmVsb2NzOlxuIik7CisJCQlmb3IgKGogPSAwOyBqIDwgb2JqZWN0cy0+cmVsb2NhdGlvbl9jb3Vu dDsgaisrKSB7CisJCQkJcmVsb2MgPSAmcmVsb2NzW2pdOworCQkJCWlndF9pbmZvKCJcdCBbJWRd IHRhcmdldCBoYW5kbGU6ICV1LCAiCisJCQkJCSAib2Zmc2V0OiAweCVsbHgsIGRlbHRhOiAweCV4 LCAiCisJCQkJCSAicHJlc3VtZWRfb2Zmc2V0OiAweCVsbHgsICIKKwkJCQkJICJyZWFkX2RvbWFp bnM6IDB4JXgsICIKKwkJCQkJICJ3cml0ZV9kb21haW46IDB4JXhcbiIsCisJCQkJCSBqLCByZWxv Yy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkJIHJlbG9jLT5vZmZzZXQsIHJlbG9jLT5kZWx0YSwKKwkJ CQkJIHJlbG9jLT5wcmVzdW1lZF9vZmZzZXQsCisJCQkJCSByZWxvYy0+cmVhZF9kb21haW5zLAor CQkJCQkgcmVsb2MtPndyaXRlX2RvbWFpbik7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2 b2lkIHByaW50X25vZGUoY29uc3Qgdm9pZCAqbm9kZSwgVklTSVQgd2hpY2gsIGludCBkZXB0aCkK K3sKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqb2JqZWN0ID0KKwkJ CSooY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKiopIG5vZGU7CisJKHZv aWQpIGRlcHRoOworCisJc3dpdGNoICh3aGljaCkgeworCWNhc2UgcHJlb3JkZXI6CisJY2FzZSBl bmRvcmRlcjoKKwkJYnJlYWs7CisKKwljYXNlIHBvc3RvcmRlcjoKKwljYXNlIGxlYWY6CisJCWln dF9pbmZvKCJcdCBoYW5kbGU6ICV1LCBvZmZzZXQ6IDB4JSIgUFJJeDY0ICJcbiIsCisJCQkgb2Jq ZWN0LT5oYW5kbGUsICh1aW50NjRfdCkgb2JqZWN0LT5vZmZzZXQpOworCQlicmVhazsKKwl9Cit9 CisKKy8qCisgKiBAX19pbnRlbF9iYl9leGVjOgorICogQGliYjogcG9pbnRlciB0byBpbnRlbF9i YgorICogQGVuZF9vZmZzZXQ6IG9mZnNldCBvZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUg YmIKKyAqIEBmbGFnczogZmxhZ3MgcGFzc2VkIGRpcmVjdGx5IHRvIGV4ZWNidWYKKyAqIEBjdHg6 IGNvbnRleHQKKyAqIEBzeW5jOiBpZiB0cnVlIHdhaXQgZm9yIGV4ZWNidWYgY29tcGxldGlvbiwg b3RoZXJ3aXNlIGNhbGxlciBpcyByZXNwb25zaWJsZQorICogdG8gd2FpdCBmb3IgY29tcGxldGlv bgorICoKKyAqIFJldHVybnM6IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm5vLgorICoKKyAq IE5vdGU6IEluIHRoaXMgc3RlcCBleGVjb2JqIGZvciBiYiBpcyBhbGxvY2F0ZWQgYW5kIGluc2Vy dGVkIHRvIHRoZSBvYmplY3RzCisgKiBhcnJheS4KKyovCitpbnQgX19pbnRlbF9iYl9leGVjKHN0 cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBlbmRfb2Zmc2V0LAorCQkgICAgdWludDMyX3Qg Y3R4LCB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlpbnQgcmV0OworCisJaWJiLT5vYmplY3RzWzBdLnJlbG9j c19wdHIgPSB0b191c2VyX3BvaW50ZXIoaWJiLT5yZWxvY3MpOworCWliYi0+b2JqZWN0c1swXS5y ZWxvY2F0aW9uX2NvdW50ID0gaWJiLT5udW1fcmVsb2NzOworCWliYi0+b2JqZWN0c1swXS5oYW5k bGUgPSBpYmItPmhhbmRsZTsKKworCWdlbV93cml0ZShpYmItPmk5MTUsIGliYi0+aGFuZGxlLCAw LCBpYmItPmJhdGNoLCBpYmItPnNpemUpOworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2Yo ZXhlY2J1ZikpOworCWV4ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KSBpYmItPm9iamVj dHM7CisJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBpYmItPm51bV9vYmplY3RzOworCWV4ZWNidWYu YmF0Y2hfbGVuID0gZW5kX29mZnNldDsKKwlleGVjYnVmLnJzdmQxID0gY3R4OworCWV4ZWNidWYu ZmxhZ3MgPSBmbGFncyB8IEk5MTVfRVhFQ19CQVRDSF9GSVJTVDsKKworCXJldCA9IF9fZ2VtX2V4 ZWNidWYoaWJiLT5pOTE1LCAmZXhlY2J1Zik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CWlmIChzeW5jIHx8IGliYi0+ZGVidWcpCisJCWdlbV9zeW5jKGliYi0+aTkxNSwgaWJiLT5oYW5k bGUpOworCisJaWYgKGliYi0+ZGVidWcpIHsKKwkJaW50ZWxfYmJfZHVtcF9leGVjYnVmKCZleGVj YnVmKTsKKwkJaWYgKGludGVsX2JiX2RlYnVnX3RyZWUpIHsKKwkJCWlndF9pbmZvKCJcblRyZWU6 XG4iKTsKKwkJCXR3YWxrKGliYi0+cm9vdCwgcHJpbnRfbm9kZSk7CisJCX0KKwl9CisKKwlyZXR1 cm4gMDsKK30KKworLyoqCisgKiBpbnRlbF9iYl9leGVjOgorICogQGliYjogcG9pbnRlciB0byBp bnRlbF9iYgorICogQGVuZF9vZmZzZXQ6IG9mZnNldCBvZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBp biB0aGUgYmIKKyAqIEBmbGFnczogZmxhZ3MgcGFzc2VkIGRpcmVjdGx5IHRvIGV4ZWNidWYKKyAq IEBzeW5jOiBpZiB0cnVlIHdhaXQgZm9yIGV4ZWNidWYgY29tcGxldGlvbiwgb3RoZXJ3aXNlIGNh bGxlciBpcyByZXNwb25zaWJsZQorICogdG8gd2FpdCBmb3IgY29tcGxldGlvbgorICoKKyAqIERv IGV4ZWNidWYgd2l0aCBkZWZhdWx0IGNvbnRleHQuIEFzc2VydHMgb24gZmFpbHVyZS4KKyovCit2 b2lkIGludGVsX2JiX2V4ZWMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGVuZF9vZmZz ZXQsCisJCSAgIHVpbnQ2NF90IGZsYWdzLCBib29sIHN5bmMpCit7CisJaWd0X2Fzc2VydF9lcShf X2ludGVsX2JiX2V4ZWMoaWJiLCBlbmRfb2Zmc2V0LCAwLCBmbGFncywgc3luYyksIDApOworfQor CisvKgorICogaW50ZWxfYmJfZXhlY193aXRoX2NvbnRleHQ6CisgKiBAaWJiOiBwb2ludGVyIHRv IGludGVsX2JiCisgKiBAZW5kX29mZnNldDogb2Zmc2V0IG9mIHRoZSBsYXN0IGluc3RydWN0aW9u IGluIHRoZSBiYgorICogQGZsYWdzOiBmbGFncyBwYXNzZWQgZGlyZWN0bHkgdG8gZXhlY2J1Zgor ICogQGN0eDogY29udGV4dAorICogQHN5bmM6IGlmIHRydWUgd2FpdCBmb3IgZXhlY2J1ZiBjb21w bGV0aW9uLCBvdGhlcndpc2UgY2FsbGVyIGlzIHJlc3BvbnNpYmxlCisgKiB0byB3YWl0IGZvciBj b21wbGV0aW9uCisgKgorICogRG8gZXhlY2J1ZiB3aXRoIGNvbnRleHQgQGNvbnRleHQuCisqLwor dm9pZCBpbnRlbF9iYl9leGVjX3dpdGhfY29udGV4dChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWlu dDMyX3QgZW5kX29mZnNldCwKKwkJCQl1aW50MzJfdCBjdHgsIHVpbnQ2NF90IGZsYWdzLCBib29s IHN5bmMpCit7CisJaWd0X2Fzc2VydF9lcShfX2ludGVsX2JiX2V4ZWMoaWJiLCBlbmRfb2Zmc2V0 LCBjdHgsIGZsYWdzLCBzeW5jKSwgMCk7Cit9CisKKy8qKgorICogaW50ZWxfYmJfZ2V0X29iamVj dF9hZGRyZXNzOgorICogQGliYjogcG9pbnRlciB0byBpbnRlbF9iYgorICogQGhhbmRsZTogb2Jq ZWN0IGhhbmRsZQorICoKKyAqIFdoZW4gb2JqZWN0cyBhZGRyZXNzZXMgYXJlIHByZXZpb3VzbHkg cGlubmVkIGFuZCB3ZSBkb24ndCB3YW50IHRvIHJlbG9jYXRlCisgKiB3ZSBuZWVkIHRvIGFjcXVp cmUgdGhlbSBmcm9tIHByZXZpb3VzIGV4ZWNidWYuIEZ1bmN0aW9uIHJldHVybnMgcHJldmlvdXMK KyAqIG9iamVjdCBvZmZzZXQgZm9yIEBoYW5kbGUgb3IgMCBpZiBvYmplY3QgaXMgbm90IGZvdW5k LgorICovCit1aW50NjRfdCBpbnRlbF9iYl9nZXRfb2JqZWN0X29mZnNldChzdHJ1Y3QgaW50ZWxf YmIgKmliYiwgdWludDMyX3QgaGFuZGxlKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIG9iamVjdCA9IHsgLmhhbmRsZSA9IGhhbmRsZSB9OworCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyICoqZm91bmQ7CisKKwlpZ3RfYXNzZXJ0KGliYik7CisKKwlmb3VuZCA9 IHRmaW5kKCh2b2lkICopICZvYmplY3QsICZpYmItPnJvb3QsIF9fY29tcGFyZV9vYmplY3RzKTsK KwlpZiAoIWZvdW5kKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKmZvdW5kKS0+b2Zmc2V0Owor fQpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2JhdGNoYnVmZmVyLmggYi9saWIvaW50ZWxfYmF0Y2hi dWZmZXIuaAppbmRleCA0NDJmM2ExOC4uNWYxNjI1NDYgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9i YXRjaGJ1ZmZlci5oCisrKyBiL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCkBAIC03LDYgKzcsNyBA QAogCiAjaW5jbHVkZSAiaWd0X2NvcmUuaCIKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKKyNpbmNs dWRlICJkcm10ZXN0LmgiCiAKICNkZWZpbmUgQkFUQ0hfU1ogNDA5NgogI2RlZmluZSBCQVRDSF9S RVNFUlZFRCAxNgpAQCAtNDIyLDQgKzQyMywxMDQgQEAgdHlwZWRlZiB2b2lkICgqaWd0X21lZGlh X3NwaW5mdW5jX3QpKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAKIGlndF9tZWRp YV9zcGluZnVuY190IGlndF9nZXRfbWVkaWFfc3BpbmZ1bmMoaW50IGRldmlkKTsKIAorCisvKgor ICogQmF0Y2hidWZmZXIgd2l0aG91dCBsaWJkcm0gZGVwZW5kZW5jeQorICovCitzdHJ1Y3QgaW50 ZWxfYmIgeworCWludCBpOTE1OworCWludCBnZW47CisJYm9vbCBkZWJ1ZzsKKwl1aW50MzJfdCBk ZXZpZDsKKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCAqYmF0 Y2g7CisJdWludDMyX3QgKnB0cjsKKworCXVpbnQzMl90IHBybmc7CisJdWludDY0X3QgZ3R0X3Np emU7CisJYm9vbCBzdXBwb3J0c180OGJfYWRkcmVzczsKKworCXZvaWQgKnJvb3Q7CisJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKm9iamVjdHM7CisJdWludDMyX3QgbnVtX29iamVj dHM7CisJdWludDMyX3QgYWxsb2NhdGVkX29iamVjdHM7CisJdWludDY0X3QgYmF0Y2hfb2Zmc2V0 OworCisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3M7CisJdWlu dDMyX3QgbnVtX3JlbG9jczsKKwl1aW50MzJfdCBhbGxvY2F0ZWRfcmVsb2NzOworfTsKKworc3Ry dWN0IGludGVsX2JiICppbnRlbF9iYl9jcmVhdGUoaW50IGk5MTUsIHVpbnQzMl90IHNpemUpOwor Cit2b2lkIGludGVsX2JiX2Rlc3Ryb3koc3RydWN0IGludGVsX2JiICppYmIpOwordm9pZCBpbnRl bF9iYl9zZXRfZGVidWcoc3RydWN0IGludGVsX2JiICppYmIsIGJvb2wgZGVidWcpOworCitzdGF0 aWMgaW5saW5lIHVpbnQzMl90IGludGVsX2JiX29mZnNldChzdHJ1Y3QgaW50ZWxfYmIgKmliYikK K3sKKwlyZXR1cm4gKHVpbnQzMl90KSAoKHVpbnQ4X3QgKikgaWJiLT5wdHIgLSAodWludDhfdCAq KSBpYmItPmJhdGNoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludGVsX2JiX3B0cl9zZXQo c3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IG9mZnNldCkKK3sKKwlpYmItPnB0ciA9ICh2 b2lkICopICgodWludDhfdCAqKSBpYmItPmJhdGNoICsgb2Zmc2V0KTsKKworCWlndF9hc3NlcnQo aW50ZWxfYmJfb2Zmc2V0KGliYikgPCBpYmItPnNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgaW50ZWxfYmJfcHRyX2FkZChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qgb2Zmc2V0 KQoreworCWludGVsX2JiX3B0cl9zZXQoaWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSArIG9mZnNl dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF9iYl9wdHJfYWxpZ24oc3RydWN0IGlu dGVsX2JiICppYmIsCisJCQkJICAgICAgdWludDMyX3QgYWxpZ25tZW50KQoreworCWludGVsX2Ji X3B0cl9zZXQoaWJiLCBBTElHTihpbnRlbF9iYl9vZmZzZXQoaWJiKSwgYWxpZ25tZW50KSk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaW50ZWxfYmJfcHRyKHN0cnVjdCBpbnRlbF9iYiAqaWJi KQoreworCXJldHVybiAodm9pZCAqKSBpYmItPnB0cjsKK30KKworc3RhdGljIGlubGluZSB2b2lk IGludGVsX2JiX291dChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgZHdvcmQpCit7CisJ KmliYi0+cHRyID0gZHdvcmQ7CisJaWJiLT5wdHIrKzsKKworCWlndF9hc3NlcnQoaW50ZWxfYmJf b2Zmc2V0KGliYikgPCBpYmItPnNpemUpOworfQorCisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyICoKK2ludGVsX2JiX2FkZF9vYmplY3Qoc3RydWN0IGludGVsX2JiICppYmIsIHVp bnQzMl90IGhhbmRsZSwKKwkJICAgIHVpbnQ2NF90IG9mZnNldCwgYm9vbCB3cml0ZSk7CisKK3Vp bnQ2NF90IGludGVsX2JiX2VtaXRfcmVsb2Moc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgdWlu dDMyX3QgaGFuZGxlLAorCQkJIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSB1aW50MzJfdCB3 cml0ZV9kb21haW4sCisJCQkgdWludDY0X3QgZGVsdGEsCisJCQkgdWludDY0X3QgcHJlc3VtZWRf b2Zmc2V0KTsKKwordWludDY0X3QgaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAorCQkJICAgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAgICB1aW50MzJfdCBy ZWFkX2RvbWFpbnMsCisJCQkgICAgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluLAorCQkJICAgICAg IHVpbnQzMl90IG9mZnNldCwKKwkJCSAgICAgICB1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQpOwor CitpbnQgX19pbnRlbF9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBlbmRf b2Zmc2V0LAorCQkgICAgdWludDMyX3QgY3R4LCB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKTsK Kwordm9pZCBpbnRlbF9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBlbmRf b2Zmc2V0LAorCQkgICB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKTsKKwordm9pZCBpbnRlbF9i Yl9leGVjX3dpdGhfY29udGV4dChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgZW5kX29m ZnNldCwKKwkJCQl1aW50MzJfdCBjdHgsIHVpbnQ2NF90IGZsYWdzLCBib29sIHN5bmMpOworCit1 aW50NjRfdCBpbnRlbF9iYl9nZXRfb2JqZWN0X29mZnNldChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwg dWludDMyX3QgaGFuZGxlKTsKKwogI2VuZGlmCi0tIAoyLjI2LjAKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1k ZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaWd0LWRldgo=