From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Subject: [PATCH v3 3/4] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Tue, 8 Jan 2019 15:50:55 +0100 Message-ID: <20190108145056.2276-4-paul.kocialkowski@bootlin.com> References: <20190108145056.2276-1-paul.kocialkowski@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail.bootlin.com (mail.bootlin.com [62.4.15.54]) by gabe.freedesktop.org (Postfix) with ESMTP id 3876C6EB33 for ; Tue, 8 Jan 2019 14:51:17 +0000 (UTC) In-Reply-To: <20190108145056.2276-1-paul.kocialkowski@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: Maxime Ripard , Thomas Petazzoni , Eben Upton , David Airlie , Boris Brezillon List-Id: dri-devel@lists.freedesktop.org RnJvbTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+CgpUaGUg SFZTIGJsb2NrIGlzIHN1cHBvc2VkIHRvIGZpbGwgdGhlIHBpeGVsdmFsdmUgRklGT3MgZmFzdCBl bm91Z2ggdG8KbWVldCB0aGUgcmVxdWVzdGVkIGZyYW1lcmF0ZS4gVGhlIHByb2JsZW0gaXMsIHRo ZSBIVlMgYW5kIG1lbW9yeSBidXMKYmFuZHdpZHRocyBhcmUgbGltaXRlZCwgYW5kIGlmIHdlIGRv bid0IHRha2UgdGhlc2UgbGltaXRhdGlvbnMgaW50bwphY2NvdW50IHdlIG1pZ2h0IGVuZCB1cCB3 aXRoIEhWUyB1bmRlcmZsb3cgZXJyb3JzLgoKVGhpcyBwYXRjaCBpcyB0cnlpbmcgdG8gbW9kZWwg dGhlIHBlci1wbGFuZSBIVlMgYW5kIG1lbW9yeSBidXMgYmFuZHdpZHRoCmNvbnN1bXB0aW9uIGFu ZCB0YWtlIGEgZGVjaXNpb24gYXQgYXRvbWljX2NoZWNrKCkgdGltZSB3aGV0aGVyIHRoZQplc3Rp bWF0ZWQgbG9hZCB3aWxsIGZpdCBpbiB0aGUgSFZTIGFuZCBtZW1idXMgYnVkZ2V0LgoKTm90ZSB0 aGF0IHdlIHRha2UgYW4gZXh0cmEgbWFyZ2luIG9uIHRoZSBtZW1vcnkgYnVzIGNvbnN1bXB0aW9u IHRvIGxldAp0aGUgc3lzdGVtIHJ1biBzbW9vdGhseSB3aGVuIG90aGVyIGJsb2NrcyBhcmUgZG9p bmcgaGVhdnkgdXNlIG9mIHRoZQptZW1vcnkgYnVzLiBTYW1lIGdvZXMgZm9yIHRoZSBIVlMgbGlt aXQsIGV4Y2VwdCB0aGUgbWFyZ2luIGlzIHNtYWxsZXIgaW4KdGhpcyBjYXNlLCBzaW5jZSB0aGUg SFZTIGlzIG5vdCB1c2VkIGJ5IGV4dGVybmFsIGNvbXBvbmVudHMuCgpTaWduZWQtb2ZmLWJ5OiBC b3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4KLS0tCkNoYW5nZXMg aW4gdjM6Ci0gVXNlIGFuIHUzMiBpbnN0ZWFkIG9mIGFuIHVuc2lnbmVkIGxvbmcgdG8gc3RvcmUv Y2FsY3VsYXRlIHRoZSBsb2FkCi0gRml4IGEgdHlwbyBpbiBhIGNvbW1lbnQKLSBGaXggSFZTIGxv YWQgY2FsY3VsYXRpb24gKHVzZSBjcnRjX2gvdyBpbnN0ZWFkIG9mIHNyY19oL3cpCgpDaGFuZ2Vz IGluIHYyOgotIFJlbW92ZSBhbiB1bnVzZWQgdmFyIGluIHZjNF9sb2FkX3RyYWNrZXJfYXRvbWlj X2NoZWNrKCkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyAgIHwgICAxICsKIGRy aXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oICAgfCAgMTEgKysrKwogZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfa21zLmMgICB8IDEwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQog ZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYyB8ICA1NyArKysrKysrKysrKysrKysrKysK IDQgZmlsZXMgY2hhbmdlZCwgMTcxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2Rydi5jCmluZGV4IGY2ZjVjZDgwYzA0ZC4uNzE5NWEwYmNjZWIzIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kcnYuYwpAQCAtMzEzLDYgKzMxMyw3IEBAIHN0YXRpYyB2b2lkIHZjNF9kcm1fdW5iaW5k KHN0cnVjdCBkZXZpY2UgKmRldikKIAogCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CiAK Kwlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2ZpbmkoJnZjNC0+bG9hZF90cmFja2VyKTsKIAlkcm1f YXRvbWljX3ByaXZhdGVfb2JqX2ZpbmkoJnZjNC0+Y3RtX21hbmFnZXIpOwogCiAJZHJtX2Rldl9w dXQoZHJtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oIGIvZHJp dmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmgKaW5kZXggNjE5ZmI4YmVjNDI4Li4zMGNkZTU4YmU3 MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCkBAIC0yMDcsNiArMjA3LDcgQEAgc3RydWN0IHZjNF9k ZXYgewogCiAJc3RydWN0IGRybV9tb2Rlc2V0X2xvY2sgY3RtX3N0YXRlX2xvY2s7CiAJc3RydWN0 IGRybV9wcml2YXRlX29iaiBjdG1fbWFuYWdlcjsKKwlzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqIGxv YWRfdHJhY2tlcjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZjNF9kZXYgKgpAQCAtMzgy LDYgKzM4MywxNiBAQCBzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlIHsKIAkgKiB3aGVuIGFzeW5jIHVw ZGF0ZSBpcyBub3QgcG9zc2libGUuCiAJICovCiAJYm9vbCBkbGlzdF9pbml0aWFsaXplZDsKKwor CS8qIExvYWQgb2YgdGhpcyBwbGFuZSBvbiB0aGUgSFZTIGJsb2NrLiBUaGUgbG9hZCBpcyBleHBy ZXNzZWQgaW4gSFZTCisJICogY3ljbGVzL3NlYy4KKwkgKi8KKwl1NjQgaHZzX2xvYWQ7CisKKwkv KiBNZW1vcnkgYmFuZHdpZHRoIG5lZWRlZCBmb3IgdGhpcyBwbGFuZS4gVGhpcyBpcyBleHByZXNz ZWQgaW4KKwkgKiBieXRlcy9zZWMuCisJICovCisJdTY0IG1lbWJ1c19sb2FkOwogfTsKIAogc3Rh dGljIGlubGluZSBzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS92YzQvdmM0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfa21zLmMKaW5k ZXggYTI4ZTgwMWFlYWUyLi42OTVlYzc5M2Q0MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS92YzQvdmM0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCkBAIC0z NCw2ICszNCwxOCBAQCBzdGF0aWMgc3RydWN0IHZjNF9jdG1fc3RhdGUgKnRvX3ZjNF9jdG1fc3Rh dGUoc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICpwcml2KQogCXJldHVybiBjb250YWluZXJfb2Yo cHJpdiwgc3RydWN0IHZjNF9jdG1fc3RhdGUsIGJhc2UpOwogfQogCitzdHJ1Y3QgdmM0X2xvYWRf dHJhY2tlcl9zdGF0ZSB7CisJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlIGJhc2U7CisJdTY0IGh2 c19sb2FkOworCXU2NCBtZW1idXNfbG9hZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmM0X2xvYWRf dHJhY2tlcl9zdGF0ZSAqCit0b192YzRfbG9hZF90cmFja2VyX3N0YXRlKHN0cnVjdCBkcm1fcHJp dmF0ZV9zdGF0ZSAqcHJpdikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCB2 YzRfbG9hZF90cmFja2VyX3N0YXRlLCBiYXNlKTsKK30KKwogc3RhdGljIHN0cnVjdCB2YzRfY3Rt X3N0YXRlICp2YzRfZ2V0X2N0bV9zdGF0ZShzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUs CiAJCQkJCSAgICAgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICptYW5hZ2VyKQogewpAQCAtMzkx LDYgKzQwMyw4MSBAQCB2YzRfY3RtX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRp YyBpbnQgdmM0X2xvYWRfdHJhY2tlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZSwg Km5ld19wbGFuZV9zdGF0ZTsKKwlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihzdGF0 ZS0+ZGV2KTsKKwlzdHJ1Y3QgdmM0X2xvYWRfdHJhY2tlcl9zdGF0ZSAqbG9hZF9zdGF0ZTsKKwlz dHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnByaXZfc3RhdGU7CisJc3RydWN0IGRybV9wbGFuZSAq cGxhbmU7CisJaW50IGk7CisKKwlwcml2X3N0YXRlID0gZHJtX2F0b21pY19nZXRfcHJpdmF0ZV9v Ympfc3RhdGUoc3RhdGUsCisJCQkJCQkgICAgICAmdmM0LT5sb2FkX3RyYWNrZXIpOworCWlmIChJ U19FUlIocHJpdl9zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJSKHByaXZfc3RhdGUpOworCisJbG9h ZF9zdGF0ZSA9IHRvX3ZjNF9sb2FkX3RyYWNrZXJfc3RhdGUocHJpdl9zdGF0ZSk7CisJZm9yX2Vh Y2hfb2xkbmV3X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFuZSwgb2xkX3BsYW5lX3N0YXRlLAor CQkJCSAgICAgICBuZXdfcGxhbmVfc3RhdGUsIGkpIHsKKwkJc3RydWN0IHZjNF9wbGFuZV9zdGF0 ZSAqdmM0X3BsYW5lX3N0YXRlOworCisJCWlmIChvbGRfcGxhbmVfc3RhdGUtPmZiICYmIG9sZF9w bGFuZV9zdGF0ZS0+Y3J0YykgeworCQkJdmM0X3BsYW5lX3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0 YXRlKG9sZF9wbGFuZV9zdGF0ZSk7CisJCQlsb2FkX3N0YXRlLT5tZW1idXNfbG9hZCAtPSB2YzRf cGxhbmVfc3RhdGUtPm1lbWJ1c19sb2FkOworCQkJbG9hZF9zdGF0ZS0+aHZzX2xvYWQgLT0gdmM0 X3BsYW5lX3N0YXRlLT5odnNfbG9hZDsKKwkJfQorCisJCWlmIChuZXdfcGxhbmVfc3RhdGUtPmZi ICYmIG5ld19wbGFuZV9zdGF0ZS0+Y3J0YykgeworCQkJdmM0X3BsYW5lX3N0YXRlID0gdG9fdmM0 X3BsYW5lX3N0YXRlKG5ld19wbGFuZV9zdGF0ZSk7CisJCQlsb2FkX3N0YXRlLT5tZW1idXNfbG9h ZCArPSB2YzRfcGxhbmVfc3RhdGUtPm1lbWJ1c19sb2FkOworCQkJbG9hZF9zdGF0ZS0+aHZzX2xv YWQgKz0gdmM0X3BsYW5lX3N0YXRlLT5odnNfbG9hZDsKKwkJfQorCX0KKworCS8qIFRoZSBhYnNv bHV0ZSBsaW1pdCBpcyAyR2J5dGUvc2VjLCBidXQgbGV0J3MgdGFrZSBhIG1hcmdpbiB0byBsZXQK KwkgKiB0aGUgc3lzdGVtIHdvcmsgd2hlbiBvdGhlciBibG9ja3MgYXJlIGFjY2Vzc2luZyB0aGUg bWVtb3J5LgorCSAqLworCWlmIChsb2FkX3N0YXRlLT5tZW1idXNfbG9hZCA+IFNaXzFHICsgU1pf NTEyTSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwkvKiBIVlMgY2xvY2sgaXMgc3VwcG9zZWQgdG8g cnVuIEAgMjUwTWh6LCBsZXQncyB0YWtlIGEgbWFyZ2luIGFuZAorCSAqIGNvbnNpZGVyIHRoZSBt YXhpbXVtIG51bWJlciBvZiBjeWNsZXMgaXMgMjQwTS4KKwkgKi8KKwlpZiAobG9hZF9zdGF0ZS0+ aHZzX2xvYWQgPiAyNDAwMDAwMDBVTEwpCisJCXJldHVybiAtRU5PU1BDOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKgordmM0X2xvYWRfdHJhY2tl cl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqKQoreworCXN0cnVj dCB2YzRfbG9hZF90cmFja2VyX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga21lbWR1cChvYmot PnN0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0 dXJuIE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX3ByaXZhdGVfb2JqX2R1cGxpY2F0ZV9z dGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNlOworfQorCitz dGF0aWMgdm9pZCB2YzRfbG9hZF90cmFja2VyX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IGRybV9wcml2 YXRlX29iaiAqb2JqLAorCQkJCQkgICBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnN0YXRlKQor eworCXN0cnVjdCB2YzRfbG9hZF90cmFja2VyX3N0YXRlICpsb2FkX3N0YXRlOworCisJbG9hZF9z dGF0ZSA9IHRvX3ZjNF9sb2FkX3RyYWNrZXJfc3RhdGUoc3RhdGUpOworCWtmcmVlKGxvYWRfc3Rh dGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlX2Z1bmNzIHZj NF9sb2FkX3RyYWNrZXJfc3RhdGVfZnVuY3MgPSB7CisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUg PSB2YzRfbG9hZF90cmFja2VyX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSB2YzRfbG9hZF90cmFja2VyX2Rlc3Ryb3lfc3RhdGUsCit9OworCiBzdGF0aWMgaW50CiB2 YzRfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSkKIHsKQEAgLTQwMCw3ICs0ODcsMTEgQEAgdmM0X2F0b21pY19jaGVjayhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpCiAJ aWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJf Y2hlY2soZGV2LCBzdGF0ZSk7CisJcmV0ID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2soZGV2LCBz dGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2YzRfbG9hZF90cmFj a2VyX2F0b21pY19jaGVjayhzdGF0ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21v ZGVfY29uZmlnX2Z1bmNzIHZjNF9tb2RlX2Z1bmNzID0gewpAQCAtNDEzLDYgKzUwNCw3IEBAIGlu dCB2YzRfa21zX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmM0X2Rl diAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwogCXN0cnVjdCB2YzRfY3RtX3N0YXRlICpjdG1fc3Rh dGU7CisJc3RydWN0IHZjNF9sb2FkX3RyYWNrZXJfc3RhdGUgKmxvYWRfc3RhdGU7CiAJaW50IHJl dDsKIAogCXNlbWFfaW5pdCgmdmM0LT5hc3luY19tb2Rlc2V0LCAxKTsKQEAgLTQ0Miw2ICs1MzQs MTUgQEAgaW50IHZjNF9rbXNfbG9hZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCWRybV9hdG9t aWNfcHJpdmF0ZV9vYmpfaW5pdChkZXYsICZ2YzQtPmN0bV9tYW5hZ2VyLCAmY3RtX3N0YXRlLT5i YXNlLAogCQkJCSAgICAmdmM0X2N0bV9zdGF0ZV9mdW5jcyk7CiAKKwlsb2FkX3N0YXRlID0ga3ph bGxvYyhzaXplb2YoKmxvYWRfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvYWRfc3RhdGUp IHsKKwkJZHJtX2F0b21pY19wcml2YXRlX29ial9maW5pKCZ2YzQtPmN0bV9tYW5hZ2VyKTsKKwkJ cmV0dXJuIC1FTk9NRU07CisJfQorCisJZHJtX2F0b21pY19wcml2YXRlX29ial9pbml0KGRldiwg JnZjNC0+bG9hZF90cmFja2VyLCAmbG9hZF9zdGF0ZS0+YmFzZSwKKwkJCQkgICAgJnZjNF9sb2Fk X3RyYWNrZXJfc3RhdGVfZnVuY3MpOworCiAJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAK IAlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92YzQvdmM0X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCmlu ZGV4IDI5MDFlZDBjNTIyMy4uNmM2NDM5NTNhNmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMK QEAgLTQ4OCw2ICs0ODgsNjEgQEAgc3RhdGljIHZvaWQgdmM0X3dyaXRlX3NjYWxpbmdfcGFyYW1l dGVycyhzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKIAl9CiB9CiAKK3N0YXRpYyB2b2lk IHZjNF9wbGFuZV9jYWxjX2xvYWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJ dW5zaWduZWQgaW50IGh2c19sb2FkX3NoaWZ0LCB2cmVmcmVzaCwgaTsKKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRf c3RhdGU7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXVuc2lnbmVkIGlu dCB2c2NhbGVfZmFjdG9yOworCisJdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHN0YXRl KTsKKwljcnRjX3N0YXRlID0gZHJtX2F0b21pY19nZXRfZXhpc3RpbmdfY3J0Y19zdGF0ZShzdGF0 ZS0+c3RhdGUsCisJCQkJCQkJc3RhdGUtPmNydGMpOworCXZyZWZyZXNoID0gZHJtX21vZGVfdnJl ZnJlc2goJmNydGNfc3RhdGUtPmFkanVzdGVkX21vZGUpOworCisJLyogVGhlIEhWUyBpcyBhYmxl IHRvIHByb2Nlc3MgMiBwaXhlbHMvY3ljbGUgd2hlbiBzY2FsaW5nIHRoZSBzb3VyY2UsCisJICog NCBwaXhlbHMvY3ljbGUgb3RoZXJ3aXNlLgorCSAqIEFscGhhIGJsZW5kaW5nIHN0ZXAgc2VlbXMg dG8gYmUgcGlwZWxpbmVkIGFuZCBpdCdzIGFsd2F5cyBvcGVyYXRpbmcKKwkgKiBhdCA0IHBpeGVs cy9jeWNsZSwgc28gdGhlIGxpbWl0aW5nIGFzcGVjdCBoZXJlIHNlZW1zIHRvIGJlIHRoZQorCSAq IHNjYWxlciBibG9jay4KKwkgKiBIVlMgbG9hZCBpcyBleHByZXNzZWQgaW4gY2xrLWN5Y2xlcy9z ZWMgKEFLQSBIeikuCisJICovCisJaWYgKHZjNF9zdGF0ZS0+eF9zY2FsaW5nWzBdICE9IFZDNF9T Q0FMSU5HX05PTkUgfHwKKwkgICAgdmM0X3N0YXRlLT54X3NjYWxpbmdbMV0gIT0gVkM0X1NDQUxJ TkdfTk9ORSB8fAorCSAgICB2YzRfc3RhdGUtPnlfc2NhbGluZ1swXSAhPSBWQzRfU0NBTElOR19O T05FIHx8CisJICAgIHZjNF9zdGF0ZS0+eV9zY2FsaW5nWzFdICE9IFZDNF9TQ0FMSU5HX05PTkUp CisJCWh2c19sb2FkX3NoaWZ0ID0gMTsKKwllbHNlCisJCWh2c19sb2FkX3NoaWZ0ID0gMjsKKwor CXZjNF9zdGF0ZS0+bWVtYnVzX2xvYWQgPSAwOworCXZjNF9zdGF0ZS0+aHZzX2xvYWQgPSAwOwor CWZvciAoaSA9IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspIHsKKwkJLyogRXZl biBpZiB0aGUgYmFuZHdpZHRoL3BsYW5lIHJlcXVpcmVkIGZvciBhIHNpbmdsZSBmcmFtZSBpcwor CQkgKgorCQkgKiB2YzRfc3RhdGUtPnNyY193W2ldICogdmM0X3N0YXRlLT5zcmNfaFtpXSAqIGNw cCAqIHZyZWZyZXNoCisJCSAqCisJCSAqIHdoZW4gZG93bnNjYWxpbmcsIHdlIGhhdmUgdG8gcmVh ZCBtb3JlIHBpeGVscyBwZXIgbGluZSBpbgorCQkgKiB0aGUgdGltZSBmcmFtZSByZXNlcnZlZCBm b3IgYSBzaW5nbGUgbGluZSwgc28gdGhlIGJhbmR3aWR0aAorCQkgKiBkZW1hbmQgY2FuIGJlIHB1 bmN0dWFsbHkgaGlnaGVyLiBUbyBhY2NvdW50IGZvciB0aGF0LCB3ZQorCQkgKiBjYWxjdWxhdGUg dGhlIGRvd24tc2NhbGluZyBmYWN0b3IgYW5kIG11bHRpcGx5IHRoZSBwbGFuZQorCQkgKiBsb2Fk IGJ5IHRoaXMgbnVtYmVyLiBXZSdyZSBsaWtlbHkgb3Zlci1lc3RpbWF0aW5nIHRoZSByZWFkCisJ CSAqIGRlbWFuZCwgYnV0IHRoYXQncyBiZXR0ZXIgdGhhbiB1bmRlci1lc3RpbWF0aW5nIGl0Lgor CQkgKi8KKwkJdnNjYWxlX2ZhY3RvciA9IERJVl9ST1VORF9VUCh2YzRfc3RhdGUtPnNyY19oW2ld LAorCQkJCQkgICAgIHZjNF9zdGF0ZS0+Y3J0Y19oKTsKKwkJdmM0X3N0YXRlLT5tZW1idXNfbG9h ZCArPSB2YzRfc3RhdGUtPnNyY193W2ldICoKKwkJCQkJICB2YzRfc3RhdGUtPnNyY19oW2ldICog dnNjYWxlX2ZhY3RvciAqCisJCQkJCSAgZmItPmZvcm1hdC0+Y3BwW2ldOworCQl2YzRfc3RhdGUt Pmh2c19sb2FkICs9IHZjNF9zdGF0ZS0+Y3J0Y19oICogdmM0X3N0YXRlLT5jcnRjX3c7CisJfQor CisJdmM0X3N0YXRlLT5odnNfbG9hZCAqPSB2cmVmcmVzaDsKKwl2YzRfc3RhdGUtPmh2c19sb2Fk ID4+PSBodnNfbG9hZF9zaGlmdDsKKwl2YzRfc3RhdGUtPm1lbWJ1c19sb2FkICo9IHZyZWZyZXNo OworfQorCiBzdGF0aWMgaW50IHZjNF9wbGFuZV9hbGxvY2F0ZV9sYm0oc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoc3Rh dGUtPnBsYW5lLT5kZXYpOwpAQCAtODg4LDYgKzk0Myw4IEBAIHN0YXRpYyBpbnQgdmM0X3BsYW5l X21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCSAqLwogCXZjNF9zdGF0ZS0+ZGxp c3RfaW5pdGlhbGl6ZWQgPSAxOwogCisJdmM0X3BsYW5lX2NhbGNfbG9hZChzdGF0ZSk7CisKIAly ZXR1cm4gMDsKIH0KIAotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK