From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michel Thierry Subject: [PATCH v9 15/21] drm/i915/guc: Add support for reset engine using GuC commands Date: Thu, 15 Jun 2017 13:18:22 -0700 Message-ID: <20170615201828.23144-16-michel.thierry@intel.com> References: <20170615201828.23144-1-michel.thierry@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 8305A6E80C for ; Thu, 15 Jun 2017 20:18:32 +0000 (UTC) In-Reply-To: <20170615201828.23144-1-michel.thierry@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 VGhpcyBwYXRjaCBhZGRzIHBlciBlbmdpbmUgcmVzZXQgYW5kIHJlY292ZXJ5IChURFIpIHN1cHBv cnQgd2hlbiBHdUMgaXMKdXNlZCB0byBzdWJtaXQgd29ya2xvYWRzIHRvIEdQVS4KCkluIHRoZSBj YXNlIG9mIGk5MTUgZGlyZWN0bHkgc3VibWlzc2lvbiB0byBFTFNQLCBkcml2ZXIgbWFuYWdlcyBo YW5nCmRldGVjdGlvbiwgcmVjb3ZlcnkgYW5kIHJlc3VibWlzc2lvbi4gV2l0aCBHdUMgc3VibWlz c2lvbiB0aGVzZSB0YXNrcwphcmUgc2hhcmVkIGJldHdlZW4gZHJpdmVyIGFuZCBHdUMuIGk5MTUg aXMgc3RpbGwgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZwphIGhhbmcsIGFuZCB3aGVuIGl0IGRv ZXMgaXQgb25seSByZXF1ZXN0cyBHdUMgdG8gcmVzZXQgdGhhdCBFbmdpbmUuIEd1QwppbnRlcm5h bGx5IG1hbmFnZXMgYWNxdWlyaW5nIGZvcmNld2FrZSBhbmQgaWRsaW5nIHRoZSBlbmdpbmUgYmVm b3JlIGFjdHVhbGx5CnJlc2V0dGluZyBpdC4KCk9uY2UgdGhlIHJlc2V0IGlzIHN1Y2Nlc3NmdWws IGk5MTUgdGFrZXMgb3ZlciBhZ2FpbiBhbmQgaGFuZGxlcyByZXN1Ym1pc3Npb24uClRoZSBzY2hl ZHVsZXIgaW4gaTkxNSBrbm93cyB3aGljaCByZXF1ZXN0cyBhcmUgcGVuZGluZyBzbyBhZnRlciBy ZXNldHRpbmcKYSBlbmdpbmUsIHBlbmRpbmcgd29ya2xvYWRzL3JlcXVlc3RzIGFyZSByZXN1Ym1p dHRlZCBhZ2Fpbi4KCnYyOiBzL2k5MTVfZ3VjX3JlcXVlc3RfZW5naW5lX3Jlc2V0L2k5MTVfZ3Vj X3Jlc2V0X2VuZ2luZS8gdG8gbWF0Y2ggdGhlCm5vbi1ndWMgZnVudGlvbiBuYW1lcy4KCnYzOiBS ZW1vdmVkIGRlYnVnIG1lc3NhZ2UgYWJvdXQgZW5naW5lIHJlc3RhcnRpbmcgZnJvbSB3aGljaCBy ZXF1ZXN0LApzaW5jZSB0aGUgbmV3IGJhc2VsaW5lIGRvIGl0IHJlZ2FyZGxlc3Mgb2Ygc3VibWlz c2lvbiBtb2RlLiAoQ2hyaXMpCgpTaWduZWQtb2ZmLWJ5OiBBcnVuIFNpbHV2ZXJ5IDxhcnVuLnNp bHV2ZXJ5QGxpbnV4LmludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogSmVmZiBNY0dlZSA8amVmZi5t Y2dlZUBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1pY2hlbCBUaGllcnJ5IDxtaWNoZWwudGhp ZXJyeUBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAg ICAgICAgIHwgMjQgKysrKysrKysrKystLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oICAgICAgICAgICAgfCAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJt aXNzaW9uLmMgfCA0OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2d1Y19md2lmLmggICAgICB8ICA2ICsrKysKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3VjLmggICAgICAgICAgICB8ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3VuY29yZS5jICAgICAgICB8ICA1IC0tLS0KIDYgZmlsZXMgY2hhbmdlZCwgNzUgaW5z ZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXgg NzhkZjE0NzcwODBhLi4zMmE1ODBkYzQ1ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAt MTk0MCwxMSArMTk0MCwyMSBAQCBpbnQgaTkxNV9yZXNldF9lbmdpbmUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQogCSAqLwogCWk5MTVfZ2VtX3Jlc2V0X2VuZ2luZShlbmdpbmUsIGFj dGl2ZV9yZXF1ZXN0KTsKIAotCS8qIGZpbmFsbHksIHJlc2V0IGVuZ2luZSAqLwotCXJldCA9IGlu dGVsX2dwdV9yZXNldChkZXZfcHJpdiwgaW50ZWxfZW5naW5lX2ZsYWcoZW5naW5lKSk7Ci0JaWYg KHJldCkgewotCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCAlcywgcmV0PSVkXG4iLCBlbmdp bmUtPm5hbWUsIHJldCk7Ci0JCWdvdG8gb3V0OworCWlmICghZGV2X3ByaXYtPmd1Yy5leGVjYnVm X2NsaWVudCkgeworCQkvKiBmaW5hbGx5LCByZXNldCBlbmdpbmUgKi8KKwkJcmV0ID0gaW50ZWxf Z3B1X3Jlc2V0KGRldl9wcml2LCBpbnRlbF9lbmdpbmVfZmxhZyhlbmdpbmUpKTsKKwkJaWYgKHJl dCkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzZXQgJXMsIHJldD0lZFxuIiwKKwkJCQkg IGVuZ2luZS0+bmFtZSwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJcmV0 ID0gaTkxNV9ndWNfcmVzZXRfZW5naW5lKGVuZ2luZSk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9F UlJPUigiR3VDIGZhaWxlZCB0byByZXNldCAlcywgcmV0PSVkXG4iLAorCQkJCSAgZW5naW5lLT5u YW1lLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAlpOTE1X2dlbV9yZXNldF9maW5p c2hfZW5naW5lKGVuZ2luZSk7CkBAIC0xOTU4LDYgKzE5NjgsMTAgQEAgaW50IGk5MTVfcmVzZXRf ZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIAlpZiAocmV0KQogCQlnb3Rv IG91dDsKIAorCS8qIGZvciBndWMgdG9vICovCisJaWYgKGRldl9wcml2LT5ndWMuZXhlY2J1Zl9j bGllbnQpCisJCWk5MTVfZ3VjX3N1Ym1pc3Npb25fcmVlbmFibGVfZW5naW5lKGVuZ2luZSk7CisK IAllcnJvci0+cmVzZXRfZW5naW5lX2NvdW50W2VuZ2luZS0+aWRdKys7CiBvdXQ6CiAJcmV0dXJu IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGU2NTdkNTYxMjBkNy4uOTg2OWFjYWNi NTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTMxMDUsNiArMzEwNSw3IEBAIGV4dGVy biB2b2lkIGk5MTVfcmVzZXQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIGV4 dGVybiBpbnQgaTkxNV9yZXNldF9lbmdpbmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KTsKIGV4dGVybiBib29sIGludGVsX2hhc19yZXNldF9lbmdpbmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsKIGV4dGVybiBpbnQgaW50ZWxfcmVzZXRfZ3VjKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gaW50IGk5MTVfZ3VjX3Jlc2V0X2VuZ2lu ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogZXh0ZXJuIHZvaWQgaW50ZWxfZW5n aW5lX2luaXRfaGFuZ2NoZWNrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiBleHRl cm4gdm9pZCBpbnRlbF9oYW5nY2hlY2tfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaTkxNV9jaGlwc2V0X3ZhbChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNf c3VibWlzc2lvbi5jCmluZGV4IDJiYjE4ZDI0ZWQ0Mi4uNzgyZWYwOWI5MGY1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCkBAIC0xMzYyLDYgKzEzNjIsMjUg QEAgdm9pZCBpOTE1X2d1Y19zdWJtaXNzaW9uX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQogCWd1Yy0+ZXhlY2J1Zl9jbGllbnQgPSBOVUxMOwogfQogCit2b2lkIGk5 MTVfZ3VjX3N1Ym1pc3Npb25fcmVlbmFibGVfZW5naW5lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBlbmdpbmUt Pmk5MTU7CisJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7CisJc3RydWN0 IGk5MTVfZ3VjX2NsaWVudCAqY2xpZW50ID0gZ3VjLT5leGVjYnVmX2NsaWVudDsKKwljb25zdCBp bnQgd3FpX3NpemUgPSBzaXplb2Yoc3RydWN0IGd1Y193cV9pdGVtKTsKKwlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3JlcXVlc3QgKnJxOworCisJR0VNX0JVR19PTighY2xpZW50KTsKKwlpbnRlbF9ndWNf c2FtcGxlX2ZvcmNld2FrZShndWMpOworCisJc3Bpbl9sb2NrX2lycSgmZW5naW5lLT50aW1lbGlu ZS0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShycSwgJmVuZ2luZS0+dGltZWxpbmUtPnJl cXVlc3RzLCBsaW5rKSB7CisJCWd1Y19jbGllbnRfdXBkYXRlX3dxX3JzdmQoY2xpZW50LCB3cWlf c2l6ZSk7CisJCV9faTkxNV9ndWNfc3VibWl0KHJxKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZl bmdpbmUtPnRpbWVsaW5lLT5sb2NrKTsKK30KKwogLyoqCiAgKiBpbnRlbF9ndWNfc3VzcGVuZCgp IC0gbm90aWZ5IEd1QyBlbnRlcmluZyBzdXNwZW5kIHN0YXRlCiAgKiBAZGV2X3ByaXY6CWk5MTUg ZGV2aWNlIHByaXZhdGUKQEAgLTE0MTMsMyArMTQzMiwzMiBAQCBpbnQgaW50ZWxfZ3VjX3Jlc3Vt ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAlyZXR1cm4gaW50ZWxfZ3Vj X3NlbmQoZ3VjLCBkYXRhLCBBUlJBWV9TSVpFKGRhdGEpKTsKIH0KKworaW50IGk5MTVfZ3VjX3Jl c2V0X2VuZ2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZW5naW5lLT5pOTE1OworCXN0cnVjdCBpbnRlbF9n dWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7 CisJdTMyIGRhdGFbN107CisKKwlpZiAoIWk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uKQorCQly ZXR1cm4gMDsKKworCWN0eCA9IGRldl9wcml2LT5rZXJuZWxfY29udGV4dDsKKworCS8qCisJICog VGhlIGFmZmVjdGVkIGNvbnRleHQgcmVwb3J0IGlzIHBvcHVsYXRlZCBieSBHdUMgYW5kIGlzIHBy b3ZpZGVkCisJICogdG8gdGhlIGRyaXZlciB1c2luZyB0aGUgc2hhcmVkIHBhZ2UuIFdlIHJlcXVl c3QgZm9yIGl0IGJ1dCBkb24ndAorCSAqIHVzZSBpdCBhcyBzY2hlZHVsZXIgaGFzIGFsbCBvZiB0 aGVzZSBkZXRhaWxzLgorCSAqLworCWRhdGFbMF0gPSBJTlRFTF9HVUNfQUNUSU9OX1JFUVVFU1Rf RU5HSU5FX1JFU0VUOworCWRhdGFbMV0gPSBlbmdpbmUtPmd1Y19pZDsKKwlkYXRhWzJdID0gSU5U RUxfR1VDX1JFU0VUX09QVElPTl9SRVBPUlRfQUZGRUNURURfQ09OVEVYVFM7CisJZGF0YVszXSA9 IDA7CisJZGF0YVs0XSA9IDA7CisJZGF0YVs1XSA9IGd1Yy0+ZXhlY2J1Zl9jbGllbnQtPnN0YWdl X2lkOworCS8qIGZpcnN0IHBhZ2UgaXMgc2hhcmVkIGRhdGEgd2l0aCBHdUMgKi8KKwlkYXRhWzZd ID0gZ3VjX2dndHRfb2Zmc2V0KGN0eC0+ZW5naW5lW1JDU10uc3RhdGUpOworCisJcmV0dXJuIGlu dGVsX2d1Y19zZW5kKGd1YywgZGF0YSwgQVJSQVlfU0laRShkYXRhKSk7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAppbmRleCA2Y2JmN2M5N2QxODYuLjAyMjcwNGE4MzViMyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2Z3aWYuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfZndpZi5oCkBAIC01NDYsNiArNTQ2LDcgQEAg dW5pb24gZ3VjX2xvZ19jb250cm9sIHsKIC8qIFRoaXMgQWN0aW9uIHdpbGwgYmUgcHJvZ3JhbW1l ZCBpbiBDMTgwIC0gU09GVF9TQ1JBVENIX09fUkVHICovCiBlbnVtIGludGVsX2d1Y19hY3Rpb24g ewogCUlOVEVMX0dVQ19BQ1RJT05fREVGQVVMVCA9IDB4MCwKKwlJTlRFTF9HVUNfQUNUSU9OX1JF UVVFU1RfRU5HSU5FX1JFU0VUID0gMHgzLAogCUlOVEVMX0dVQ19BQ1RJT05fU0FNUExFX0ZPUkNF V0FLRSA9IDB4NiwKIAlJTlRFTF9HVUNfQUNUSU9OX0FMTE9DQVRFX0RPT1JCRUxMID0gMHgxMCwK IAlJTlRFTF9HVUNfQUNUSU9OX0RFQUxMT0NBVEVfRE9PUkJFTEwgPSAweDIwLApAQCAtNTYxLDYg KzU2MiwxMSBAQCBlbnVtIGludGVsX2d1Y19hY3Rpb24gewogCUlOVEVMX0dVQ19BQ1RJT05fTElN SVQKIH07CiAKKy8qIFJlc2V0IGVuZ2luZSBvcHRpb25zICovCitlbnVtIGFjdGlvbl9lbmdpbmVf cmVzZXRfb3B0aW9ucyB7CisJSU5URUxfR1VDX1JFU0VUX09QVElPTl9SRVBPUlRfQUZGRUNURURf Q09OVEVYVFMgPSAweDEwLAorfTsKKwogLyoKICAqIFRoZSBHdUMgc2VuZHMgaXRzIHJlc3BvbnNl IHRvIGEgY29tbWFuZCBieSBvdmVyd3JpdGluZyB0aGUKICAqIGNvbW1hbmQgaW4gU1MwLiBUaGUg cmVzcG9uc2UgaXMgZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSBjb21tYW5kCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Yy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdWMuaAppbmRleCA2OWRhZjRjMDFjZDAuLmZmNmQxOWI3NjZlMCAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF91Yy5oCkBAIC0yNTAsNiArMjUwLDcgQEAgaW50IGk5MTVfZ3VjX3dxX3Jlc2VydmUoc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSk7CiB2b2lkIGk5MTVfZ3VjX3dxX3VucmVzZXJ2 ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpOwogdm9pZCBpOTE1X2d1Y19z dWJtaXNzaW9uX2Rpc2FibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZv aWQgaTkxNV9ndWNfc3VibWlzc2lvbl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdik7Cit2b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fcmVlbmFibGVfZW5naW5lKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiBzdHJ1Y3QgaTkxNV92bWEgKmludGVsX2d1Y19hbGxv Y2F0ZV92bWEoc3RydWN0IGludGVsX2d1YyAqZ3VjLCB1MzIgc2l6ZSk7CiAKIC8qIGludGVsX2d1 Y19sb2cuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3Jl LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNvcmUuYwppbmRleCA3MTNhODhjZWJm NTcuLjJjNzNhMGM3MDI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dW5jb3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMKQEAgLTE3 MjMsMTQgKzE3MjMsOSBAQCBib29sIGludGVsX2hhc19ncHVfcmVzZXQoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybiBpbnRlbF9nZXRfZ3B1X3Jlc2V0KGRldl9wcml2 KSAhPSBOVUxMOwogfQogCi0vKgotICogV2hlbiBHdUMgc3VibWlzc2lvbiBpcyBlbmFibGVkLCBH dUMgbWFuYWdlcyBFTFNQIGFuZCBjYW4gaW5pdGlhdGUgdGhlCi0gKiBlbmdpbmUgcmVzZXQgdG9v LiBGb3Igbm93LCBmYWxsIGJhY2sgdG8gZnVsbCBHUFUgcmVzZXQgaWYgaXQgaXMgZW5hYmxlZC4K LSAqLwogYm9vbCBpbnRlbF9oYXNfcmVzZXRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikKIHsKIAlyZXR1cm4gKGRldl9wcml2LT5pbmZvLmhhc19yZXNldF9lbmdpbmUg JiYKLQkJIWRldl9wcml2LT5ndWMuZXhlY2J1Zl9jbGllbnQgJiYKIAkJaTkxNS5yZXNldCA+PSAy KTsKIH0KIAotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZngK