From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 12/18] drm/i915/execlists: Process one CSB interrupt at a time Date: Fri, 25 May 2018 10:32:00 +0100 Message-ID: <20180525093206.1919-13-chris@chris-wilson.co.uk> References: <20180525093206.1919-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA2046E910 for ; Fri, 25 May 2018 09:32:41 +0000 (UTC) In-Reply-To: <20180525093206.1919-1-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: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SW4gdGhlIG5leHQgcGF0Y2gsIHdlIHdpbGwgcHJvY2VzcyB0aGUgQ1NCIGV2ZW50cyBkaXJlY3Rs eSBmcm9tIHRoZSBDUwppbnRlcnJ1cHQgaGFuZGxlciwgYmVpbmcgY2FsbGVkIGZvciBlYWNoIGlu dGVycnVwdC4gSGVuY2UsIHdlIHdpbGwgbm8KbG9uZ2VyIGhhdmUgdGhlIG5lZWQgZm9yIGEgbG9v cCB1bnRpbCB0aGUgaGFzLWludGVycnVwdCBiaXQgaXMgY2xlYXIsCmFuZCBpbiB0aGUgbWVhbnRp bWUgY2FuIHJlbW92ZSB0aGF0IHNtYWxsIG9wdGltaXNhdGlvbi4KClNpZ25lZC1vZmYtYnk6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jIHwgMjc0ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0K IDEgZmlsZSBjaGFuZ2VkLCAxMzUgaW5zZXJ0aW9ucygrKSwgMTM5IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbHJjLmMKaW5kZXggZTIyYjA0YmI1OGZlLi43YzJkOTMxMGZiMzYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2xyYy5jCkBAIC05NTQsMTY2ICs5NTQsMTYyIEBAIHN0YXRpYyB2 b2lkIHByb2Nlc3NfY3NiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlzdHJ1Y3Qg aW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNs aXN0czsKIAlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0cy0+cG9ydDsKIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGVuZ2luZS0+aTkxNTsKKworCS8qIFRoZSBI V1NQIGNvbnRhaW5zIGEgKGNhY2hlYWJsZSkgbWlycm9yIG9mIHRoZSBDU0IgKi8KKwljb25zdCB1 MzIgKmJ1ZiA9CisJCSZlbmdpbmUtPnN0YXR1c19wYWdlLnBhZ2VfYWRkcltJOTE1X0hXU19DU0Jf QlVGMF9JTkRFWF07CisJdW5zaWduZWQgaW50IGhlYWQsIHRhaWw7CiAJYm9vbCBmdyA9IGZhbHNl OwogCi0JZG8gewotCQkvKiBUaGUgSFdTUCBjb250YWlucyBhIChjYWNoZWFibGUpIG1pcnJvciBv ZiB0aGUgQ1NCICovCi0JCWNvbnN0IHUzMiAqYnVmID0KLQkJCSZlbmdpbmUtPnN0YXR1c19wYWdl LnBhZ2VfYWRkcltJOTE1X0hXU19DU0JfQlVGMF9JTkRFWF07Ci0JCXVuc2lnbmVkIGludCBoZWFk LCB0YWlsOworCS8qIENsZWFyIGJlZm9yZSByZWFkaW5nIHRvIGNhdGNoIG5ldyBpbnRlcnJ1cHRz ICovCisJY2xlYXJfYml0KEVOR0lORV9JUlFfRVhFQ0xJU1QsICZlbmdpbmUtPmlycV9wb3N0ZWQp OworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAKLQkJLyogQ2xlYXIgYmVmb3JlIHJlYWRpbmcg dG8gY2F0Y2ggbmV3IGludGVycnVwdHMgKi8KLQkJY2xlYXJfYml0KEVOR0lORV9JUlFfRVhFQ0xJ U1QsICZlbmdpbmUtPmlycV9wb3N0ZWQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworCWlm ICh1bmxpa2VseShleGVjbGlzdHMtPmNzYl91c2VfbW1pbykpIHsKKwkJaW50ZWxfdW5jb3JlX2Zv cmNld2FrZV9nZXQoaTkxNSwgZXhlY2xpc3RzLT5md19kb21haW5zKTsKKwkJZncgPSB0cnVlOwog Ci0JCWlmICh1bmxpa2VseShleGVjbGlzdHMtPmNzYl91c2VfbW1pbykpIHsKLQkJCWlmICghZncp IHsKLQkJCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChpOTE1LCBleGVjbGlzdHMtPmZ3X2Rv bWFpbnMpOwotCQkJCWZ3ID0gdHJ1ZTsKLQkJCX0KKwkJYnVmID0gKHUzMiAqIF9fZm9yY2UpCisJ CQkoaTkxNS0+cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNf QlVGX0xPKGVuZ2luZSwgMCkpKTsKIAotCQkJYnVmID0gKHUzMiAqIF9fZm9yY2UpCi0JCQkJKGk5 MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRl9M TyhlbmdpbmUsIDApKSk7CisJCWhlYWQgPSByZWFkbChpOTE1LT5yZWdzICsgaTkxNV9tbWlvX3Jl Z19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpOworCQl0YWlsID0gR0VO OF9DU0JfV1JJVEVfUFRSKGhlYWQpOworCQloZWFkID0gR0VOOF9DU0JfUkVBRF9QVFIoaGVhZCk7 CisJCWV4ZWNsaXN0cy0+Y3NiX2hlYWQgPSBoZWFkOworCX0gZWxzZSB7CisJCWNvbnN0IGludCB3 cml0ZV9pZHggPQorCQkJaW50ZWxfaHdzX2NzYl93cml0ZV9pbmRleChpOTE1KSAtCisJCQlJOTE1 X0hXU19DU0JfQlVGMF9JTkRFWDsKIAotCQkJaGVhZCA9IHJlYWRsKGk5MTUtPnJlZ3MgKyBpOTE1 X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSk7Ci0JCQl0 YWlsID0gR0VOOF9DU0JfV1JJVEVfUFRSKGhlYWQpOwotCQkJaGVhZCA9IEdFTjhfQ1NCX1JFQURf UFRSKGhlYWQpOwotCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Ci0JCX0gZWxzZSB7Ci0J CQljb25zdCBpbnQgd3JpdGVfaWR4ID0KLQkJCQlpbnRlbF9od3NfY3NiX3dyaXRlX2luZGV4KGk5 MTUpIC0KLQkJCQlJOTE1X0hXU19DU0JfQlVGMF9JTkRFWDsKKwkJaGVhZCA9IGV4ZWNsaXN0cy0+ Y3NiX2hlYWQ7CisJCXRhaWwgPSBSRUFEX09OQ0UoYnVmW3dyaXRlX2lkeF0pOworCQlybWIoKTsg LyogSG9wZWZ1bGx5IHBhaXJlZCB3aXRoIGEgd21iKCkgaW4gSFcgKi8KKwl9CisJR0VNX1RSQUNF KCIlcyBjcy1pcnEgaGVhZD0lZCBbJWQlc10sIHRhaWw9JWQgWyVkJXNdXG4iLAorCQkgIGVuZ2lu ZS0+bmFtZSwKKwkJICBoZWFkLCBHRU44X0NTQl9SRUFEX1BUUihyZWFkbChpOTE1LT5yZWdzICsg aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19DT05URVhUX1NUQVRVU19QVFIoZW5naW5lKSkpKSwg ZncgPyAiIiA6ICI/IiwKKwkJICB0YWlsLCBHRU44X0NTQl9XUklURV9QVFIocmVhZGwoaTkxNS0+ cmVncyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2lu ZSkpKSksIGZ3ID8gIiIgOiAiPyIpOwogCi0JCQloZWFkID0gZXhlY2xpc3RzLT5jc2JfaGVhZDsK LQkJCXRhaWwgPSBSRUFEX09OQ0UoYnVmW3dyaXRlX2lkeF0pOwotCQkJcm1iKCk7IC8qIEhvcGVm dWxseSBwYWlyZWQgd2l0aCBhIHdtYigpIGluIEhXICovCi0JCX0KLQkJR0VNX1RSQUNFKCIlcyBj cy1pcnEgaGVhZD0lZCBbJWQlc10sIHRhaWw9JWQgWyVkJXNdXG4iLAotCQkJICBlbmdpbmUtPm5h bWUsCi0JCQkgIGhlYWQsIEdFTjhfQ1NCX1JFQURfUFRSKHJlYWRsKGk5MTUtPnJlZ3MgKyBpOTE1 X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVTX1BUUihlbmdpbmUpKSkpLCBmdyA/ ICIiIDogIj8iLAotCQkJICB0YWlsLCBHRU44X0NTQl9XUklURV9QVFIocmVhZGwoaTkxNS0+cmVn cyArIGk5MTVfbW1pb19yZWdfb2Zmc2V0KFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2luZSkp KSksIGZ3ID8gIiIgOiAiPyIpOworCXdoaWxlIChoZWFkICE9IHRhaWwpIHsKKwkJc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnE7CisJCXVuc2lnbmVkIGludCBzdGF0dXM7CisJCXVuc2lnbmVkIGludCBj b3VudDsKIAotCQl3aGlsZSAoaGVhZCAhPSB0YWlsKSB7Ci0JCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICpycTsKLQkJCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0JCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJ CWlmICgrK2hlYWQgPT0gR0VOOF9DU0JfRU5UUklFUykKKwkJCWhlYWQgPSAwOwogCi0JCQlpZiAo KytoZWFkID09IEdFTjhfQ1NCX0VOVFJJRVMpCi0JCQkJaGVhZCA9IDA7CisJCS8qCisJCSAqIFdl IGFyZSBmbHlpbmcgbmVhciBkcmFnb25zIGFnYWluLgorCQkgKgorCQkgKiBXZSBob2xkIGEgcmVm ZXJlbmNlIHRvIHRoZSByZXF1ZXN0IGluIGV4ZWNsaXN0X3BvcnRbXQorCQkgKiBidXQgbm8gbW9y ZSB0aGFuIHRoYXQuIFdlIGFyZSBvcGVyYXRpbmcgaW4gc29mdGlycQorCQkgKiBjb250ZXh0IGFu ZCBzbyBjYW5ub3QgaG9sZCBhbnkgbXV0ZXggb3Igc2xlZXAuIFRoYXQKKwkJICogcHJldmVudHMg dXMgc3RvcHBpbmcgdGhlIHJlcXVlc3RzIHdlIGFyZSBwcm9jZXNzaW5nCisJCSAqIGluIHBvcnRb XSBmcm9tIGJlaW5nIHJldGlyZWQgc2ltdWx0YW5lb3VzbHkgKHRoZQorCQkgKiBicmVhZGNydW1i IHdpbGwgYmUgY29tcGxldGUgYmVmb3JlIHdlIHNlZSB0aGUKKwkJICogY29udGV4dC1zd2l0Y2gp LiBBcyB3ZSBvbmx5IGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUKKwkJICogcmVxdWVzdCwgYW55 IHBvaW50ZXIgY2hhc2luZyB1bmRlcm5lYXRoIHRoZSByZXF1ZXN0CisJCSAqIGlzIHN1YmplY3Qg dG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUuIFRodXMgd2UKKwkJICogc3RvcmUgYWxsIG9m IHRoZSBib29ra2VlcGluZyB3aXRoaW4gcG9ydFtdIGFzCisJCSAqIHJlcXVpcmVkLCBhbmQgYXZv aWQgdXNpbmcgdW5ndWFyZGVkIHBvaW50ZXJzIGJlbmVhdGgKKwkJICogcmVxdWVzdCBpdHNlbGYu IFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGF0b21pYworCQkgKiBzdGF0dXMgbm90aWZpZXIuCisJ CSAqLwogCi0JCQkvKgotCQkJICogV2UgYXJlIGZseWluZyBuZWFyIGRyYWdvbnMgYWdhaW4uCi0J CQkgKgotCQkJICogV2UgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgcmVxdWVzdCBpbiBleGVjbGlz dF9wb3J0W10KLQkJCSAqIGJ1dCBubyBtb3JlIHRoYW4gdGhhdC4gV2UgYXJlIG9wZXJhdGluZyBp biBzb2Z0aXJxCi0JCQkgKiBjb250ZXh0IGFuZCBzbyBjYW5ub3QgaG9sZCBhbnkgbXV0ZXggb3Ig c2xlZXAuIFRoYXQKLQkJCSAqIHByZXZlbnRzIHVzIHN0b3BwaW5nIHRoZSByZXF1ZXN0cyB3ZSBh cmUgcHJvY2Vzc2luZwotCQkJICogaW4gcG9ydFtdIGZyb20gYmVpbmcgcmV0aXJlZCBzaW11bHRh bmVvdXNseSAodGhlCi0JCQkgKiBicmVhZGNydW1iIHdpbGwgYmUgY29tcGxldGUgYmVmb3JlIHdl IHNlZSB0aGUKLQkJCSAqIGNvbnRleHQtc3dpdGNoKS4gQXMgd2Ugb25seSBob2xkIHRoZSByZWZl cmVuY2UgdG8gdGhlCi0JCQkgKiByZXF1ZXN0LCBhbnkgcG9pbnRlciBjaGFzaW5nIHVuZGVybmVh dGggdGhlIHJlcXVlc3QKLQkJCSAqIGlzIHN1YmplY3QgdG8gYSBwb3RlbnRpYWwgdXNlLWFmdGVy LWZyZWUuIFRodXMgd2UKLQkJCSAqIHN0b3JlIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgd2l0aGlu IHBvcnRbXSBhcwotCQkJICogcmVxdWlyZWQsIGFuZCBhdm9pZCB1c2luZyB1bmd1YXJkZWQgcG9p bnRlcnMgYmVuZWF0aAotCQkJICogcmVxdWVzdCBpdHNlbGYuIFRoZSBzYW1lIGFwcGxpZXMgdG8g dGhlIGF0b21pYwotCQkJICogc3RhdHVzIG5vdGlmaWVyLgotCQkJICovCisJCXN0YXR1cyA9IFJF QURfT05DRShidWZbMiAqIGhlYWRdKTsgLyogbWF5YmUgbW1pbyEgKi8KKwkJR0VNX1RSQUNFKCIl cyBjc2JbJWRdOiBzdGF0dXM9MHglMDh4OjB4JTA4eCwgYWN0aXZlPTB4JXhcbiIsCisJCQkgIGVu Z2luZS0+bmFtZSwgaGVhZCwKKwkJCSAgc3RhdHVzLCBidWZbMipoZWFkICsgMV0sCisJCQkgIGV4 ZWNsaXN0cy0+YWN0aXZlKTsKKworCQlpZiAoc3RhdHVzICYgKEdFTjhfQ1RYX1NUQVRVU19JRExF X0FDVElWRSB8CisJCQkgICAgICBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKSkKKwkJCWV4ZWNs aXN0c19zZXRfYWN0aXZlKGV4ZWNsaXN0cywKKwkJCQkJICAgICBFWEVDTElTVFNfQUNUSVZFX0hX QUNLKTsKKwkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkKKwkJCWV4 ZWNsaXN0c19jbGVhcl9hY3RpdmUoZXhlY2xpc3RzLAorCQkJCQkgICAgICAgRVhFQ0xJU1RTX0FD VElWRV9IV0FDSyk7CisKKwkJaWYgKCEoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX0NPTVBMRVRF RF9NQVNLKSkKKwkJCWNvbnRpbnVlOwogCi0JCQlzdGF0dXMgPSBSRUFEX09OQ0UoYnVmWzIgKiBo ZWFkXSk7IC8qIG1heWJlIG1taW8hICovCi0JCQlHRU1fVFJBQ0UoIiVzIGNzYlslZF06IHN0YXR1 cz0weCUwOHg6MHglMDh4LCBhY3RpdmU9MHgleFxuIiwKLQkJCQkgIGVuZ2luZS0+bmFtZSwgaGVh ZCwKLQkJCQkgIHN0YXR1cywgYnVmWzIqaGVhZCArIDFdLAotCQkJCSAgZXhlY2xpc3RzLT5hY3Rp dmUpOwotCi0JCQlpZiAoc3RhdHVzICYgKEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSB8Ci0J CQkJICAgICAgR0VOOF9DVFhfU1RBVFVTX1BSRUVNUFRFRCkpCi0JCQkJZXhlY2xpc3RzX3NldF9h Y3RpdmUoZXhlY2xpc3RzLAotCQkJCQkJICAgICBFWEVDTElTVFNfQUNUSVZFX0hXQUNLKTsKLQkJ CWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQUNUSVZFX0lETEUpCi0JCQkJZXhlY2xpc3Rz X2NsZWFyX2FjdGl2ZShleGVjbGlzdHMsCi0JCQkJCQkgICAgICAgRVhFQ0xJU1RTX0FDVElWRV9I V0FDSyk7Ci0KLQkJCWlmICghKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19DT01QTEVURURfTUFT SykpCi0JCQkJY29udGludWU7CisJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBDT01QTEVURUQg fCBJRExFX0FDVElWRSEgKi8KKwkJR0VNX0JVR19PTihzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNf SURMRV9BQ1RJVkUpOwogCi0JCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGEgQ09NUExFVEVEIHwg SURMRV9BQ1RJVkUhICovCi0JCQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19J RExFX0FDVElWRSk7CisJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQ09NUExFVEUgJiYK KwkJICAgIGJ1ZlsyKmhlYWQgKyAxXSA9PSBleGVjbGlzdHMtPnByZWVtcHRfY29tcGxldGVfc3Rh dHVzKSB7CisJCQlHRU1fVFJBQ0UoIiVzIHByZWVtcHQtaWRsZVxuIiwgZW5naW5lLT5uYW1lKTsK KwkJCWNvbXBsZXRlX3ByZWVtcHRfY29udGV4dChleGVjbGlzdHMpOworCQkJY29udGludWU7CisJ CX0KIAotCQkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19DT01QTEVURSAmJgotCQkJICAg IGJ1ZlsyKmhlYWQgKyAxXSA9PSBleGVjbGlzdHMtPnByZWVtcHRfY29tcGxldGVfc3RhdHVzKSB7 Ci0JCQkJR0VNX1RSQUNFKCIlcyBwcmVlbXB0LWlkbGVcbiIsIGVuZ2luZS0+bmFtZSk7Ci0JCQkJ Y29tcGxldGVfcHJlZW1wdF9jb250ZXh0KGV4ZWNsaXN0cyk7Ci0JCQkJY29udGludWU7Ci0JCQl9 CisJCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEICYmCisJCSAgICBleGVj bGlzdHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywKKwkJCQkJRVhFQ0xJU1RTX0FDVElWRV9QUkVFTVBU KSkKKwkJCWNvbnRpbnVlOwogCi0JCQlpZiAoc3RhdHVzICYgR0VOOF9DVFhfU1RBVFVTX1BSRUVN UFRFRCAmJgotCQkJICAgIGV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLAotCQkJCQkJRVhF Q0xJU1RTX0FDVElWRV9QUkVFTVBUKSkKLQkJCQljb250aW51ZTsKKwkJR0VNX0JVR19PTighZXhl Y2xpc3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsCisJCQkJCQlFWEVDTElTVFNfQUNUSVZFX1VTRVIp KTsKIAotCQkJR0VNX0JVR19PTighZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsCi0JCQkJ CQkJRVhFQ0xJU1RTX0FDVElWRV9VU0VSKSk7CisJCXJxID0gcG9ydF91bnBhY2socG9ydCwgJmNv dW50KTsKKwkJR0VNX1RSQUNFKCIlcyBvdXRbMF06IGN0eD0lZC4lZCwgZ2xvYmFsPSVkIChmZW5j ZSAlbGx4OiVkKSAoY3VycmVudCAlZCksIHByaW89JWRcbiIsCisJCQkgIGVuZ2luZS0+bmFtZSwK KwkJCSAgcG9ydC0+Y29udGV4dF9pZCwgY291bnQsCisJCQkgIHJxID8gcnEtPmdsb2JhbF9zZXFu byA6IDAsCisJCQkgIHJxID8gcnEtPmZlbmNlLmNvbnRleHQgOiAwLAorCQkJICBycSA/IHJxLT5m ZW5jZS5zZXFubyA6IDAsCisJCQkgIGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKSwKKwkJ CSAgcnEgPyBycV9wcmlvKHJxKSA6IDApOworCisJCS8qIENoZWNrIHRoZSBjb250ZXh0L2Rlc2Mg aWQgZm9yIHRoaXMgZXZlbnQgbWF0Y2hlcyAqLworCQlHRU1fREVCVUdfQlVHX09OKGJ1ZlsyICog aGVhZCArIDFdICE9IHBvcnQtPmNvbnRleHRfaWQpOworCisJCUdFTV9CVUdfT04oY291bnQgPT0g MCk7CisJCWlmICgtLWNvdW50ID09IDApIHsKKwkJCS8qCisJCQkgKiBPbiB0aGUgZmluYWwgZXZl bnQgY29ycmVzcG9uZGluZyB0byB0aGUKKwkJCSAqIHN1Ym1pc3Npb24gb2YgdGhpcyBjb250ZXh0 LCB3ZSBleHBlY3QgZWl0aGVyCisJCQkgKiBhbiBlbGVtZW50LXN3aXRjaCBldmVudCBvciBhIGNv bXBsZXRpb24KKwkJCSAqIGV2ZW50IChhbmQgb24gY29tcGxldGlvbiwgdGhlIGFjdGl2ZS1pZGxl CisJCQkgKiBtYXJrZXIpLiBObyBtb3JlIHByZWVtcHRpb25zLCBsaXRlLXJlc3RvcmUKKwkJCSAq IG9yIG90aGVyd2lzZS4KKwkJCSAqLworCQkJR0VNX0JVR19PTihzdGF0dXMgJiBHRU44X0NUWF9T VEFUVVNfUFJFRU1QVEVEKTsKKwkJCUdFTV9CVUdfT04ocG9ydF9pc3NldCgmcG9ydFsxXSkgJiYK KwkJCQkgICAhKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19FTEVNRU5UX1NXSVRDSCkpOworCQkJ R0VNX0JVR19PTighcG9ydF9pc3NldCgmcG9ydFsxXSkgJiYKKwkJCQkgICAhKHN0YXR1cyAmIEdF TjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkpOwogCi0JCQlycSA9IHBvcnRfdW5wYWNrKHBvcnQs ICZjb3VudCk7Ci0JCQlHRU1fVFJBQ0UoIiVzIG91dFswXTogY3R4PSVkLiVkLCBnbG9iYWw9JWQg KGZlbmNlICVsbHg6JWQpIChjdXJyZW50ICVkKSwgcHJpbz0lZFxuIiwKLQkJCQkgIGVuZ2luZS0+ bmFtZSwKLQkJCQkgIHBvcnQtPmNvbnRleHRfaWQsIGNvdW50LAotCQkJCSAgcnEgPyBycS0+Z2xv YmFsX3NlcW5vIDogMCwKLQkJCQkgIHJxID8gcnEtPmZlbmNlLmNvbnRleHQgOiAwLAotCQkJCSAg cnEgPyBycS0+ZmVuY2Uuc2Vxbm8gOiAwLAotCQkJCSAgaW50ZWxfZW5naW5lX2dldF9zZXFubyhl bmdpbmUpLAotCQkJCSAgcnEgPyBycV9wcmlvKHJxKSA6IDApOworCQkJLyoKKwkJCSAqIFdlIHJl bHkgb24gdGhlIGhhcmR3YXJlIGJlaW5nIHN0cm9uZ2x5CisJCQkgKiBvcmRlcmVkLCB0aGF0IHRo ZSBicmVhZGNydW1iIHdyaXRlIGlzCisJCQkgKiBjb2hlcmVudCAodmlzaWJsZSBmcm9tIHRoZSBD UFUpIGJlZm9yZSB0aGUKKwkJCSAqIHVzZXIgaW50ZXJydXB0IGFuZCBDU0IgaXMgcHJvY2Vzc2Vk LgorCQkJICovCisJCQlHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSk7CiAK LQkJCS8qIENoZWNrIHRoZSBjb250ZXh0L2Rlc2MgaWQgZm9yIHRoaXMgZXZlbnQgbWF0Y2hlcyAq LwotCQkJR0VNX0RFQlVHX0JVR19PTihidWZbMiAqIGhlYWQgKyAxXSAhPSBwb3J0LT5jb250ZXh0 X2lkKTsKKwkJCWV4ZWNsaXN0c19jb250ZXh0X3NjaGVkdWxlX291dChycSwKKwkJCQkJCSAgICAg ICBJTlRFTF9DT05URVhUX1NDSEVEVUxFX09VVCk7CisJCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsK IAotCQkJR0VNX0JVR19PTihjb3VudCA9PSAwKTsKLQkJCWlmICgtLWNvdW50ID09IDApIHsKLQkJ CQkvKgotCQkJCSAqIE9uIHRoZSBmaW5hbCBldmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZQotCQkJ CSAqIHN1Ym1pc3Npb24gb2YgdGhpcyBjb250ZXh0LCB3ZSBleHBlY3QgZWl0aGVyCi0JCQkJICog YW4gZWxlbWVudC1zd2l0Y2ggZXZlbnQgb3IgYSBjb21wbGV0aW9uCi0JCQkJICogZXZlbnQgKGFu ZCBvbiBjb21wbGV0aW9uLCB0aGUgYWN0aXZlLWlkbGUKLQkJCQkgKiBtYXJrZXIpLiBObyBtb3Jl IHByZWVtcHRpb25zLCBsaXRlLXJlc3RvcmUKLQkJCQkgKiBvciBvdGhlcndpc2UuCi0JCQkJICov Ci0JCQkJR0VNX0JVR19PTihzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKTsKLQkJ CQlHRU1fQlVHX09OKHBvcnRfaXNzZXQoJnBvcnRbMV0pICYmCi0JCQkJCSAgICEoc3RhdHVzICYg R0VOOF9DVFhfU1RBVFVTX0VMRU1FTlRfU1dJVENIKSk7Ci0JCQkJR0VNX0JVR19PTighcG9ydF9p c3NldCgmcG9ydFsxXSkgJiYKLQkJCQkJICAgIShzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQUNU SVZFX0lETEUpKTsKKwkJCUdFTV9UUkFDRSgiJXMgY29tcGxldGVkIGN0eD0lZFxuIiwKKwkJCQkg IGVuZ2luZS0+bmFtZSwgcG9ydC0+Y29udGV4dF9pZCk7CiAKLQkJCQkvKgotCQkJCSAqIFdlIHJl bHkgb24gdGhlIGhhcmR3YXJlIGJlaW5nIHN0cm9uZ2x5Ci0JCQkJICogb3JkZXJlZCwgdGhhdCB0 aGUgYnJlYWRjcnVtYiB3cml0ZSBpcwotCQkJCSAqIGNvaGVyZW50ICh2aXNpYmxlIGZyb20gdGhl IENQVSkgYmVmb3JlIHRoZQotCQkJCSAqIHVzZXIgaW50ZXJydXB0IGFuZCBDU0IgaXMgcHJvY2Vz c2VkLgotCQkJCSAqLwotCQkJCUdFTV9CVUdfT04oIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEp KTsKLQotCQkJCWV4ZWNsaXN0c19jb250ZXh0X3NjaGVkdWxlX291dChycSwKLQkJCQkJCQkgICAg ICAgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQpOwotCQkJCWk5MTVfcmVxdWVzdF9wdXQocnEp OwotCi0JCQkJR0VNX1RSQUNFKCIlcyBjb21wbGV0ZWQgY3R4PSVkXG4iLAotCQkJCQkgIGVuZ2lu ZS0+bmFtZSwgcG9ydC0+Y29udGV4dF9pZCk7Ci0KLQkJCQlwb3J0ID0gZXhlY2xpc3RzX3BvcnRf Y29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKLQkJCQlpZiAocG9ydF9pc3NldChwb3J0KSkKLQkJ CQkJZXhlY2xpc3RzX3VzZXJfYmVnaW4oZXhlY2xpc3RzLCBwb3J0KTsKLQkJCQllbHNlCi0JCQkJ CWV4ZWNsaXN0c191c2VyX2VuZChleGVjbGlzdHMpOwotCQkJfSBlbHNlIHsKLQkJCQlwb3J0X3Nl dChwb3J0LCBwb3J0X3BhY2socnEsIGNvdW50KSk7Ci0JCQl9CisJCQlwb3J0ID0gZXhlY2xpc3Rz X3BvcnRfY29tcGxldGUoZXhlY2xpc3RzLCBwb3J0KTsKKwkJCWlmIChwb3J0X2lzc2V0KHBvcnQp KQorCQkJCWV4ZWNsaXN0c191c2VyX2JlZ2luKGV4ZWNsaXN0cywgcG9ydCk7CisJCQllbHNlCisJ CQkJZXhlY2xpc3RzX3VzZXJfZW5kKGV4ZWNsaXN0cyk7CisJCX0gZWxzZSB7CisJCQlwb3J0X3Nl dChwb3J0LCBwb3J0X3BhY2socnEsIGNvdW50KSk7CiAJCX0KKwl9CiAKLQkJaWYgKGhlYWQgIT0g ZXhlY2xpc3RzLT5jc2JfaGVhZCkgewotCQkJZXhlY2xpc3RzLT5jc2JfaGVhZCA9IGhlYWQ7Ci0J CQl3cml0ZWwoX01BU0tFRF9GSUVMRChHRU44X0NTQl9SRUFEX1BUUl9NQVNLLCBoZWFkIDw8IDgp LAotCQkJICAgICAgIGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRF WFRfU1RBVFVTX1BUUihlbmdpbmUpKSk7Ci0JCX0KLQl9IHdoaWxlICh0ZXN0X2JpdChFTkdJTkVf SVJRX0VYRUNMSVNULCAmZW5naW5lLT5pcnFfcG9zdGVkKSk7CisJaWYgKGhlYWQgIT0gZXhlY2xp c3RzLT5jc2JfaGVhZCkgeworCQlleGVjbGlzdHMtPmNzYl9oZWFkID0gaGVhZDsKKwkJd3JpdGVs KF9NQVNLRURfRklFTEQoR0VOOF9DU0JfUkVBRF9QVFJfTUFTSywgaGVhZCA8PCA4KSwKKwkJICAg ICAgIGk5MTUtPnJlZ3MgKyBpOTE1X21taW9fcmVnX29mZnNldChSSU5HX0NPTlRFWFRfU1RBVFVT X1BUUihlbmdpbmUpKSk7CisJfQogCiAJaWYgKHVubGlrZWx5KGZ3KSkKIAkJaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9wdXQoaTkxNSwgZXhlY2xpc3RzLT5md19kb21haW5zKTsKLS0gCjIuMTcuMAoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==