From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3BA326E519 for ; Wed, 14 Aug 2019 10:21:57 +0000 (UTC) From: Lukasz Kalamarz Date: Wed, 14 Aug 2019 12:21:37 +0200 Message-Id: <20190814102140.3275-2-lukasz.kalamarz@intel.com> In-Reply-To: <20190814102140.3275-1-lukasz.kalamarz@intel.com> References: <20190814102140.3275-1-lukasz.kalamarz@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [RFC PATCH 1/4] lib/i915/gem_mman: add mmap_offset support 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: Matthew Auld List-ID: V2l0aCBpbnRyb2R1Y3Rpb24gb2YgTE1FTSBjb25jZXB0IG5ldyBJT0NUTCBjYWxsIHdlcmUgaW1w bGVtZW50ZWQKLSBnZW1fbW1hcF9vZmZzZXQuIFRoaXMgcGF0Y2ggYWRkIHN1cHBvcnQgaW4gSUdU IGZvciBpdC4KClNpZ25lZC1vZmYtYnk6IEx1a2FzeiBLYWxhbWFyeiA8bHVrYXN6LmthbGFtYXJ6 QGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogQW50b25pbyBBcmdlbnppYW5vIDxhbnRvbmlvLmFy Z2Vuemlhbm9AaW50ZWwuY29tPgpDYzogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwu Y29tPgpDYzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29t PgotLS0KIGxpYi9pOTE1L2dlbV9tbWFuLmMgfCAxODggKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0KIGxpYi9pOTE1L2dlbV9tbWFuLmggfCAgMzcgKysrKysrKyst CiAyIGZpbGVzIGNoYW5nZWQsIDIwMiBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fbW1hbi5jIGIvbGliL2k5MTUvZ2VtX21tYW4uYwppbmRl eCAzY2Y5YTZiYi4uMmIyOGE2N2MgMTAwNjQ0Ci0tLSBhL2xpYi9pOTE1L2dlbV9tbWFuLmMKKysr IGIvbGliL2k5MTUvZ2VtX21tYW4uYwpAQCAtNDAsNiArNDAsMjcgQEAKICNkZWZpbmUgVkcoeCkg ZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAorI2RlZmluZSBMT0NBTF9JOTE1X1BBUkFNX01NQVBf T0ZGU0VUX1ZFUlNJT04gNTQKKworYm9vbCBnZW1faGFzX21tYXBfb2Zmc2V0KGludCBmZCkKK3sK KwlzdGF0aWMgaW50IGhhc19tbWFwX29mZnNldCA9IC0xOworCisJaWYgKGhhc19tbWFwX29mZnNl dCA9PSAtMSkgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2V0cGFyYW0gZ3A7CisKKwkJaGFzX21tYXBf b2Zmc2V0ID0gMDsKKworCQltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3ApKTsKKwkJZ3AucGFyYW0g PSBMT0NBTF9JOTE1X1BBUkFNX01NQVBfT0ZGU0VUX1ZFUlNJT047CisJCWdwLnZhbHVlID0gJmhh c19tbWFwX29mZnNldDsKKwkJaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3Ap OworCX0KKworCXJldHVybiBoYXNfbW1hcF9vZmZzZXQgPiAwOworfQorCisKIC8qKgogICogX19n ZW1fbW1hcF9fZ3R0OgogICogQGZkOiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgpAQCAt MTA2LDM1ICsxMjcsODAgQEAgYm9vbCBnZW1fbW1hcF9faGFzX3djKGludCBmZCkKIAlzdGF0aWMg aW50IGhhc193YyA9IC0xOwogCiAJaWYgKGhhc193YyA9PSAtMSkgewotCQlzdHJ1Y3QgZHJtX2k5 MTVfZ2V0cGFyYW0gZ3A7Ci0JCWludCBtbWFwX3ZlcnNpb24gPSAtMTsKLQkJaW50IGd0dF92ZXJz aW9uID0gLTE7CiAKIAkJaGFzX3djID0gMDsKIAotCQltZW1zZXQoJmdwLCAwLCBzaXplb2YoZ3Ap KTsKLQkJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX01NQVBfR1RUX1ZFUlNJT047Ci0JCWdwLnZhbHVl ID0gJmd0dF92ZXJzaW9uOwotCQlpb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZn cCk7Ci0KLQkJbWVtc2V0KCZncCwgMCwgc2l6ZW9mKGdwKSk7Ci0JCWdwLnBhcmFtID0gSTkxNV9Q QVJBTV9NTUFQX1ZFUlNJT047Ci0JCWdwLnZhbHVlID0gJm1tYXBfdmVyc2lvbjsKLQkJaW9jdGwo ZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOwotCi0JCS8qIERvIHdlIGhhdmUgdGhl IG5ldyBtbWFwX2lvY3RsIHdpdGggRE9NQUlOX1dDPyAqLwotCQlpZiAobW1hcF92ZXJzaW9uID49 IDEgJiYgZ3R0X3ZlcnNpb24gPj0gMikgewotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwIGFy ZzsKKwkJLyogRG8gd2UgaGF2ZSB0aGUgbmV3IG1tYXBfb2Zmc2V0IGlvY3RsPyAqLworCQlpZiAo Z2VtX2hhc19tbWFwX29mZnNldChmZCkpIHsKKwkJCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFw X29mZnNldCBhcmc7CiAKIAkJCS8qIERvZXMgdGhpcyBkZXZpY2Ugc3VwcG9ydCB3Yy1tbWFwcyA/ ICovCiAJCQltZW1zZXQoJmFyZywgMCwgc2l6ZW9mKGFyZykpOwogCQkJYXJnLmhhbmRsZSA9IGdl bV9jcmVhdGUoZmQsIDQwOTYpOwogCQkJYXJnLm9mZnNldCA9IDA7Ci0JCQlhcmcuc2l6ZSA9IDQw OTY7Ci0JCQlhcmcuZmxhZ3MgPSBJOTE1X01NQVBfV0M7Ci0JCQloYXNfd2MgPSBpZ3RfaW9jdGwo ZmQsIERSTV9JT0NUTF9JOTE1X0dFTV9NTUFQLCAmYXJnKSA9PSAwOworCQkJYXJnLmZsYWdzID0g TE9DQUxfSTkxNV9NTUFQX09GRlNFVF9XQzsKKwkJCWhhc193YyA9IGlndF9pb2N0bChmZCwgTE9D QUxfSU9DVExfSTkxNV9HRU1fTU1BUF9PRkZTRVQsCisJCQkJCSAgICZhcmcpID09IDA7CisJCQln ZW1fY2xvc2UoZmQsIGFyZy5oYW5kbGUpOworCQl9IGVsc2UgeworCQkJc3RydWN0IGRybV9pOTE1 X2dldHBhcmFtIGdwOworCQkJaW50IG1tYXBfdmVyc2lvbiA9IC0xOworCQkJaW50IGd0dF92ZXJz aW9uID0gLTE7CisKKwkJCW1lbXNldCgmZ3AsIDAsIHNpemVvZihncCkpOworCQkJZ3AucGFyYW0g PSBJOTE1X1BBUkFNX01NQVBfR1RUX1ZFUlNJT047CisJCQlncC52YWx1ZSA9ICZndHRfdmVyc2lv bjsKKwkJCWlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRVRQQVJBTSwgJmdwKTsKKworCQkJbWVt c2V0KCZncCwgMCwgc2l6ZW9mKGdwKSk7CisJCQlncC5wYXJhbSA9IEk5MTVfUEFSQU1fTU1BUF9W RVJTSU9OOworCQkJZ3AudmFsdWUgPSAmbW1hcF92ZXJzaW9uOworCQkJaW9jdGwoZmQsIERSTV9J T0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApOworCisJCQkvKiBEbyB3ZSBoYXZlIHRoZSBtbWFwX2lv Y3RsIHdpdGggRE9NQUlOX1dDPyAqLworCQkJaWYgKG1tYXBfdmVyc2lvbiA+PSAxICYmIGd0dF92 ZXJzaW9uID49IDIpIHsKKwkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXAgYXJnOworCisJCQkJ LyogRG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IHdjLW1tYXBzID8gKi8KKwkJCQltZW1zZXQoJmFy ZywgMCwgc2l6ZW9mKGFyZykpOworCQkJCWFyZy5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2 KTsKKwkJCQlhcmcub2Zmc2V0ID0gMDsKKwkJCQlhcmcuc2l6ZSA9IDQwOTY7CisJCQkJYXJnLmZs YWdzID0gSTkxNV9NTUFQX1dDOworCQkJCWhhc193YyA9IGlndF9pb2N0bChmZCwgRFJNX0lPQ1RM X0k5MTVfR0VNX01NQVAsCisJCQkJCQkgICAmYXJnKSA9PSAwOworCQkJCWdlbV9jbG9zZShmZCwg YXJnLmhhbmRsZSk7CisJCQl9CisJCX0KKworCQllcnJubyA9IDA7CisJfQorCisJcmV0dXJuIGhh c193YyA+IDA7Cit9CisKK2Jvb2wgZ2VtX21tYXBfb2Zmc2V0X19oYXNfd2MoaW50IGZkKQorewor CXN0YXRpYyBpbnQgaGFzX3djID0gLTE7CisKKwlpZiAoaGFzX3djID09IC0xKSB7CisKKwkJaGFz X3djID0gMDsKKworCQkvKiBEbyB3ZSBoYXZlIHRoZSBuZXcgbW1hcF9vZmZzZXQgaW9jdGw/ICov CisJCWlmIChnZW1faGFzX21tYXBfb2Zmc2V0KGZkKSkgeworCQkJc3RydWN0IGxvY2FsX2k5MTVf Z2VtX21tYXBfb2Zmc2V0IGFyZzsKKworCQkJLyogRG9lcyB0aGlzIGRldmljZSBzdXBwb3J0IHdj LW1tYXBzID8gKi8KKwkJCW1lbXNldCgmYXJnLCAwLCBzaXplb2YoYXJnKSk7CisJCQlhcmcuaGFu ZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CisJCQlhcmcub2Zmc2V0ID0gMDsKKwkJCWFyZy5m bGFncyA9IExPQ0FMX0k5MTVfTU1BUF9PRkZTRVRfV0M7CisJCQloYXNfd2MgPSBpZ3RfaW9jdGwo ZmQsIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX01NQVBfT0ZGU0VULAorCQkJCQkgICAmYXJnKSA9PSAw OwogCQkJZ2VtX2Nsb3NlKGZkLCBhcmcuaGFuZGxlKTsKIAkJfQorCiAJCWVycm5vID0gMDsKIAl9 CiAKQEAgLTE1Nyw4ICsyMjMsOCBAQCBib29sIGdlbV9tbWFwX19oYXNfd2MoaW50IGZkKQogICoK ICAqIFJldHVybnM6IEEgcG9pbnRlciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVM TCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgdm9pZAotKl9fZ2VtX21tYXAoaW50IGZkLCB1aW50 MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgaW50 IHByb3QsIHVpbnQ2NF90IGZsYWdzKQordm9pZCAqX19nZW1fbW1hcChpbnQgZmQsIHVpbnQzMl90 IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLAorCQkgdW5zaWduZWQgaW50 IHByb3QsIHVpbnQ2NF90IGZsYWdzKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCBhcmc7 CiAKQEAgLTE3Nyw2ICsyNDMsNDMgQEAgc3RhdGljIHZvaWQKIAlyZXR1cm4gZnJvbV91c2VyX3Bv aW50ZXIoYXJnLmFkZHJfcHRyKTsKIH0KIAorLyoqCisgKiBfX2dlbV9tbWFwX29mZnNldDoKKyAq IEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBoYW5kbGU6IGdlbSBidWZm ZXIgb2JqZWN0IGhhbmRsZQorICogQG9mZnNldDogb2Zmc2V0IGluIHRoZSBnZW0gYnVmZmVyIG9m IHRoZSBtbWFwIGFyZW5hCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgbW1hcCBhcmVuYQorICogQHBy b3Q6IG1lbW9yeSBwcm90ZWN0aW9uIGJpdHMgYXMgdXNlZCBieSBtbWFwKCkKKyAqIEBmbGFnczog ZmxhZ3MgdXNlZCB0byBkZXRlcm1pbmUgY2FjaGluZworICoKKyAqIFNpbWlsYXIgdG8gX19nZW1f bW1hcCBidXQgdXNlIE1NQVBfT0ZGU0VUIElPQ1RMLgorICoKKyAqIFJldHVybnM6IEEgcG9pbnRl ciB0byB0aGUgY3JlYXRlZCBtZW1vcnkgbWFwcGluZywgTlVMTCBvbiBmYWlsdXJlLgorICovCit2 b2lkICpfX2dlbV9tbWFwX29mZnNldChpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qg b2Zmc2V0LCB1aW50NjRfdCBzaXplLAorCQkJdW5zaWduZWQgaW50IHByb3QsIHVpbnQ2NF90IGZs YWdzKQoreworCXN0cnVjdCBsb2NhbF9pOTE1X2dlbV9tbWFwX29mZnNldCBhcmc7CisJdm9pZCAq cHRyOworCisJbWVtc2V0KCZhcmcsIDAsIHNpemVvZihhcmcpKTsKKwlhcmcuaGFuZGxlID0gaGFu ZGxlOworCWFyZy5vZmZzZXQgPSBvZmZzZXQ7CisJYXJnLmZsYWdzID0gZmxhZ3M7CisKKwlpZiAo aWd0X2lvY3RsKGZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9NTUFQX09GRlNFVCwgJmFyZykpCisJ CXJldHVybiBOVUxMOworCisJcHRyID0gbW1hcDY0KDAsIHNpemUsIHByb3QsIE1BUF9TSEFSRUQs IGZkLCBhcmcub2Zmc2V0KTsKKworCWlmIChwdHIgPT0gTUFQX0ZBSUxFRCkKKwkJcHRyID0gTlVM TDsKKwllbHNlCisJCWVycm5vID0gMDsKKworCXJldHVybiBwdHI7Cit9CisKIC8qKgogICogX19n ZW1fbW1hcF9fd2M6CiAgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCkBAIC0x OTQsNyArMjk3LDEwIEBAIHN0YXRpYyB2b2lkCiAgKi8KIHZvaWQgKl9fZ2VtX21tYXBfX3djKGlu dCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVu c2lnbmVkIHByb3QpCiB7Ci0JcmV0dXJuIF9fZ2VtX21tYXAoZmQsIGhhbmRsZSwgb2Zmc2V0LCBz aXplLCBwcm90LCBJOTE1X01NQVBfV0MpOworCWlmIChnZW1faGFzX21tYXBfb2Zmc2V0KGZkKSkK KwkJcmV0dXJuIF9fZ2VtX21tYXBfb2Zmc2V0KGZkLCBoYW5kbGUsIG9mZnNldCwgc2l6ZSwgcHJv dCwgTE9DQUxfSTkxNV9NTUFQX09GRlNFVF9XQyk7CisJZWxzZQorCQlyZXR1cm4gX19nZW1fbW1h cChmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QsIEk5MTVfTU1BUF9XQyk7CiB9CiAKIC8q KgpAQCAtMjE2LDYgKzMyMiw0MyBAQCB2b2lkICpnZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJf dCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaQogCXJldHVybiBw dHI7CiB9CiAKKy8qKgorICogX19nZW1fbW1hcF9vZmZzZXRfX3djOgorICogQGZkOiBvcGVuIGk5 MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQGhhbmRsZTogZ2VtIGJ1ZmZlciBvYmplY3QgaGFu ZGxlCisgKiBAb2Zmc2V0OiBvZmZzZXQgaW4gdGhlIGdlbSBidWZmZXIgb2YgdGhlIG1tYXAgYXJl bmEKKyAqIEBzaXplOiBzaXplIG9mIHRoZSBtbWFwIGFyZW5hCisgKiBAcHJvdDogbWVtb3J5IHBy b3RlY3Rpb24gYml0cyBhcyB1c2VkIGJ5IG1tYXAoKQorICoKKyAqIFNpbWlsYXIgdG8gX19nZW1f bW1hcF9fd2MgYnV0IHRoaXMgdGltZSB3ZSB1c2UgTU1BUF9PRkZTRVQgSU9DVEwuCisgKgorICog UmV0dXJuczogQSBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG1lbW9yeSBtYXBwaW5nLCBOVUxMIG9u IGZhaWx1cmUuCisgKi8KK3ZvaWQgKl9fZ2VtX21tYXBfb2Zmc2V0X193YyhpbnQgZmQsIHVpbnQz Ml90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90 KQoreworCXJldHVybiBfX2dlbV9tbWFwX29mZnNldChmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUs IHByb3QsIExPQ0FMX0k5MTVfTU1BUF9PRkZTRVRfV0MpOworfQorCisvKioKKyAqIGdlbV9tbWFw X29mZnNldF9fd2M6CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBA aGFuZGxlOiBnZW0gYnVmZmVyIG9iamVjdCBoYW5kbGUKKyAqIEBvZmZzZXQ6IG9mZnNldCBpbiB0 aGUgZ2VtIGJ1ZmZlciBvZiB0aGUgbW1hcCBhcmVuYQorICogQHNpemU6IHNpemUgb2YgdGhlIG1t YXAgYXJlbmEKKyAqIEBwcm90OiBtZW1vcnkgcHJvdGVjdGlvbiBiaXRzIGFzIHVzZWQgYnkgbW1h cCgpCisgKgorICogTGlrZSBfX2dlbV9tbWFwX29mZnNldF9fd2MoKSBleGNlcHQgd2UgYXNzZXJ0 IG9uIGZhaWx1cmUuCisgKgorICogUmV0dXJuczogQSBwb2ludGVyIHRvIHRoZSBjcmVhdGVkIG1l bW9yeSBtYXBwaW5nCisgKi8KK3ZvaWQgKmdlbV9tbWFwX29mZnNldF9fd2MoaW50IGZkLCB1aW50 MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJv dCkKK3sKKwl2b2lkICpwdHIgPSBfX2dlbV9tbWFwX29mZnNldF9fd2MoZmQsIGhhbmRsZSwgb2Zm c2V0LCBzaXplLCBwcm90KTsKKworCWlndF9hc3NlcnQocHRyKTsKKwlyZXR1cm4gcHRyOworfQor CiAvKioKICAqIF9fZ2VtX21tYXBfX2NwdToKICAqIEBmZDogb3BlbiBpOTE1IGRybSBmaWxlIGRl c2NyaXB0b3IKQEAgLTI0OSw2ICszOTIsNyBAQCB2b2lkICpfX2dlbV9tbWFwX19jcHUoaW50IGZk LCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdQogdm9p ZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0 LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KQogewogCXZvaWQgKnB0ciA9IF9fZ2VtX21t YXBfX2NwdShmZCwgaGFuZGxlLCBvZmZzZXQsIHNpemUsIHByb3QpOworCiAJaWd0X2Fzc2VydChw dHIpOwogCXJldHVybiBwdHI7CiB9CmRpZmYgLS1naXQgYS9saWIvaTkxNS9nZW1fbW1hbi5oIGIv bGliL2k5MTUvZ2VtX21tYW4uaAppbmRleCBmNzI0MmVkNy4uY2RkZjI2OTggMTAwNjQ0Ci0tLSBh L2xpYi9pOTE1L2dlbV9tbWFuLmgKKysrIGIvbGliL2k5MTUvZ2VtX21tYW4uaApAQCAtMjUsMTkg KzI1LDU0IEBACiAjaWZuZGVmIEdFTV9NTUFOX0gKICNkZWZpbmUgR0VNX01NQU5fSAogCisjZGVm aW5lIExPQ0FMX0k5MTVfR0VNX01NQVBfT0ZGU0VUICAgICAgIERSTV9JOTE1X0dFTV9NTUFQX0dU VAorI2RlZmluZSAgTE9DQUxfSU9DVExfSTkxNV9HRU1fTU1BUF9PRkZTRVQgICAgICAgICBEUk1f SU9XUihEUk1fQ09NTUFORF9CQVNFICsgTE9DQUxfSTkxNV9HRU1fTU1BUF9PRkZTRVQsIHN0cnVj dCBsb2NhbF9pOTE1X2dlbV9tbWFwX29mZnNldCkKKworc3RydWN0IGxvY2FsX2k5MTVfZ2VtX21t YXBfb2Zmc2V0IHsKKwkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8K KwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOworCS8qKgorCSAqIEZha2Ugb2Zmc2V0IHRvIHVz ZSBmb3Igc3Vic2VxdWVudCBtbWFwIGNhbGwKKwkgKgorCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXpl IHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCisJICovCisJX191NjQgb2Zmc2V0OworCS8q KgorCSAqIEZsYWdzIGZvciBleHRlbmRlZCBiZWhhdmlvdXIuCisJICoKKwkgKiBJdCBpcyBtYW5k YXRvcnkgdGhhdCBlaXRoZXIgb25lIG9mIHRoZSBfV0MvX1dCIGZsYWdzCisJICogc2hvdWxkIGJl IHBhc3NlZCBoZXJlLgorCSAqLworCV9fdTY0IGZsYWdzOworI2RlZmluZSBMT0NBTF9JOTE1X01N QVBfT0ZGU0VUX1dDICgxIDw8IDApCisjZGVmaW5lIExPQ0FMX0k5MTVfTU1BUF9PRkZTRVRfV0Ig KDEgPDwgMSkKKyNkZWZpbmUgTE9DQUxfSTkxNV9NTUFQX09GRlNFVF9VQyAoMSA8PCAyKQorI2Rl ZmluZSBMT0NBTF9JOTE1X01NQVBfT0ZGU0VUX0ZMQUdTIFwKKwkoTE9DQUxfSTkxNV9NTUFQX09G RlNFVF9XQyB8IExPQ0FMX0k5MTVfTU1BUF9PRkZTRVRfV0IgfCBMT0NBTF9JOTE1X01NQVBfT0ZG U0VUX1VDKQorfTsKKworYm9vbCBnZW1faGFzX21tYXBfb2Zmc2V0KGludCBmZCk7CisKIHZvaWQg KmdlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHNpemUsIHVu c2lnbmVkIHByb3QpOwogdm9pZCAqZ2VtX21tYXBfX2NwdShpbnQgZmQsIHVpbnQzMl90IGhhbmRs ZSwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplLCB1bnNpZ25lZCBwcm90KTsKIAogYm9v bCBnZW1fbW1hcF9faGFzX3djKGludCBmZCk7Citib29sIGdlbV9tbWFwX29mZnNldF9faGFzX3dj KGludCBmZCk7CiB2b2lkICpnZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVp bnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7Ci0KK3ZvaWQgKmdl bV9tbWFwX29mZnNldF9fd2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNl dCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7CiAjaWZuZGVmIEk5MTVfR0VNX0RPTUFJ Tl9XQwogI2RlZmluZSBJOTE1X0dFTV9ET01BSU5fV0MgMHg4MAogI2VuZGlmCiAKK3ZvaWQgKl9f Z2VtX21tYXAoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0 X3Qgc2l6ZSwKKwkJIHVuc2lnbmVkIGludCBwcm90LCB1aW50NjRfdCBmbGFncyk7Cit2b2lkICpf X2dlbV9tbWFwX29mZnNldChpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwgdWludDY0X3Qgb2Zmc2V0 LCB1aW50NjRfdCBzaXplLAorCQkJIHVuc2lnbmVkIGludCBwcm90LCB1aW50NjRfdCBmbGFncyk7 CiB2b2lkICpfX2dlbV9tbWFwX19ndHQoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90 IHNpemUsIHVuc2lnbmVkIHByb3QpOwogdm9pZCAqX19nZW1fbW1hcF9fY3B1KGludCBmZCwgdWlu dDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUsIHVuc2lnbmVkIHBy b3QpOwogdm9pZCAqX19nZW1fbW1hcF9fd2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2 NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7Cit2b2lkICpfX2dlbV9t bWFwX29mZnNldF9fd2MoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IG9mZnNldCwg dWludDY0X3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7CiAKIGludCBnZW1fbXVubWFwKHZvaWQgKnB0 ciwgdWludDY0X3Qgc2l6ZSk7CiAKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pZ3QtZGV2