From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 06/46] drm/i915: Add some selftests for sg_table manipulation Date: Fri, 10 Feb 2017 10:24:41 +0000 Message-ID: <0ff08cea-9be2-18fc-3920-3f48101a2653@linux.intel.com> References: <20170202090905.29028-1-chris@chris-wilson.co.uk> <20170202090905.29028-7-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8FD6A6EC5D for ; Fri, 10 Feb 2017 10:24:44 +0000 (UTC) In-Reply-To: <20170202090905.29028-7-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDAyLzAyLzIwMTcgMDk6MDgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBTdGFydCBleGVyY2lz aW5nIHRoZSBzY2F0dGVyZ2F0aGVyIGxpc3RzLCBlc3BlY2lhbGx5IGxvb2tpbmcgYXQKPiBpdGVy YXRpb24gYWZ0ZXIgY29hbGVzY2luZy4KPgo+IHYyOiBDb21tZW50IG9uIHRoZSBwZWN1bGlhcml0 eSBvZiB0YWJsZSBjb25zdHJ1Y3Rpb24gKGkuZS4gd2h5IHRoaXMKPiBzZ190YWJsZSBtaWdodCBi ZSBpbnRlcmVzdGluZykuCj4gdjM6IEFkZGVkIG9uZSBfX2Z1bmNfXyB0byBpZGVudGlmeSBleHBl Y3RfcGZuX3NnKCkKPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMt d2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwu Y29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAg ICAgICAgICB8ICAxMSArLQo+ICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tf c2VsZnRlc3RzLmggICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9z Y2F0dGVybGlzdC5jICAgICAgIHwgMzMxICsrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVz IGNoYW5nZWQsIDM0MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL3NjYXR0ZXJsaXN0LmMKPgo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDg4MDY1ZmQ1NTE0Ny4uZmM1NGE4ZWIzZmU1 IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTIyMTYsMTcgKzIyMTYsMTcgQEAg dm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiAgfQo+Cj4gLXN0YXRp YyB2b2lkIGk5MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCj4gK3N0YXRpYyBi b29sIGk5MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCj4gIHsKPiAgCXN0cnVj dCBzZ190YWJsZSBuZXdfc3Q7Cj4gIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCAqbmV3X3NnOwo+ ICAJdW5zaWduZWQgaW50IGk7Cj4KPiAgCWlmIChvcmlnX3N0LT5uZW50cyA9PSBvcmlnX3N0LT5v cmlnX25lbnRzKQo+IC0JCXJldHVybjsKPiArCQlyZXR1cm4gZmFsc2U7Cj4KPiAgCWlmIChzZ19h bGxvY190YWJsZSgmbmV3X3N0LCBvcmlnX3N0LT5uZW50cywgR0ZQX0tFUk5FTCB8IF9fR0ZQX05P V0FSTikpCj4gLQkJcmV0dXJuOwo+ICsJCXJldHVybiBmYWxzZTsKPgo+ICAJbmV3X3NnID0gbmV3 X3N0LnNnbDsKPiAgCWZvcl9lYWNoX3NnKG9yaWdfc3QtPnNnbCwgc2csIG9yaWdfc3QtPm5lbnRz LCBpKSB7Cj4gQEAgLTIyMzksNiArMjIzOSw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfc2dfdHJpbShz dHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCj4gIAlzZ19mcmVlX3RhYmxlKG9yaWdfc3QpOwo+Cj4g IAkqb3JpZ19zdCA9IG5ld19zdDsKPiArCXJldHVybiB0cnVlOwo+ICB9Cj4KPiAgc3RhdGljIHN0 cnVjdCBzZ190YWJsZSAqCj4gQEAgLTQ5NjcsMyArNDk2OCw3IEBAIGk5MTVfZ2VtX29iamVjdF9n ZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCXNnID0g aTkxNV9nZW1fb2JqZWN0X2dldF9zZyhvYmosIG4sICZvZmZzZXQpOwo+ICAJcmV0dXJuIHNnX2Rt YV9hZGRyZXNzKHNnKSArIChvZmZzZXQgPDwgUEFHRV9TSElGVCk7Cj4gIH0KPiArCj4gKyNpZiBJ U19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKPiArI2luY2x1ZGUgInNlbGZ0ZXN0 cy9zY2F0dGVybGlzdC5jIgo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKPiBpbmRleCA2OWU5N2EyYmE0YTYu LjVmMGJkZGE0MmVkOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+IEBAIC05LDMgKzksNCBAQAo+ICAgKiBUZXN0 cyBhcmUgZXhlY3V0ZWQgaW4gb3JkZXIgYnkgaWd0L2Rydl9zZWxmdGVzdAo+ICAgKi8KPiAgc2Vs ZnRlc3Qoc2FuaXR5Y2hlY2ssIGk5MTVfbW9ja19zYW5pdHljaGVjaykgLyoga2VlcCBmaXJzdCAo aWd0IHNlbGZjaGVjaykgKi8KPiArc2VsZnRlc3Qoc2NhdHRlcmxpc3QsIHNjYXR0ZXJsaXN0X21v Y2tfc2VsZnRlc3RzKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvc2NhdHRlcmxpc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9zY2F0dGVy bGlzdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmZhNWJk MDljODYzZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxm dGVzdHMvc2NhdHRlcmxpc3QuYwo+IEBAIC0wLDAgKzEsMzMxIEBACj4gKy8qCj4gKyAqIENvcHly aWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh Cj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiArICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ICsgKgo+ ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGlj ZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICogU29mdHdh cmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U LiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3ByaW1lX251bWJlcnMuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3JhbmRvbS5oPgo+ICsKPiArI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIK PiArCj4gKyNkZWZpbmUgUEZOX0JJQVMgKDEgPDwgMTApCj4gKwo+ICtzdHJ1Y3QgcGZuX3RhYmxl IHsKPiArCXN0cnVjdCBzZ190YWJsZSBzdDsKPiArCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsK PiArfTsKPiArCj4gK3R5cGVkZWYgdW5zaWduZWQgaW50ICgqbnBhZ2VzX2ZuX3QpKHVuc2lnbmVk IGxvbmcgbiwKPiArCQkJCSAgICB1bnNpZ25lZCBsb25nIGNvdW50LAo+ICsJCQkJICAgIHN0cnVj dCBybmRfc3RhdGUgKnJuZCk7Cj4gKwo+ICtzdGF0aWMgbm9pbmxpbmUgaW50IGV4cGVjdF9wZm5f c2coc3RydWN0IHBmbl90YWJsZSAqcHQsCj4gKwkJCQkgIG5wYWdlc19mbl90IG5wYWdlc19mbiwK PiArCQkJCSAgc3RydWN0IHJuZF9zdGF0ZSAqcm5kLAo+ICsJCQkJICBjb25zdCBjaGFyICp3aG8s Cj4gKwkJCQkgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKPiArewo+ICsJc3RydWN0IHNjYXR0ZXJs aXN0ICpzZzsKPiArCXVuc2lnbmVkIGxvbmcgcGZuLCBuOwo+ICsKPiArCXBmbiA9IHB0LT5zdGFy dDsKPiArCWZvcl9lYWNoX3NnKHB0LT5zdC5zZ2wsIHNnLCBwdC0+c3QubmVudHMsIG4pIHsKPiAr CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2Uoc2cpOwo+ICsJCXVuc2lnbmVkIGludCBucGFn ZXMgPSBucGFnZXNfZm4obiwgcHQtPnN0Lm5lbnRzLCBybmQpOwo+ICsKPiArCQlpZiAocGFnZV90 b19wZm4ocGFnZSkgIT0gcGZuKSB7Cj4gKwkJCXByX2VycigiJXM6ICVzIGxlZnQgcGFnZXMgb3V0 IG9mIG9yZGVyLCBleHBlY3RlZCBwZm4gJWx1LCBmb3VuZCBwZm4gJWx1ICh1c2luZyBmb3JfZWFj aF9zZylcbiIsCj4gKwkJCSAgICAgICBfX2Z1bmNfXywgd2hvLCBwZm4sIHBhZ2VfdG9fcGZuKHBh Z2UpKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlpZiAoc2ctPmxlbmd0 aCAhPSBucGFnZXMgKiBQQUdFX1NJWkUpIHsKPiArCQkJcHJfZXJyKCIlczogJXMgY29waWVkIHdy b25nIHNnIGxlbmd0aCwgZXhwZWN0ZWQgc2l6ZSAlbHUsIGZvdW5kICV1ICh1c2luZyBmb3JfZWFj aF9zZylcbiIsCj4gKwkJCSAgICAgICBfX2Z1bmNfXywgd2hvLCBucGFnZXMgKiBQQUdFX1NJWkUs IHNnLT5sZW5ndGgpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCWlmIChp Z3RfdGltZW91dCh0aW1lb3V0LCAiJXMgdGltZWQgb3V0XG4iLCB3aG8pKQo+ICsJCQlyZXR1cm4g LUVJTlRSOwo+ICsKPiArCQlwZm4gKz0gbnBhZ2VzOwo+ICsJfQo+ICsJaWYgKHBmbiAhPSBwdC0+ ZW5kKSB7Cj4gKwkJcHJfZXJyKCIlczogJXMgZmluaXNoZWQgb24gd3JvbmcgcGZuLCBleHBlY3Rl ZCAlbHUsIGZvdW5kICVsdVxuIiwKPiArCQkgICAgICAgX19mdW5jX18sIHdobywgcHQtPmVuZCwg cGZuKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIG5vaW5saW5lIGludCBleHBlY3RfcGZuX3NnX3BhZ2VfaXRlcihzdHJ1Y3Qg cGZuX3RhYmxlICpwdCwKPiArCQkJCQkgICAgY29uc3QgY2hhciAqd2hvLAo+ICsJCQkJCSAgICB1 bnNpZ25lZCBsb25nIHRpbWVvdXQpCj4gK3sKPiArCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2dpdGVy Owo+ICsJdW5zaWduZWQgbG9uZyBwZm47Cj4gKwo+ICsJcGZuID0gcHQtPnN0YXJ0Owo+ICsJZm9y X2VhY2hfc2dfcGFnZShwdC0+c3Quc2dsLCAmc2dpdGVyLCBwdC0+c3QubmVudHMsIDApIHsKPiAr CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2VfaXRlcl9wYWdlKCZzZ2l0ZXIpOwo+ICsKPiAr CQlpZiAocGFnZSAhPSBwZm5fdG9fcGFnZShwZm4pKSB7Cj4gKwkJCXByX2VycigiJXM6ICVzIGxl ZnQgcGFnZXMgb3V0IG9mIG9yZGVyLCBleHBlY3RlZCBwZm4gJWx1LCBmb3VuZCBwZm4gJWx1ICh1 c2luZyBmb3JfZWFjaF9zZ19wYWdlKVxuIiwKPiArCQkJICAgICAgIF9fZnVuY19fLCB3aG8sIHBm biwgcGFnZV90b19wZm4ocGFnZSkpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ ICsJCWlmIChpZ3RfdGltZW91dCh0aW1lb3V0LCAiJXMgdGltZWQgb3V0XG4iLCB3aG8pKQo+ICsJ CQlyZXR1cm4gLUVJTlRSOwo+ICsKPiArCQlwZm4rKzsKPiArCX0KPiArCWlmIChwZm4gIT0gcHQt PmVuZCkgewo+ICsJCXByX2VycigiJXM6ICVzIGZpbmlzaGVkIG9uIHdyb25nIHBmbiwgZXhwZWN0 ZWQgJWx1LCBmb3VuZCAlbHVcbiIsCj4gKwkJICAgICAgIF9fZnVuY19fLCB3aG8sIHB0LT5lbmQs IHBmbik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBub2lubGluZSBpbnQgZXhwZWN0X3Bmbl9zZ3RpdGVyKHN0cnVjdCBwZm5f dGFibGUgKnB0LAo+ICsJCQkJICAgICAgIGNvbnN0IGNoYXIgKndobywKPiArCQkJCSAgICAgICB1 bnNpZ25lZCBsb25nIHRpbWVvdXQpCj4gK3sKPiArCXN0cnVjdCBzZ3RfaXRlciBzZ3Q7Cj4gKwlz dHJ1Y3QgcGFnZSAqcGFnZTsKPiArCXVuc2lnbmVkIGxvbmcgcGZuOwo+ICsKPiArCXBmbiA9IHB0 LT5zdGFydDsKPiArCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndCwgJnB0LT5zdCkgewo+ICsJ CWlmIChwYWdlICE9IHBmbl90b19wYWdlKHBmbikpIHsKPiArCQkJcHJfZXJyKCIlczogJXMgbGVm dCBwYWdlcyBvdXQgb2Ygb3JkZXIsIGV4cGVjdGVkIHBmbiAlbHUsIGZvdW5kIHBmbiAlbHUgKHVz aW5nIGZvcl9lYWNoX3NndF9wYWdlKVxuIiwKPiArCQkJICAgICAgIF9fZnVuY19fLCB3aG8sIHBm biwgcGFnZV90b19wZm4ocGFnZSkpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ ICsJCWlmIChpZ3RfdGltZW91dCh0aW1lb3V0LCAiJXMgdGltZWQgb3V0XG4iLCB3aG8pKQo+ICsJ CQlyZXR1cm4gLUVJTlRSOwo+ICsKPiArCQlwZm4rKzsKPiArCX0KPiArCWlmIChwZm4gIT0gcHQt PmVuZCkgewo+ICsJCXByX2VycigiJXM6ICVzIGZpbmlzaGVkIG9uIHdyb25nIHBmbiwgZXhwZWN0 ZWQgJWx1LCBmb3VuZCAlbHVcbiIsCj4gKwkJICAgICAgIF9fZnVuY19fLCB3aG8sIHB0LT5lbmQs IHBmbik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgZXhwZWN0X3Bmbl9zZ3RhYmxlKHN0cnVjdCBwZm5fdGFibGUgKnB0 LAo+ICsJCQkgICAgICBucGFnZXNfZm5fdCBucGFnZXNfZm4sCj4gKwkJCSAgICAgIHN0cnVjdCBy bmRfc3RhdGUgKnJuZCwKPiArCQkJICAgICAgY29uc3QgY2hhciAqd2hvLAo+ICsJCQkgICAgICB1 bnNpZ25lZCBsb25nIHRpbWVvdXQpCj4gK3sKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gZXhw ZWN0X3Bmbl9zZyhwdCwgbnBhZ2VzX2ZuLCBybmQsIHdobywgdGltZW91dCk7Cj4gKwlpZiAoZXJy KQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0gZXhwZWN0X3Bmbl9zZ19wYWdlX2l0ZXIo cHQsIHdobywgdGltZW91dCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJ ZXJyID0gZXhwZWN0X3Bmbl9zZ3RpdGVyKHB0LCB3aG8sIHRpbWVvdXQpOwo+ICsJaWYgKGVycikK PiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdW5z aWduZWQgaW50IG9uZSh1bnNpZ25lZCBsb25nIG4sCj4gKwkJCXVuc2lnbmVkIGxvbmcgY291bnQs Cj4gKwkJCXN0cnVjdCBybmRfc3RhdGUgKnJuZCkKPiArewo+ICsJcmV0dXJuIDE7Cj4gK30KPiAr Cj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3Jvdyh1bnNpZ25lZCBsb25nIG4sCj4gKwkJCSB1bnNp Z25lZCBsb25nIGNvdW50LAo+ICsJCQkgc3RydWN0IHJuZF9zdGF0ZSAqcm5kKQo+ICt7Cj4gKwly ZXR1cm4gbiArIDE7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rKHVuc2ln bmVkIGxvbmcgbiwKPiArCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCwKPiArCQkJICAgc3RydWN0 IHJuZF9zdGF0ZSAqcm5kKQo+ICt7Cj4gKwlyZXR1cm4gY291bnQgLSBuOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdW5zaWduZWQgaW50IHJhbmRvbSh1bnNpZ25lZCBsb25nIG4sCj4gKwkJCSAgIHVuc2ln bmVkIGxvbmcgY291bnQsCj4gKwkJCSAgIHN0cnVjdCBybmRfc3RhdGUgKnJuZCkKPiArewo+ICsJ cmV0dXJuIDEgKyAocHJhbmRvbV91MzJfc3RhdGUocm5kKSAlIDEwMjQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgYm9vbCBhbGxvY190YWJsZShzdHJ1Y3QgcGZuX3RhYmxlICpwdCwKPiArCQkJdW5zaWdu ZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyBtYXgsCj4gKwkJCW5wYWdlc19mbl90IG5wYWdl c19mbiwKPiArCQkJc3RydWN0IHJuZF9zdGF0ZSAqcm5kKQo+ICt7Cj4gKwlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOwo+ICsJdW5zaWduZWQgbG9uZyBuLCBwZm47Cj4gKwo+ICsJaWYgKHNnX2FsbG9j X3RhYmxlKCZwdC0+c3QsIG1heCwKPiArCQkJICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PUkVUUlkg fCBfX0dGUF9OT1dBUk4pKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwkvKiBjb3VudCBzaG91 bGQgYmUgbGVzcyB0aGFuIDIwIHRvIHByZXZlbnQgb3ZlcmZsb3dpbmcgc2ctPmxlbmd0aCAqLwo+ ICsJR0VNX0JVR19PTihvdmVyZmxvd3NfdHlwZShjb3VudCAqIFBBR0VfU0laRSwgc2ctPmxlbmd0 aCkpOwo+ICsKPiArCS8qIENvbnN0cnVjdCBhIHRhYmxlIHdoZXJlIGVhY2ggc2NhdHRlcmxpc3Qg Y29udGFpbnMgZGlmZmVyZW50IG51bWJlcgo+ICsJICogb2YgZW50cmllcy4gVGhlIGlkZWEgaXMg dG8gY2hlY2sgdGhhdCB3ZSBjYW4gaXRlcmF0ZSB0aGUgaW5kaXZpZHVhbAo+ICsJICogcGFnZXMg ZnJvbSBpbnNpZGUgdGhlIGNvYWxlc2NlZCBsaXN0cy4KPiArCSAqLwo+ICsJcHQtPnN0YXJ0ID0g UEZOX0JJQVM7Cj4gKwlwZm4gPSBwdC0+c3RhcnQ7Cj4gKwlzZyA9IHB0LT5zdC5zZ2w7Cj4gKwlm b3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewo+ICsJCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0g bnBhZ2VzX2ZuKG4sIGNvdW50LCBybmQpOwo+ICsKPiArCQlpZiAobikKPiArCQkJc2cgPSBzZ19u ZXh0KHNnKTsKPiArCQlzZ19zZXRfcGFnZShzZywgcGZuX3RvX3BhZ2UocGZuKSwgbnBhZ2VzICog UEFHRV9TSVpFLCAwKTsKPiArCj4gKwkJR0VNX0JVR19PTihwYWdlX3RvX3BmbihzZ19wYWdlKHNn KSkgIT0gcGZuKTsKPiArCQlHRU1fQlVHX09OKHNnLT5sZW5ndGggIT0gbnBhZ2VzICogUEFHRV9T SVpFKTsKPiArCQlHRU1fQlVHX09OKHNnLT5vZmZzZXQgIT0gMCk7Cj4gKwo+ICsJCXBmbiArPSBu cGFnZXM7Cj4gKwl9Cj4gKwlzZ19tYXJrX2VuZChzZyk7Cj4gKwlwdC0+c3QubmVudHMgPSBuOwo+ ICsJcHQtPmVuZCA9IHBmbjsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGlj IGNvbnN0IG5wYWdlc19mbl90IG5wYWdlc19mdW5jc1tdID0gewo+ICsJb25lLAo+ICsJZ3JvdywK PiArCXNocmluaywKPiArCXJhbmRvbSwKPiArCU5VTEwsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50 IGlndF9zZ19hbGxvYyh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlJR1RfVElNRU9VVChlbmRfdGlt ZSk7Cj4gKwljb25zdCB1bnNpZ25lZCBsb25nIG1heF9vcmRlciA9IDIwOyAvKiBhcHByb3hpbWF0 aW5nIGEgNEdpQiBvYmplY3QgKi8KPiArCXN0cnVjdCBybmRfc3RhdGUgcHJuZzsKPiArCXVuc2ln bmVkIGxvbmcgcHJpbWU7Cj4gKwo+ICsJZm9yX2VhY2hfcHJpbWVfbnVtYmVyKHByaW1lLCBtYXhf b3JkZXIpIHsKPiArCQl1bnNpZ25lZCBsb25nIHNpemUgPSBCSVQocHJpbWUpOwo+ICsJCWludCBv ZmZzZXQ7Cj4gKwo+ICsJCWZvciAob2Zmc2V0ID0gLTE7IG9mZnNldCA8PSAxOyBvZmZzZXQrKykg ewo+ICsJCQl1bnNpZ25lZCBsb25nIHN6ID0gc2l6ZSArIG9mZnNldDsKPiArCQkJY29uc3QgbnBh Z2VzX2ZuX3QgKm5wYWdlczsKPiArCQkJc3RydWN0IHBmbl90YWJsZSBwdDsKPiArCQkJaW50IGVy cjsKPiArCj4gKwkJCWZvciAobnBhZ2VzID0gbnBhZ2VzX2Z1bmNzOyAqbnBhZ2VzOyBucGFnZXMr Kykgewo+ICsJCQkJcHJhbmRvbV9zZWVkX3N0YXRlKCZwcm5nLAo+ICsJCQkJCQkgICBpOTE1X3Nl bGZ0ZXN0LnJhbmRvbV9zZWVkKTsKPiArCQkJCWlmICghYWxsb2NfdGFibGUoJnB0LCBzeiwgc3os ICpucGFnZXMsICZwcm5nKSkKPiArCQkJCQlyZXR1cm4gMDsgLyogb3V0IG9mIG1lbW9yeSwgZ2l2 ZSB1cCAqLwoKV2UgbmVlZCB0byBkZWZpbmUgYXQgbGVhc3Qgc29tZSBhbW91bnQgb2YgdGVzdGlu ZyB3aGljaCBtdXN0IHBhc3MgCm90aGVyd2lzZSBpdCBpcyBqdXN0IHRvbyB3ZWFrIGluIG15IG9w aW5pb24uCgoJcmV0dXJuIHByaW1lIDwgVEJEID8gLUVzb21ldGhpbmcgOiAwOwoKPwoKUmVnYXJk cywKClR2cnRrbwoKPiArCj4gKwkJCQlwcmFuZG9tX3NlZWRfc3RhdGUoJnBybmcsCj4gKwkJCQkJ CSAgIGk5MTVfc2VsZnRlc3QucmFuZG9tX3NlZWQpOwo+ICsJCQkJZXJyID0gZXhwZWN0X3Bmbl9z Z3RhYmxlKCZwdCwgKm5wYWdlcywgJnBybmcsCj4gKwkJCQkJCQkgInNnX2FsbG9jX3RhYmxlIiwK PiArCQkJCQkJCSBlbmRfdGltZSk7Cj4gKwkJCQlzZ19mcmVlX3RhYmxlKCZwdC5zdCk7Cj4gKwkJ CQlpZiAoZXJyKQo+ICsJCQkJCXJldHVybiBlcnI7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X3NnX3RyaW0odm9pZCAqaWdu b3JlZCkKPiArewo+ICsJSUdUX1RJTUVPVVQoZW5kX3RpbWUpOwo+ICsJY29uc3QgdW5zaWduZWQg bG9uZyBtYXggPSBQQUdFX1NJWkU7IC8qIG5vdCBwcmltZSEgKi8KPiArCXN0cnVjdCBwZm5fdGFi bGUgcHQ7Cj4gKwl1bnNpZ25lZCBsb25nIHByaW1lOwo+ICsKPiArCWZvcl9lYWNoX3ByaW1lX251 bWJlcihwcmltZSwgbWF4KSB7Cj4gKwkJY29uc3QgbnBhZ2VzX2ZuX3QgKm5wYWdlczsKPiArCQlp bnQgZXJyOwo+ICsKPiArCQlmb3IgKG5wYWdlcyA9IG5wYWdlc19mdW5jczsgKm5wYWdlczsgbnBh Z2VzKyspIHsKPiArCQkJc3RydWN0IHJuZF9zdGF0ZSBwcm5nOwo+ICsKPiArCQkJcHJhbmRvbV9z ZWVkX3N0YXRlKCZwcm5nLCBpOTE1X3NlbGZ0ZXN0LnJhbmRvbV9zZWVkKTsKPiArCQkJaWYgKCFh bGxvY190YWJsZSgmcHQsIHByaW1lLCBtYXgsICpucGFnZXMsICZwcm5nKSkKPiArCQkJCXJldHVy biAwOyAvKiBvdXQgb2YgbWVtb3J5LCBnaXZlIHVwICovCj4gKwo+ICsJCQllcnIgPSAwOwo+ICsJ CQlpZiAoaTkxNV9zZ190cmltKCZwdC5zdCkpIHsKPiArCQkJCWlmIChwdC5zdC5vcmlnX25lbnRz ICE9IHByaW1lIHx8Cj4gKwkJCQkgICAgcHQuc3QubmVudHMgIT0gcHJpbWUpIHsKPiArCQkJCQlw cl9lcnIoImk5MTVfc2dfdHJpbSBmYWlsZWQgKG5lbnRzICV1LCBvcmlnX25lbnRzICV1KSwgZXhw ZWN0ZWQgJWx1XG4iLAo+ICsJCQkJCSAgICAgICBwdC5zdC5uZW50cywgcHQuc3Qub3JpZ19uZW50 cywgcHJpbWUpOwo+ICsJCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCQl9IGVsc2Ugewo+ICsJCQkJ CXByYW5kb21fc2VlZF9zdGF0ZSgmcHJuZywKPiArCQkJCQkJCSAgIGk5MTVfc2VsZnRlc3QucmFu ZG9tX3NlZWQpOwo+ICsJCQkJCWVyciA9IGV4cGVjdF9wZm5fc2d0YWJsZSgmcHQsCj4gKwkJCQkJ CQkJICpucGFnZXMsICZwcm5nLAo+ICsJCQkJCQkJCSAiaTkxNV9zZ190cmltIiwKPiArCQkJCQkJ CQkgZW5kX3RpbWUpOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJCXNnX2ZyZWVfdGFibGUoJnB0LnN0 KTsKPiArCQkJaWYgKGVycikKPiArCQkJCXJldHVybiBlcnI7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgc2NhdHRlcmxpc3RfbW9ja19zZWxmdGVzdHModm9p ZCkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsK PiArCQlTVUJURVNUKGlndF9zZ19hbGxvYyksCj4gKwkJU1VCVEVTVChpZ3Rfc2dfdHJpbSksCj4g Kwl9Owo+ICsKPiArCXJldHVybiBpOTE1X3N1YnRlc3RzKHRlc3RzLCBOVUxMKTsKPiArfQo+Cl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=