From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 01/32] drm/i915: Seal races between async GPU cancellation, retirement and signaling Date: Thu, 18 Apr 2019 11:32:31 +0100 Message-ID: References: <20190417075657.19456-1-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 mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9D26F6E0FD for ; Thu, 18 Apr 2019 10:32:33 +0000 (UTC) In-Reply-To: <20190417075657.19456-1-chris@chris-wilson.co.uk> Content-Language: en-US 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 Ck9uIDE3LzA0LzIwMTkgMDg6NTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBDdXJyZW50bHkgdGhl cmUgaXMgYW4gdW5kZXJseWluZyBhc3N1bXB0aW9uIHRoYXQgaTkxNV9yZXF1ZXN0X3Vuc3VibWl0 KCkKPiBpcyBzeW5jaHJvbm91cyB3cnQgdGhlIEdQVSAtLSB0aGF0IGlzIHRoZSByZXF1ZXN0IGlz IG5vIGxvbmdlciBpbiBmbGlnaHQKPiBhcyB3ZSByZW1vdmUgaXQuIEluIHRoZSBuZWFyIGZ1dHVy ZSB0aGF0IG1heSBjaGFuZ2UsIGFuZCB0aGlzIG1heSB1cHNldAo+IG91ciBzaWduYWxpbmcgYXMg d2UgY2FuIHByb2Nlc3MgYW4gaW50ZXJydXB0IGZvciB0aGF0IHJlcXVlc3Qgd2hpbGUgaXQKPiBp cyBubyBsb25nZXIgaW4gZmxpZ2h0LgoKSXMgdGhpcyB0aGUgcHJlZW1wdC10by1idXN5IGZ1dHVy ZT8KCj4gCj4gQ1BVMAkJCQkJQ1BVMQo+IGludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEKPiAo cXVldWUgcmVxdWVzdCBjb21wbGV0aW9uKQo+IAkJCQkJaTkxNV9yZXF1ZXN0X2NhbmNlbF9zaWdu YWxpbmcKPiAuLi4JCQkJCS4uLgo+IAkJCQkJaTkxNV9yZXF1ZXN0X2VuYWJsZV9zaWduYWxpbmcK PiBkbWFfZmVuY2Vfc2lnbmFsCgpJbiB0aGlzIGNhc2UgY29tcGxldGVkIHJlcXVlc3QgaXMgdW5z dWJtaXR0ZWQ/CgpUaGVyZSB3aWxsIGJlIHNvbWUgaW5oZXJlbnQgcHJvYmxlbSBwcmV2ZW50aW5n IGF2b2lkaW5nIHByZWVtcHRpbmcgCmNvbXBsZXRlZCByZXF1ZXN0cz8gV2luZG93IGJldHdlZW4g TUlfQVJCX0VOQUJMRSBpbiBlbWl0X2ZpbmlfYnJlYWRjcnVtYiAKYW5kIGNvbnRleHQgY29tcGxl dGU/CgpSZWdhcmRzLAoKVHZydGtvCgo+IAo+IEhlbmNlIGluIHRoZSB0aW1lIGl0IHRvb2sgdXMg dG8gZHJvcCB0aGUgbG9jayB0byBzaWduYWwgdGhlIHJlcXVlc3QsIGEKPiBwcmVlbXB0aW9uIGV2 ZW50IG1heSBoYXZlIG9jY3VycmVkIGFuZCByZS1xdWV1ZWQgdGhlIHJlcXVlc3QuIEluIHRoZQo+ IHByb2Nlc3MsIHRoYXQgcmVxdWVzdCB3b3VsZCBoYXZlIHNlZW4gSTkxNV9GRU5DRV9GTEFHX1NJ R05BTCBjbGVhciBhbmQKPiBzbyByZXVzZWQgdGhlIHJxLT5zaWduYWxfbGluayB0aGF0IHdhcyBp biB1c2Ugb24gQ1BVMCwgbGVhZGluZyB0byBiYWQKPiBwb2ludGVyIGNoYXNpbmcgaW4gaW50ZWxf ZW5naW5lX2JyZWFkY3J1bWJzX2lycS4KPiAKPiBBIHJlbGF0ZWQgaXNzdWUgd2FzIHRoYXQgaWYg c29tZW9uZSBzdGFydGVkIGxpc3RlbmluZyBmb3IgYSBzaWduYWwgb24gYQo+IGNvbXBsZXRlZCBi dXQgbm8gbG9uZ2VyIGluLWZsaWdodCByZXF1ZXN0LCB3ZSBtaXNzZWQgdGhlIG9wcG9ydHVuaXR5 IHRvCj4gaW1tZWRpYXRlbHkgc2lnbmFsIHRoYXQgcmVxdWVzdC4KPiAKPiBGdXJ0aGVybW9yZSwg YXMgaW50ZWxfY29udGV4dHMgbWF5IGJlIGltbWVkaWF0ZWx5IHJlbGVhc2VkIGR1cmluZwo+IHJl cXVlc3QgcmV0aXJlbWVudCwgaW4gb3JkZXIgdG8gYmUgZW50aXJlbHkgc3VyZSB0aGF0Cj4gaW50 ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycSBtYXkgbm8gbG9uZ2VyIGRlcmVmZXJlbmNlIHRoZSBp bnRlbF9jb250ZXh0Cj4gKGNlLT5zaWduYWxzIGFuZCBjZS0+c2lnbmFsX2xpbmspLCB3ZSBtdXN0 IHdhaXQgZm9yIGlycSBzcGlubG9jay4KPiAKPiBJbiBvcmRlciB0byBwcmV2ZW50IHRoZSByYWNl LCB3ZSB1c2UgYSBiaXQgaW4gdGhlIGZlbmNlLmZsYWdzIHRvIHNpZ25hbAo+IHRoZSB0cmFuc2Zl ciBvbnRvIHRoZSBzaWduYWwgbGlzdCBpbnNpZGUgaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2ly cS4KPiBGb3Igc2ltcGxpY2l0eSwgd2UgdXNlIHRoZSBETUFfRkVOQ0VfRkxBR19TSUdOQUxFRF9C SVQgYXMgaXQgdGhlbgo+IHF1aWNrbHkgc2lnbmFscyB0byBhbnkgb3V0c2lkZSBvYnNlcnZlciB0 aGF0IHRoZSBmZW5jZSBpcyBpbmRlZWQgc2lnbmFsZWQuCj4gCj4gRml4ZXM6IDUyYzBmZGIyNWM3 YyAoImRybS9pOTE1OiBSZXBsYWNlIGdsb2JhbCBicmVhZGNydW1icyB3aXRoIHBlci1jb250ZXh0 IGludGVycnVwdCB0cmFja2luZyIpCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxp bkBpbnRlbC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2RtYS1idWYvZG1hLWZlbmNlLmMgICAgICAg ICAgICAgIHwgIDEgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMgICAg ICB8ICAxICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMgfCA1 MiArKysrKysrKysrKysrKy0tLS0tLS0tLS0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0 aW9ucygrKSwgMjEgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1 Zi9kbWEtZmVuY2UuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYwo+IGluZGV4IDNhYTg3 MzNmODMyYS4uOWJmMDYwNDI2MTlhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEt ZmVuY2UuYwo+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtZmVuY2UuYwo+IEBAIC0yOSw2ICsy OSw3IEBACj4gICAKPiAgIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChkbWFfZmVuY2VfZW1pdCk7 Cj4gICBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woZG1hX2ZlbmNlX2VuYWJsZV9zaWduYWwpOwo+ ICtFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woZG1hX2ZlbmNlX3NpZ25hbGVkKTsKPiAgIAo+ICAg c3RhdGljIERFRklORV9TUElOTE9DSyhkbWFfZmVuY2Vfc3R1Yl9sb2NrKTsKPiAgIHN0YXRpYyBz dHJ1Y3QgZG1hX2ZlbmNlIGRtYV9mZW5jZV9zdHViOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVx dWVzdC5jCj4gaW5kZXggYjgzNjcyMWQzYjEzLi5lMGVmYzMzNDQ2M2IgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC00MzIsNiArNDMyLDcgQEAgdm9pZCBfX2k5MTVf cmVxdWVzdF9zdWJtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiAgIAlzZXRfYml0 KEk5MTVfRkVOQ0VfRkxBR19BQ1RJVkUsICZyZXF1ZXN0LT5mZW5jZS5mbGFncyk7Cj4gICAKPiAg IAlpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJR05BTF9CSVQsICZyZXF1ZXN0 LT5mZW5jZS5mbGFncykgJiYKPiArCSAgICAhdGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfU0lHTkFM RURfQklULCAmcmVxdWVzdC0+ZmVuY2UuZmxhZ3MpICYmCj4gICAJICAgICFpOTE1X3JlcXVlc3Rf ZW5hYmxlX2JyZWFkY3J1bWIocmVxdWVzdCkpCj4gICAJCWludGVsX2VuZ2luZV9xdWV1ZV9icmVh ZGNydW1icyhlbmdpbmUpOwo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2JyZWFkY3J1bWJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNy dW1icy5jCj4gaW5kZXggM2NiZmZkNDAwYjFiLi5lMTlmODRiMDA2Y2MgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYnJlYWRjcnVtYnMuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAg ICovCj4gICAKPiAgICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Cj4gKyNpbmNsdWRlIDx0cmFj ZS9ldmVudHMvZG1hX2ZlbmNlLmg+Cj4gICAjaW5jbHVkZSA8dWFwaS9saW51eC9zY2hlZC90eXBl cy5oPgo+ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiBAQCAtODMsNiArODQsNyBAQCBz dGF0aWMgaW5saW5lIGJvb2wgX19yZXF1ZXN0X2NvbXBsZXRlZChjb25zdCBzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSkKPiAgIHZvaWQgaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gICB7Cj4gICAJc3RydWN0IGludGVsX2JyZWFkY3J1 bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gKwljb25zdCBrdGltZV90IHRpbWVzdGFt cCA9IGt0aW1lX2dldCgpOwo+ICAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgKmNuOwo+ICAg CXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQ7Cj4gICAJTElTVF9IRUFEKHNpZ25hbCk7Cj4g QEAgLTEwNCw2ICsxMDYsMTEgQEAgdm9pZCBpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAo+ICAgCQkJR0VNX0JVR19PTighdGVz dF9iaXQoSTkxNV9GRU5DRV9GTEFHX1NJR05BTCwKPiAgIAkJCQkJICAgICAmcnEtPmZlbmNlLmZs YWdzKSk7Cj4gKwkJCWNsZWFyX2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLCAmcnEtPmZlbmNl LmZsYWdzKTsKPiArCj4gKwkJCWlmICh0ZXN0X2FuZF9zZXRfYml0KERNQV9GRU5DRV9GTEFHX1NJ R05BTEVEX0JJVCwKPiArCQkJCQkgICAgICZycS0+ZmVuY2UuZmxhZ3MpKQo+ICsJCQkJY29udGlu dWU7Cj4gICAKPiAgIAkJCS8qCj4gICAJCQkgKiBRdWV1ZSBmb3IgZXhlY3V0aW9uIGFmdGVyIGRy b3BwaW5nIHRoZSBzaWduYWxpbmcKPiBAQCAtMTExLDE0ICsxMTgsNiBAQCB2b2lkIGludGVsX2Vu Z2luZV9icmVhZGNydW1ic19pcnEoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAg CQkJICogbW9yZSBzaWduYWxlcnMgdG8gdGhlIHNhbWUgY29udGV4dCBvciBlbmdpbmUuCj4gICAJ CQkgKi8KPiAgIAkJCWk5MTVfcmVxdWVzdF9nZXQocnEpOwo+IC0KPiAtCQkJLyoKPiAtCQkJICog V2UgbWF5IHJhY2Ugd2l0aCBkaXJlY3QgaW52b2NhdGlvbiBvZgo+IC0JCQkgKiBkbWFfZmVuY2Vf c2lnbmFsKCksIGUuZy4gaTkxNV9yZXF1ZXN0X3JldGlyZSgpLAo+IC0JCQkgKiBzbyB3ZSBuZWVk IHRvIGFjcXVpcmUgb3VyIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdAo+IC0JCQkgKiBiZWZvcmUg d2UgY2FuY2VsIHRoZSBicmVhZGNydW1iLgo+IC0JCQkgKi8KPiAtCQkJY2xlYXJfYml0KEk5MTVf RkVOQ0VfRkxBR19TSUdOQUwsICZycS0+ZmVuY2UuZmxhZ3MpOwo+ICAgCQkJbGlzdF9hZGRfdGFp bCgmcnEtPnNpZ25hbF9saW5rLCAmc2lnbmFsKTsKPiAgIAkJfQo+ICAgCj4gQEAgLTE0MCw4ICsx MzksMjEgQEAgdm9pZCBpbnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCAmc2ln bmFsKSB7Cj4gICAJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0KPiAgIAkJCWxpc3RfZW50cnko cG9zLCB0eXBlb2YoKnJxKSwgc2lnbmFsX2xpbmspOwo+ICsJCXN0cnVjdCBkbWFfZmVuY2VfY2Ig KmN1ciwgKnRtcDsKPiArCj4gKwkJdHJhY2VfZG1hX2ZlbmNlX3NpZ25hbGVkKCZycS0+ZmVuY2Up Owo+ICsKPiArCQlycS0+ZmVuY2UudGltZXN0YW1wID0gdGltZXN0YW1wOwo+ICsJCXNldF9iaXQo RE1BX0ZFTkNFX0ZMQUdfVElNRVNUQU1QX0JJVCwgJnJxLT5mZW5jZS5mbGFncyk7Cj4gKwo+ICsJ CXNwaW5fbG9jaygmcnEtPmxvY2spOwo+ICsJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXIs IHRtcCwgJnJxLT5mZW5jZS5jYl9saXN0LCBub2RlKSB7Cj4gKwkJCUlOSVRfTElTVF9IRUFEKCZj dXItPm5vZGUpOwo+ICsJCQljdXItPmZ1bmMoJnJxLT5mZW5jZSwgY3VyKTsKPiArCQl9Cj4gKwkJ SU5JVF9MSVNUX0hFQUQoJnJxLT5mZW5jZS5jYl9saXN0KTsKPiArCQlzcGluX3VubG9jaygmcnEt PmxvY2spOwo+ICAgCj4gLQkJZG1hX2ZlbmNlX3NpZ25hbCgmcnEtPmZlbmNlKTsKPiAgIAkJaTkx NV9yZXF1ZXN0X3B1dChycSk7Cj4gICAJfQo+ICAgfQo+IEBAIC0yNDMsMTkgKzI1NSwxNyBAQCB2 b2lkIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKPiAgIAo+ICAgYm9vbCBpOTE1X3JlcXVlc3RfZW5hYmxlX2JyZWFkY3J1bWIoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICB7Cj4gLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMg KmIgPSAmcnEtPmVuZ2luZS0+YnJlYWRjcnVtYnM7Cj4gLQo+IC0JR0VNX0JVR19PTih0ZXN0X2Jp dChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLCAmcnEtPmZlbmNlLmZsYWdzKSk7Cj4gLQo+IC0JaWYg KCF0ZXN0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcnEtPmZlbmNlLmZsYWdzKSkKPiAt CQlyZXR1cm4gdHJ1ZTsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJxLT5sb2NrKTsKPiArCWxv Y2tkZXBfYXNzZXJ0X2lycXNfZGlzYWJsZWQoKTsKPiAgIAo+IC0Jc3Bpbl9sb2NrKCZiLT5pcnFf bG9jayk7Cj4gLQlpZiAodGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJxLT5mZW5j ZS5mbGFncykgJiYKPiAtCSAgICAhX19yZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsKPiArCWlmICh0 ZXN0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcnEtPmZlbmNlLmZsYWdzKSkgewo+ICsJ CXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZycS0+ZW5naW5lLT5icmVhZGNydW1iczsK PiAgIAkJc3RydWN0IGludGVsX2NvbnRleHQgKmNlID0gcnEtPmh3X2NvbnRleHQ7Cj4gICAJCXN0 cnVjdCBsaXN0X2hlYWQgKnBvczsKPiAgIAo+ICsJCXNwaW5fbG9jaygmYi0+aXJxX2xvY2spOwo+ ICsJCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5j ZS5mbGFncykpOwo+ICsKPiAgIAkJX19pbnRlbF9icmVhZGNydW1ic19hcm1faXJxKGIpOwo+ICAg Cj4gICAJCS8qCj4gQEAgLTI4NCw4ICsyOTQsOCBAQCBib29sIGk5MTVfcmVxdWVzdF9lbmFibGVf YnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAgIAkJCWxpc3RfbW92ZV90YWls KCZjZS0+c2lnbmFsX2xpbmssICZiLT5zaWduYWxlcnMpOwo+ICAgCj4gICAJCXNldF9iaXQoSTkx NV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncyk7Cj4gKwkJc3Bpbl91bmxvY2so JmItPmlycV9sb2NrKTsKPiAgIAl9Cj4gLQlzcGluX3VubG9jaygmYi0+aXJxX2xvY2spOwo+ICAg Cj4gICAJcmV0dXJuICFfX3JlcXVlc3RfY29tcGxldGVkKHJxKTsKPiAgIH0KPiBAQCAtMjk0LDgg KzMwNCw4IEBAIHZvaWQgaTkxNV9yZXF1ZXN0X2NhbmNlbF9icmVhZGNydW1iKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxKQo+ICAgewo+ICAgCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZy cS0+ZW5naW5lLT5icmVhZGNydW1iczsKPiAgIAo+IC0JaWYgKCF0ZXN0X2JpdChJOTE1X0ZFTkNF X0ZMQUdfU0lHTkFMLCAmcnEtPmZlbmNlLmZsYWdzKSkKPiAtCQlyZXR1cm47Cj4gKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZycS0+bG9jayk7Cj4gKwlsb2NrZGVwX2Fzc2VydF9pcnFzX2Rpc2FibGVk KCk7Cj4gICAKPiAgIAlzcGluX2xvY2soJmItPmlycV9sb2NrKTsKPiAgIAlpZiAodGVzdF9iaXQo STkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncykpIHsKPiAKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4