From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH v3 3/3] drm/i915: Only grab correct forcewake for the engine with execlists Date: Thu, 7 Apr 2016 16:56:00 +0100 Message-ID: <1460044560-30582-1-git-send-email-tvrtko.ursulin@linux.intel.com> References: <20160407153342.GK18061@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 48AF26E0BA for ; Thu, 7 Apr 2016 15:56:19 +0000 (UTC) In-Reply-To: <20160407153342.GK18061@nuc-i3427.alporthouse.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 RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClJhdGhlciB0 aGFuIGJsaW5kbHkgd2FraW5nIHVwIGFsbCBmb3JjZXdha2UgZG9tYWlucyBvbiBjb21tYW5kCnN1 Ym1pc3Npb24sIHdlIGNhbiB0ZWFjaCBlYWNoIGVuZ2luZSB3aGF0IGlzIChvciBhcmUpIHRoZSBj b3JyZWN0Cm9uZSB0byB0YWtlLgoKT24gcGxhdGZvcm1zIHdpdGggbXVsdGlwbGUgZm9yY2V3YWtl IGRvbWFpbnMgbGlrZSBWTFYsIENIViwgU0tMCmFuZCBCWFQsIHRoaXMgaGFzIHRoZSBwb3RlbnRp YWwgb2YgbG93ZXJpbmcgdGhlIEdQVSBhbmQgQ1BVCnBvd2VyIHVzZSBhbmQgc3VibWlzc2lvbiBs YXRlbmN5LgoKVG8gaW1wbGVtZW50IGl0IHdlIGFkZCBhIGZ1bmN0aW9uIG5hbWVkCmludGVsX3Vu Y29yZV9mb3JjZXdha2VfZm9yX3JlZyB3aG9zZSBwdXJwb3NlIGlzIHRvIHF1ZXJ5IHdoaWNoCmZv cmNld2FrZSBkb21haW5zIG5lZWQgdG8gYmUgdGFrZW4gdG8gcmVhZCBvciB3cml0ZSBhIHNwZWNp ZmljCnJlZ2lzdGVyIHdpdGggcmF3IG1taW8gYWNjZXNzb3JzLgoKVGhlc2UgZW5hYmxlcyB0aGUg ZXhlY2xpc3RzIGVuZ2luZSBzZXR1cCAgdG8gcXVlcnkgd2hpY2gKZm9yY2V3YWtlIGRvbWFpbnMg YXJlIHJlbGV2YW50IHBlciBlbmdpbmUgb24gdGhlIGN1cnJlbnRseQpydW5uaW5nIHBsYXRmb3Jt LgoKdjI6CiAgKiBLZXJuZWxkb2MuCiAgKiBTcGxpdCBmcm9tIGludGVsX3VuY29yZS5jIG1hY3Jv IGV4dHJhY3Rpb24sIFdBUk5fT04sCiAgICBubyB3YXJucyBvbiBvbGQgcGxhdGZvcm1zLiAoQ2hy aXMgV2lsc29uKQoKdjM6CiAgKiBTaW5nbGUgZG9tYWluIHBlciBlbmdpbmUsIG1lbnRpb24gYWxs IHJlZ2lzdGVycywKICAgIGJpLWRpcmVjdGlvbmFsIGZ1bmN0aW9uIGFuZCBhIG5ldyBuYW1lLCBm aXggaGFuZGxpbmcKICAgIG9mIGdlbjYgYW5kIGdlbjcgd3JpdGVzLiAoQ2hyaXMgV2lsc29uKQoK U2lnbmVkLW9mZi1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4K Q2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAgNyArKysKIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2xyYy5jICAgICAgICB8ICAyNyArKysrKystLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmggICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuaCB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91bmNv cmUuYyAgICAgfCAxMDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMg Y2hhbmdlZCwgMTM5IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZHJ2LmgKaW5kZXggNGViZDNmZjAyODAzLi5hM2YyZmIyMDE3NTggMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaApAQCAtNjMzLDYgKzYzMywxMyBAQCBlbnVtIGZvcmNld2FrZV9kb21haW5zIHsK IAkJCSBGT1JDRVdBS0VfTUVESUEpCiB9OwogCisjZGVmaW5lIEZXX1JFR19SRUFEICAoMSkKKyNk ZWZpbmUgRldfUkVHX1dSSVRFICgyKQorCitlbnVtIGZvcmNld2FrZV9kb21haW5zCitpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 LAorCQkJICAgICAgIGk5MTVfcmVnX3QgcmVnLCB1bnNpZ25lZCBpbnQgb3ApOworCiBzdHJ1Y3Qg aW50ZWxfdW5jb3JlX2Z1bmNzIHsKIAl2b2lkICgqZm9yY2Vfd2FrZV9nZXQpKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkJCQllbnVtIGZvcmNld2FrZV9kb21haW5zIGRv bWFpbnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwppbmRleCBhMWRiNmEwMmNmMjMuLjMxNDQ1 YWEzNDI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKQEAgLTQxOCw2ICs0MTgsNyBAQCBz dGF0aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0X3JlcXVlc3RzKHN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcnEwLAogCQkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEx KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHJxMC0+aTkxNTsKKwl1 bnNpZ25lZCBpbnQgZndfZG9tYWlucyA9IHJxMC0+ZW5naW5lLT5md19kb21haW5zOwogCiAJZXhl Y2xpc3RzX3VwZGF0ZV9jb250ZXh0KHJxMCk7CiAKQEAgLTQyNSwxMSArNDI2LDExIEBAIHN0YXRp YyB2b2lkIGV4ZWNsaXN0c19zdWJtaXRfcmVxdWVzdHMoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1 ZXN0ICpycTAsCiAJCWV4ZWNsaXN0c191cGRhdGVfY29udGV4dChycTEpOwogCiAJc3Bpbl9sb2Nr X2lycSgmZGV2X3ByaXYtPnVuY29yZS5sb2NrKTsKLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dl dF9fbG9ja2VkKGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX2dldF9fbG9ja2VkKGRldl9wcml2LCBmd19kb21haW5zKTsKIAogCWV4ZWNsaXN0c19lbHNw X3dyaXRlKHJxMCwgcnExKTsKIAotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0X19sb2NrZWQo ZGV2X3ByaXYsIEZPUkNFV0FLRV9BTEwpOworCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0X19s b2NrZWQoZGV2X3ByaXYsIGZ3X2RvbWFpbnMpOwogCXNwaW5fdW5sb2NrX2lycSgmZGV2X3ByaXYt PnVuY29yZS5sb2NrKTsKIH0KIApAQCAtNTUyLDcgKzU1Myw3IEBAIHN0YXRpYyB2b2lkIGludGVs X2xyY19pcnFfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiAJdW5zaWduZWQgaW50IGNzYl9y ZWFkID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgc3VibWl0X2NvbnRleHRzID0gMDsKIAotCWludGVs X3VuY29yZV9mb3JjZXdha2VfZ2V0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKKwlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX2dldChkZXZfcHJpdiwgZW5naW5lLT5md19kb21haW5zKTsKIAogCXN0 YXR1c19wb2ludGVyID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2lu ZSkpOwogCkBAIC01NzcsNyArNTc4LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfbHJjX2lycV9oYW5k bGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIAkJICAgICAgX01BU0tFRF9GSUVMRChHRU44X0NTQl9S RUFEX1BUUl9NQVNLLAogCQkJCSAgICBlbmdpbmUtPm5leHRfY29udGV4dF9zdGF0dXNfYnVmZmVy IDw8IDgpKTsKIAotCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdB S0VfQUxMKTsKKwlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgZW5naW5lLT5m d19kb21haW5zKTsKIAogCXNwaW5fbG9jaygmZW5naW5lLT5leGVjbGlzdF9sb2NrKTsKIApAQCAt MjA3Nyw3ICsyMDc4LDkgQEAgbG9naWNhbF9yaW5nX2RlZmF1bHRfaXJxcyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsIHVuc2lnbmVkIHNoaWZ0KQogc3RhdGljIGludAogbG9naWNhbF9y aW5nX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQogewotCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpkY3R4ID0gdG9faTkxNShkZXYpLT5r ZXJuZWxfY29udGV4dDsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGRldik7CisJc3RydWN0IGludGVsX2NvbnRleHQgKmRjdHggPSBkZXZfcHJpdi0+a2VybmVs X2NvbnRleHQ7CisJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zOwogCWludCByZXQ7 CiAKIAkvKiBJbnRlbnRpb25hbGx5IGxlZnQgYmxhbmsuICovCkBAIC0yMDk5LDYgKzIxMDIsMjAg QEAgbG9naWNhbF9yaW5nX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQogCiAJbG9naWNhbF9yaW5nX2luaXRfcGxhdGZvcm1faW52YXJp YW50cyhlbmdpbmUpOwogCisJZndfZG9tYWlucyA9IGludGVsX3VuY29yZV9mb3JjZXdha2VfZm9y X3JlZyhkZXZfcHJpdiwKKwkJCQkJCSAgICBSSU5HX0VMU1AoZW5naW5lKSwKKwkJCQkJCSAgICBG V19SRUdfV1JJVEUpOworCisJZndfZG9tYWlucyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zv cl9yZWcoZGV2X3ByaXYsCisJCQkJCQkgICAgIFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKGVuZ2lu ZSksCisJCQkJCQkgICAgIEZXX1JFR19SRUFEIHwgRldfUkVHX1dSSVRFKTsKKworCWZ3X2RvbWFp bnMgfD0gaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9mb3JfcmVnKGRldl9wcml2LAorCQkJCQkJICAg ICBSSU5HX0NPTlRFWFRfU1RBVFVTX0JVRl9CQVNFKGVuZ2luZSksCisJCQkJCQkgICAgIEZXX1JF R19SRUFEKTsKKworCWVuZ2luZS0+ZndfZG9tYWlucyA9IGZ3X2RvbWFpbnM7CisKIAlyZXQgPSBp OTE1X2NtZF9wYXJzZXJfaW5pdF9yaW5nKGVuZ2luZSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJv cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmgKaW5kZXggMGIwODUzZWVlOTFlLi44ZGUxZWE1MzZh ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5l CSAgQ1RYX0NUUkxfSU5ISUJJVF9TWU5fQ1RYX1NXSVRDSAkoMSA8PCAzKQogI2RlZmluZQkgIENU WF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUCSgxIDw8IDApCiAjZGVmaW5lICAgQ1RY X0NUUkxfUlNfQ1RYX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSSU5H X0NPTlRFWFRfU1RBVFVTX0JVRl9CQVNFKHJpbmcpCV9NTUlPKChyaW5nKS0+bW1pb19iYXNlICsg MHgzNzApCiAjZGVmaW5lIFJJTkdfQ09OVEVYVF9TVEFUVVNfQlVGX0xPKHJpbmcsIGkpCV9NTUlP KChyaW5nKS0+bW1pb19iYXNlICsgMHgzNzAgKyAoaSkgKiA4KQogI2RlZmluZSBSSU5HX0NPTlRF WFRfU1RBVFVTX0JVRl9ISShyaW5nLCBpKQlfTU1JTygocmluZyktPm1taW9fYmFzZSArIDB4Mzcw ICsgKGkpICogOCArIDQpCiAjZGVmaW5lIFJJTkdfQ09OVEVYVF9TVEFUVVNfUFRSKHJpbmcpCQlf TU1JTygocmluZyktPm1taW9fYmFzZSArIDB4M2EwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf cmluZ2J1ZmZlci5oCmluZGV4IDE4MDc0YWI1NWY2MS4uM2ExMTcwNTIyMmZjIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC0yNzAsNiArMjcwLDcgQEAgc3RydWN0 ICBpbnRlbF9lbmdpbmVfY3MgewogCXNwaW5sb2NrX3QgZXhlY2xpc3RfbG9jazsgLyogdXNlZCBp bnNpZGUgdGFza2xldCwgdXNlIHNwaW5fbG9ja19iaCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZXhl Y2xpc3RfcXVldWU7CiAJc3RydWN0IGxpc3RfaGVhZCBleGVjbGlzdF9yZXRpcmVkX3JlcV9saXN0 OworCXVuc2lnbmVkIGludCBmd19kb21haW5zOwogCXVuc2lnbmVkIGludCBuZXh0X2NvbnRleHRf c3RhdHVzX2J1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgaWRsZV9saXRlX3Jlc3RvcmVfd2E7CiAJYm9v bCBkaXNhYmxlX2xpdGVfcmVzdG9yZV93YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX3VuY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdW5jb3JlLmMK aW5kZXggYjc3YmRmNGE0N2Y2Li5hNDY1MzY4ZjVlZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX3VuY29yZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3VuY29yZS5jCkBAIC0xNzY2LDMgKzE3NjYsMTExIEBAIGludGVsX3VuY29yZV9hcm1fdW5jbGFp bWVkX21taW9fZGV0ZWN0aW9uKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAog CXJldHVybiBmYWxzZTsKIH0KKworc3RhdGljIGVudW0gZm9yY2V3YWtlX2RvbWFpbnMKK2ludGVs X3VuY29yZV9mb3JjZXdha2VfZm9yX3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2LAorCQkJCWk5MTVfcmVnX3QgcmVnKQoreworCWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgZndf ZG9tYWluczsKKworCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShkZXZfcHJpdi0+ZGV2KSkKKwkJcmV0 dXJuIDA7CisKKwlzd2l0Y2ggKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4pIHsKKwljYXNlIDk6 CisJCWZ3X2RvbWFpbnMgPSBfX2dlbjlfcmVnX3JlYWRfZndfZG9tYWlucyhpOTE1X21taW9fcmVn X29mZnNldChyZWcpKTsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQlpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpCisJCQlmd19kb21haW5zID0gX19jaHZfcmVnX3JlYWRfZndfZG9tYWlucyhpOTE1 X21taW9fcmVnX29mZnNldChyZWcpKTsKKwkJZWxzZQorCQkJZndfZG9tYWlucyA9IF9fZ2VuNl9y ZWdfcmVhZF9md19kb21haW5zKGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykpOworCQlicmVhazsK KwljYXNlIDc6CisJY2FzZSA2OgorCQlpZiAoSVNfVkFMTEVZVklFVyhkZXZfcHJpdikpCisJCQlm d19kb21haW5zID0gX192bHZfcmVnX3JlYWRfZndfZG9tYWlucyhpOTE1X21taW9fcmVnX29mZnNl dChyZWcpKTsKKwkJZWxzZQorCQkJZndfZG9tYWlucyA9IF9fZ2VuNl9yZWdfcmVhZF9md19kb21h aW5zKGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlN SVNTSU5HX0NBU0UoSU5URUxfSU5GTyhkZXZfcHJpdiktPmdlbik7CisJY2FzZSA1OiAvKiBmb3Jj ZXdha2Ugd2FzIGludHJvZHVjZWQgd2l0aCBnZW42ICovCisJY2FzZSA0OgorCWNhc2UgMzoKKwlj YXNlIDI6CisJCXJldHVybiAwOworCX0KKworCVdBUk5fT04oZndfZG9tYWlucyAmIH5kZXZfcHJp di0+dW5jb3JlLmZ3X2RvbWFpbnMpOworCisJcmV0dXJuIGZ3X2RvbWFpbnM7Cit9CisKK3N0YXRp YyBlbnVtIGZvcmNld2FrZV9kb21haW5zCitpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl93cml0 ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCisJCQkJIGk5MTVfcmVnX3QgcmVn KQoreworCWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgZndfZG9tYWluczsKKworCWlmIChpbnRlbF92 Z3B1X2FjdGl2ZShkZXZfcHJpdi0+ZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKElOVEVM X0lORk8oZGV2X3ByaXYpLT5nZW4pIHsKKwljYXNlIDk6CisJCWZ3X2RvbWFpbnMgPSBfX2dlbjlf cmVnX3dyaXRlX2Z3X2RvbWFpbnMoaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKSk7CisJCWJyZWFr OworCWNhc2UgODoKKwkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYpKQorCQkJZndfZG9tYWlu cyA9IF9fY2h2X3JlZ193cml0ZV9md19kb21haW5zKGk5MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykp OworCQllbHNlCisJCQlmd19kb21haW5zID0gX19nZW44X3JlZ193cml0ZV9md19kb21haW5zKGk5 MTVfbW1pb19yZWdfb2Zmc2V0KHJlZykpOworCQlicmVhazsKKwljYXNlIDc6CisJY2FzZSA2Ogor CQlmd19kb21haW5zID0gRk9SQ0VXQUtFX1JFTkRFUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ TUlTU0lOR19DQVNFKElOVEVMX0lORk8oZGV2X3ByaXYpLT5nZW4pOworCWNhc2UgNToKKwljYXNl IDQ6CisJY2FzZSAzOgorCWNhc2UgMjoKKwkJcmV0dXJuIDA7CisJfQorCisJV0FSTl9PTihmd19k b21haW5zICYgfmRldl9wcml2LT51bmNvcmUuZndfZG9tYWlucyk7CisKKwlyZXR1cm4gZndfZG9t YWluczsKK30KKworLyoqCisgKiBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcgLSB3aGlj aCBmb3JjZXdha2UgZG9tYWlucyBhcmUgbmVlZGVkIHRvIGFjY2VzcworICogCQkJCSAgICBhIHJl Z2lzdGVyCisgKiBAZGV2X3ByaXY6IHBvaW50ZXIgdG8gc3RydWN0IGRybV9pOTE1X3ByaXZhdGUK KyAqIEByZWc6IHJlZ2lzdGVyIGluIHF1ZXN0aW9uCisgKiBAb3A6IG9wZXJhdGlvbiBiaXRtYXNr IG9mIEZXX1JFR19SRUFEIGFuZC9vciBGV19SRUdfV1JJVEUKKyAqCisgKiBSZXR1cm5zIGEgc2V0 IG9mIGZvcmNld2FrZSBkb21haW5zIHJlcXVpcmVkIHRvIGJlIHRha2VuIHdpdGggZm9yIGV4YW1w bGUKKyAqIGludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0IGZvciB0aGUgc3BlY2lmaWVkIHJlZ2lz dGVyIHRvIGJlIGFjY2Vzc2libGUgaW4gdGhlCisgKiBzcGVjaWZpZWQgbW9kZSAocmVhZCwgd3Jp dGUgb3IgcmVhZC93cml0ZSkgd2l0aCByYXcgbW1pbyBhY2Nlc3NvcnMuCisgKgorICogTk9URTog T24gR2VuNiBhbmQgR2VuNyB3cml0ZSBmb3JjZXdha2UgZG9tYWluIChGT1JDRVdBS0VfUkVOREVS KSByZXF1aXJlcyB0aGUKKyAqIGNhbGxlcnMgdG8gZG8gRklGTyBtYW5hZ2VtZW50IG9uIHRoZWly IG93biBvciByaXNrIGxvc2luZyB3cml0ZXMuCisgKi8KK2VudW0gZm9yY2V3YWtlX2RvbWFpbnMK K2ludGVsX3VuY29yZV9mb3JjZXdha2VfZm9yX3JlZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQkgICAgICAgaTkxNV9yZWdfdCByZWcsIHVuc2lnbmVkIGludCBvcCkKK3sK KwllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnMgPSAwOworCisJV0FSTl9PTighb3Ap OworCisJaWYgKG9wICYgRldfUkVHX1JFQUQpCisJCWZ3X2RvbWFpbnMgPSBpbnRlbF91bmNvcmVf Zm9yY2V3YWtlX2Zvcl9yZWFkKGRldl9wcml2LCByZWcpOworCisJaWYgKG9wICYgRldfUkVHX1dS SVRFKQorCQlmd19kb21haW5zIHw9IGludGVsX3VuY29yZV9mb3JjZXdha2VfZm9yX3dyaXRlKGRl dl9wcml2LCByZWcpOworCisJcmV0dXJuIGZ3X2RvbWFpbnM7Cit9Ci0tIAoxLjkuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxp bmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==