From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D85E489F77 for ; Sun, 1 Dec 2019 19:09:50 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Sun, 1 Dec 2019 20:09:41 +0100 Message-Id: <20191201190942.6077-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 1/2] lib/intel_bufops: Introduce buffer operations 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 List-ID: RGlmZmVyZW50IEdFTnMgc3VwcG9ydHMgZGlmZmVyZW50IHRpbGUgc3VyZmFjZXMuIE9sZGVyIEdF TnMKaGF2ZSBIVyBmZW5jZXMgdG8gYWxsb3cgWCAvIFkgc3VyZmFjZSB0aWxpbmcgLyBkZXRpbGlu Zy4KTmV3ZXIgR0VOcyBoYXZlIHRvIHRpbGUgLyBkZXRpbGUgc3VjaCBzdXJmYWNlIGluIHNvZnR3 YXJlLgoKVG8gbWFrZSB0ZXN0IGRldmVsb3BlciBsaWZlIGVhc2llciB0aGlzIGNvZGUgYWRkcyBi dWZmZXIKb3BlcmF0aW9ucyAoc2hvcnQgYnVmb3BzKSB0byB1c2UgYXBwcm9wcmlhdGUgZnVuY3Rp b25zIGFsbG93aW5nCmNvcHlpbmcgbGluZWFyIGJ1ZmZlciB0byBCTyBhbmQgZnJvbSBCTyB0byBs aW5lYXIgYnVmZmVyCnJlZ2FyZGxlc3MgR1BVIGdlbmVyYXRpb24gYW5kIHRpbGluZyB3aXRoaW4g Qk8uIEZvciBHRU5zIGhhdmluZwpmZW5jZXMgc3VwcG9ydCBwcmVmZXJlbmNlIGlzIHRvIHVzZSB0 aGVtIGlmIHRoZXkgYXJlIGF2YWlsYWJsZQooWCAvIFkgdGlsaW5nIGlzIHByb2JlZCBvbiBidWZv cHMgaW5pdGFsaXphdGlvbikuCgpTaWduZWQtb2ZmLWJ5OiBaYmlnbmlldyBLZW1wY3p5xYRza2kg PHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4KQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNA Y2hyaXMtd2lsc29uLmNvLnVrPgpDYzogSW1yZSBEZWFrIDxpbXJlLmRlYWtAaW50ZWwuY29tPgpD YzogS2F0YXJ6eW5hIERlYyA8a2F0YXJ6eW5hLmRlY0BpbnRlbC5jb20+Ci0tLQogbGliL01ha2Vm aWxlLnNvdXJjZXMgfCAgIDIgKwogbGliL2ludGVsX2J1Zm9wcy5jICAgfCA2ODkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL2ludGVsX2J1Zm9wcy5oICAg fCAgMjQgKysKIGxpYi9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKIDQgZmlsZXMgY2hhbmdlZCwg NzE2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaW50ZWxfYnVmb3BzLmgKCmRpZmYgLS1naXQgYS9saWIv TWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3VyY2VzCmluZGV4IDlkMWE0ZTA2Li5i ODA4ZjI5NCAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvbGliL01ha2Vm aWxlLnNvdXJjZXMKQEAgLTY1LDYgKzY1LDggQEAgbGliX3NvdXJjZV9saXN0ID0JIAlcCiAJaW50 ZWxfYXViLmgJCVwKIAlpbnRlbF9iYXRjaGJ1ZmZlci5jCVwKIAlpbnRlbF9iYXRjaGJ1ZmZlci5o CVwKKwlpbnRlbF9idWZvcHMuYwkJXAorCWludGVsX2J1Zm9wcy5oCQlcCiAJaW50ZWxfY2hpcHNl dC5jCQlcCiAJaW50ZWxfY2hpcHNldC5oCQlcCiAJaW50ZWxfZGV2aWNlX2luZm8uYwlcCmRpZmYg LS1naXQgYS9saWIvaW50ZWxfYnVmb3BzLmMgYi9saWIvaW50ZWxfYnVmb3BzLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmZkYjhiZGM3Ci0tLSAvZGV2L251bGwKKysrIGIv bGliL2ludGVsX2J1Zm9wcy5jCkBAIC0wLDAgKzEsNjg5IEBACisjaW5jbHVkZSA8c3lzL2lvY3Rs Lmg+CisjaW5jbHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiaWd0X3g4Ni5oIgorI2luY2x1ZGUgImlu dGVsX2J1Zm9wcy5oIgorCisjZGVmaW5lIFRJTEVfTk9ORSAgICgxIDw8IEk5MTVfVElMSU5HX05P TkUpCisjZGVmaW5lIFRJTEVfWCAgICAgICgxIDw8IEk5MTVfVElMSU5HX1gpCisjZGVmaW5lIFRJ TEVfWSAgICAgICgxIDw8IEk5MTVfVElMSU5HX1kpCisjZGVmaW5lIFRJTEVfWWYgICAgICgxIDw8 IEk5MTVfVElMSU5HX1lmKQorI2RlZmluZSBUSUxFX1lzICAgICAoMSA8PCBJOTE1X1RJTElOR19Z cykKKwordHlwZWRlZiB2b2lkICgqYm9fY29weSkoaW50LCBzdHJ1Y3QgaWd0X2J1ZiAqLCB1aW50 MzJfdCAqKTsKKworc3RydWN0IGJ1Zl9vcHMgeworCWludCBmZDsKKwlkcm1faW50ZWxfYnVmbWdy ICpidWZtZ3I7CisJaW50IGdlbl9zdGFydDsKKwlpbnQgZ2VuX2VuZDsKKwlpbnQgaW50ZWxfZ2Vu OworCXVpbnQzMl90IHN1cHBvcnRlZF90aWxlczsKKwl1aW50MzJfdCBod190aWxlczsKKwlib19j b3B5IGxpbmVhcl90bzsKKwlib19jb3B5IGxpbmVhcl90b194OworCWJvX2NvcHkgbGluZWFyX3Rv X3k7CisJYm9fY29weSBsaW5lYXJfdG9feWY7CisJYm9fY29weSBsaW5lYXJfdG9feXM7CisJYm9f Y29weSB0b19saW5lYXI7CisJYm9fY29weSB4X3RvX2xpbmVhcjsKKwlib19jb3B5IHlfdG9fbGlu ZWFyOworCWJvX2NvcHkgeWZfdG9fbGluZWFyOworCWJvX2NvcHkgeXNfdG9fbGluZWFyOworfTsK Kworc3RhdGljIHZvaWQgKnhfcHRyKHZvaWQgKnB0ciwKKwkJICAgdW5zaWduZWQgaW50IHgsIHVu c2lnbmVkIGludCB5LAorCQkgICB1bnNpZ25lZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY3Bw KQoreworCWNvbnN0IGludCB0aWxlX3dpZHRoID0gNTEyOworCWNvbnN0IGludCB0aWxlX2hlaWdo dCA9IDg7CisJY29uc3QgaW50IHRpbGVfc2l6ZSA9IHRpbGVfd2lkdGggKiB0aWxlX2hlaWdodDsK KwlpbnQgdGlsZV94LCB0aWxlX3k7CisJaW50IG9mZnNldF94LCBvZmZzZXRfeSwgcG9zOworCisJ eCAqPSBjcHA7CisJdGlsZV94ID0geCAvIHRpbGVfd2lkdGg7CisJdGlsZV95ID0geSAvIHRpbGVf aGVpZ2h0OworCW9mZnNldF94ID0gKHRpbGVfeCAqIHRpbGVfc2l6ZSk7CisJb2Zmc2V0X3kgPSAo dGlsZV95ICogc3RyaWRlICogdGlsZV9oZWlnaHQpOworCisJcG9zID0gb2Zmc2V0X3kgKyBvZmZz ZXRfeCArCisJCQkoeSAlIHRpbGVfaGVpZ2h0ICogdGlsZV93aWR0aCkgKyAoeCAlIHRpbGVfd2lk dGgpOworCisJcmV0dXJuIHB0ciArIHBvczsKK30KKworc3RhdGljIHZvaWQgKnlfcHRyKHZvaWQg KnB0ciwKKwkJICAgdW5zaWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5LAorCQkgICB1bnNpZ25l ZCBpbnQgc3RyaWRlLCB1bnNpZ25lZCBpbnQgY3BwKQoreworCWNvbnN0IGludCB0aWxlX3dpZHRo ID0gMTI4OworCWNvbnN0IGludCB0aWxlX2hlaWdodCA9IDMyOworCWNvbnN0IGludCBvd29yZHMg PSAxNjsKKwljb25zdCBpbnQgdGlsZV9zaXplID0gdGlsZV93aWR0aCAqIHRpbGVfaGVpZ2h0Owor CWludCB0aWxlX3gsIHRpbGVfeTsKKwlpbnQgb2Zmc2V0X3gsIG9mZnNldF95LCBwb3M7CisJaW50 IHNoaWZ0X3gsIHNoaWZ0X3k7CisKKwl4ICo9IGNwcDsKKwl0aWxlX3ggPSB4IC8gdGlsZV93aWR0 aDsKKwl0aWxlX3kgPSB5IC8gdGlsZV9oZWlnaHQ7CisJb2Zmc2V0X3ggPSB0aWxlX3ggKiB0aWxl X3NpemU7CisJb2Zmc2V0X3kgPSB0aWxlX3kgKiBzdHJpZGUgKiB0aWxlX2hlaWdodDsKKwlzaGlm dF94ID0geCAlIG93b3JkcyArICh4ICUgdGlsZV93aWR0aCkgLyBvd29yZHMgKiB0aWxlX3dpZHRo ICogY3BwOworCXNoaWZ0X3kgPSB5ICUgdGlsZV9oZWlnaHQgKiBvd29yZHM7CisKKwlwb3MgPSBv ZmZzZXRfeSArIG9mZnNldF94ICsgc2hpZnRfeCArIHNoaWZ0X3k7CisKKwlyZXR1cm4gcHRyICsg cG9zOworfQorCitzdGF0aWMgdm9pZCAqeWZfcHRyKHZvaWQgKnB0ciwKKwkJICAgIHVuc2lnbmVk IGludCB4LCB1bnNpZ25lZCBpbnQgeSwKKwkJICAgIHVuc2lnbmVkIGludCBzdHJpZGUsIHVuc2ln bmVkIGludCBjcHApCit7CisJY29uc3QgaW50IHRpbGVfc2l6ZSA9IDQgKiAxMDI0OworCWNvbnN0 IGludCB0aWxlX3dpZHRoID0gMTI4OworCWludCByb3dfc2l6ZSA9IChzdHJpZGUgLyB0aWxlX3dp ZHRoKSAqIHRpbGVfc2l6ZTsKKworCXggKj0gY3BwOyAvKiBjb252ZXJ0IHRvIEJ5dGUgb2Zmc2V0 ICovCisKKworCS8qCisJICogV2l0aGluIGEgNGsgWWYgdGlsZSwgdGhlIGJ5dGUgc3dpenpsaW5n IHBhdHRlcm4gaXMKKwkgKiBtc2IuLi4uLi5sc2IKKwkgKiB4eXh5eHl5eXh4eHgKKwkgKiBUaGUg dGlsZXMgdGhlbXNlbHZlcyBhcmUgbGFpZCBvdXQgaW4gcm93IG1ham9yIG9yZGVyLgorCSAqLwor CXJldHVybiBwdHIgKworCQkJKCh4ICYgMHhmKSAqIDEpICsgLyogNHgxIHBpeGVscygzMmJwcCkg PSAxNkIgKi8KKwkJCSgoeSAmIDB4MykgKiAxNikgKyAvKiA0eDQgcGl4ZWxzID0gNjRCICovCisJ CQkoKCh5ICYgMHg0KSA+PiAyKSAqIDY0KSArIC8qIDF4MiA2NEIgYmxvY2tzICovCisJCQkoKCh4 ICYgMHgxMCkgPj4gNCkgKiAxMjgpICsgLyogMngyIDY0QiBibG9ja3MgPSAyNTZCIGJsb2NrICov CisJCQkoKCh5ICYgMHg4KSA+PiAzKSAqIDI1NikgKyAvKiAyeDEgMjU2QiBibG9ja3MgKi8KKwkJ CSgoKHggJiAweDIwKSA+PiA1KSAqIDUxMikgKyAvKiAyeDIgMjU2QiBibG9ja3MgKi8KKwkJCSgo KHkgJiAweDEwKSA+PiA0KSAqIDEwMjQpICsgLyogNHgyIDI1NiBibG9ja3MgKi8KKwkJCSgoKHgg JiAweDQwKSA+PiA2KSAqIDIwNDgpICsgLyogNHg0IDI1NkIgYmxvY2tzID0gNGsgdGlsZSAqLwor CQkJKCgoeCAmIH4weDdmKSA+PiA3KSAqIHRpbGVfc2l6ZSkgKyAvKiByb3cgb2YgdGlsZXMgKi8K KwkJCSgoKHkgJiB+MHgxZikgPj4gNSkgKiByb3dfc2l6ZSk7Cit9CisKK3R5cGVkZWYgdm9pZCAq KCpmbl9wdHIpKHZvaWQgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCisJCQl1bnNpZ25l ZCBpbnQsIHVuc2lnbmVkIGludCk7CitzdGF0aWMgZm5fcHRyIF9fZ2V0X3RpbGVfZm5fcHRyKGlu dCB0aWxpbmcpCit7CisJZm5fcHRyIGZuID0gTlVMTDsKKworCXN3aXRjaCAodGlsaW5nKSB7CisJ Y2FzZSBJOTE1X1RJTElOR19YOgorCQlmbiA9IHhfcHRyOworCQlicmVhazsKKwljYXNlIEk5MTVf VElMSU5HX1k6CisJCWZuID0geV9wdHI7CisJCWJyZWFrOworCWNhc2UgSTkxNV9USUxJTkdfWWY6 CisJCWZuID0geWZfcHRyOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lzOgorCQkvKiBU byBiZSBpbXBsZW1lbnRlZCAqLworCQlicmVhazsKKwl9CisKKwlpZ3RfYXNzZXJ0X2YoZm4sICJD YW4ndCBmaW5kIHRpbGUgZnVuY3Rpb24gZm9yIHRpbGluZzogJWRcbiIsIHRpbGluZyk7CisKKwly ZXR1cm4gZm47Cit9CisKK3N0YXRpYyB2b2lkIF9fY29weV9saW5lYXJfdG8oaW50IGZkLCBzdHJ1 Y3QgaWd0X2J1ZiAqYnVmLAorCQkJICAgICBjb25zdCB1aW50MzJfdCAqbGluZWFyLCBpbnQgdGls aW5nKQoreworCWludCBoZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpOworCWludCB3aWR0aCA9 IGlndF9idWZfd2lkdGgoYnVmKTsKKwlmbl9wdHIgZm4gPSBfX2dldF90aWxlX2ZuX3B0cih0aWxp bmcpOworCXZvaWQgKm1hcDsKKworCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUs CisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKwlt YXAgPSBnZW1fbW1hcF9fY3B1KGZkLCBidWYtPmJvLT5oYW5kbGUsIDAsCisJCQkgICAgYnVmLT5i by0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwlmb3IgKGludCB5ID0gMDsgeSA8 IGhlaWdodDsgeSsrKSB7CisJCWZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworCQkJ dWludDMyX3QgKnB0ciA9IGZuKG1hcCwgeCwgeSwKKwkJCQkJICAgYnVmLT5zdHJpZGUsIGJ1Zi0+ YnBwIC8gOCk7CisKKwkJCSpwdHIgPSBsaW5lYXJbeSAqIHdpZHRoICsgeF07CisJCX0KKwl9CisK KwltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQgY29weV9saW5l YXJfdG9feChpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90ICps aW5lYXIpCit7CisJX19jb3B5X2xpbmVhcl90byhmZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5H X1gpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2xpbmVhcl90b195KGludCBmZCwgc3RydWN0IGln dF9idWYgKmJ1ZiwKKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlfX2NvcHlfbGluZWFy X3RvKGZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWSk7Cit9CisKK3N0YXRpYyB2b2lkIGNv cHlfbGluZWFyX3RvX3lmKGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCSAgICAgIHVp bnQzMl90ICpsaW5lYXIpCit7CisJX19jb3B5X2xpbmVhcl90byhmZCwgYnVmLCBsaW5lYXIsIEk5 MTVfVElMSU5HX1lmKTsKK30KKworc3RhdGljIHZvaWQgX19jb3B5X3RvX2xpbmVhcihpbnQgZmQs IHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90ICpsaW5lYXIsIGludCB0aWxp bmcpCit7CisJaW50IGhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1Zik7CisJaW50IHdpZHRoID0g aWd0X2J1Zl93aWR0aChidWYpOworCWZuX3B0ciBmbiA9IF9fZ2V0X3RpbGVfZm5fcHRyKHRpbGlu Zyk7CisJdm9pZCAqbWFwOworCisJZ2VtX3NldF9kb21haW4oZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwK KwkJICAgICAgIEk5MTVfR0VNX0RPTUFJTl9DUFUsIDApOworCW1hcCA9IGdlbV9tbWFwX19jcHUo ZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKKwkJCSAgICBidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQp OworCisJZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworCQlmb3IgKGludCB4ID0g MDsgeCA8IHdpZHRoOyB4KyspIHsKKwkJCXVpbnQzMl90ICpwdHIgPSBmbihtYXAsIHgsIHksCisJ CQkJCSAgIGJ1Zi0+c3RyaWRlLCBidWYtPmJwcCAvIDgpOworCisJCQlsaW5lYXJbeSAqIHdpZHRo ICsgeF0gPSAqcHRyOworCQl9CisJfQorCisJbXVubWFwKG1hcCwgYnVmLT5iby0+c2l6ZSk7Cit9 CisKK3N0YXRpYyB2b2lkIGNvcHlfeWZfdG9fbGluZWFyKGludCBmZCwgc3RydWN0IGlndF9idWYg KmJ1ZiwKKwkJCSAgICAgIHVpbnQzMl90ICpsaW5lYXIpCit7CisJX19jb3B5X3RvX2xpbmVhcihm ZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElMSU5HX1lmKTsKK30KKworc3RhdGljIHZvaWQgY29weV94 X3RvX2xpbmVhcihpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgIHVpbnQzMl90 ICpsaW5lYXIpCit7CisJX19jb3B5X3RvX2xpbmVhcihmZCwgYnVmLCBsaW5lYXIsIEk5MTVfVElM SU5HX1gpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3lfdG9fbGluZWFyKGludCBmZCwgc3RydWN0 IGlndF9idWYgKmJ1ZiwKKwkJCSAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwlfX2NvcHlfdG9f bGluZWFyKGZkLCBidWYsIGxpbmVhciwgSTkxNV9USUxJTkdfWSk7Cit9CisKK3N0YXRpYyB2b2lk IGNvcHlfbGluZWFyX3RvX2d0dChpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAg ICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lkICptYXA7CisKKwlnZW1fc2V0X2RvbWFpbihm ZCwgYnVmLT5iby0+aGFuZGxlLAorCQkgICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9H RU1fRE9NQUlOX0dUVCk7CisKKwltYXAgPSBnZW1fbW1hcF9fZ3R0KGZkLCBidWYtPmJvLT5oYW5k bGUsCisJCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisKKwlt ZW1jcHkobWFwLCBsaW5lYXIsIGJ1Zi0+Ym8tPnNpemUpOworCisJbXVubWFwKG1hcCwgYnVmLT5i by0+c2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfZ3R0X3RvX2xpbmVhcihpbnQgZmQsIHN0 cnVjdCBpZ3RfYnVmICpidWYsCisJCQkgICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sKKwl2b2lk ICptYXA7CisKKwlnZW1fc2V0X2RvbWFpbihmZCwgYnVmLT5iby0+aGFuZGxlLAorCQkgICAgICAg STkxNV9HRU1fRE9NQUlOX0dUVCwgMCk7CisKKwltYXAgPSBnZW1fbW1hcF9fZ3R0KGZkLCBidWYt PmJvLT5oYW5kbGUsCisJCQkgICAgYnVmLT5iby0+c2l6ZSwgUFJPVF9SRUFEKTsKKworCWlndF9t ZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1hcCwgYnVmLT5iby0+c2l6ZSk7CisKKwltdW5tYXAobWFw LCBidWYtPmJvLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9fd2MoaW50 IGZkLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAorCQkJICAgICAgdWludDMyX3QgKmxpbmVhcikKK3sK Kwl2b2lkICptYXA7CisKKwlnZW1fc2V0X2RvbWFpbihmZCwgYnVmLT5iby0+aGFuZGxlLAorCQkg ICAgICAgSTkxNV9HRU1fRE9NQUlOX0dUVCwgSTkxNV9HRU1fRE9NQUlOX0dUVCk7CisKKwltYXAg PSBnZW1fbW1hcF9fd2MoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKKwkJCSAgIGJ1Zi0+Ym8tPnNp emUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworCisJbWVtY3B5KG1hcCwgbGluZWFyLCBidWYt PmJvLT5zaXplKTsKKworCW11bm1hcChtYXAsIGJ1Zi0+Ym8tPnNpemUpOworfQorCitzdGF0aWMg dm9pZCBjb3B5X3djX3RvX2xpbmVhcihpbnQgZmQsIHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQkg ICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsKKworCWdlbV9zZXRfZG9tYWlu KGZkLCBidWYtPmJvLT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fR1RULCAwKTsK KworCW1hcCA9IGdlbV9tbWFwX193YyhmZCwgYnVmLT5iby0+aGFuZGxlLCAwLAorCQkJICAgYnVm LT5iby0+c2l6ZSwgUFJPVF9SRUFEKTsKKworCWlndF9tZW1jcHlfZnJvbV93YyhsaW5lYXIsIG1h cCwgYnVmLT5iby0+c2l6ZSk7CisKKwltdW5tYXAobWFwLCBidWYtPmJvLT5zaXplKTsKK30KKwor c3RhdGljIHZvaWQgY29weV9saW5lYXJfdG9fY3B1KGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1 ZiwKKwkJCSAgICAgICB1aW50MzJfdCAqbGluZWFyKQoreworCXZvaWQgKm1hcDsKKworCWdlbV9z ZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5kbGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5f Q1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKKworCW1hcCA9IGdlbV9tbWFwX19jcHUoZmQsIGJ1 Zi0+Ym8tPmhhbmRsZSwgMCwKKwkJCSAgICBidWYtPmJvLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9U X1dSSVRFKTsKKworCW1lbWNweShtYXAsIGxpbmVhciwgYnVmLT5iby0+c2l6ZSk7CisKKwltdW5t YXAobWFwLCBidWYtPmJvLT5zaXplKTsKK30KKworc3RhdGljIHZvaWQgY29weV9jcHVfdG9fbGlu ZWFyKGludCBmZCwgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCSAgICAgICB1aW50MzJfdCAqbGlu ZWFyKQoreworCXZvaWQgKm1hcDsKKworCWdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmJvLT5oYW5k bGUsCisJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCAwKTsKKworCW1hcCA9IGdlbV9tbWFw X19jcHUoZmQsIGJ1Zi0+Ym8tPmhhbmRsZSwgMCwKKwkJCSAgICBidWYtPmJvLT5zaXplLCBQUk9U X1JFQUQpOworCisJbWVtY3B5KGxpbmVhciwgbWFwLCBidWYtPmJvLT5zaXplKTsKKworCW11bm1h cChtYXAsIGJ1Zi0+Ym8tPnNpemUpOworfQorCit2b2lkIGNvcHlfYnVmX3RvX2xpbmVhcihzdHJ1 Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJCXVpbnQzMl90ICpsaW5l YXIpCit7CisJaWd0X2Fzc2VydChib3BzKTsKKworCXN3aXRjaCAoYnVmLT50aWxpbmcpIHsKKwlj YXNlIEk5MTVfVElMSU5HX05PTkU6CisJCWlndF9hc3NlcnQoYm9wcy0+dG9fbGluZWFyKTsKKwkJ Ym9wcy0+dG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2Ug STkxNV9USUxJTkdfWDoKKwkJaWd0X2Fzc2VydChib3BzLT54X3RvX2xpbmVhcik7CisJCWJvcHMt PnhfdG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkx NV9USUxJTkdfWToKKwkJaWd0X2Fzc2VydChib3BzLT55X3RvX2xpbmVhcik7CisJCWJvcHMtPnlf dG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9U SUxJTkdfWWY6CisJCWlndF9hc3NlcnQoYm9wcy0+eWZfdG9fbGluZWFyKTsKKwkJYm9wcy0+eWZf dG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCWNhc2UgSTkxNV9U SUxJTkdfWXM6CisJCWlndF9hc3NlcnQoYm9wcy0+eXNfdG9fbGluZWFyKTsKKwkJYm9wcy0+eXNf dG9fbGluZWFyKGJvcHMtPmZkLCBidWYsIGxpbmVhcik7CisJCWJyZWFrOworCX0KK30KKwordm9p ZCBjb3B5X2xpbmVhcl90b19idWYoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpZ3RfYnVm ICpidWYsCisJCQl1aW50MzJfdCAqbGluZWFyKQoreworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlz d2l0Y2ggKGJ1Zi0+dGlsaW5nKSB7CisJY2FzZSBJOTE1X1RJTElOR19OT05FOgorCQlpZ3RfYXNz ZXJ0KGJvcHMtPmxpbmVhcl90byk7CisJCWJvcHMtPmxpbmVhcl90byhib3BzLT5mZCwgYnVmLCBs aW5lYXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1g6CisJCWlndF9hc3NlcnQoYm9w cy0+bGluZWFyX3RvX3gpOworCQlib3BzLT5saW5lYXJfdG9feChib3BzLT5mZCwgYnVmLCBsaW5l YXIpOworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1k6CisJCWlndF9hc3NlcnQoYm9wcy0+ bGluZWFyX3RvX3kpOworCQlib3BzLT5saW5lYXJfdG9feShib3BzLT5mZCwgYnVmLCBsaW5lYXIp OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lmOgorCQlpZ3RfYXNzZXJ0KGJvcHMtPmxp bmVhcl90b195Zik7CisJCWJvcHMtPmxpbmVhcl90b195Zihib3BzLT5mZCwgYnVmLCBsaW5lYXIp OworCQlicmVhazsKKwljYXNlIEk5MTVfVElMSU5HX1lzOgorCQlpZ3RfYXNzZXJ0KGJvcHMtPmxp bmVhcl90b195cyk7CisJCWJvcHMtPmxpbmVhcl90b195cyhib3BzLT5mZCwgYnVmLCBsaW5lYXIp OworCQlicmVhazsKKwl9Cit9CisKK3N0cnVjdCBidWZfb3BzIGJ1Zl9vcHNfYXJyW10gPSB7CisJ LyogR2VuZXJhdGlvbnMgMCAtIDggKi8KK3sKKwkuZ2VuX3N0YXJ0ICAgICAgICAgPSAwLAorCS5n ZW5fZW5kICAgICAgICAgICA9IDgsCisJLnN1cHBvcnRlZF90aWxlcyAgID0gVElMRV9OT05FIHwg VElMRV9YIHwgVElMRV9ZLAorCS5od190aWxlcyAgICAgICAgICA9IFRJTEVfWCB8IFRJTEVfWSwK KwkubGluZWFyX3RvICAgICAgICAgPSBjb3B5X2xpbmVhcl90b19jcHUsCisJLmxpbmVhcl90b194 ICAgICAgID0gY29weV9saW5lYXJfdG9fZ3R0LAorCS5saW5lYXJfdG9feSAgICAgICA9IGNvcHlf bGluZWFyX3RvX2d0dCwKKwkudG9fbGluZWFyICAgICAgICAgPSBjb3B5X2NwdV90b19saW5lYXIs CisJLnhfdG9fbGluZWFyICAgICAgID0gY29weV9ndHRfdG9fbGluZWFyLAorCS55X3RvX2xpbmVh ciAgICAgICA9IGNvcHlfZ3R0X3RvX2xpbmVhciwKK30sCisvKiBHZW5lcmF0aW9ucyA5IC0gMTEg Ki8KK3sKKwkuZ2VuX3N0YXJ0ICAgICAgICAgPSA5LAorCS5nZW5fZW5kICAgICAgICAgICA9IDEx LAorCS5zdXBwb3J0ZWRfdGlsZXMgICA9IFRJTEVfTk9ORSB8IFRJTEVfWCB8IFRJTEVfWSB8IFRJ TEVfWWYsCisJLmh3X3RpbGVzICAgICAgICAgID0gVElMRV9YIHwgVElMRV9ZLAorCS5saW5lYXJf dG8gICAgICAgICA9IGNvcHlfbGluZWFyX3RvX2NwdSwKKwkubGluZWFyX3RvX3ggICAgICAgPSBj b3B5X2xpbmVhcl90b19ndHQsCisJLmxpbmVhcl90b195ICAgICAgID0gY29weV9saW5lYXJfdG9f Z3R0LAorCS5saW5lYXJfdG9feWYgICAgICA9IGNvcHlfbGluZWFyX3RvX3lmLAorCS50b19saW5l YXIgICAgICAgICA9IGNvcHlfY3B1X3RvX2xpbmVhciwKKwkueF90b19saW5lYXIgICAgICAgPSBj b3B5X2d0dF90b19saW5lYXIsCisJLnlfdG9fbGluZWFyICAgICAgID0gY29weV9ndHRfdG9fbGlu ZWFyLAorCS55Zl90b19saW5lYXIgICAgICA9IGNvcHlfeWZfdG9fbGluZWFyLAorfSwKKy8qIEdl bmVyYXRpb24gMTIgKi8KK3sKKwkuZ2VuX3N0YXJ0ICAgICAgICAgPSAxMiwKKwkuZ2VuX2VuZCAg ICAgICAgICAgPSAxMiwKKwkuc3VwcG9ydGVkX3RpbGVzICAgPSBUSUxFX05PTkUgfCBUSUxFX1gg fCBUSUxFX1kgfCBUSUxFX1lmIHwgVElMRV9ZcywKKwkubGluZWFyX3RvICAgICAgICAgPSBjb3B5 X2xpbmVhcl90b193YywKKwkubGluZWFyX3RvX3ggICAgICAgPSBjb3B5X2xpbmVhcl90b194LAor CS5saW5lYXJfdG9feSAgICAgICA9IGNvcHlfbGluZWFyX3RvX3ksCisJLmxpbmVhcl90b195ZiAg ICAgID0gY29weV9saW5lYXJfdG9feWYsCisJLmxpbmVhcl90b195cyAgICAgID0gTlVMTCwgICAg ICAgICAgICAgICAvKiB0byBiZSBpbXBsZW1lbnRlZCAqLworCS50b19saW5lYXIgICAgICAgICA9 IGNvcHlfd2NfdG9fbGluZWFyLAorCS54X3RvX2xpbmVhciAgICAgICA9IGNvcHlfeF90b19saW5l YXIsCisJLnlfdG9fbGluZWFyICAgICAgID0gY29weV95X3RvX2xpbmVhciwKKwkueWZfdG9fbGlu ZWFyICAgICAgPSBjb3B5X3lmX3RvX2xpbmVhciwKKwkueXNfdG9fbGluZWFyICAgICAgPSBOVUxM LCAgICAgICAgICAgICAgIC8qIHRvIGJlIGltcGxlbWVudGVkICovCit9LAorfTsKKworc3RhdGlj IGludCBfX2dlbV9nZXRfdGlsaW5nKGludCBmZCwgc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGls aW5nICphcmcpCit7CisJaW50IGVycjsKKworCWVyciA9IDA7CisJaWYgKGlndF9pb2N0bChmZCwg RFJNX0lPQ1RMX0k5MTVfR0VNX0dFVF9USUxJTkcsIGFyZykpCisJCWVyciA9IC1lcnJubzsKKwll cnJubyA9IDA7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9vbCBfX2dldF90aWxpbmco aW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90ICp0aWxpbmcsCisJCQkgdWludDMyX3Qg KnN3aXp6bGUpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9nZXRfdGlsaW5nIGdldF90aWxpbmc7 CisKKwltZW1zZXQoJmdldF90aWxpbmcsIDAsIHNpemVvZihnZXRfdGlsaW5nKSk7CisJZ2V0X3Rp bGluZy5oYW5kbGUgPSBoYW5kbGU7CisKKwlpZiAoX19nZW1fZ2V0X3RpbGluZyhmZCwgJmdldF90 aWxpbmcpICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCSp0aWxpbmcgPSBnZXRfdGlsaW5nLnRp bGluZ19tb2RlOworCSpzd2l6emxlID0gZ2V0X3RpbGluZy5zd2l6emxlX21vZGU7CisKKwlyZXR1 cm4gZ2V0X3RpbGluZy5waHlzX3N3aXp6bGVfbW9kZSA9PSBnZXRfdGlsaW5nLnN3aXp6bGVfbW9k ZTsKK30KKworc3RhdGljIGJvb2wgcHJvYmVfaHdfdGlsaW5nKGludCBmZCwgdWludDMyX3QgdGls aW5nKQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fc2V0X3RpbGluZyBzdDsKKwl1aW50NjRfdCBz aXplID0gMTAyNCAqIDEwMjQ7CisJdWludDMyX3QgaGFuZGxlLCBidWZfdGlsaW5nLCBidWZfc3dp enpsZTsKKwl1aW50MzJfdCBzdHJpZGU7CisJaW50IHJldDsKKwlib29sIGlzX3NldDsKKworCWlm ICh0aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkKKwkJc3RyaWRlID0gNTEyOworCWVsc2UgaWYgKHRp bGluZyA9PSBJOTE1X1RJTElOR19ZKQorCQlzdHJpZGUgPSAxMjg7CisJZWxzZQorCQlyZXR1cm4g ZmFsc2U7CisKKwloYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBzaXplKTsKKworCS8qIFNpbmdsZSBz aG90LCBpZiBubyBmZW5jZXMgYXJlIGF2YWlsYWJsZSB3ZSBmYWlsIGltbWVkaWF0ZWx5ICovCisJ c3QuaGFuZGxlID0gaGFuZGxlOworCXN0LnRpbGluZ19tb2RlID0gdGlsaW5nOworCXN0LnN0cmlk ZSA9IHRpbGluZyA/IHN0cmlkZSA6IDA7CisJcmV0ID0gaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1 X0dFTV9TRVRfVElMSU5HLCAmc3QpOworCWlmIChyZXQpCisJCWdvdG8gZW5kOworCisJaXNfc2V0 ID0gX19nZXRfdGlsaW5nKGZkLCBoYW5kbGUsICZidWZfdGlsaW5nLCAmYnVmX3N3aXp6bGUpOwor CitlbmQ6CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOworCisJcmV0dXJuIGlzX3NldDsKK30KKwor c3RydWN0IGJ1Zl9vcHMgKmJ1Zl9vcHNfZ2V0KGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVm bWdyKQoreworCXN0cnVjdCBidWZfb3BzICpib3BzID0gY2FsbG9jKDEsIHNpemVvZigqYm9wcykp OworCXVpbnQzMl90IGRldmlkOworCWludCBnZW5lcmF0aW9uOworCisJaWd0X2Fzc2VydChidWZt Z3IpOworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQo ZmQpOworCWdlbmVyYXRpb24gPSBpbnRlbF9nZW4oZGV2aWQpOworCisJLyogUHJlZGVmaW5lZCBz ZXR0aW5ncyAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZfb3BzX2Fycik7 IGkrKykgeworCQlpZiAoZ2VuZXJhdGlvbiA+PSBidWZfb3BzX2FycltpXS5nZW5fc3RhcnQgJiYK KwkJCQlnZW5lcmF0aW9uIDw9IGJ1Zl9vcHNfYXJyW2ldLmdlbl9lbmQpIHsKKwkJCW1lbWNweShi b3BzLCAmYnVmX29wc19hcnJbaV0sIHNpemVvZigqYm9wcykpOworCQkJYm9wcy0+ZmQgPSBmZDsK KwkJCWJvcHMtPmJ1Zm1nciA9IGJ1Zm1ncjsKKwkJCWJvcHMtPmludGVsX2dlbiA9IGdlbmVyYXRp b247CisJCQlpZ3RfZGVidWcoImdlbmVyYXRpb246ICVkLCBzdXBwb3J0ZWQgdGlsZXM6IDB4JTAy eFxuIiwKKwkJCQkgIGdlbmVyYXRpb24sIGJvcHMtPnN1cHBvcnRlZF90aWxlcyk7CisJCQlicmVh azsKKwkJfQorCX0KKworCS8qIExldCdzIHByb2JlIFggYW5kIFkgaHcgdGlsaW5nIHN1cHBvcnQg Ki8KKwlpZiAoYm9wcy0+aHdfdGlsZXMgJiBUSUxFX1gpIHsKKwkJYm9vbCBzdXBwb3J0ZWQgPSBw cm9iZV9od190aWxpbmcoZmQsIEk5MTVfVElMSU5HX1gpOworCisJCWlndF9kZWJ1ZygiWCBmZW5j ZSBzdXBwb3J0OiAlc1xuIiwgc3VwcG9ydGVkID8gInllcyIgOiAibm8iKTsKKwkJaWYgKCFzdXBw b3J0ZWQpIHsKKwkJCWJvcHMtPmh3X3RpbGVzICY9IH5USUxFX1g7CisJCQlib3BzLT5saW5lYXJf dG9feCA9IGNvcHlfbGluZWFyX3RvX3g7CisJCQlib3BzLT54X3RvX2xpbmVhciA9IGNvcHlfeF90 b19saW5lYXI7CisJCX0KKwl9CisKKwlpZiAoYm9wcy0+aHdfdGlsZXMgJiBUSUxFX1kpIHsKKwkJ Ym9vbCBzdXBwb3J0ZWQgPSBwcm9iZV9od190aWxpbmcoZmQsIEk5MTVfVElMSU5HX1kpOworCisJ CWlndF9kZWJ1ZygiWSBmZW5jZSBzdXBwb3J0OiAlc1xuIiwgc3VwcG9ydGVkID8gInllcyIgOiAi bm8iKTsKKwkJaWYgKCFzdXBwb3J0ZWQpIHsKKwkJCWJvcHMtPmh3X3RpbGVzICY9IH5USUxFX1k7 CisJCQlib3BzLT5saW5lYXJfdG9feSA9IGNvcHlfbGluZWFyX3RvX3k7CisJCQlib3BzLT55X3Rv X2xpbmVhciA9IGNvcHlfeV90b19saW5lYXI7CisJCX0KKwl9CisKKwlpZ3RfYXNzZXJ0KGJvcHMt PmludGVsX2dlbik7CisKKwlyZXR1cm4gYm9wczsKK30KKwordm9pZCBidWZfb3BzX3N3aXRjaF90 b19zb2Z3YXJlX3RpbGluZyhzdHJ1Y3QgYnVmX29wcyAqYm9wcykKK3sKKwlpZ3RfZGVidWcoIlN3 aXRjaCB0byBzb2Z0d2FyZSB0aWxpbmcvZGV0aWxpbmcgb2YgWC9ZIHN1cmZhY2VzXG4iKTsKKwor CWlndF9hc3NlcnQoYm9wcyk7CisKKwlib3BzLT5od190aWxlcyA9IDA7CisJYm9wcy0+bGluZWFy X3RvX3ggPSBjb3B5X2xpbmVhcl90b194OworCWJvcHMtPmxpbmVhcl90b195ID0gY29weV9saW5l YXJfdG9feTsKKwlib3BzLT54X3RvX2xpbmVhciA9IGNvcHlfeF90b19saW5lYXI7CisJYm9wcy0+ eV90b19saW5lYXIgPSBjb3B5X3lfdG9fbGluZWFyOworfQorCitib29sIGJ1Zl9vcHNfaGFzX2h3 X2ZlbmNlKHN0cnVjdCBidWZfb3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpCit7CisJdWludDMy X3QgdGlsZV9tYXNrID0gKDEgPDwgdGlsaW5nKTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlp ZiAodGlsZV9tYXNrICYgYm9wcy0+aHdfdGlsZXMpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJu IGZhbHNlOworfQorCitib29sIGJ1Zl9vcHNfaGFzX3RpbGluZ19zdXBwb3J0KHN0cnVjdCBidWZf b3BzICpib3BzLCB1aW50MzJfdCB0aWxpbmcpCit7CisJdWludDMyX3QgdGlsZV9tYXNrID0gKDEg PDwgdGlsaW5nKTsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlpZiAodGlsZV9tYXNrICYgYm9w cy0+c3VwcG9ydGVkX3RpbGVzKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30K Kworc3RhdGljIGludCBidWZfYXV4X3dpZHRoKGludCBnZW4sIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpidWYpCit7CisJLyoKKwkgKiBHRU4xMis6IFRoZSBBVVggQ0NTIHVuaXQgc2l6ZSBpcyA2NCBi eXRlcyBtYXBwaW5nIDQgbWFpbiBzdXJmYWNlCisJICogdGlsZXMuIFRodXMgdGhlIHdpZHRoIG9m IHRoZSBDQ1MgdW5pdCBpcyA0KjMyPTEyOCBwaXhlbHMgb24gdGhlCisJICogbWFpbiBzdXJmYWNl LgorCSAqLworCWlmIChnZW4gPj0gMTIpCisJCXJldHVybiBESVZfUk9VTkRfVVAoaWd0X2J1Zl93 aWR0aChidWYpLCAxMjgpICogNjQ7CisKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGlndF9idWZfd2lk dGgoYnVmKSwgMTAyNCkgKiAxMjg7Cit9CisKK3N0YXRpYyBpbnQgYnVmX2F1eF9oZWlnaHQoaW50 IGdlbiwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZikKK3sKKwkvKgorCSAqIEdFTjEyKzogVGhl IEFVWCBDQ1MgdW5pdCBzaXplIGlzIDY0IGJ5dGVzIG1hcHBpbmcgNCBtYWluIHN1cmZhY2UKKwkg KiB0aWxlcy4gVGh1cyB0aGUgaGVpZ2h0IG9mIHRoZSBDQ1MgdW5pdCBpcyAzMiBwaXhlbCByb3dz IG9uIHRoZSBtYWluCisJICogc3VyZmFjZS4KKwkgKi8KKwlpZiAoZ2VuID49IDEyKQorCQlyZXR1 cm4gRElWX1JPVU5EX1VQKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDMyKTsKKworCXJldHVybiBESVZf Uk9VTkRfVVAoaWd0X2J1Zl9oZWlnaHQoYnVmKSwgNTEyKSAqIDMyOworfQorCit2b2lkIGlndF9i dWZfaW5pdChzdHJ1Y3QgYnVmX29wcyAqYm9wcywgc3RydWN0IGlndF9idWYgKmJ1ZiwKKwkJICBp bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBicHAsCisJCSAgdWludDMyX3QgcmVxX3RpbGluZywg Ym9vbCBjY3MpCit7CisJdWludDMyX3QgdGlsaW5nID0gcmVxX3RpbGluZzsKKwlib29sIHN1cHBv cnRzX2h3X2ZlbmNlczsKKworCWlndF9hc3NlcnQoYm9wcyk7CisKKwlzdXBwb3J0c19od19mZW5j ZXMgPSBidWZfb3BzX2hhc19od19mZW5jZShib3BzLCByZXFfdGlsaW5nKTsKKworCW1lbXNldChi dWYsIDAsIHNpemVvZigqYnVmKSk7CisKKwlpZiAoY2NzKSB7CisJCWludCBhdXhfd2lkdGgsIGF1 eF9oZWlnaHQ7CisJCWludCBzaXplOworCisJCWlndF9yZXF1aXJlKGJvcHMtPmludGVsX2dlbiA+ PSA5KTsKKwkJaWd0X2Fzc2VydChyZXFfdGlsaW5nID09IEk5MTVfVElMSU5HX1kgfHwKKwkJCSAg IHJlcV90aWxpbmcgPT0gSTkxNV9USUxJTkdfWWYpOworCisJCS8qCisJCSAqIE9uIEdFTjEyKyB3 ZSBhbGlnbiB0aGUgbWFpbiBzdXJmYWNlIHRvIDQgKiA0IG1haW4gc3VyZmFjZQorCQkgKiB0aWxl cywgd2hpY2ggaXMgNjRrQi4gVGhlc2UgMTYgdGlsZXMgYXJlIG1hcHBlZCBieSA0IEFVWAorCQkg KiBDQ1MgdW5pdHMsIHRoYXQgaXMgNCAqIDY0IGJ5dGVzLiBUaGVzZSA0IENDUyB1bml0cyBhcmUg aW4KKwkJICogdHVybiBtYXBwZWQgYnkgb25lIEwxIEFVWCBwYWdlIHRhYmxlIGVudHJ5LgorCQkg Ki8KKwkJaWYgKGJvcHMtPmludGVsX2dlbiA+PSAxMikKKwkJCWJ1Zi0+c3RyaWRlID0gQUxJR04o d2lkdGggKiAoYnBwIC8gOCksIDEyOCAqIDQpOworCQllbHNlCisJCQlidWYtPnN0cmlkZSA9IEFM SUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjgpOworCisJCWlmIChib3BzLT5pbnRlbF9nZW4gPj0g MTIpCisJCQloZWlnaHQgPSBBTElHTihoZWlnaHQsIDQgKiAzMik7CisKKwkJYnVmLT5zaXplID0g YnVmLT5zdHJpZGUgKiBoZWlnaHQ7CisJCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCQlidWYtPmJw cCA9IGJwcDsKKworCQlhdXhfd2lkdGggPSBidWZfYXV4X3dpZHRoKGJvcHMtPmludGVsX2dlbiwg YnVmKTsKKwkJYXV4X2hlaWdodCA9IGJ1Zl9hdXhfaGVpZ2h0KGJvcHMtPmludGVsX2dlbiwgYnVm KTsKKworCQlidWYtPmF1eC5vZmZzZXQgPSBidWYtPnN0cmlkZSAqIEFMSUdOKGhlaWdodCwgMzIp OworCQlidWYtPmF1eC5zdHJpZGUgPSBhdXhfd2lkdGg7CisKKwkJc2l6ZSA9IGJ1Zi0+YXV4Lm9m ZnNldCArIGF1eF93aWR0aCAqIGF1eF9oZWlnaHQ7CisKKwkJYnVmLT5ibyA9IGRybV9pbnRlbF9i b19hbGxvYyhib3BzLT5idWZtZ3IsICIiLCBzaXplLCA0MDk2KTsKKworCQlpZiAodGlsaW5nID09 IEk5MTVfVElMSU5HX1kgJiYgc3VwcG9ydHNfaHdfZmVuY2VzKSB7CisJCQlkcm1faW50ZWxfYm9f c2V0X3RpbGluZyhidWYtPmJvLCAmdGlsaW5nLCBidWYtPnN0cmlkZSk7CisJCQlpZ3RfYXNzZXJ0 X2VxKHRpbGluZywgcmVxX3RpbGluZyk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBSZXF1ZXN0ZWQg Ym8gbXVzdCBiZSBodyB0aWxlZCAqLworCQlpZiAoc3VwcG9ydHNfaHdfZmVuY2VzKSB7CisJCQl1 bnNpZ25lZCBsb25nIHBpdGNoOworCisJCQlidWYtPmJvID0gZHJtX2ludGVsX2JvX2FsbG9jX3Rp bGVkKGJvcHMtPmJ1Zm1nciwgIiIsCisJCQkJCQkJICAgd2lkdGgsIGhlaWdodCwKKwkJCQkJCQkg ICBicHAgLyA4LAorCQkJCQkJCSAgICZ0aWxpbmcsICZwaXRjaCwgMCk7CisJCQlpZ3RfYXNzZXJ0 X2VxKHRpbGluZywgcmVxX3RpbGluZyk7CisJCQlpZ3RfYXNzZXJ0KGJ1Zi0+Ym8pOworCisJCQli dWYtPnN0cmlkZSA9IHBpdGNoOworCQkJYnVmLT50aWxpbmcgPSB0aWxpbmc7CisJCQlidWYtPnNp emUgPSBwaXRjaCAqIGhlaWdodDsKKwkJCWJ1Zi0+YnBwID0gYnBwOworCQl9IGVsc2UgeworCQkJ LyogVXNlIGJvIGFsbG9jIGFuZCBzb2Z0d2FyZSB0aWxpbmcvZGV0aWxpbmcgKi8KKwkJCWludCBz aXplOworCisJCQlidWYtPnN0cmlkZSA9IEFMSUdOKHdpZHRoICogKGJwcCAvIDgpLCAxMjgpOwor CQkJYnVmLT5zaXplID0gYnVmLT5zdHJpZGUgKiBoZWlnaHQ7CisJCQlidWYtPnRpbGluZyA9IHRp bGluZzsKKwkJCWJ1Zi0+YnBwID0gYnBwOworCisJCQlzaXplID0gYnVmLT5zdHJpZGUgKiBBTElH TihoZWlnaHQsIDMyKTsKKworCQkJYnVmLT5ibyA9IGRybV9pbnRlbF9ib19hbGxvYyhib3BzLT5i dWZtZ3IsICIiLCBzaXplLAorCQkJCQkJICAgICA0MDk2KTsKKwkJCWlndF9hc3NlcnQoYnVmLT5i byk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYnVmb3BzLmggYi9saWIvaW50 ZWxfYnVmb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmU1M2M2ZWJj Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2ludGVsX2J1Zm9wcy5oCkBAIC0wLDAgKzEsMjQgQEAK KyNpZm5kZWYgX19JTlRFTF9CVUZPUFNfSF9fCisjZGVmaW5lIF9fSU5URUxfQlVGT1BTX0hfXwor CisjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKKworc3RydWN0IGJ1Zl9vcHM7CisKK3N0 cnVjdCBidWZfb3BzICpidWZfb3BzX2dldChpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n cik7Cit2b2lkIGJ1Zl9vcHNfc3dpdGNoX3RvX3NvZndhcmVfdGlsaW5nKHN0cnVjdCBidWZfb3Bz ICpib3BzKTsKKwordm9pZCBjb3B5X2J1Zl90b19saW5lYXIoc3RydWN0IGJ1Zl9vcHMgKmJvcHMs IHN0cnVjdCBpZ3RfYnVmICpidWYsCisJCQl1aW50MzJfdCAqbGluZWFyKTsKKwordm9pZCBjb3B5 X2xpbmVhcl90b19idWYoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHN0cnVjdCBpZ3RfYnVmICpidWYs CisJCQl1aW50MzJfdCAqbGluZWFyKTsKKworYm9vbCBidWZfb3BzX2hhc19od19mZW5jZShzdHJ1 Y3QgYnVmX29wcyAqYm9wcywgdWludDMyX3QgdGlsaW5nKTsKK2Jvb2wgYnVmX29wc19oYXNfdGls aW5nX3N1cHBvcnQoc3RydWN0IGJ1Zl9vcHMgKmJvcHMsIHVpbnQzMl90IHRpbGluZyk7CisKK3Zv aWQgaWd0X2J1Zl9pbml0KHN0cnVjdCBidWZfb3BzICpib3BzLCBzdHJ1Y3QgaWd0X2J1ZiAqYnVm LAorCQkgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJwcCwKKwkJICB1aW50MzJfdCByZXFf dGlsaW5nLCBib29sIGNjcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxk IGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDNmOTA4OTEyLi5hODhjM2U4OSAxMDA2NDQKLS0tIGEv bGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNvbi5idWlsZApAQCAtMjYsNiArMjYsNyBAQCBs aWJfc291cmNlcyA9IFsKIAknaWd0X3g4Ni5jJywKIAknaW5zdGRvbmUuYycsCiAJJ2ludGVsX2Jh dGNoYnVmZmVyLmMnLAorCSdpbnRlbF9idWZvcHMuYycsCiAJJ2ludGVsX2NoaXBzZXQuYycsCiAJ J2ludGVsX2RldmljZV9pbmZvLmMnLAogCSdpbnRlbF9vcy5jJywKLS0gCjIuMjMuMAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5n IGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2