From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 123806E451 for ; Tue, 19 May 2020 18:16:22 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Tue, 19 May 2020 20:16:09 +0200 Message-Id: <20200519181614.20880-4-zbigniew.kempczynski@intel.com> In-Reply-To: <20200519181614.20880-1-zbigniew.kempczynski@intel.com> References: <20200519181614.20880-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5 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 IGFkZHJlc3NlcyB0byBhdm9pZCByZWxvY2F0aW9ucwoKU2lnbmVkLW9mZi1ieTogWmJpZ25pZXcg S2VtcGN6ecWEc2tpIDx6Ymlnbmlldy5rZW1wY3p5bnNraUBpbnRlbC5jb20+CkNjOiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBsaWIvaW50ZWxfYmF0Y2hidWZm ZXIuYyB8IDQ3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIv aW50ZWxfYmF0Y2hidWZmZXIuaCB8IDEwMSArKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNTc3 IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIuYyBiL2xp Yi9pbnRlbF9iYXRjaGJ1ZmZlci5jCmluZGV4IGYxYTQ1YjQ3Li41ZWU5NTgwOCAxMDA2NDQKLS0t IGEvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKKysrIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMK QEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5o PgogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgogCiAjaW5jbHVkZSAi ZHJtLmgiCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgpAQCAtNDEsOSArNDIsMTEgQEAKICNpbmNsdWRl ICJyZW5kZXJjb3B5LmgiCiAjaW5jbHVkZSAibWVkaWFfZmlsbC5oIgogI2luY2x1ZGUgImlvY3Rs X3dyYXBwZXJzLmgiCisjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgogI2luY2x1ZGUgIm1lZGlh X3NwaW4uaCIKICNpbmNsdWRlICJncGdwdV9maWxsLmgiCiAjaW5jbHVkZSAiaWd0X2F1eC5oIgor I2luY2x1ZGUgImlndF9yYW5kLmgiCiAjaW5jbHVkZSAiaTgzMF9yZWcuaCIKIAogI2luY2x1ZGUg PGk5MTVfZHJtLmg+CkBAIC0xMTcxLDMgKzExNzQsNDc2IEBAIGlndF9tZWRpYV9zcGluZnVuY190 IGlndF9nZXRfbWVkaWFfc3BpbmZ1bmMoaW50IGRldmlkKQogCiAJcmV0dXJuIHNwaW47CiB9CisK Ky8qIEludGVsIGJhdGNoYnVmZmVyIHYyICovCitzdGF0aWMgYm9vbCBpbnRlbF9iYl9kZWJ1Z190 cmVlID0gZmFsc2U7CisKKy8qCisgKiBfX3JlYWxsb2NhdGVfb2JqZWN0czoKKyAqIEBpYmI6IHBv aW50ZXIgdG8gaW50ZWxfYmIKKyAqCisgKiBJbmNyZWFzZXMgbnVtYmVyIG9mIG9iamVjdHMgaWYg bmVjZXNzYXJ5LgorICovCitzdGF0aWMgdm9pZCBfX3JlYWxsb2NhdGVfb2JqZWN0cyhzdHJ1Y3Qg aW50ZWxfYmIgKmliYikKK3sKKwl1aW50MzJfdCBudW07CisKKwlpZiAoaWJiLT5udW1fb2JqZWN0 cyA9PSBpYmItPmFsbG9jYXRlZF9vYmplY3RzKSB7CisJCW51bSA9IDQwOTYgLyBzaXplb2YoKmli Yi0+b2JqZWN0cyk7CisJCWliYi0+b2JqZWN0cyA9IHJlYWxsb2MoaWJiLT5vYmplY3RzLAorCQkJ CSAgICAgICBzaXplb2YoKmliYi0+b2JqZWN0cykgKiBudW0pOworCQlpZ3RfYXNzZXJ0KGliYi0+ b2JqZWN0cyk7CisJCWliYi0+YWxsb2NhdGVkX29iamVjdHMgKz0gbnVtOworCisJCW1lbXNldCgm aWJiLT5vYmplY3RzW2liYi0+bnVtX29iamVjdHNdLAkwLAorCQkgICAgICAgbnVtICogc2l6ZW9m KCppYmItPm9iamVjdHMpKTsKKwl9Cit9CisKKy8qKgorICogX19pbnRlbF9iYl9jcmVhdGU6Cisg KiBAaTkxNTogZHJtIGZkCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgYmF0Y2hidWZmZXIKKyAqCisg KiBSZXR1cm5zOgorICoKKyAqIFBvaW50ZXIgdGhlIGludGVsX2JiLCBhc3NlcnRzIG9uIGZhaWx1 cmUuCisgKi8KK3N0cnVjdCBpbnRlbF9iYiAqaW50ZWxfYmJfY3JlYXRlKGludCBpOTE1LCB1aW50 MzJfdCBzaXplKQoreworCXN0cnVjdCBpbnRlbF9iYiAqaWJiID0gY2FsbG9jKDEsIHNpemVvZigq aWJiKSk7CisJdWludDY0X3QgZ3R0X3NpemU7CisKKwlpZ3RfYXNzZXJ0KGliYik7CisKKwlpYmIt Pmk5MTUgPSBpOTE1OworCWliYi0+ZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGk5MTUpOwor CWliYi0+Z2VuID0gaW50ZWxfZ2VuKGliYi0+ZGV2aWQpOworCWliYi0+aGFuZGxlID0gZ2VtX2Ny ZWF0ZShpOTE1LCBzaXplKTsKKwlpYmItPnNpemUgPSBzaXplOworCWliYi0+YmF0Y2ggPSBjYWxs b2MoMSwgc2l6ZSk7CisJaWd0X2Fzc2VydChpYmItPmJhdGNoKTsKKwlpYmItPnB0ciA9IGliYi0+ YmF0Y2g7CisJaWJiLT5wcm5nID0gKHVpbnQzMl90KSB0b191c2VyX3BvaW50ZXIoaWJiKTsKKwor CWd0dF9zaXplID0gZ2VtX2FwZXJ0dXJlX3NpemUoaTkxNSk7CisJaWYgKCFnZW1fdXNlc19mdWxs X3BwZ3R0KGk5MTUpKQorCQlndHRfc2l6ZSAvPSAyOworCWlmICgoZ3R0X3NpemUgLSAxKSA+PiAz MikKKwkJaWJiLT5zdXBwb3J0c180OGJfYWRkcmVzcyA9IHRydWU7CisJaWJiLT5ndHRfc2l6ZSA9 IGd0dF9zaXplOworCisJX19yZWFsbG9jYXRlX29iamVjdHMoaWJiKTsKKwlpbnRlbF9iYl9hZGRf b2JqZWN0KGliYiwgaWJiLT5oYW5kbGUsIDAsIGZhbHNlKTsKKworCXJldHVybiBpYmI7Cit9CisK Ky8qCisgKiB0ZGVzdHJveSgpIGNhbGxzIGZyZWUgZnVuY3Rpb24gZm9yIGVhY2ggbm9kZSwgYnV0 IHdlIHNwcmVhZCB0cmVlCisgKiBvbiBvYmplY3RzIGFycmF5LCBzbyBkbyBub3RoaW5nLgorICov CitzdGF0aWMgdm9pZCBfX2RvX25vdGhpbmcodm9pZCAqbm9kZSkKK3sKKwkodm9pZCkgbm9kZTsK K30KKworLyoqCisgKiBpbnRlbF9iYl9kZXN0cm95OgorICogQGliYjogcG9pbnRlciB0byBpbnRl bF9iYgorICoKKyAqIEZyZWVzIGFsbCByZWxvY2F0aW9ucyAvIG9iamVjdHMgYWxsb2NhdGVkIGR1 cmluZyBmaWxsaW5nIHRoZSBiYXRjaC4KKyAqLwordm9pZCBpbnRlbF9iYl9kZXN0cm95KHN0cnVj dCBpbnRlbF9iYiAqaWJiKQoreworCXVpbnQzMl90IGk7CisKKwlpZ3RfYXNzZXJ0KGliYik7CisK KwkvKiBGcmVlIHJlbG9jYXRpb25zICovCisJZm9yIChpID0gMDsgaSA8IGliYi0+bnVtX29iamVj dHM7IGkrKykKKwkJZnJlZShmcm9tX3VzZXJfcG9pbnRlcihpYmItPm9iamVjdHNbaV0ucmVsb2Nz X3B0cikpOworCisJZnJlZShpYmItPm9iamVjdHMpOworCXRkZXN0cm95KGliYi0+cm9vdCwgX19k b19ub3RoaW5nKTsKKworCW11bm1hcChpYmItPmJhdGNoLCBpYmItPnNpemUpOworCWdlbV9jbG9z ZShpYmItPmk5MTUsIGliYi0+aGFuZGxlKTsKKworCWZyZWUoaWJiKTsKK30KKworLyoqCisgKiBp bnRlbF9iYl9zZXRfZGVidWc6CisgKiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCisgKiBAZGVi dWc6IHRydWUgLyBmYWxzZQorICoKKyAqIFNldHMgZGVidWcgdG8gdHJ1ZSAvIGZhbHNlLiBFeGVj YnVmIGlzIHRoZW4gY2FsbGVkIHN5bmNocm9ub3VzbHkgYW5kCisgKiBvYmplY3QvcmVsb2MgYXJy YXlzIGFyZSBwcmludGVkIGFmdGVyIGV4ZWN1dGlvbi4KKyAqLwordm9pZCBpbnRlbF9iYl9zZXRf ZGVidWcoc3RydWN0IGludGVsX2JiICppYmIsIGJvb2wgZGVidWcpCit7CisJaWJiLT5kZWJ1ZyA9 IGRlYnVnOworfQorCitzdGF0aWMgaW50IF9fY29tcGFyZV9vYmplY3RzKGNvbnN0IHZvaWQgKnAx LCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiAqbzEgPSBwMSwgKm8yID0gcDI7CisKKwlyZXR1cm4gKGludCkgKChpbnQ2NF90KSBvMS0+ aGFuZGxlIC0gKGludDY0X3QpIG8yLT5oYW5kbGUpOworfQorCisvKioKKyAqIGludGVsX2JiX2Fk ZF9vYmplY3Q6CisgKiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCisgKiBAaGFuZGxlOiB3aGlj aCBoYW5kbGUgdG8gYWRkIHRvIG9iamVjdHMgYXJyYXkKKyAqIEBvZmZzZXQ6IHByZXN1bWVkIG9m ZnNldCBvZiB0aGUgb2JqZWN0IHdoZW4gSTkxNV9FWEVDX05PX1JFTE9DIGZsYWcgaXMKKyAqIHVz ZWQgaW4gZXhlY2J1ZiBjYWxsCisgKiBAd3JpdGU6IGRvZXMgYSBoYW5kbGUgaXMgYSByZW5kZXIg dGFyZ2V0CisgKgorICogRnVuY3Rpb24gYWRkcyBvciB1cGRhdGVzIGV4ZWNvYmogc2xvdCBpbiBi YiBvYmplY3RzIGFycmF5IGFuZAorICogaW4gdGhlIG9iamVjdCB0cmVlLiBXaGVuIG9iamVjdCBp cyBhIHJlbmRlciB0YXJnZXQgaXQgaGFzIHRvCisgKiBiZSBtYXJrZWQgd2l0aCBFWEVDX09CSkVD VF9XUklURSBmbGFnLgorICovCitzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqCitp bnRlbF9iYl9hZGRfb2JqZWN0KHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBoYW5kbGUs CisJCSAgICB1aW50NjRfdCBvZmZzZXQsIGJvb2wgd3JpdGUpCit7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgKm9iamVjdDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiAqKmZvdW5kOworCXVpbnQzMl90IGk7CisKKwlfX3JlYWxsb2NhdGVfb2JqZWN0cyhpYmIp OworCisJaSA9IGliYi0+bnVtX29iamVjdHM7CisJb2JqZWN0ID0gJmliYi0+b2JqZWN0c1tpXTsK KwlvYmplY3QtPmhhbmRsZSA9IGhhbmRsZTsKKworCWZvdW5kID0gdHNlYXJjaCgodm9pZCAqKSBv YmplY3QsICZpYmItPnJvb3QsIF9fY29tcGFyZV9vYmplY3RzKTsKKworCWlmICgqZm91bmQgPT0g b2JqZWN0KQorCQlpYmItPm51bV9vYmplY3RzKys7CisJZWxzZQorCQlvYmplY3QgPSAqZm91bmQ7 CisKKwkvKiBBc3NpZ24gYWRkcmVzcyBvbmNlICovCisJaWYgKG9iamVjdC0+b2Zmc2V0ID09IDAp IHsKKwkJaWYgKG9mZnNldCkgeworCQkJb2JqZWN0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCX0gZWxz ZSB7CisJCQkvKiByYW5kb21pemUgdGhlIGFkZHJlc3MsIHdlIHRyeSB0byBhdm9pZCByZWxvY2F0 aW9ucyAqLworCQkJb2Zmc2V0ID0gaGFyc19wZXRydXNrYV9mNTRfMV9yYW5kb202NCgmaWJiLT5w cm5nKTsKKwkJCW9mZnNldCAmPSAoaWJiLT5ndHRfc2l6ZSAtIDEpOworCQkJb2Zmc2V0ICY9IH4o NDA5NiAtIDEpOworCQkJb2JqZWN0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCX0KKwl9CisKKwlpZiAo d3JpdGUpCisJCW9iamVjdC0+ZmxhZ3MgfD0gRVhFQ19PQkpFQ1RfV1JJVEU7CisKKwlpZiAoaWJi LT5zdXBwb3J0c180OGJfYWRkcmVzcykKKwkJb2JqZWN0LT5mbGFncyB8PSBFWEVDX09CSkVDVF9T VVBQT1JUU180OEJfQUREUkVTUzsKKworCXJldHVybiBvYmplY3Q7Cit9CisKKy8qCisgKiBpbnRl bF9iYl9hZGRfcmVsb2M6CisgKiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCisgKiBAaGFuZGxl OiBvYmplY3QgaGFuZGxlIHdoaWNoIGFkZHJlc3Mgd2lsbCBiZSB0YWtlbiB0byBwYXRjaCB0aGUg YmIKKyAqIEByZWFkX2RvbWFpbnM6IGdlbSBkb21haW4gYml0cyBmb3IgdGhlIHJlbG9jYXRpb24K KyAqIEB3cml0ZV9kb21haW46IGdlbSBkb21haW4gYml0IGZvciB0aGUgcmVsb2NhdGlvbgorICog QGRlbHRhOiBkZWx0YSB2YWx1ZSB0byBhZGQgdG8gQGJ1ZmZlcidzIGdwdSBhZGRyZXNzCisgKiBA b2Zmc2V0OiBvZmZzZXQgd2l0aGluIGJiIHRvIGJlIHBhdGNoZWQKKyAqIEBwcmVzdW1lZF9vZmZz ZXQ6IGFkZHJlc3Mgb2YgdGhlIG9iamVjdCBpbiBhZGRyZXNzIHNwYWNlLCBpbXBvcnRhbnQgZm9y CisgKiBJOTE1X0VYRUNfTk9fUkVMT0MgZmxhZworICoKKyAqIEZ1bmN0aW9uIGFsbG9jYXRlcyBh ZGRpdGlvbmFsIHJlbG9jYXRpb24gc2xvdCBpbiByZWxvYyBhcnJheSBmb3IgYSBoYW5kbGUuCisg KiBJdCBhbHNvIGltcGxpY2l0bHkgYWRkcyBoYW5kbGUgaW4gdGhlIG9iamVjdHMgYXJyYXkgaWYg b2JqZWN0IGRvZXNuJ3QKKyAqIGV4aXN0cyBidXQgZG9lc24ndCBtYXJrIGl0IGFzIGEgcmVuZGVy IHRhcmdldC4KKyAqLworc3RhdGljIHVpbnQ2NF90IGludGVsX2JiX2FkZF9yZWxvYyhzdHJ1Y3Qg aW50ZWxfYmIgKmliYiwKKwkJCQkgICB1aW50MzJfdCBoYW5kbGUsCisJCQkJICAgdWludDMyX3Qg cmVhZF9kb21haW5zLAorCQkJCSAgIHVpbnQzMl90IHdyaXRlX2RvbWFpbiwKKwkJCQkgICB1aW50 NjRfdCBkZWx0YSwKKwkJCQkgICB1aW50NjRfdCBvZmZzZXQsCisJCQkJICAgdWludDY0X3QgcHJl c3VtZWRfb2Zmc2V0KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAq cmVsb2NzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmplY3Q7CisJdWlu dDMyX3QgaTsKKworCW9iamVjdCA9IGludGVsX2JiX2FkZF9vYmplY3QoaWJiLCBoYW5kbGUsIHBy ZXN1bWVkX29mZnNldCwgZmFsc2UpOworCisJcmVsb2NzID0gaWJiLT5yZWxvY3M7CisJaWYgKGli Yi0+bnVtX3JlbG9jcyA9PSBpYmItPmFsbG9jYXRlZF9yZWxvY3MpIHsKKwkJaWJiLT5hbGxvY2F0 ZWRfcmVsb2NzICs9IDQwOTYgLyBzaXplb2YoKnJlbG9jcyk7CisJCXJlbG9jcyA9IHJlYWxsb2Mo cmVsb2NzLCBzaXplb2YoKnJlbG9jcykgKiBpYmItPmFsbG9jYXRlZF9yZWxvY3MpOworCQlpZ3Rf YXNzZXJ0KHJlbG9jcyk7CisJCWliYi0+cmVsb2NzID0gcmVsb2NzOworCX0KKworCWkgPSBpYmIt Pm51bV9yZWxvY3MrKzsKKwltZW1zZXQoJnJlbG9jc1tpXSwgMCwgc2l6ZW9mKCpyZWxvY3MpKTsK KwlyZWxvY3NbaV0udGFyZ2V0X2hhbmRsZSA9IGhhbmRsZTsKKwlyZWxvY3NbaV0ucmVhZF9kb21h aW5zID0gcmVhZF9kb21haW5zOworCXJlbG9jc1tpXS53cml0ZV9kb21haW4gPSB3cml0ZV9kb21h aW47CisJcmVsb2NzW2ldLmRlbHRhID0gZGVsdGE7CisJcmVsb2NzW2ldLm9mZnNldCA9IG9mZnNl dDsKKwlyZWxvY3NbaV0ucHJlc3VtZWRfb2Zmc2V0ID0gb2JqZWN0LT5vZmZzZXQ7CisKKwlpZ3Rf ZGVidWcoImFkZCByZWxvYzogaGFuZGxlOiAldSwgci93OiAweCV4LzB4JXgsICIKKwkJICAiZGVs dGE6IDB4JSIgUFJJeDY0ICIsICIKKwkJICAib2Zmc2V0OiAweCUiIFBSSXg2NCAiLCAiCisJCSAg InBvZmZzZXQ6IDB4JSIgUFJJeDY0ICJcbiIsCisJCSAgaGFuZGxlLCByZWFkX2RvbWFpbnMsIHdy aXRlX2RvbWFpbiwKKwkJICBkZWx0YSwgb2Zmc2V0LCBwcmVzdW1lZF9vZmZzZXQpOworCisJcmV0 dXJuIG9iamVjdC0+b2Zmc2V0OworfQorCisvKioKKyAqIGludGVsX2JiX2VtaXRfcmVsb2M6Cisg KiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCisgKiBAaGFuZGxlOiBvYmplY3QgaGFuZGxlIHdo aWNoIGFkZHJlc3Mgd2lsbCBiZSB0YWtlbiB0byBwYXRjaCB0aGUgYmIKKyAqIEByZWFkX2RvbWFp bnM6IGdlbSBkb21haW4gYml0cyBmb3IgdGhlIHJlbG9jYXRpb24KKyAqIEB3cml0ZV9kb21haW46 IGdlbSBkb21haW4gYml0IGZvciB0aGUgcmVsb2NhdGlvbgorICogQGRlbHRhOiBkZWx0YSB2YWx1 ZSB0byBhZGQgdG8gQGJ1ZmZlcidzIGdwdSBhZGRyZXNzCisgKiBAcHJlc3VtZWRfb2Zmc2V0OiBh ZGRyZXNzIG9mIHRoZSBvYmplY3QgaW4gYWRkcmVzcyBzcGFjZSwgaW1wb3J0YW50IGZvcgorICog STkxNV9FWEVDX05PX1JFTE9DIGZsYWcKKyAqIEB3cml0ZTogZG9lcyBhIGhhbmRsZSBpcyBhIHJl bmRlciB0YXJnZXQKKyAqCisgKiBGdW5jdGlvbiBwcmVwYXJlcyByZWxvY2F0aW9uIChleGVjb2Jq IGlmIHJlcXVpcmVkICsgcmVsb2MpIGFuZCBlbWl0cworICogb2Zmc2V0IGluIGJiLiBGb3IgSTkx NV9FWEVDX05PX1JFTE9DIHByZXN1bWVkX29mZnNldCBpcyBhIGhpbnQgd2UgYWxyZWFkeQorICog aGF2ZSBvYmplY3QgaW4gdmFsaWQgcGxhY2UgYW5kIHJlbG9jYXRpb24gc3RlcCBjYW4gYmUgc2tp cHBlZCBpbiB0aGlzIGNhc2UuCisgKgorICogTm90ZTogZGVsdGEgaXMgdmFsdWUgYWRkZWQgdG8g YWRkcmVzcywgbW9zdGx5IHVzZWQgd2hlbiBzb21lIGluc3RydWN0aW9ucworICogcmVxdWlyZSBt b2RpZnktYml0IHNldCB0byBhcHBseSBjaGFuZ2UuIFdoaWNoIGRlbHRhIGlzIHZhbGlkIGRlcGVu ZHMKKyAqIG9uIGluc3RydWN0aW9uIChzZWUgaW5zdHJ1Y3Rpb24gc3BlY2lmaWNhdGlvbikuCisg Ki8KK3VpbnQ2NF90IGludGVsX2JiX2VtaXRfcmVsb2Moc3RydWN0IGludGVsX2JiICppYmIsCisJ CQkgdWludDMyX3QgaGFuZGxlLAorCQkJIHVpbnQzMl90IHJlYWRfZG9tYWlucywKKwkJCSB1aW50 MzJfdCB3cml0ZV9kb21haW4sCisJCQkgdWludDY0X3QgZGVsdGEsCisJCQkgdWludDY0X3QgcHJl c3VtZWRfb2Zmc2V0KQoreworCXVpbnQ2NF90IGFkZHJlc3M7CisKKwlpZ3RfYXNzZXJ0KGliYik7 CisKKwlhZGRyZXNzID0gaW50ZWxfYmJfYWRkX3JlbG9jKGliYiwgaGFuZGxlLCByZWFkX2RvbWFp bnMsIHdyaXRlX2RvbWFpbiwKKwkJCQkgICAgIGRlbHRhLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwK KwkJCQkgICAgIHByZXN1bWVkX29mZnNldCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBkZWx0YSAr IGFkZHJlc3MpOworCWlmIChpYmItPmdlbiA+PSA4KQorCQlpbnRlbF9iYl9vdXQoaWJiLCBhZGRy ZXNzID4+IDMyKTsKKworCXJldHVybiBhZGRyZXNzOworfQorCisvKioKKyAqIGludGVsX2JiX29m ZnNldF9yZWxvYzoKKyAqIEBpYmI6IHBvaW50ZXIgdG8gaW50ZWxfYmIKKyAqIEBoYW5kbGU6IG9i amVjdCBoYW5kbGUgd2hpY2ggYWRkcmVzcyB3aWxsIGJlIHRha2VuIHRvIHBhdGNoIHRoZSBiYgor ICogQHJlYWRfZG9tYWluczogZ2VtIGRvbWFpbiBiaXRzIGZvciB0aGUgcmVsb2NhdGlvbgorICog QHdyaXRlX2RvbWFpbjogZ2VtIGRvbWFpbiBiaXQgZm9yIHRoZSByZWxvY2F0aW9uCisgKiBAb2Zm c2V0OiBvZmZzZXQgd2l0aGluIGJiIHRvIGJlIHBhdGNoZWQKKyAqIEBwcmVzdW1lZF9vZmZzZXQ6 IGFkZHJlc3Mgb2YgdGhlIG9iamVjdCBpbiBhZGRyZXNzIHNwYWNlLCBpbXBvcnRhbnQgZm9yCisg KiBJOTE1X0VYRUNfTk9fUkVMT0MgZmxhZworICoKKyAqIEZ1bmN0aW9uIHByZXBhcmVzIHJlbG9j YXRpb24gKGV4ZWNvYmogaWYgcmVxdWlyZWQgKyByZWxvYykuIEl0IGl0IHVzZWQKKyAqIGZvciBl ZGl0aW5nIGJhdGNoYnVmZmVyIHZpYSBtb2RpZnlpbmcgc3RydWN0dXJlcy4gSXQgbWVhbnMgd2hl biB3ZSdyZQorICogcHJlcGFyaW5nIGJhdGNoYnVmZmVyIGl0IGlzIG1vcmUgZGVzY3JpcHRpdmUg dG8gZWRpdCB0aGUgc3RydWN0dXJlCisgKiB0aGFuIGVtaXR0aW5nIGR3b3Jkcy4gQnV0IGl0IHJl cXVpcmUgZm9yIHNvbWUgZmllbGRzIHRvIHBvaW50IHRoZQorICogcmVsb2NhdGlvbi4gRm9yIHRo YXQgY2FzZSBAb2Zmc2V0IGlzIHBhc3NlZCBieSB0aGUgdXNlciBhbmQgaXQgcG9pbnRzCisgKiB0 byB0aGUgb2Zmc2V0IGluIGJiIHdoZXJlIHRoZSByZWxvY2F0aW9uIHdpbGwgYmUgYXBwbGllZC4K KyAqLwordWludDY0X3QgaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKHN0cnVjdCBpbnRlbF9iYiAqaWJi LAorCQkJICAgICAgIHVpbnQzMl90IGhhbmRsZSwKKwkJCSAgICAgICB1aW50MzJfdCByZWFkX2Rv bWFpbnMsCisJCQkgICAgICAgdWludDMyX3Qgd3JpdGVfZG9tYWluLAorCQkJICAgICAgIHVpbnQz Ml90IG9mZnNldCwKKwkJCSAgICAgICB1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQpCit7CisJaWd0 X2Fzc2VydChpYmIpOworCisJcmV0dXJuIGludGVsX2JiX2FkZF9yZWxvYyhpYmIsIGhhbmRsZSwg cmVhZF9kb21haW5zLCB3cml0ZV9kb21haW4sCisJCQkJICAwLCBvZmZzZXQsIHByZXN1bWVkX29m ZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX2JiX2R1bXBfZXhlY2J1ZihzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY19vYmplY3QyICpvYmplY3RzOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9l bnRyeSAqcmVsb2NzLCAqcmVsb2M7CisJaW50IGksIGo7CisKKwlpZ3RfaW5mbygiZXhlY2J1ZiBi YXRjaCBsZW46ICV1LCBzdGFydCBvZmZzZXQ6IDB4JXgsICIKKwkJICJEUjE6IDB4JXgsIERSNDog MHgleCwgIgorCQkgIm51bSBjbGlwOiAldSwgY2xpcHB0cjogMHglbGx4LCAiCisJCSAiZmxhZ3M6 IDB4JWxseCwgcnN2ZDE6IDB4JWxseCwgcnN2ZDI6IDB4JWxseFxuIiwKKwkJIGV4ZWNidWYtPmJh dGNoX2xlbiwgZXhlY2J1Zi0+YmF0Y2hfc3RhcnRfb2Zmc2V0LAorCQkgZXhlY2J1Zi0+RFIxLCBl eGVjYnVmLT5EUjQsCisJCSBleGVjYnVmLT5udW1fY2xpcHJlY3RzLCBleGVjYnVmLT5jbGlwcmVj dHNfcHRyLAorCQkgZXhlY2J1Zi0+ZmxhZ3MsIGV4ZWNidWYtPnJzdmQxLCBleGVjYnVmLT5yc3Zk Mik7CisKKwlpZ3RfaW5mbygiZXhlY2J1ZiBidWZmZXJfY291bnQ6ICVkXG4iLCBleGVjYnVmLT5i dWZmZXJfY291bnQpOworCWZvciAoaSA9IDA7IGkgPCBleGVjYnVmLT5idWZmZXJfY291bnQ7IGkr KykgeworCQlvYmplY3RzID0gJigoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKikK KwkJCSAgICBmcm9tX3VzZXJfcG9pbnRlcihleGVjYnVmLT5idWZmZXJzX3B0cikpW2ldOworCQly ZWxvY3MgPSBmcm9tX3VzZXJfcG9pbnRlcihvYmplY3RzLT5yZWxvY3NfcHRyKTsKKwkJaWd0X2lu Zm8oIiBbJWRdIGhhbmRsZTogJXUsIHJlbG9jX2NvdW50OiAlZCwgcmVsb2NfcHRyOiAlcCwgIgor CQkJICJhbGlnbjogMHglbGx4LCBvZmZzZXQ6IDB4JWxseCwgZmxhZ3M6IDB4JWxseCwgIgorCQkJ ICJyc3ZkMTogMHglbGx4LCByc3ZkMjogMHglbGx4XG4iLAorCQkJIGksIG9iamVjdHMtPmhhbmRs ZSwgb2JqZWN0cy0+cmVsb2NhdGlvbl9jb3VudCwKKwkJCSByZWxvY3MsCisJCQkgb2JqZWN0cy0+ YWxpZ25tZW50LAorCQkJIG9iamVjdHMtPm9mZnNldCwgb2JqZWN0cy0+ZmxhZ3MsCisJCQkgb2Jq ZWN0cy0+cnN2ZDEsIG9iamVjdHMtPnJzdmQyKTsKKwkJaWYgKG9iamVjdHMtPnJlbG9jYXRpb25f Y291bnQpIHsKKwkJCWlndF9pbmZvKCJcdGV4ZWNidWYgcmVsb2NzOlxuIik7CisJCQlmb3IgKGog PSAwOyBqIDwgb2JqZWN0cy0+cmVsb2NhdGlvbl9jb3VudDsgaisrKSB7CisJCQkJcmVsb2MgPSAm cmVsb2NzW2pdOworCQkJCWlndF9pbmZvKCJcdCBbJWRdIHRhcmdldCBoYW5kbGU6ICV1LCAiCisJ CQkJCSAib2Zmc2V0OiAweCVsbHgsIGRlbHRhOiAweCV4LCAiCisJCQkJCSAicHJlc3VtZWRfb2Zm c2V0OiAweCVsbHgsICIKKwkJCQkJICJyZWFkX2RvbWFpbnM6IDB4JXgsICIKKwkJCQkJICJ3cml0 ZV9kb21haW46IDB4JXhcbiIsCisJCQkJCSBqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkJ IHJlbG9jLT5vZmZzZXQsIHJlbG9jLT5kZWx0YSwKKwkJCQkJIHJlbG9jLT5wcmVzdW1lZF9vZmZz ZXQsCisJCQkJCSByZWxvYy0+cmVhZF9kb21haW5zLAorCQkJCQkgcmVsb2MtPndyaXRlX2RvbWFp bik7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X25vZGUoY29uc3Qgdm9p ZCAqbm9kZSwgVklTSVQgd2hpY2gsIGludCBkZXB0aCkKK3sKKwljb25zdCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqb2JqZWN0ID0KKwkJCSooY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgKiopIG5vZGU7CisJKHZvaWQpIGRlcHRoOworCisJc3dpdGNoICh3 aGljaCkgeworCWNhc2UgcHJlb3JkZXI6CisJY2FzZSBlbmRvcmRlcjoKKwkJYnJlYWs7CisKKwlj YXNlIHBvc3RvcmRlcjoKKwljYXNlIGxlYWY6CisJCWlndF9pbmZvKCJcdCBoYW5kbGU6ICV1LCBv ZmZzZXQ6IDB4JSIgUFJJeDY0ICJcbiIsCisJCQkgb2JqZWN0LT5oYW5kbGUsICh1aW50NjRfdCkg b2JqZWN0LT5vZmZzZXQpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBAX19pbnRlbF9iYl9l eGVjOgorICogQGliYjogcG9pbnRlciB0byBpbnRlbF9iYgorICogQGVuZF9vZmZzZXQ6IG9mZnNl dCBvZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUgYmIKKyAqIEBmbGFnczogZmxhZ3MgcGFz c2VkIGRpcmVjdGx5IHRvIGV4ZWNidWYKKyAqIEBjdHg6IGNvbnRleHQKKyAqIEBzeW5jOiBpZiB0 cnVlIHdhaXQgZm9yIGV4ZWNidWYgY29tcGxldGlvbiwgb3RoZXJ3aXNlIGNhbGxlciBpcyByZXNw b25zaWJsZQorICogdG8gd2FpdCBmb3IgY29tcGxldGlvbgorICoKKyAqIFJldHVybnM6IDAgb24g c3VjY2Vzcywgb3RoZXJ3aXNlIGVycm5vLgorICoKKyAqIE5vdGU6IEluIHRoaXMgc3RlcCBleGVj b2JqIGZvciBiYiBpcyBhbGxvY2F0ZWQgYW5kIGluc2VydGVkIHRvIHRoZSBvYmplY3RzCisgKiBh cnJheS4KKyovCitpbnQgX19pbnRlbF9iYl9leGVjKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50 MzJfdCBlbmRfb2Zmc2V0LAorCQkgICAgdWludDMyX3QgY3R4LCB1aW50NjRfdCBmbGFncywgYm9v bCBzeW5jKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKKwlp bnQgcmV0OworCisJaWJiLT5vYmplY3RzWzBdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIo aWJiLT5yZWxvY3MpOworCWliYi0+b2JqZWN0c1swXS5yZWxvY2F0aW9uX2NvdW50ID0gaWJiLT5u dW1fcmVsb2NzOworCWliYi0+b2JqZWN0c1swXS5oYW5kbGUgPSBpYmItPmhhbmRsZTsKKworCWdl bV93cml0ZShpYmItPmk5MTUsIGliYi0+aGFuZGxlLCAwLCBpYmItPmJhdGNoLCBpYmItPnNpemUp OworCisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOworCWV4ZWNidWYuYnVm ZmVyc19wdHIgPSAodWludHB0cl90KSBpYmItPm9iamVjdHM7CisJZXhlY2J1Zi5idWZmZXJfY291 bnQgPSBpYmItPm51bV9vYmplY3RzOworCWV4ZWNidWYuYmF0Y2hfbGVuID0gZW5kX29mZnNldDsK KwlleGVjYnVmLnJzdmQxID0gY3R4OworCWV4ZWNidWYuZmxhZ3MgPSBmbGFncyB8IEk5MTVfRVhF Q19CQVRDSF9GSVJTVDsKKworCXJldCA9IF9fZ2VtX2V4ZWNidWYoaWJiLT5pOTE1LCAmZXhlY2J1 Zik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzeW5jIHx8IGliYi0+ZGVidWcp CisJCWdlbV9zeW5jKGliYi0+aTkxNSwgaWJiLT5oYW5kbGUpOworCisJaWYgKGliYi0+ZGVidWcp IHsKKwkJaW50ZWxfYmJfZHVtcF9leGVjYnVmKCZleGVjYnVmKTsKKwkJaWYgKGludGVsX2JiX2Rl YnVnX3RyZWUpIHsKKwkJCWlndF9pbmZvKCJcblRyZWU6XG4iKTsKKwkJCXR3YWxrKGliYi0+cm9v dCwgcHJpbnRfbm9kZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpbnRl bF9iYl9leGVjOgorICogQGliYjogcG9pbnRlciB0byBpbnRlbF9iYgorICogQGVuZF9vZmZzZXQ6 IG9mZnNldCBvZiB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpbiB0aGUgYmIKKyAqIEBmbGFnczogZmxh Z3MgcGFzc2VkIGRpcmVjdGx5IHRvIGV4ZWNidWYKKyAqIEBzeW5jOiBpZiB0cnVlIHdhaXQgZm9y IGV4ZWNidWYgY29tcGxldGlvbiwgb3RoZXJ3aXNlIGNhbGxlciBpcyByZXNwb25zaWJsZQorICog dG8gd2FpdCBmb3IgY29tcGxldGlvbgorICoKKyAqIERvIGV4ZWNidWYgd2l0aCBkZWZhdWx0IGNv bnRleHQuIEFzc2VydHMgb24gZmFpbHVyZS4KKyovCit2b2lkIGludGVsX2JiX2V4ZWMoc3RydWN0 IGludGVsX2JiICppYmIsIHVpbnQzMl90IGVuZF9vZmZzZXQsCisJCSAgIHVpbnQ2NF90IGZsYWdz LCBib29sIHN5bmMpCit7CisJaWd0X2Fzc2VydF9lcShfX2ludGVsX2JiX2V4ZWMoaWJiLCBlbmRf b2Zmc2V0LCAwLCBmbGFncywgc3luYyksIDApOworfQorCisvKgorICogaW50ZWxfYmJfZXhlY193 aXRoX2NvbnRleHQ6CisgKiBAaWJiOiBwb2ludGVyIHRvIGludGVsX2JiCisgKiBAZW5kX29mZnNl dDogb2Zmc2V0IG9mIHRoZSBsYXN0IGluc3RydWN0aW9uIGluIHRoZSBiYgorICogQGZsYWdzOiBm bGFncyBwYXNzZWQgZGlyZWN0bHkgdG8gZXhlY2J1ZgorICogQGN0eDogY29udGV4dAorICogQHN5 bmM6IGlmIHRydWUgd2FpdCBmb3IgZXhlY2J1ZiBjb21wbGV0aW9uLCBvdGhlcndpc2UgY2FsbGVy IGlzIHJlc3BvbnNpYmxlCisgKiB0byB3YWl0IGZvciBjb21wbGV0aW9uCisgKgorICogRG8gZXhl Y2J1ZiB3aXRoIGNvbnRleHQgQGNvbnRleHQuCisqLwordm9pZCBpbnRlbF9iYl9leGVjX3dpdGhf Y29udGV4dChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgZW5kX29mZnNldCwKKwkJCQl1 aW50MzJfdCBjdHgsIHVpbnQ2NF90IGZsYWdzLCBib29sIHN5bmMpCit7CisJaWd0X2Fzc2VydF9l cShfX2ludGVsX2JiX2V4ZWMoaWJiLCBlbmRfb2Zmc2V0LCBjdHgsIGZsYWdzLCBzeW5jKSwgMCk7 Cit9CisKKy8qKgorICogaW50ZWxfYmJfZ2V0X29iamVjdF9hZGRyZXNzOgorICogQGliYjogcG9p bnRlciB0byBpbnRlbF9iYgorICogQGhhbmRsZTogb2JqZWN0IGhhbmRsZQorICoKKyAqIFdoZW4g b2JqZWN0cyBhZGRyZXNzZXMgYXJlIHByZXZpb3VzbHkgcGlubmVkIGFuZCB3ZSBkb24ndCB3YW50 IHRvIHJlbG9jYXRlCisgKiB3ZSBuZWVkIHRvIGFjcXVpcmUgdGhlbSBmcm9tIHByZXZpb3VzIGV4 ZWNidWYuIEZ1bmN0aW9uIHJldHVybnMgcHJldmlvdXMKKyAqIG9iamVjdCBvZmZzZXQgZm9yIEBo YW5kbGUgb3IgMCBpZiBvYmplY3QgaXMgbm90IGZvdW5kLgorICovCit1aW50NjRfdCBpbnRlbF9i Yl9nZXRfb2JqZWN0X29mZnNldChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgaGFuZGxl KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iamVjdCA9IHsgLmhhbmRs ZSA9IGhhbmRsZSB9OworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICoqZm91bmQ7 CisKKwlpZ3RfYXNzZXJ0KGliYik7CisKKwlmb3VuZCA9IHRmaW5kKCh2b2lkICopICZvYmplY3Qs ICZpYmItPnJvb3QsIF9fY29tcGFyZV9vYmplY3RzKTsKKwlpZiAoIWZvdW5kKQorCQlyZXR1cm4g MDsKKworCXJldHVybiAoKmZvdW5kKS0+b2Zmc2V0OworfQpkaWZmIC0tZ2l0IGEvbGliL2ludGVs X2JhdGNoYnVmZmVyLmggYi9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaAppbmRleCA0NDJmM2ExOC4u NWYxNjI1NDYgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oCisrKyBiL2xpYi9p bnRlbF9iYXRjaGJ1ZmZlci5oCkBAIC03LDYgKzcsNyBAQAogCiAjaW5jbHVkZSAiaWd0X2NvcmUu aCIKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKKyNpbmNsdWRlICJkcm10ZXN0LmgiCiAKICNkZWZp bmUgQkFUQ0hfU1ogNDA5NgogI2RlZmluZSBCQVRDSF9SRVNFUlZFRCAxNgpAQCAtNDIyLDQgKzQy MywxMDQgQEAgdHlwZWRlZiB2b2lkICgqaWd0X21lZGlhX3NwaW5mdW5jX3QpKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAKIGlndF9tZWRpYV9zcGluZnVuY190IGlndF9nZXRfbWVk aWFfc3BpbmZ1bmMoaW50IGRldmlkKTsKIAorCisvKgorICogQmF0Y2hidWZmZXIgd2l0aG91dCBs aWJkcm0gZGVwZW5kZW5jeQorICovCitzdHJ1Y3QgaW50ZWxfYmIgeworCWludCBpOTE1OworCWlu dCBnZW47CisJYm9vbCBkZWJ1ZzsKKwl1aW50MzJfdCBkZXZpZDsKKwl1aW50MzJfdCBoYW5kbGU7 CisJdWludDMyX3Qgc2l6ZTsKKwl1aW50MzJfdCAqYmF0Y2g7CisJdWludDMyX3QgKnB0cjsKKwor CXVpbnQzMl90IHBybmc7CisJdWludDY0X3QgZ3R0X3NpemU7CisJYm9vbCBzdXBwb3J0c180OGJf YWRkcmVzczsKKworCXZvaWQgKnJvb3Q7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVj dDIgKm9iamVjdHM7CisJdWludDMyX3QgbnVtX29iamVjdHM7CisJdWludDMyX3QgYWxsb2NhdGVk X29iamVjdHM7CisJdWludDY0X3QgYmF0Y2hfb2Zmc2V0OworCisJc3RydWN0IGRybV9pOTE1X2dl bV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3M7CisJdWludDMyX3QgbnVtX3JlbG9jczsKKwl1aW50 MzJfdCBhbGxvY2F0ZWRfcmVsb2NzOworfTsKKworc3RydWN0IGludGVsX2JiICppbnRlbF9iYl9j cmVhdGUoaW50IGk5MTUsIHVpbnQzMl90IHNpemUpOworCit2b2lkIGludGVsX2JiX2Rlc3Ryb3ko c3RydWN0IGludGVsX2JiICppYmIpOwordm9pZCBpbnRlbF9iYl9zZXRfZGVidWcoc3RydWN0IGlu dGVsX2JiICppYmIsIGJvb2wgZGVidWcpOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGludGVs X2JiX29mZnNldChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKK3sKKwlyZXR1cm4gKHVpbnQzMl90KSAo KHVpbnQ4X3QgKikgaWJiLT5wdHIgLSAodWludDhfdCAqKSBpYmItPmJhdGNoKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkIGludGVsX2JiX3B0cl9zZXQoc3RydWN0IGludGVsX2JiICppYmIsIHVp bnQzMl90IG9mZnNldCkKK3sKKwlpYmItPnB0ciA9ICh2b2lkICopICgodWludDhfdCAqKSBpYmIt PmJhdGNoICsgb2Zmc2V0KTsKKworCWlndF9hc3NlcnQoaW50ZWxfYmJfb2Zmc2V0KGliYikgPCBp YmItPnNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfYmJfcHRyX2FkZChzdHJ1 Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qgb2Zmc2V0KQoreworCWludGVsX2JiX3B0cl9zZXQo aWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBpbnRlbF9iYl9wdHJfYWxpZ24oc3RydWN0IGludGVsX2JiICppYmIsCisJCQkJICAgICAg dWludDMyX3QgYWxpZ25tZW50KQoreworCWludGVsX2JiX3B0cl9zZXQoaWJiLCBBTElHTihpbnRl bF9iYl9vZmZzZXQoaWJiKSwgYWxpZ25tZW50KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAq aW50ZWxfYmJfcHRyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQoreworCXJldHVybiAodm9pZCAqKSBp YmItPnB0cjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludGVsX2JiX291dChzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwgdWludDMyX3QgZHdvcmQpCit7CisJKmliYi0+cHRyID0gZHdvcmQ7CisJaWJi LT5wdHIrKzsKKworCWlndF9hc3NlcnQoaW50ZWxfYmJfb2Zmc2V0KGliYikgPCBpYmItPnNpemUp OworfQorCisKK3N0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICoKK2ludGVsX2JiX2Fk ZF9vYmplY3Qoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGhhbmRsZSwKKwkJICAgIHVp bnQ2NF90IG9mZnNldCwgYm9vbCB3cml0ZSk7CisKK3VpbnQ2NF90IGludGVsX2JiX2VtaXRfcmVs b2Moc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgdWludDMyX3QgaGFuZGxlLAorCQkJIHVpbnQz Ml90IHJlYWRfZG9tYWlucywKKwkJCSB1aW50MzJfdCB3cml0ZV9kb21haW4sCisJCQkgdWludDY0 X3QgZGVsdGEsCisJCQkgdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0KTsKKwordWludDY0X3QgaW50 ZWxfYmJfb2Zmc2V0X3JlbG9jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICAgIHVpbnQz Ml90IGhhbmRsZSwKKwkJCSAgICAgICB1aW50MzJfdCByZWFkX2RvbWFpbnMsCisJCQkgICAgICAg dWludDMyX3Qgd3JpdGVfZG9tYWluLAorCQkJICAgICAgIHVpbnQzMl90IG9mZnNldCwKKwkJCSAg ICAgICB1aW50NjRfdCBwcmVzdW1lZF9vZmZzZXQpOworCitpbnQgX19pbnRlbF9iYl9leGVjKHN0 cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBlbmRfb2Zmc2V0LAorCQkgICAgdWludDMyX3Qg Y3R4LCB1aW50NjRfdCBmbGFncywgYm9vbCBzeW5jKTsKKwordm9pZCBpbnRlbF9iYl9leGVjKHN0 cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBlbmRfb2Zmc2V0LAorCQkgICB1aW50NjRfdCBm bGFncywgYm9vbCBzeW5jKTsKKwordm9pZCBpbnRlbF9iYl9leGVjX3dpdGhfY29udGV4dChzdHJ1 Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgZW5kX29mZnNldCwKKwkJCQl1aW50MzJfdCBjdHgs IHVpbnQ2NF90IGZsYWdzLCBib29sIHN5bmMpOworCit1aW50NjRfdCBpbnRlbF9iYl9nZXRfb2Jq ZWN0X29mZnNldChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgaGFuZGxlKTsKKwogI2Vu ZGlmCi0tIAoyLjI2LjAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgo=