From mboxrd@z Thu Jan 1 00:00:00 1970 From: bradley.d.volkin@intel.com Subject: [RFC 1/4] drm/i915: Implement a framework for batch buffer pools Date: Wed, 18 Jun 2014 09:36:13 -0700 Message-ID: <1403109376-23452-2-git-send-email-bradley.d.volkin@intel.com> References: <1403109376-23452-1-git-send-email-bradley.d.volkin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 12D6D6E6D9 for ; Wed, 18 Jun 2014 09:36:09 -0700 (PDT) In-Reply-To: <1403109376-23452-1-git-send-email-bradley.d.volkin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogQnJhZCBWb2xraW4gPGJyYWRsZXkuZC52b2xraW5AaW50ZWwuY29tPgoKVGhpcyBhZGRz IGEgc21hbGwgbW9kdWxlIGZvciBtYW5hZ2luZyBhIHBvb2wgb2YgYmF0Y2ggYnVmZmVycy4KVGhl IG9ubHkgY3VycmVudCB1c2UgY2FzZSBpcyBmb3IgdGhlIGNvbW1hbmQgcGFyc2VyLCBhcyBkZXNj cmliZWQKaW4gdGhlIGtlcm5lbGRvYyBpbiB0aGUgcGF0Y2guIFRoZSBjb2RlIGlzIHNpbXBsZSwg YnV0IHNlcGFyYXRpbmcKaXQgb3V0IG1ha2VzIGl0IGVhc2llciB0byBjaGFuZ2UgdGhlIHVuZGVy bHlpbmcgYWxnb3JpdGhtcyBhbmQgdG8KZXh0ZW5kIHRvIGZ1dHVyZSB1c2UgY2FzZXMgc2hvdWxk IHRoZXkgYXJpc2UuCgpUaGUgaW50ZXJmYWNlIGlzIHNpbXBsZTogYWxsb2MgdG8gY3JlYXRlIGFu IGVtcHR5IHBvb2wsIGZyZWUgdG8KY2xlYW4gaXQgdXA7IGdldCB0byBvYnRhaW4gYSBuZXcgYnVm ZmVyLCBwdXQgdG8gcmV0dXJuIGl0IHRvIHRoZQpwb29sLiBOb3RlIHRoYXQgYWxsIGJ1ZmZlcnMg bXVzdCBiZSByZXR1cm5lZCB0byB0aGUgcG9vbCBiZWZvcmUKZnJlZWluZyBpdC4KClRoZSBwb29s IGhhcyBhIG1heGltdW0gbnVtYmVyIG9mIGJ1ZmZlcnMgYWxsb3dlZCBkdWUgdG8gc29tZSB0ZXN0 cwooZS5nLiBnZW1fZXhlY19ub3ApIGNyZWF0aW5nIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgYnVm ZmVycyAoZS5nLgpfX18pLiBCdWZmZXJzIGFyZSBwdXJnZWFibGUgd2hpbGUgaW4gdGhlIHBvb2ws IGJ1dCBub3QgZXhwbGljaXRseQp0cnVuY2F0ZWQgaW4gb3JkZXIgdG8gYXZvaWQgb3ZlcmhlYWQg ZHVyaW5nIGV4ZWNidWYuCgpMb2NraW5nIGlzIGN1cnJlbnRseSBiYXNlZCBvbiB0aGUgY2FsbGVy IGhvbGRpbmcgdGhlIHN0cnVjdF9tdXRleC4KV2UgYWxyZWFkeSBkbyB0aGF0IGluIHRoZSBwbGFj ZXMgd2hlcmUgd2Ugd2lsbCB1c2UgdGhlIGJhdGNoIHBvb2wKZm9yIHRoZSBjb21tYW5kIHBhcnNl ci4KClNpZ25lZC1vZmYtYnk6IEJyYWQgVm9sa2luIDxicmFkbGV5LmQudm9sa2luQGludGVsLmNv bT4KLS0tCgpyLmUuIHBvb2wgY2FwYWNpdHkKTXkgb3JpZ2luYWwgdGVzdGluZyBzaG93ZWQgc29t ZXRoaW5nIGxpa2UgdGhvdXNhbmRzIG9mIGJ1ZmZlcnMgaW4KdGhlIHBvb2wgYWZ0ZXIgYSBnZW1f ZXhlY19ub3AgcnVuLiBCdXQgd2hlbiBJIHJlcmFuIHdpdGggdGhlIG1heApjaGVjayBkaXNhYmxl ZCBqdXN0IG5vdyB0byBnZXQgYW4gYWN0dWFsIG51bWJlciBmb3IgdGhlIGNvbW1pdAptZXNzYWdl LCB0aGUgbnVtYmVyIHdhcyBtb3JlIGxpa2UgMTMwLiAgSSBkZXZlbG9wZWQgYW5kIHRlc3RlZCB0 aGUKY2hhbmdlcyBpbmNyZW1lbnRhbGx5LCBhbmQgc3VzcGVjdCB0aGF0IHRoZSBvcmlnaW5hbCBy dW4gd2FzIGJlZm9yZQpJIGltcGxlbWVudGVkIHRoZSBhY3R1YWwgY29weSBvcGVyYXRpb24uIFNv IEknbSBpbmNsaW5lZCB0byByZW1vdmUKb3IgYXQgbGVhc3QgaW5jcmVhc2UgdGhlIGNhcCBpbiB0 aGUgZmluYWwgdmVyc2lvbi4gVGhvdWdodHM/CgotLS0KIERvY3VtZW50YXRpb24vRG9jQm9vay9k cm0udG1wbCAgICAgICAgICAgICB8ICAgNSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmls ZSAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAg ICAgICAgICAgIHwgIDE5ICsrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgICAg ICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9iYXRjaF9wb29s LmMgfCAxNTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwg MTc3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jv b2svZHJtLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKaW5kZXggN2RmMzEz NC4uZmNjMGExYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCisr KyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbApAQCAtMzkzOSw2ICszOTM5LDExIEBA IGludCBudW1faW9jdGxzOzwvc3lub3BzaXM+CiAhUGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Y21kX3BhcnNlci5jIGJhdGNoIGJ1ZmZlciBjb21tYW5kIHBhcnNlcgogIUlkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwogICAgICAgPC9zZWN0Mj4KKyAgICAgIDxzZWN0Mj4K KyAgICAgICAgPHRpdGxlPkJhdGNoYnVmZmVyIFBvb2xzPC90aXRsZT4KKyFQZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5jIGJhdGNoIHBvb2wKKyFJZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5jCisgICAgICA8L3NlY3QyPgogICAgIDwvc2Vj dDE+CiAgIDwvY2hhcHRlcj4KIDwvcGFydD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKaW5kZXggY2FkMTY4 My4uYjkyZmJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAgaTkxNS0k KENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8KIAogIyBHRU0gY29kZQogaTkxNS15 ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKKwkgIGk5MTVfZ2VtX2JhdGNoX3Bvb2wubyBcCiAJICBp OTE1X2dlbV9jb250ZXh0Lm8gXAogCSAgaTkxNV9nZW1fcmVuZGVyX3N0YXRlLm8gXAogCSAgaTkx NV9nZW1fZGVidWcubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCAwNjQwMDcxLi4yYTg4 YjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE2MTAsNiArMTYxMCw4IEBAIHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAkvKiogVXNlZCBpbiBleGVjYnVmIHRvIHRlbXBvcmFy aWx5IGhvbGQgYSByZWYgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG9ial9leGVjX2xpbms7CiAKKwlz dHJ1Y3QgbGlzdF9oZWFkIGJhdGNoX3Bvb2xfbGlzdDsKKwogCS8qKgogCSAqIFRoaXMgaXMgc2V0 IGlmIHRoZSBvYmplY3QgaXMgb24gdGhlIGFjdGl2ZSBsaXN0cyAoaGFzIHBlbmRpbmcKIAkgKiBy ZW5kZXJpbmcgYW5kIHNvIGEgbm9uLXplcm8gc2Vxbm8pLCBhbmQgaXMgbm90IHNldCBpZiBpdCBp IHMgb24KQEAgLTE3MjcsNiArMTcyOSwxNCBAQCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7 CiB9OwogI2RlZmluZSB0b19pbnRlbF9ibyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QsIGJhc2UpCiAKK3N0cnVjdCBpOTE1X2dlbV9iYXRjaF9wb29sIHsKKwlz dHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CisJ c3RydWN0IGxpc3RfaGVhZCBpbmFjdGl2ZV9saXN0OworCWludCBjb3VudDsKKwlpbnQgbWF4X2Nv dW50OworfTsKKwogLyoqCiAgKiBSZXF1ZXN0IHF1ZXVlIHN0cnVjdHVyZS4KICAqCkBAIC0yNTA4 LDYgKzI1MTgsMTUgQEAgdm9pZCBpOTE1X2Rlc3Ryb3lfZXJyb3Jfc3RhdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7CiB2b2lkIGk5MTVfZ2V0X2V4dHJhX2luc3Rkb25lKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHVpbnQzMl90ICppbnN0ZG9uZSk7CiBjb25zdCBjaGFyICppOTE1X2NhY2hlX2xl dmVsX3N0cihpbnQgdHlwZSk7CiAKKy8qIGk5MTVfZ2VtX2JhdGNoX3Bvb2wuYyAqLworc3RydWN0 IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKmk5MTVfZ2VtX2JhdGNoX3Bvb2xfYWxsb2Moc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgIGludCBtYXhfY291bnQpOwordm9pZCBpOTE1X2dl bV9iYXRjaF9wb29sX2ZyZWUoc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKnBvb2wpOworc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QqCitpOTE1X2dlbV9iYXRjaF9wb29sX2dldChzdHJ1Y3Qg aTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpOwordm9pZCBpOTE1X2dlbV9i YXRjaF9wb29sX3B1dChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCwKKwkJCSAgICAg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7CisKIC8qIGk5MTVfY21kX3BhcnNlci5j ICovCiBpbnQgaTkxNV9jbWRfcGFyc2VyX2dldF92ZXJzaW9uKHZvaWQpOwogaW50IGk5MTVfY21k X3BhcnNlcl9pbml0X3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZyk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW0uYwppbmRleCBkODU3ZjU4Li5kNWUzMDAxIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtLmMKQEAgLTQzMjQsNiArNDMyNCw3IEBAIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXQoc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAlJTklUX0xJU1RfSEVBRCgmb2JqLT5yaW5n X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZvYmotPm9ial9leGVjX2xpbmspOwogCUlOSVRfTElT VF9IRUFEKCZvYmotPnZtYV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmb2JqLT5iYXRjaF9wb29s X2xpc3QpOwogCiAJb2JqLT5vcHMgPSBvcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2JhdGNoX3Bvb2wuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2JhdGNoX3Bvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Nl YzdkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0 Y2hfcG9vbC5jCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgSW50 ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdB UkUuCisgKgorICovCisKKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorCisvKioKKyAqIERPQzogYmF0 Y2ggcG9vbAorICoKKyAqIEluIG9yZGVyIHRvIHN1Ym1pdCBiYXRjaCBidWZmZXJzIGFzICdzZWN1 cmUnLCB0aGUgc29mdHdhcmUgY29tbWFuZCBwYXJzZXIKKyAqIG11c3QgZW5zdXJlIHRoYXQgYSBi YXRjaCBidWZmZXIgY2Fubm90IGJlIG1vZGlmaWVkIGFmdGVyIHBhcnNpbmcuIEl0IGRvZXMKKyAq IHRoaXMgYnkgY29weWluZyB0aGUgdXNlciBwcm92aWRlZCBiYXRjaCBidWZmZXIgY29udGVudHMg dG8gYSBrZXJuZWwgb3duZWQKKyAqIGJ1ZmZlciBmcm9tIHdoaWNoIHRoZSBoYXJkd2FyZSB3aWxs IGFjdHVhbGx5IGV4ZWN1dGUsIGFuZCBieSBjYXJlZnVsbHkKKyAqIG1hbmFnaW5nIHRoZSBhZGRy ZXNzIHNwYWNlIGJpbmRpbmdzIGZvciBzdWNoIGJ1ZmZlcnMuCisgKgorICogVGhlIGJhdGNoIHBv b2wgZnJhbWV3b3JrIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGZvciB0aGUgZHJpdmVyIHRvIG1hbmFn ZSBhCisgKiBzZXQgb2Ygc2NyYXRjaCBidWZmZXJzIHRvIHVzZSBmb3IgdGhpcyBwdXJwb3NlLiBU aGUgZnJhbWV3b3JrIGNhbiBiZQorICogZXh0ZW5kZWQgdG8gc3VwcG9ydCBvdGhlciB1c2VzIGNh c2VzIHNob3VsZCB0aGV5IGFyaXNlLgorICovCisKKy8qKgorICogaTkxNV9nZW1fYmF0Y2hfcG9v bF9hbGxvYygpIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSBiYXRjaCBidWZmZXIgcG9vbAor ICogQGRldjogdGhlIGRybSBkZXZpY2UKKyAqIEBtYXhfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJl ciBvZiBidWZmZXJzIGFsbG93ZWQgaW4gdGhlIHBvb2wKKyAqCisgKiBSZXR1cm46IHRoZSBuZXcg YmF0Y2ggYnVmZmVyIHBvb2wKKyAqLworc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKmk5MTVf Z2VtX2JhdGNoX3Bvb2xfYWxsb2Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJCSAgICAg IGludCBtYXhfY291bnQpCit7CisJc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKnBvb2w7CisK Kwlwb29sID0ga21hbGxvYyhzaXplb2YoKnBvb2wpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBvb2wp CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcG9vbC0+ZGV2ID0gZGV2OworCUlOSVRf TElTVF9IRUFEKCZwb29sLT5hY3RpdmVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmlu YWN0aXZlX2xpc3QpOworCXBvb2wtPmNvdW50ID0gMDsKKwlwb29sLT5tYXhfY291bnQgPSBtYXhf Y291bnQ7CisKKwlyZXR1cm4gcG9vbDsKK30KKworLyoqCisgKiBpOTE1X2dlbV9iYXRjaF9wb29s X2ZyZWUoKSAtIGNsZWFuIHVwIGEgYmF0Y2ggYnVmZmVyIHBvb2wKKyAqIEBwb29sOiB0aGUgcG9v bCB0byBjbGVhbiB1cAorICoKKyAqIE5vdGU6IENhbGxlcnMgbXVzdCBob2xkIHRoZSBzdHJ1Y3Rf bXV0ZXguIENhbGxlcnMgbXVzdCBhbHNvIGVuc3VyZQorICogICAgICAgdGhhdCBhbGwgYnVmZmVy cyBoYXZlIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHBvb2wuCisgKi8KK3ZvaWQgaTkxNV9nZW1fYmF0 Y2hfcG9vbF9mcmVlKHN0cnVjdCBpOTE1X2dlbV9iYXRjaF9wb29sICpwb29sKQoreworCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosICpuZXh0OworCisJQlVHX09OKCFtdXRleF9pc19s b2NrZWQoJnBvb2wtPmRldi0+c3RydWN0X211dGV4KSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZw b29sLT5hY3RpdmVfbGlzdCkpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9iaiwgbmV4 dCwKKwkJCQkgJnBvb2wtPmluYWN0aXZlX2xpc3QsIGJhdGNoX3Bvb2xfbGlzdCkgeworCQlsaXN0 X2RlbCgmb2JqLT5iYXRjaF9wb29sX2xpc3QpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5j ZSgmb2JqLT5iYXNlKTsKKwl9CisKKwlrZnJlZShwb29sKTsKK30KKworLyoqCisgKiBpOTE1X2dl bV9iYXRjaF9wb29sX2dldCgpIC0gc2VsZWN0IGEgYnVmZmVyIGZyb20gdGhlIHBvb2wKKyAqIEBw b29sOiB0aGUgYmF0Y2ggYnVmZmVyIHBvb2wKKyAqIEBzaXplOiB0aGUgbWluaW11bSBkZXNpcmVk IHNpemUgb2YgdGhlIHJldHVybmVkIGJ1ZmZlcgorICoKKyAqIEZpbmRzIG9yIGFsbG9jYXRlcyBh IGJhdGNoIGJ1ZmZlciBpbiB0aGUgcG9vbCB3aXRoIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQKKyAq IHNpemUuIFRoZSBidWZmZXIgd2lsbCBub3QgYmUgdXNlZCB0byBzYXRpc2Z5IGZ1cnRoZXIKKyAq IGk5MTVfZ2VtX2JhdGNoX3Bvb2xfZ2V0KCkgcmVxdWVzdHMgdW50aWwgdGhlIGNvcnJlc3BvbmRp bmcKKyAqIGk5MTVfZ2VtX2JhdGNoX3Bvb2xfcHV0KCkgY2FsbC4gVGhlIGNhbGxlciBpcyByZXNw b25zaWJsZSBmb3IgYW55IGRvbWFpbiBvcgorICogYWN0aXZlL2luYWN0aXZlIG1hbmFnZW1lbnQg Zm9yIHRoZSByZXR1cm5lZCBidWZmZXIuCisgKgorICogTm90ZTogQ2FsbGVycyBtdXN0IGhvbGQg dGhlIHN0cnVjdF9tdXRleAorICoKKyAqIFJldHVybjogdGhlIHNlbGVjdGVkIGJhdGNoIGJ1ZmZl ciBvYmplY3Q7IC1FQUdBSU4gaWYgdGhlIHBvb2wgaXMgYXQgY2FwYWNpdHkKKyAqLworc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKgoraTkxNV9nZW1fYmF0Y2hfcG9vbF9nZXQoc3RydWN0IGk5 MTVfZ2VtX2JhdGNoX3Bvb2wgKnBvb2wsCisJCQlzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqdG1wOworCisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJnBvb2wtPmRldi0+c3RydWN0X211 dGV4KSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnBvb2wtPmluYWN0aXZlX2xpc3Qs IGJhdGNoX3Bvb2xfbGlzdCkgeworCQlpZiAodG1wLT5iYXNlLnNpemUgPj0gc2l6ZSkgeworCQkJ b2JqID0gdG1wOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIW9iaikgeworCQlpZiAocG9v bC0+Y291bnQgPT0gcG9vbC0+bWF4X2NvdW50KQorCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7 CisKKwkJb2JqID0gaTkxNV9nZW1fYWxsb2Nfb2JqZWN0KHBvb2wtPmRldiwgc2l6ZSk7CisJCWlm ICghb2JqKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkJbGlzdF9hZGRfdGFpbCgm b2JqLT5iYXRjaF9wb29sX2xpc3QsICZwb29sLT5pbmFjdGl2ZV9saXN0KTsKKwkJcG9vbC0+Y291 bnQrKzsKKwl9CisKKwlvYmotPm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7CisJbGlzdF9tb3Zl X3RhaWwoJm9iai0+YmF0Y2hfcG9vbF9saXN0LCAmcG9vbC0+YWN0aXZlX2xpc3QpOworCisJcmV0 dXJuIG9iajsKK30KKworLyoqCisgKiBpOTE1X2dlbV9iYXRjaF9wb29sX3B1dCgpIC0gcmV0dXJu IGEgYnVmZmVyIHRvIHRoZSBwb29sCisgKiBAcG9vbDogdGhlIGJhdGNoIGJ1ZmZlciBwb29sCisg KiBAb2JqOiB0aGUgYmF0Y2ggYnVmZmVyIG9iamVjdAorICoKKyAqIE5vdGU6IENhbGxlcnMgbXVz dCBob2xkIHRoZSBzdHJ1Y3RfbXV0ZXgKKyAqLwordm9pZCBpOTE1X2dlbV9iYXRjaF9wb29sX3B1 dChzdHJ1Y3QgaTkxNV9nZW1fYmF0Y2hfcG9vbCAqcG9vbCwKKwkJCSAgICAgc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmcG9vbC0+ ZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKKwlvYmotPm1hZHYgPSBJOTE1X01BRFZfRE9OVE5FRUQ7CisJ bGlzdF9tb3ZlX3RhaWwoJm9iai0+YmF0Y2hfcG9vbF9saXN0LCAmcG9vbC0+aW5hY3RpdmVfbGlz dCk7Cit9Ci0tIAoxLjguMy4yCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lu dGVsLWdmeAo=