From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 03/37] drm/i915: Add some selftests for sg_table manipulation Date: Thu, 12 Jan 2017 10:56:42 +0000 Message-ID: References: <20170111210937.29252-1-chris@chris-wilson.co.uk> <20170111210937.29252-4-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 mga07.intel.com (mga07.intel.com [134.134.136.100]) by gabe.freedesktop.org (Postfix) with ESMTPS id A239E6EC11 for ; Thu, 12 Jan 2017 10:56:45 +0000 (UTC) In-Reply-To: <20170111210937.29252-4-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 Ck9uIDExLzAxLzIwMTcgMjE6MDksIENocmlzIFdpbHNvbiB3cm90ZToKPiBTdGFydCBleGVyY2lz aW5nIHRoZSBzY2F0dGVyZ2F0aGVyIGxpc3RzLCBlc3BlY2lhbGx5IGxvb2tpbmcgYXQKPiBpdGVy YXRpb24gYWZ0ZXIgY29hbGVzY2luZy4KPgo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8 Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVy c3VsaW5AaW50ZWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j ICAgICAgICAgICAgICAgICAgICB8ICAxMSArLQo+ICAuLi4vZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9zY2F0dGVybGlzdC5jICAgICAgIHwgMjU1ICsrKysrKysrKysrKysrKysrKysr Kwo+ICAzIGZpbGVzIGNoYW5nZWQsIDI2NCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL3NjYXR0 ZXJsaXN0LmMKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IGluZGV4IDRjNmQ0MGUyOGNmNS4u ZTg4NTQxYjViNzJiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gQEAgLTIyMTksMTcg KzIyMTksMTcgQEAgdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgCW11dGV4X3VubG9jaygmb2JqLT5tbS5sb2NrKTsKPiAg fQo+Cj4gLXN0YXRpYyB2b2lkIGk5MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3Qp Cj4gK3N0YXRpYyBib29sIGk5MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCj4g IHsKPiAgCXN0cnVjdCBzZ190YWJsZSBuZXdfc3Q7Cj4gIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn LCAqbmV3X3NnOwo+ICAJdW5zaWduZWQgaW50IGk7Cj4KPiAgCWlmIChvcmlnX3N0LT5uZW50cyA9 PSBvcmlnX3N0LT5vcmlnX25lbnRzKQo+IC0JCXJldHVybjsKPiArCQlyZXR1cm4gZmFsc2U7Cj4K PiAgCWlmIChzZ19hbGxvY190YWJsZSgmbmV3X3N0LCBvcmlnX3N0LT5uZW50cywgR0ZQX0tFUk5F TCB8IF9fR0ZQX05PV0FSTikpCj4gLQkJcmV0dXJuOwo+ICsJCXJldHVybiBmYWxzZTsKPgo+ICAJ bmV3X3NnID0gbmV3X3N0LnNnbDsKPiAgCWZvcl9lYWNoX3NnKG9yaWdfc3QtPnNnbCwgc2csIG9y aWdfc3QtPm5lbnRzLCBpKSB7Cj4gQEAgLTIyNDIsNiArMjI0Miw3IEBAIHN0YXRpYyB2b2lkIGk5 MTVfc2dfdHJpbShzdHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCj4gIAlzZ19mcmVlX3RhYmxlKG9y aWdfc3QpOwo+Cj4gIAkqb3JpZ19zdCA9IG5ld19zdDsKPiArCXJldHVybiB0cnVlOwo+ICB9Cj4K PiAgc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4gQEAgLTQ4OTIsMyArNDg5Myw3IEBAIGk5MTVf Z2VtX29iamVjdF9nZXRfZG1hX2FkZHJlc3Moc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPiAgCXNnID0gaTkxNV9nZW1fb2JqZWN0X2dldF9zZyhvYmosIG4sICZvZmZzZXQpOwo+ICAJ cmV0dXJuIHNnX2RtYV9hZGRyZXNzKHNnKSArIChvZmZzZXQgPDwgUEFHRV9TSElGVCk7Cj4gIH0K PiArCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkKPiArI2luY2x1 ZGUgInNlbGZ0ZXN0cy9zY2F0dGVybGlzdC5jIgo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKPiBpbmRleCA2 OWU5N2EyYmE0YTYuLjVmMGJkZGE0MmVkOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAo+IEBAIC05LDMgKzksNCBA QAo+ICAgKiBUZXN0cyBhcmUgZXhlY3V0ZWQgaW4gb3JkZXIgYnkgaWd0L2Rydl9zZWxmdGVzdAo+ ICAgKi8KPiAgc2VsZnRlc3Qoc2FuaXR5Y2hlY2ssIGk5MTVfbW9ja19zYW5pdHljaGVjaykgLyog a2VlcCBmaXJzdCAoaWd0IHNlbGZjaGVjaykgKi8KPiArc2VsZnRlc3Qoc2NhdHRlcmxpc3QsIHNj YXR0ZXJsaXN0X21vY2tfc2VsZnRlc3RzKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvc2NhdHRlcmxpc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9zY2F0dGVybGlzdC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjE1NzNiZTg5NjFiZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvc2NhdHRlcmxpc3QuYwo+IEBAIC0wLDAgKzEsMjU1IEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK PiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBU SEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3ByaW1lX251bWJlcnMu aD4KPiArCj4gKyNpbmNsdWRlICJpOTE1X3NlbGZ0ZXN0LmgiCj4gKwo+ICsjZGVmaW5lIFBGTl9C SUFTICgxIDw8IDEwKQo+ICsKPiArc3RydWN0IHBmbl90YWJsZSB7Cj4gKwlzdHJ1Y3Qgc2dfdGFi bGUgc3Q7Cj4gKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Cj4gK307Cj4gKwo+ICtzdGF0aWMg bm9pbmxpbmUgaW50IGV4cGVjdF9wZm5fc2coc3RydWN0IHBmbl90YWJsZSAqcHQsIGNvbnN0IGNo YXIgKndobykKPiArewo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiArCXVuc2lnbmVkIGxv bmcgcGZuLCBuOwo+ICsKPiArCXBmbiA9IHB0LT5zdGFydDsKPiArCWZvcl9lYWNoX3NnKHB0LT5z dC5zZ2wsIHNnLCBwdC0+c3QubmVudHMsIG4pIHsKPiArCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNn X3BhZ2Uoc2cpOwo+ICsKPiArCQlpZiAocGFnZV90b19wZm4ocGFnZSkgIT0gcGZuKSB7Cj4gKwkJ CXByX2VycigiJXMgbGVmdCBwYWdlcyBvdXQgb2Ygb3JkZXIsIGV4cGVjdGVkIHBmbiAlbHUsIGZv dW5kIHBmbiAlbHUgKHVzaW5nIGZvcl9lYWNoX3NnKVxuIiwKPiArCQkJICAgICAgIHdobywgcGZu LCBwYWdlX3RvX3BmbihwYWdlKSk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4g KwkJaWYgKHNnLT5sZW5ndGggIT0gKG4gKyAxKSAqIFBBR0VfU0laRSkgewo+ICsJCQlwcl9lcnIo IiVzOiAlcyBjb3BpZWQgd3Jvbmcgc2cgbGVuZ3RoLCBleHBlY3RlZCBzaXplICVsdSwgZm91bmQg JXUgKHVzaW5nIGZvcl9lYWNoX3NnKVxuIiwKPiArCQkJICAgICAgIF9fZnVuY19fLCB3aG8sIChu ICsgMSkgKiBQQUdFX1NJWkUsIHNnLT5sZW5ndGgpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiAr CQl9Cj4gKwo+ICsJCWNvbmRfcmVzY2hlZCgpOwo+ICsJCWlmIChzaWduYWxfcGVuZGluZyhjdXJy ZW50KSkKPiArCQkJcmV0dXJuIC1FSU5UUjsKPiArCj4gKwkJcGZuICs9IG4gKyAxOwo+ICsJfQo+ ICsJaWYgKHBmbiAhPSBwdC0+ZW5kKSB7Cj4gKwkJcHJfZXJyKCIlczogJXMgZmluaXNoZWQgb24g d3JvbmcgcGZuLCBleHBlY3RlZCAlbHUsIGZvdW5kICVsdVxuIiwKPiArCQkgICAgICAgX19mdW5j X18sIHdobywgcHQtPmVuZCwgcGZuKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIG5vaW5saW5lIGludCBleHBlY3RfcGZuX3Nn X3BhZ2VfaXRlcihzdHJ1Y3QgcGZuX3RhYmxlICpwdCwgY29uc3QgY2hhciAqd2hvKQo+ICt7Cj4g KwlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNnaXRlcjsKPiArCXVuc2lnbmVkIGxvbmcgcGZuOwo+ICsK PiArCXBmbiA9IHB0LT5zdGFydDsKPiArCWZvcl9lYWNoX3NnX3BhZ2UocHQtPnN0LnNnbCwgJnNn aXRlciwgcHQtPnN0Lm5lbnRzLCAwKSB7Cj4gKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdl X2l0ZXJfcGFnZSgmc2dpdGVyKTsKPiArCj4gKwkJaWYgKHBhZ2UgIT0gcGZuX3RvX3BhZ2UocGZu KSkgewo+ICsJCQlwcl9lcnIoIiVzOiAlcyBsZWZ0IHBhZ2VzIG91dCBvZiBvcmRlciwgZXhwZWN0 ZWQgcGZuICVsdSwgZm91bmQgcGZuICVsdSAodXNpbmcgZm9yX2VhY2hfc2dfcGFnZSlcbiIsCj4g KwkJCSAgICAgICBfX2Z1bmNfXywgd2hvLCBwZm4sIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKPiArCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQljb25kX3Jlc2NoZWQoKTsKPiArCQlpZiAo c2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCj4gKwkJCXJldHVybiAtRUlOVFI7Cj4gKwo+ICsJCXBm bisrOwo+ICsJfQo+ICsJaWYgKHBmbiAhPSBwdC0+ZW5kKSB7Cj4gKwkJcHJfZXJyKCIlczogJXMg ZmluaXNoZWQgb24gd3JvbmcgcGZuLCBleHBlY3RlZCAlbHUsIGZvdW5kICVsdVxuIiwKPiArCQkg ICAgICAgX19mdW5jX18sIHdobywgcHQtPmVuZCwgcGZuKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIG5vaW5saW5lIGludCBl eHBlY3RfcGZuX3NndGl0ZXIoc3RydWN0IHBmbl90YWJsZSAqcHQsIGNvbnN0IGNoYXIgKndobykK PiArewo+ICsJc3RydWN0IHNndF9pdGVyIHNndDsKPiArCXN0cnVjdCBwYWdlICpwYWdlOwo+ICsJ dW5zaWduZWQgbG9uZyBwZm47Cj4gKwo+ICsJcGZuID0gcHQtPnN0YXJ0Owo+ICsJZm9yX2VhY2hf c2d0X3BhZ2UocGFnZSwgc2d0LCAmcHQtPnN0KSB7Cj4gKwkJaWYgKHBhZ2UgIT0gcGZuX3RvX3Bh Z2UocGZuKSkgewo+ICsJCQlwcl9lcnIoIiVzOiAlcyBsZWZ0IHBhZ2VzIG91dCBvZiBvcmRlciwg ZXhwZWN0ZWQgcGZuICVsdSwgZm91bmQgcGZuICVsdSAodXNpbmcgZm9yX2VhY2hfc2d0X3BhZ2Up XG4iLAo+ICsJCQkgICAgICAgX19mdW5jX18sIHdobywgcGZuLCBwYWdlX3RvX3BmbihwYWdlKSk7 Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCj4gKwkJY29uZF9yZXNjaGVkKCk7Cj4g KwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQo+ICsJCQlyZXR1cm4gLUVJTlRSOwo+ICsK PiArCQlwZm4rKzsKPiArCX0KPiArCWlmIChwZm4gIT0gcHQtPmVuZCkgewo+ICsJCXByX2Vycigi JXM6ICVzIGZpbmlzaGVkIG9uIHdyb25nIHBmbiwgZXhwZWN0ZWQgJWx1LCBmb3VuZCAlbHVcbiIs Cj4gKwkJICAgICAgIF9fZnVuY19fLCB3aG8sIHB0LT5lbmQsIHBmbik7Cj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZXhw ZWN0X3Bmbl9zZ3RhYmxlKHN0cnVjdCBwZm5fdGFibGUgKnB0LCBjb25zdCBjaGFyICp3aG8pCj4g K3sKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gZXhwZWN0X3Bmbl9zZyhwdCwgd2hvKTsKPiAr CWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIgPSBleHBlY3RfcGZuX3NnX3Bh Z2VfaXRlcihwdCwgd2hvKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwll cnIgPSBleHBlY3RfcGZuX3NndGl0ZXIocHQsIHdobyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVy biBlcnI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGFsbG9jX3Rh YmxlKHN0cnVjdCBwZm5fdGFibGUgKnB0LAo+ICsJCQl1bnNpZ25lZCBsb25nIGNvdW50LAo+ICsJ CQl1bnNpZ25lZCBsb25nIG1heCkKPiArewo+ICsJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKPiAr CXVuc2lnbmVkIGxvbmcgbiwgcGZuOwo+ICsKPiArCWlmIChzZ19hbGxvY190YWJsZSgmcHQtPnN0 LCBtYXgsCj4gKwkJCSAgIEdGUF9LRVJORUwgfCBfX0dGUF9OT1JFVFJZIHwgX19HRlBfTk9XQVJO KSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcHQtPnN0YXJ0ID0gUEZOX0JJQVM7Cj4gKwlw Zm4gPSBwdC0+c3RhcnQ7Cj4gKwlzZyA9IHB0LT5zdC5zZ2w7Cj4gKwlmb3IgKG4gPSAwOyBuIDwg Y291bnQ7IG4rKykgewo+ICsJCWlmIChuKQo+ICsJCQlzZyA9IHNnX25leHQoc2cpOwo+ICsJCXNn X3NldF9wYWdlKHNnLCBwZm5fdG9fcGFnZShwZm4pLCAobiArIDEpKlBBR0VfU0laRSwgMCk7CgpG b3IgY291bnQgPSBCSVQobWF4X29yZGVyKSAoPT0gMU0pIHRoZSBsYXN0IHNnIGVudHJ5IHdpbGwg aGF2ZSBhIHNpemUgb2YgCjRHaUIgd2hpY2ggd291bGQgb3ZlcmZsb3cgc2ctPmxlbmd0aCwgbm8/ IEVzcGVjaWFsbHkgd2l0aCBzaXplICsgb2Zmc2V0IApiZWxvdy4gVW5sZXNzIGZvcl9lYWNoX3By aW1lX251bWJlciBzdG9wcyBiZWxvdyBtYXhfb3JkZXIuIEJ1dCB3aGVyZT8KCj4gKwkJcGZuICs9 IG4gKyAxOwoKUGxlYXNlIGRlc2NyaWJlIHdoYXQga2luZCBvZiB0YWJsZSBhbmQgd2h5IHlvdSBh cmUgYnVpbGRpbmcgd2l0aCBhIApjb21tZW50LiBJZiB0ZXN0cyBoYXZlIG5vIGNvbW1lbnRzIGFu ZCBkbywgb24gdGhlIGZpcnN0IGxvb2ssIG5vdCBmdWxseSAKb2J2aW91cyB0aGluZ3MsIHRoZW4g aXQgaXMgYSBsb3Qgb2YgZWZmb3J0IGluIHRoZSBmdXR1cmUgdG8gd29yayBvbiAKZml4ZXMgYW5k L29yIG1haW50YWluIHRoZSBjb2RlLgoKPiArCX0KPiArCXNnX21hcmtfZW5kKHNnKTsKPiArCXB0 LT5zdC5uZW50cyA9IG47Cj4gKwlwdC0+ZW5kID0gcGZuOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9zZ19hbGxvYyh2b2lkICppZ25vcmVkKQo+ICt7Cj4g KwlJOTE1X1NFTEZURVNUX1RJTUVPVVQoZW5kX3RpbWUpOwo+ICsJY29uc3QgdW5zaWduZWQgbG9u ZyBtYXhfb3JkZXIgPSAyMDsgLyogYXBwcm94aW1hdGluZyBhIDRHaUIgb2JqZWN0ICovCj4gKwl1 bnNpZ25lZCBsb25nIHByaW1lOwo+ICsKPiArCWZvcl9lYWNoX3ByaW1lX251bWJlcihwcmltZSwg bWF4X29yZGVyKSB7Cj4gKwkJdW5zaWduZWQgbG9uZyBzaXplID0gQklUKHByaW1lKTsKPiArCQlp bnQgb2Zmc2V0Owo+ICsKPiArCQlmb3IgKG9mZnNldCA9IC0xOyBvZmZzZXQgPD0gMTsgb2Zmc2V0 KyspIHsKPiArCQkJc3RydWN0IHBmbl90YWJsZSBwdDsKPiArCQkJaW50IGVycjsKPiArCj4gKwkJ CWlmICghYWxsb2NfdGFibGUoJnB0LCBzaXplICsgb2Zmc2V0LCBzaXplICsgb2Zmc2V0KSkKPiAr CQkJCXJldHVybiAwOyAvKiBvdXQgb2YgbWVtb3J5LCBnaXZlIHVwICovCj4gKwo+ICsJCQllcnIg PSBleHBlY3RfcGZuX3NndGFibGUoJnB0LCAic2dfYWxsb2NfdGFibGUiKTsKPiArCQkJc2dfZnJl ZV90YWJsZSgmcHQuc3QpOwo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJcmV0dXJuIGVycjsKPiArCj4g KwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGVuZF90aW1lKSkgewo+ICsJCQkJcHJfd2Fybigi JXMgdGltZWQgb3V0OiBsYXN0IHRhYmxlIHNpemUgJWx1XG4iLAo+ICsJCQkJCV9fZnVuY19fLCBz aXplICsgb2Zmc2V0KTsKPiArCQkJCXJldHVybiAwOwo+ICsJCQl9CgpNYXliZSBhIGZtdCt2YWFy ZyB0aW1lb3V0IGhlbHBlciBzaW5jZSBJIGV4cGVjdCB0aGVyZSdsbCBiZSBhIGxvdCBvZiAKdGhp cy4gTGlrZToKCmlmIChpOTE1X3NlbGZ0ZXN0X3RpbWVvdXQoZW5kX3RpbWUsICJmbXQgJXMiLCBh cmcpKQoJcmV0dXJuIDA7CgpJdCBpcyBzbGlnaHRseSB0aWRpZXIuCgo+ICsJCX0KPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3Rfc2dfdHJpbSh2b2lkICpp Z25vcmVkKQo+ICt7Cj4gKwlJOTE1X1NFTEZURVNUX1RJTUVPVVQoZW5kX3RpbWUpOwo+ICsJY29u c3QgdW5zaWduZWQgbG9uZyBtYXggPSBQQUdFX1NJWkU7IC8qIG5vdCBwcmltZSEgKi8KPiArCXN0 cnVjdCBwZm5fdGFibGUgcHQ7Cj4gKwl1bnNpZ25lZCBsb25nIHByaW1lOwo+ICsKPiArCWZvcl9l YWNoX3ByaW1lX251bWJlcihwcmltZSwgbWF4KSB7Cj4gKwkJaW50IGVycjsKPiArCj4gKwkJaWYg KCFhbGxvY190YWJsZSgmcHQsIHByaW1lLCBtYXgpKQo+ICsJCQlyZXR1cm4gMDsgLyogb3V0IG9m IG1lbW9yeSwgZ2l2ZSB1cCAqLwo+ICsKPiArCQllcnIgPSAwOwo+ICsJCWlmIChpOTE1X3NnX3Ry aW0oJnB0LnN0KSkgewo+ICsJCQlpZiAocHQuc3Qub3JpZ19uZW50cyAhPSBwcmltZSB8fAo+ICsJ CQkgICAgcHQuc3QubmVudHMgIT0gcHJpbWUpIHsKPiArCQkJCXByX2VycigiaTkxNV9zZ190cmlt IGZhaWxlZCAobmVudHMgJXUsIG9yaWdfbmVudHMgJXUpLCBleHBlY3RlZCAlbHVcbiIsCj4gKwkJ CQkgICAgICAgcHQuc3QubmVudHMsIHB0LnN0Lm9yaWdfbmVudHMsIHByaW1lKTsKPiArCQkJCWVy ciA9IC1FSU5WQUw7Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQllcnIgPSBleHBlY3RfcGZuX3NndGFi bGUoJnB0LCAiaTkxNV9zZ190cmltIik7Cj4gKwkJCX0KPiArCQl9Cj4gKwkJc2dfZnJlZV90YWJs ZSgmcHQuc3QpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJldHVybiBlcnI7Cj4gKwo+ICsJCWlmICh0 aW1lX2FmdGVyKGppZmZpZXMsIGVuZF90aW1lKSkgewo+ICsJCQlwcl93YXJuKCIlcyB0aW1lZCBv dXQ6IGxhc3QgdHJpbSBzaXplICVsdS8lbHVcbiIsCj4gKwkJCQlfX2Z1bmNfXywgcHJpbWUsIG1h eCk7Cj4gKwkJCXJldHVybiAwOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiAraW50IHNjYXR0ZXJsaXN0X21vY2tfc2VsZnRlc3RzKHZvaWQpCj4gK3sKPiArCXN0YXRp YyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChpZ3Rf c2dfYWxsb2MpLAo+ICsJCVNVQlRFU1QoaWd0X3NnX3RyaW0pLAo+ICsJfTsKPiArCj4gKwlyZXR1 cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgTlVMTCk7Cj4gK30KPgoKUmVnYXJkcywKClR2cnRrbwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZngg bWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK