From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [PATCH v2 3/3] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Thu, 25 Oct 2018 14:45:46 +0200 Message-ID: <20181025124546.22145-4-boris.brezillon@bootlin.com> References: <20181025124546.22145-1-boris.brezillon@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 5E968892D5 for ; Thu, 25 Oct 2018 12:46:21 +0000 (UTC) In-Reply-To: <20181025124546.22145-1-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt , Daniel Vetter Cc: Boris Brezillon , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org VGhlIEhWUyBibG9jayBpcyBzdXBwb3NlZCB0byBmaWxsIHRoZSBwaXhlbHZhbHZlIEZJRk9zIGZh c3QgZW5vdWdoIHRvCm1lZXQgdGhlIHJlcXVlc3RlZCBmcmFtZXJhdGUuIFRoZSBwcm9ibGVtIGlz LCB0aGUgSFZTIGFuZCBtZW1vcnkgYnVzCmJhbmR3aWR0aHMgYXJlIGxpbWl0ZWQsIGFuZCBpZiB3 ZSBkb24ndCB0YWtlIHRoZXNlIGxpbWl0YXRpb25zIGludG8KYWNjb3VudCB3ZSBtaWdodCBlbmQg dXAgd2l0aCBIVlMgdW5kZXJmbG93IGVycm9ycy4KClRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIG1v ZGVsIHRoZSBwZXItcGxhbmUgSFZTIGFuZCBtZW1vcnkgYnVzIGJhbmR3aWR0aApjb25zdW1wdGlv biBhbmQgdGFrZSBhIGRlY2lzaW9uIGF0IGF0b21pY19jaGVjaygpIHRpbWUgd2hldGhlciB0aGUK ZXN0aW1hdGVkIGxvYWQgd2lsbCBmaXQgaW4gdGhlIEhWUyBhbmQgbWVtYnVzIGJ1ZGdldC4KCk5v dGUgdGhhdCB3ZSB0YWtlIGFuIGV4dHJhIG1hcmdpbiBvbiB0aGUgbWVtb3J5IGJ1cyBjb25zdW1w dGlvbiB0byBsZXQKdGhlIHN5c3RlbSBydW4gc21vb3RobHkgd2hlbiBvdGhlciBibG9ja3MgYXJl IGRvaW5nIGhlYXZ5IHVzZSBvZiB0aGUKbWVtb3J5IGJ1cy4gU2FtZSBnb2VzIGZvciB0aGUgSFZT IGxpbWl0LCBleGNlcHQgdGhlIG1hcmdpbiBpcyBzbWFsbGVyIGluCnRoaXMgY2FzZSwgc2luY2Ug dGhlIEhWUyBpcyBub3QgdXNlZCBieSBleHRlcm5hbCBjb21wb25lbnRzLgoKU2lnbmVkLW9mZi1i eTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Ci0tLQpDaGFu Z2VzIGluIHYyOgotIFJlbW92ZSBhbiB1bnVzZWQgdmFyIGluIHZjNF9sb2FkX3RyYWNrZXJfYXRv bWljX2NoZWNrKCkKLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuYyAgIHwgICAxICsK IGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oICAgfCAgMTEgKysrKwogZHJpdmVycy9ncHUv ZHJtL3ZjNC92YzRfa21zLmMgICB8IDEwMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYyB8ICA2MCArKysrKysrKysrKysrKysr KysrCiA0IGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMgYi9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuYwppbmRleCBmNmY1Y2Q4MGMwNGQuLjcxOTVhMGJjY2ViMyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfZHJ2LmMKQEAgLTMxMyw2ICszMTMsNyBAQCBzdGF0aWMgdm9pZCB2YzRfZHJtX3Vu YmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAKIAlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0p OwogCisJZHJtX2F0b21pY19wcml2YXRlX29ial9maW5pKCZ2YzQtPmxvYWRfdHJhY2tlcik7CiAJ ZHJtX2F0b21pY19wcml2YXRlX29ial9maW5pKCZ2YzQtPmN0bV9tYW5hZ2VyKTsKIAogCWRybV9k ZXZfcHV0KGRybSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCmluZGV4IGE2YzY3YzY1ZmZiYy4uMTEzNjlk YTk0NGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaAorKysgYi9k cml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaApAQCAtMjAwLDYgKzIwMCw3IEBAIHN0cnVjdCB2 YzRfZGV2IHsKIAogCXN0cnVjdCBkcm1fbW9kZXNldF9sb2NrIGN0bV9zdGF0ZV9sb2NrOwogCXN0 cnVjdCBkcm1fcHJpdmF0ZV9vYmogY3RtX21hbmFnZXI7CisJc3RydWN0IGRybV9wcml2YXRlX29i aiBsb2FkX3RyYWNrZXI7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2YzRfZGV2ICoKQEAg LTM2OSw2ICszNzAsMTYgQEAgc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSB7CiAJICogdG8gZW5hYmxl IGJhY2tncm91bmQgY29sb3IgZmlsbC4KIAkgKi8KIAlib29sIG5lZWRzX2JnX2ZpbGw7CisKKwkv KiBMb2FkIG9mIHRoaXMgcGxhbmUgb24gdGhlIEhWUyBibG9jay4gVGhlIGxvYWQgaXMgZXhwcmVz c2VkIGluIEhWUworCSAqIGN5Y2xlcy9zZWMuCisJICovCisJdTY0IGh2c19sb2FkOworCisJLyog TWVtb3J5IGJhbmR3aWR0aCBuZWVkZWQgZm9yIHRoaXMgcGxhbmUuIFRoaXMgaXMgZXhwcmVzc2Vk IGluCisJICogYnl0ZXMvc2VjLgorCSAqLworCXU2NCBtZW1idXNfbG9hZDsKIH07CiAKIHN0YXRp YyBpbmxpbmUgc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vdmM0L3ZjNF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2ttcy5jCmluZGV4 IDhlMDE4M2IxZThiYi4uYjkwNWExOWMxNDcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dmM0L3ZjNF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYwpAQCAtMzQs NiArMzQsMTggQEAgc3RhdGljIHN0cnVjdCB2YzRfY3RtX3N0YXRlICp0b192YzRfY3RtX3N0YXRl KHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqcHJpdikKIAlyZXR1cm4gY29udGFpbmVyX29mKHBy aXYsIHN0cnVjdCB2YzRfY3RtX3N0YXRlLCBiYXNlKTsKIH0KIAorc3RydWN0IHZjNF9sb2FkX3Ry YWNrZXJfc3RhdGUgeworCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSBiYXNlOworCXU2NCBodnNf bG9hZDsKKwl1NjQgbWVtYnVzX2xvYWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHZjNF9sb2FkX3Ry YWNrZXJfc3RhdGUgKgordG9fdmM0X2xvYWRfdHJhY2tlcl9zdGF0ZShzdHJ1Y3QgZHJtX3ByaXZh dGVfc3RhdGUgKnByaXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwcml2LCBzdHJ1Y3QgdmM0 X2xvYWRfdHJhY2tlcl9zdGF0ZSwgYmFzZSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdmM0X2N0bV9z dGF0ZSAqdmM0X2dldF9jdG1fc3RhdGUoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAog CQkJCQkgICAgICAgc3RydWN0IGRybV9wcml2YXRlX29iaiAqbWFuYWdlcikKIHsKQEAgLTM4Myw2 ICszOTUsODEgQEAgdmM0X2N0bV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwg c3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCXJldHVybiAwOwogfQogCitzdGF0aWMg aW50IHZjNF9sb2FkX3RyYWNrZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUsICpu ZXdfcGxhbmVfc3RhdGU7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9IHRvX3ZjNF9kZXYoc3RhdGUt PmRldik7CisJc3RydWN0IHZjNF9sb2FkX3RyYWNrZXJfc3RhdGUgKmxvYWRfc3RhdGU7CisJc3Ry dWN0IGRybV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlOworCXN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lOworCWludCBpOworCisJcHJpdl9zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3ByaXZhdGVfb2Jq X3N0YXRlKHN0YXRlLAorCQkJCQkJICAgICAgJnZjNC0+bG9hZF90cmFja2VyKTsKKwlpZiAoSVNf RVJSKHByaXZfc3RhdGUpKQorCQlyZXR1cm4gUFRSX0VSUihwcml2X3N0YXRlKTsKKworCWxvYWRf c3RhdGUgPSB0b192YzRfbG9hZF90cmFja2VyX3N0YXRlKHByaXZfc3RhdGUpOworCWZvcl9lYWNo X29sZG5ld19wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIG9sZF9wbGFuZV9zdGF0ZSwKKwkJ CQkgICAgICAgbmV3X3BsYW5lX3N0YXRlLCBpKSB7CisJCXN0cnVjdCB2YzRfcGxhbmVfc3RhdGUg KnZjNF9wbGFuZV9zdGF0ZTsKKworCQlpZiAob2xkX3BsYW5lX3N0YXRlLT5mYiAmJiBvbGRfcGxh bmVfc3RhdGUtPmNydGMpIHsKKwkJCXZjNF9wbGFuZV9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0 ZShvbGRfcGxhbmVfc3RhdGUpOworCQkJbG9hZF9zdGF0ZS0+bWVtYnVzX2xvYWQgLT0gdmM0X3Bs YW5lX3N0YXRlLT5tZW1idXNfbG9hZDsKKwkJCWxvYWRfc3RhdGUtPmh2c19sb2FkIC09IHZjNF9w bGFuZV9zdGF0ZS0+aHZzX2xvYWQ7CisJCX0KKworCQlpZiAobmV3X3BsYW5lX3N0YXRlLT5mYiAm JiBuZXdfcGxhbmVfc3RhdGUtPmNydGMpIHsKKwkJCXZjNF9wbGFuZV9zdGF0ZSA9IHRvX3ZjNF9w bGFuZV9zdGF0ZShuZXdfcGxhbmVfc3RhdGUpOworCQkJbG9hZF9zdGF0ZS0+bWVtYnVzX2xvYWQg Kz0gdmM0X3BsYW5lX3N0YXRlLT5tZW1idXNfbG9hZDsKKwkJCWxvYWRfc3RhdGUtPmh2c19sb2Fk ICs9IHZjNF9wbGFuZV9zdGF0ZS0+aHZzX2xvYWQ7CisJCX0KKwl9CisKKwkvKiBUaGUgYWJvbHN1 dGUgbGltaXQgaXMgMkdieXRlL3NlYywgYnV0IGxldCdzIHRha2UgYSBtYXJnaW4gdG8gbGV0CisJ ICogdGhlIHN5c3RlbSB3b3JrIHdoZW4gb3RoZXIgYmxvY2tzIGFyZSBhY2Nlc3NpbmcgdGhlIG1l bW9yeS4KKwkgKi8KKwlpZiAobG9hZF9zdGF0ZS0+bWVtYnVzX2xvYWQgPiBTWl8xRyArIFNaXzUx Mk0pCisJCXJldHVybiAtRU5PU1BDOworCisJLyogSFZTIGNsb2NrIGlzIHN1cHBvc2VkIHRvIHJ1 biBAIDI1ME1oeiwgbGV0J3MgdGFrZSBhIG1hcmdpbiBhbmQKKwkgKiBjb25zaWRlciB0aGUgbWF4 aW11bSBudW1iZXIgb2YgY3ljbGVzIGlzIDI0ME0uCisJICovCisJaWYgKGxvYWRfc3RhdGUtPmh2 c19sb2FkID4gMjQwMDAwMDAwVUxMKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICoKK3ZjNF9sb2FkX3RyYWNrZXJf ZHVwbGljYXRlX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaikKK3sKKwlzdHJ1Y3Qg dmM0X2xvYWRfdHJhY2tlcl9zdGF0ZSAqc3RhdGU7CisKKwlzdGF0ZSA9IGttZW1kdXAob2JqLT5z dGF0ZSwgc2l6ZW9mKCpzdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVy biBOVUxMOworCisJX19kcm1fYXRvbWljX2hlbHBlcl9wcml2YXRlX29ial9kdXBsaWNhdGVfc3Rh dGUob2JqLCAmc3RhdGUtPmJhc2UpOworCisJcmV0dXJuICZzdGF0ZS0+YmFzZTsKK30KKworc3Rh dGljIHZvaWQgdmM0X2xvYWRfdHJhY2tlcl9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0 ZV9vYmogKm9iaiwKKwkJCQkJICAgc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICpzdGF0ZSkKK3sK KwlzdHJ1Y3QgdmM0X2xvYWRfdHJhY2tlcl9zdGF0ZSAqbG9hZF9zdGF0ZTsKKworCWxvYWRfc3Rh dGUgPSB0b192YzRfbG9hZF90cmFja2VyX3N0YXRlKHN0YXRlKTsKKwlrZnJlZShsb2FkX3N0YXRl KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZV9mdW5jcyB2YzRf bG9hZF90cmFja2VyX3N0YXRlX2Z1bmNzID0geworCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0g dmM0X2xvYWRfdHJhY2tlcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRl ID0gdmM0X2xvYWRfdHJhY2tlcl9kZXN0cm95X3N0YXRlLAorfTsKKwogc3RhdGljIGludAogdmM0 X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUpCiB7CkBAIC0zOTIsNyArNDc5LDExIEBAIHZjNF9hdG9taWNfY2hlY2soc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCWlm IChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGRybV9hdG9taWNfaGVscGVyX2No ZWNrKGRldiwgc3RhdGUpOworCXJldCA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrKGRldiwgc3Rh dGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gdmM0X2xvYWRfdHJhY2tl cl9hdG9taWNfY2hlY2soc3RhdGUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2Rl X2NvbmZpZ19mdW5jcyB2YzRfbW9kZV9mdW5jcyA9IHsKQEAgLTQwOCw2ICs0OTksNyBAQCBpbnQg dmM0X2ttc19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZjNF9kZXYg KnZjNCA9IHRvX3ZjNF9kZXYoZGV2KTsKIAlzdHJ1Y3QgdmM0X2N0bV9zdGF0ZSAqY3RtX3N0YXRl OworCXN0cnVjdCB2YzRfbG9hZF90cmFja2VyX3N0YXRlICpsb2FkX3N0YXRlOwogCWludCByZXQ7 CiAKIAlzZW1hX2luaXQoJnZjNC0+YXN5bmNfbW9kZXNldCwgMSk7CkBAIC00MzcsNiArNTI5LDE1 IEBAIGludCB2YzRfa21zX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIAlkcm1fYXRvbWlj X3ByaXZhdGVfb2JqX2luaXQoZGV2LCAmdmM0LT5jdG1fbWFuYWdlciwgJmN0bV9zdGF0ZS0+YmFz ZSwKIAkJCQkgICAgJnZjNF9jdG1fc3RhdGVfZnVuY3MpOwogCisJbG9hZF9zdGF0ZSA9IGt6YWxs b2Moc2l6ZW9mKCpsb2FkX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsb2FkX3N0YXRlKSB7 CisJCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfZmluaSgmdmM0LT5jdG1fbWFuYWdlcik7CisJCXJl dHVybiAtRU5PTUVNOworCX0KKworCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfaW5pdChkZXYsICZ2 YzQtPmxvYWRfdHJhY2tlciwgJmxvYWRfc3RhdGUtPmJhc2UsCisJCQkJICAgICZ2YzRfbG9hZF90 cmFja2VyX3N0YXRlX2Z1bmNzKTsKKwogCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZXYpOwogCiAJ ZHJtX2ttc19oZWxwZXJfcG9sbF9pbml0KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZjNC92YzRfcGxhbmUuYwppbmRl eCAwZjI5NGQ2MTI3NjkuLjVlOTY4NzQwNjUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3ZjNC92YzRfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCkBA IC00NTAsNiArNDUwLDY0IEBAIHN0YXRpYyB2b2lkIHZjNF93cml0ZV9zY2FsaW5nX3BhcmFtZXRl cnMoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCiAJfQogfQogCitzdGF0aWMgdm9pZCB2 YzRfcGxhbmVfY2FsY19sb2FkKHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXVu c2lnbmVkIGludCBodnNfbG9hZF9zaGlmdCwgdnJlZnJlc2gsIGk7CisJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ZmI7CisJc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3N0 YXRlOworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKwl1bnNpZ25lZCBpbnQg dnNjYWxlX2ZhY3RvcjsKKworCXZjNF9zdGF0ZSA9IHRvX3ZjNF9wbGFuZV9zdGF0ZShzdGF0ZSk7 CisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2V4aXN0aW5nX2NydGNfc3RhdGUoc3RhdGUt PnN0YXRlLAorCQkJCQkJCXN0YXRlLT5jcnRjKTsKKwl2cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZy ZXNoKCZjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlKTsKKworCS8qIFRoZSBIVlMgaXMgYWJsZSB0 byBwcm9jZXNzIDIgcGl4ZWxzL2N5Y2xlIHdoZW4gc2NhbGluZyB0aGUgc291cmNlLAorCSAqIDQg cGl4ZWxzL2N5Y2xlIG90aGVyd2lzZS4KKwkgKiBBbHBoYSBibGVuZGluZyBzdGVwIHNlZW1zIHRv IGJlIHBpcGVsaW5lZCBhbmQgaXQncyBhbHdheXMgb3BlcmF0aW5nCisJICogYXQgNCBwaXhlbHMv Y3ljbGUsIHNvIHRoZSBsaW1pdGluZyBhc3BlY3QgaGVyZSBzZWVtcyB0byBiZSB0aGUKKwkgKiBz Y2FsZXIgYmxvY2suCisJICogSFZTIGxvYWQgaXMgZXhwcmVzc2VkIGluIGNsay1jeWNsZXMvc2Vj IChBS0EgSHopLgorCSAqLworCWlmICh2YzRfc3RhdGUtPnhfc2NhbGluZ1swXSAhPSBWQzRfU0NB TElOR19OT05FIHx8CisJICAgIHZjNF9zdGF0ZS0+eF9zY2FsaW5nWzFdICE9IFZDNF9TQ0FMSU5H X05PTkUgfHwKKwkgICAgdmM0X3N0YXRlLT55X3NjYWxpbmdbMF0gIT0gVkM0X1NDQUxJTkdfTk9O RSB8fAorCSAgICB2YzRfc3RhdGUtPnlfc2NhbGluZ1sxXSAhPSBWQzRfU0NBTElOR19OT05FKQor CQlodnNfbG9hZF9zaGlmdCA9IDE7CisJZWxzZQorCQlodnNfbG9hZF9zaGlmdCA9IDI7CisKKwl2 YzRfc3RhdGUtPm1lbWJ1c19sb2FkID0gMDsKKwl2YzRfc3RhdGUtPmh2c19sb2FkID0gMDsKKwlm b3IgKGkgPSAwOyBpIDwgZmItPmZvcm1hdC0+bnVtX3BsYW5lczsgaSsrKSB7CisJCXVuc2lnbmVk IGxvbmcgcGl4ZWxzX2xvYWQ7CisKKwkJLyogRXZlbiBpZiB0aGUgYmFuZHdpZHRoL3BsYW5lIHJl cXVpcmVkIGZvciBhIHNpbmdsZSBmcmFtZSBpcworCQkgKgorCQkgKiB2YzRfc3RhdGUtPnNyY193 W2ldICogdmM0X3N0YXRlLT5zcmNfaFtpXSAqIGNwcCAqIHZyZWZyZXNoCisJCSAqCisJCSAqIHdo ZW4gZG93bnNjYWxpbmcsIHdlIGhhdmUgdG8gcmVhZCBtb3JlIHBpeGVscyBwZXIgbGluZSBpbgor CQkgKiB0aGUgdGltZSBmcmFtZSByZXNlcnZlZCBmb3IgYSBzaW5nbGUgbGluZSwgc28gdGhlIGJh bmR3aWR0aAorCQkgKiBkZW1hbmQgY2FuIGJlIHB1bmN0dWFsbHkgaGlnaGVyLiBUbyBhY2NvdW50 IGZvciB0aGF0LCB3ZQorCQkgKiBjYWxjdWxhdGUgdGhlIGRvd24tc2NhbGluZyBmYWN0b3IgYW5k IG11bHRpcGx5IHRoZSBwbGFuZQorCQkgKiBsb2FkIGJ5IHRoaXMgbnVtYmVyLiBXZSdyZSBsaWtl bHkgb3Zlci1lc3RpbWF0aW5nIHRoZSByZWFkCisJCSAqIGRlbWFuZCwgYnV0IHRoYXQncyBiZXR0 ZXIgdGhhbiB1bmRlci1lc3RpbWF0aW5nIGl0LgorCQkgKi8KKwkJdnNjYWxlX2ZhY3RvciA9IERJ Vl9ST1VORF9VUCh2YzRfc3RhdGUtPnNyY19oW2ldLAorCQkJCQkgICAgIHZjNF9zdGF0ZS0+Y3J0 Y19oKTsKKwkJcGl4ZWxzX2xvYWQgPSB2YzRfc3RhdGUtPnNyY193W2ldICogdmM0X3N0YXRlLT5z cmNfaFtpXSAqCisJCQkgICAgICB2c2NhbGVfZmFjdG9yOworCisJCXZjNF9zdGF0ZS0+bWVtYnVz X2xvYWQgKz0gZmItPmZvcm1hdC0+Y3BwW2ldICogcGl4ZWxzX2xvYWQ7CisJCXZjNF9zdGF0ZS0+ aHZzX2xvYWQgKz0gcGl4ZWxzX2xvYWQ7CisJfQorCisJdmM0X3N0YXRlLT5odnNfbG9hZCAqPSB2 cmVmcmVzaDsKKwl2YzRfc3RhdGUtPmh2c19sb2FkID4+PSBodnNfbG9hZF9zaGlmdDsKKwl2YzRf c3RhdGUtPm1lbWJ1c19sb2FkICo9IHZyZWZyZXNoOworfQorCiAvKiBXcml0ZXMgb3V0IGEgZnVs bCBkaXNwbGF5IGxpc3QgZm9yIGFuIGFjdGl2ZSBwbGFuZSB0byB0aGUgcGxhbmUncwogICogcHJp dmF0ZSBkbGlzdCBzdGF0ZS4KICAqLwpAQCAtNzY5LDYgKzgyNyw4IEBAIHN0YXRpYyBpbnQgdmM0 X3BsYW5lX21vZGVfc2V0KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCXZjNF9zdGF0ZS0+bmVl ZHNfYmdfZmlsbCA9IGZiLT5mb3JtYXQtPmhhc19hbHBoYSB8fCAhY292ZXJzX3NjcmVlbiB8fAog CQkJCSAgIHN0YXRlLT5hbHBoYSAhPSBEUk1fQkxFTkRfQUxQSEFfT1BBUVVFOwogCisJdmM0X3Bs YW5lX2NhbGNfbG9hZChzdGF0ZSk7CisKIAlyZXR1cm4gMDsKIH0KIAotLSAKMi4xNy4xCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFp bGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK