From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: [RFC PATCH] drm/vc4: Add a load tracker to prevent HVS underflow errors Date: Tue, 16 Oct 2018 11:40:45 +0200 Message-ID: <20181016094045.23021-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 70EAC6E1DC for ; Tue, 16 Oct 2018 09:40:53 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Eric Anholt Cc: Boris Brezillon , "Hollingworth, Gordon" , dri-devel@lists.freedesktop.org, Eben Upton List-Id: dri-devel@lists.freedesktop.org VGhlIEhWUyBibG9jayBpcyBzdXBwb3NlZCB0byBmaWxsIHRoZSBwaXhlbHZhbHZlIEZJRk9zIGZh c3QgZW5vdWdoIHRvCm1lZXQgdGhlIHJlcXVlc3RlZCBmcmFtZXJhdGUuIFRoZSBwcm9ibGVtIGlz LCB0aGUgSFZTIGFuZCBtZW1vcnkgYnVzCmJhbmR3aWR0aHMgYXJlIGxpbWl0ZWQsIGFuZCBpZiB3 ZSBkb24ndCB0YWtlIHRoZXNlIGxpbWl0YXRpb25zIGludG8KYWNjb3VudCB3ZSBtaWdodCBlbmQg dXAgd2l0aCBIVlMgdW5kZXJmbG93IGVycm9ycy4KClRoaXMgcGF0Y2ggaXMgdHJ5aW5nIHRvIG1v ZGVsIHRoZSBwZXItcGxhbmUgSFZTIGFuZCBtZW1vcnkgYnVzIGJhbmR3aWR0aApjb25zdW1wdGlv biBhbmQgdGFrZSBhIGRlY2lzaW9uIGF0IGF0b21pY19jaGVjaygpIHRpbWUgd2hldGhlciB0aGUK ZXN0aW1hdGVkIGxvYWQgd2lsbCBmaXQgaW4gdGhlIEhWUyBhbmQgbWVtYnVzIGJ1ZGdldC4KCk5v dGUgdGhhdCB3ZSB0YWtlIGFuIGV4dHJhIG1hcmdpbiBvbiB0aGUgbWVtb3J5IGJ1cyBjb25zdW1w dGlvbiB0byBsZXQKdGhlIHN5c3RlbSBydW4gc21vb3RobHkgd2hlbiBvdGhlciBibG9ja3MgYXJl IGRvaW5nIGhlYXZ5IHVzZSBvZiB0aGUKbWVtb3J5IGJ1cy4gU2FtZSBnb2VzIGZvciB0aGUgSFZT IGxpbWl0LCBleGNlcHQgdGhlIG1hcmdpbiBpcyBzbWFsbGVyIGluCnRoaXMgY2FzZSwgc2luY2Ug dGhlIEhWUyBpcyBub3QgdXNlZCBieSBleHRlcm5hbCBjb21wb25lbnRzLgoKU2lnbmVkLW9mZi1i eTogQm9yaXMgQnJlemlsbG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Ci0tLQpUaGlz IGxvZ2ljIGhhcyBiZWVuIHZhbGlkYXRlZCB1c2luZyBhIHNpbXBsZSBzaGVsbCBzY3JpcHQgYW5k CnNvbWUgaW5zdHJ1bWVudGF0aW9uIGluIHRoZSBWQzQgZHJpdmVyOgoKLSBjYXB0dXJlIHVuZGVy ZmxvdyBlcnJvcnMgYXQgdGhlIEhWUyBsZXZlbCBhbmQgZXhwb3NlIGEgZGVidWdmcyBmaWxlCiAg cmVwb3J0aW5nIHRob3NlIGVycm9ycwotIGFkZCBkZWJ1Z2ZzIGZpbGVzIHRvIGV4cG9zZSB3aGVu IGF0b21pY19jaGVjayBmYWlscyBiZWNhdXNlIG9mIHRoZQogIEhWUyBvciBtZW1idXMgbG9hZCBs aW1pdGF0aW9uIG9yIHdoZW4gaXQgZmFpbHMgZm9yIG90aGVyIHJlYXNvbnMKClRoZSBicmFuY2gg Y29udGFpbmluZyB0aG9zZSBtb2RpZmljYXRpb24gaXMgYXZhaWxhYmxlIGhlcmUgWzFdLCBhbmQg dGhlCnNjcmlwdCAod2hpY2ggaXMgaW50ZXJuYWxseSB1c2luZyBtb2RldGVzdCkgaXMgaGVyZSBb Ml0gKHBsZWFzZSBub3RlCnRoYXQgSSdtIGJhZCBhdCB3cml0aW5nIHNoZWxsIHNjcmlwdHMgOi0p KS4KCk5vdGUgdGhhdCB0aG9zZSBtb2RpZmljYXRpb24gdGVuZCB0byBvdmVyLWVzdGltYXRlIHRo ZSBsb2FkLCBhbmQgdGh1cwpyZWplY3Qgc2V0dXBzIHRoYXQgbWlnaHQgaGF2ZSBwcmV2aW91c2x5 IHdvcmtlZCwgc28gd2UgbWlnaHQgd2FudCB0bwphZGp1c3QgdGhlIGxpbWl0cyB0byBhdm9pZCB0 aGF0LgoKWzFdaHR0cHM6Ly9naXRodWIuY29tL2JicmV6aWxsb24vbGludXgvdHJlZS92YzQvaHZz LWJhbmR3aWR0aC1ldmFsClsyXWh0dHBzOi8vZ2l0aHViLmNvbS9iYnJlemlsbG9uL3ZjNC1odnMt YmFuZHdpZHRoLXRlc3QKLS0tCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaCAgIHwgIDEx ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYyAgIHwgMTA0ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3Bs YW5lLmMgfCAgNjAgKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTc0 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vdmM0L3ZjNF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X2Rydi5oCmluZGV4IGJk NmVmMWYzMTgyMi4uNDhmNmVlNWNlZGEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9kcnYuaApAQCAtMjAwLDYg KzIwMCw3IEBAIHN0cnVjdCB2YzRfZGV2IHsKIAogCXN0cnVjdCBkcm1fbW9kZXNldF9sb2NrIGN0 bV9zdGF0ZV9sb2NrOwogCXN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogY3RtX21hbmFnZXI7CisJc3Ry dWN0IGRybV9wcml2YXRlX29iaiBsb2FkX3RyYWNrZXI7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0 cnVjdCB2YzRfZGV2ICoKQEAgLTM2OSw2ICszNzAsMTYgQEAgc3RydWN0IHZjNF9wbGFuZV9zdGF0 ZSB7CiAJICogdG8gZW5hYmxlIGJhY2tncm91bmQgY29sb3IgZmlsbC4KIAkgKi8KIAlib29sIG5l ZWRzX2JnX2ZpbGw7CisKKwkvKiBMb2FkIG9mIHRoaXMgcGxhbmUgb24gdGhlIEhWUyBibG9jay4g VGhlIGxvYWQgaXMgZXhwcmVzc2VkIGluIEhWUworCSAqIGN5Y2xlcy9zZWMuCisJICovCisJdTY0 IGh2c19sb2FkOworCisJLyogTWVtb3J5IGJhbmR3aWR0aCBuZWVkZWQgZm9yIHRoaXMgcGxhbmUu IFRoaXMgaXMgZXhwcmVzc2VkIGluCisJICogYnl0ZXMvc2VjLgorCSAqLworCXU2NCBtZW1idXNf bG9hZDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92 YzQvdmM0X2ttcy5jCmluZGV4IDEyNzQ2ODc4NWY3NC4uNGM2NWU2MDEzYmQzIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmM0 L3ZjNF9rbXMuYwpAQCAtMzQsNiArMzQsMTggQEAgc3RhdGljIHN0cnVjdCB2YzRfY3RtX3N0YXRl ICp0b192YzRfY3RtX3N0YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0ZSAqcHJpdikKIAlyZXR1 cm4gY29udGFpbmVyX29mKHByaXYsIHN0cnVjdCB2YzRfY3RtX3N0YXRlLCBiYXNlKTsKIH0KIAor c3RydWN0IHZjNF9sb2FkX3RyYWNrZXJfc3RhdGUgeworCXN0cnVjdCBkcm1fcHJpdmF0ZV9zdGF0 ZSBiYXNlOworCXU2NCBodnNfbG9hZDsKKwl1NjQgbWVtYnVzX2xvYWQ7Cit9OworCitzdGF0aWMg c3RydWN0IHZjNF9sb2FkX3RyYWNrZXJfc3RhdGUgKgordG9fdmM0X2xvYWRfdHJhY2tlcl9zdGF0 ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfc3RhdGUgKnByaXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v Zihwcml2LCBzdHJ1Y3QgdmM0X2xvYWRfdHJhY2tlcl9zdGF0ZSwgYmFzZSk7Cit9CisKIHN0YXRp YyBzdHJ1Y3QgdmM0X2N0bV9zdGF0ZSAqdmM0X2dldF9jdG1fc3RhdGUoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlLAogCQkJCQkgICAgICAgc3RydWN0IGRybV9wcml2YXRlX29iaiAqbWFu YWdlcikKIHsKQEAgLTM3OSw2ICszOTEsODEgQEAgdmM0X2N0bV9hdG9taWNfY2hlY2soc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCXJldHVy biAwOwogfQogCitzdGF0aWMgaW50IHZjNF9sb2FkX3RyYWNrZXJfYXRvbWljX2NoZWNrKHN0cnVj dCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpv bGRfcGxhbmVfc3RhdGUsICpuZXdfcGxhbmVfc3RhdGU7CisJc3RydWN0IHZjNF9kZXYgKnZjNCA9 IHRvX3ZjNF9kZXYoc3RhdGUtPmRldik7CisJc3RydWN0IHZjNF9sb2FkX3RyYWNrZXJfc3RhdGUg KmxvYWRfc3RhdGU7CisJc3RydWN0IGRybV9wcml2YXRlX3N0YXRlICpwcml2X3N0YXRlOworCXN0 cnVjdCBkcm1fcGxhbmUgKnBsYW5lOworCWludCByZXQsIGk7CisKKwlwcml2X3N0YXRlID0gZHJt X2F0b21pY19nZXRfcHJpdmF0ZV9vYmpfc3RhdGUoc3RhdGUsCisJCQkJCQkgICAgICAmdmM0LT5s b2FkX3RyYWNrZXIpOworCWlmIChJU19FUlIocHJpdl9zdGF0ZSkpCisJCXJldHVybiBQVFJfRVJS KHByaXZfc3RhdGUpOworCisJbG9hZF9zdGF0ZSA9IHRvX3ZjNF9sb2FkX3RyYWNrZXJfc3RhdGUo cHJpdl9zdGF0ZSk7CisJZm9yX2VhY2hfb2xkbmV3X3BsYW5lX2luX3N0YXRlKHN0YXRlLCBwbGFu ZSwgb2xkX3BsYW5lX3N0YXRlLAorCQkJCSAgICAgICBuZXdfcGxhbmVfc3RhdGUsIGkpIHsKKwkJ c3RydWN0IHZjNF9wbGFuZV9zdGF0ZSAqdmM0X3BsYW5lX3N0YXRlOworCisJCWlmIChvbGRfcGxh bmVfc3RhdGUtPmZiICYmIG9sZF9wbGFuZV9zdGF0ZS0+Y3J0YykgeworCQkJdmM0X3BsYW5lX3N0 YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKG9sZF9wbGFuZV9zdGF0ZSk7CisJCQlsb2FkX3N0YXRl LT5tZW1idXNfbG9hZCAtPSB2YzRfcGxhbmVfc3RhdGUtPm1lbWJ1c19sb2FkOworCQkJbG9hZF9z dGF0ZS0+aHZzX2xvYWQgLT0gdmM0X3BsYW5lX3N0YXRlLT5odnNfbG9hZDsKKwkJfQorCisJCWlm IChuZXdfcGxhbmVfc3RhdGUtPmZiICYmIG5ld19wbGFuZV9zdGF0ZS0+Y3J0YykgeworCQkJdmM0 X3BsYW5lX3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKG5ld19wbGFuZV9zdGF0ZSk7CisJCQls b2FkX3N0YXRlLT5tZW1idXNfbG9hZCArPSB2YzRfcGxhbmVfc3RhdGUtPm1lbWJ1c19sb2FkOwor CQkJbG9hZF9zdGF0ZS0+aHZzX2xvYWQgKz0gdmM0X3BsYW5lX3N0YXRlLT5odnNfbG9hZDsKKwkJ fQorCX0KKworCS8qIFRoZSBhYm9sc3V0ZSBsaW1pdCBpcyAyR2J5dGUvc2VjLCBidXQgbGV0J3Mg dGFrZSBhIG1hcmdpbiB0byBsZXQKKwkgKiB0aGUgc3lzdGVtIHdvcmsgd2hlbiBvdGhlciBibG9j a3MgYXJlIGFjY2Vzc2luZyB0aGUgbWVtb3J5LgorCSAqLworCWlmIChsb2FkX3N0YXRlLT5tZW1i dXNfbG9hZCA+IFNaXzFHICsgU1pfNTEyTSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwkvKiBIVlMg Y2xvY2sgaXMgc3VwcG9zZWQgdG8gcnVuIEAgMjUwTWh6LCBsZXQncyB0YWtlIGEgbWFyZ2luIGFu ZAorCSAqIGNvbnNpZGVyIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjeWNsZXMgaXMgMjQwTS4KKwkg Ki8KKwlpZiAobG9hZF9zdGF0ZS0+aHZzX2xvYWQgPiAyNDAwMDAwMDBVTEwpCisJCXJldHVybiAt RU5PU1BDOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX3ByaXZhdGVfc3Rh dGUgKgordmM0X2xvYWRfdHJhY2tlcl9kdXBsaWNhdGVfc3RhdGUoc3RydWN0IGRybV9wcml2YXRl X29iaiAqb2JqKQoreworCXN0cnVjdCB2YzRfbG9hZF90cmFja2VyX3N0YXRlICpzdGF0ZTsKKwor CXN0YXRlID0ga21lbWR1cChvYmotPnN0YXRlLCBzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX3By aXZhdGVfb2JqX2R1cGxpY2F0ZV9zdGF0ZShvYmosICZzdGF0ZS0+YmFzZSk7CisKKwlyZXR1cm4g JnN0YXRlLT5iYXNlOworfQorCitzdGF0aWMgdm9pZCB2YzRfbG9hZF90cmFja2VyX2Rlc3Ryb3lf c3RhdGUoc3RydWN0IGRybV9wcml2YXRlX29iaiAqb2JqLAorCQkJCQkgICBzdHJ1Y3QgZHJtX3By aXZhdGVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCB2YzRfbG9hZF90cmFja2VyX3N0YXRlICps b2FkX3N0YXRlOworCisJbG9hZF9zdGF0ZSA9IHRvX3ZjNF9sb2FkX3RyYWNrZXJfc3RhdGUoc3Rh dGUpOworCWtmcmVlKGxvYWRfc3RhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9w cml2YXRlX3N0YXRlX2Z1bmNzIHZjNF9sb2FkX3RyYWNrZXJfc3RhdGVfZnVuY3MgPSB7CisJLmF0 b21pY19kdXBsaWNhdGVfc3RhdGUgPSB2YzRfbG9hZF90cmFja2VyX2R1cGxpY2F0ZV9zdGF0ZSwK KwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSB2YzRfbG9hZF90cmFja2VyX2Rlc3Ryb3lfc3RhdGUs Cit9OworCiBzdGF0aWMgaW50CiB2YzRfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHsKQEAgLTM4OCw3ICs0NzUsMTEg QEAgdmM0X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0 b21pY19zdGF0ZSAqc3RhdGUpCiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXR1 cm4gZHJtX2F0b21pY19oZWxwZXJfY2hlY2soZGV2LCBzdGF0ZSk7CisJcmV0ID0gZHJtX2F0b21p Y19oZWxwZXJfY2hlY2soZGV2LCBzdGF0ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwor CXJldHVybiB2YzRfbG9hZF90cmFja2VyX2F0b21pY19jaGVjayhzdGF0ZSk7CiB9CiAKIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHZjNF9tb2RlX2Z1bmNzID0gewpA QCAtNDAxLDYgKzQ5Miw3IEBAIGludCB2YzRfa21zX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKIHsKIAlzdHJ1Y3QgdmM0X2RldiAqdmM0ID0gdG9fdmM0X2RldihkZXYpOwogCXN0cnVjdCB2 YzRfY3RtX3N0YXRlICpjdG1fc3RhdGU7CisJc3RydWN0IHZjNF9sb2FkX3RyYWNrZXJfc3RhdGUg KmxvYWRfc3RhdGU7CiAJaW50IHJldDsKIAogCXNlbWFfaW5pdCgmdmM0LT5hc3luY19tb2Rlc2V0 LCAxKTsKQEAgLTQyNiw5ICs1MTgsMTkgQEAgaW50IHZjNF9rbXNfbG9hZChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQogCWN0bV9zdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKCpjdG1fc3RhdGUpLCBHRlBf S0VSTkVMKTsKIAlpZiAoIWN0bV9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CisKIAlkcm1fYXRv bWljX3ByaXZhdGVfb2JqX2luaXQoJnZjNC0+Y3RtX21hbmFnZXIsICZjdG1fc3RhdGUtPmJhc2Us CiAJCQkJICAgICZ2YzRfY3RtX3N0YXRlX2Z1bmNzKTsKIAorCWxvYWRfc3RhdGUgPSBremFsbG9j KHNpemVvZigqbG9hZF9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghbG9hZF9zdGF0ZSkgewor CQlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2ZpbmkoJnZjNC0+Y3RtX21hbmFnZXIpOworCQlyZXR1 cm4gLUVOT01FTTsKKwl9CisKKwlkcm1fYXRvbWljX3ByaXZhdGVfb2JqX2luaXQoJnZjNC0+bG9h ZF90cmFja2VyLCAmbG9hZF9zdGF0ZS0+YmFzZSwKKwkJCQkgICAgJnZjNF9sb2FkX3RyYWNrZXJf c3RhdGVfZnVuY3MpOworCiAJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRldik7CiAKIAlkcm1fa21z X2hlbHBlcl9wb2xsX2luaXQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92YzQv dmM0X3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmM0L3ZjNF9wbGFuZS5jCmluZGV4IDYwZDVh ZDE5Y2VkZC4uZjQ3ZDM4MzgzYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmM0L3Zj NF9wbGFuZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92YzQvdmM0X3BsYW5lLmMKQEAgLTQ1NSw2 ICs0NTUsNjQgQEAgc3RhdGljIHZvaWQgdmM0X3dyaXRlX3NjYWxpbmdfcGFyYW1ldGVycyhzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHZjNF9wbGFu ZV9jYWxjX2xvYWQoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQg aW50IGh2c19sb2FkX3NoaWZ0LCB2cmVmcmVzaCwgaTsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiA9IHN0YXRlLT5mYjsKKwlzdHJ1Y3QgdmM0X3BsYW5lX3N0YXRlICp2YzRfc3RhdGU7CisJ c3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCXVuc2lnbmVkIGludCB2c2NhbGVf ZmFjdG9yOworCisJdmM0X3N0YXRlID0gdG9fdmM0X3BsYW5lX3N0YXRlKHN0YXRlKTsKKwljcnRj X3N0YXRlID0gZHJtX2F0b21pY19nZXRfZXhpc3RpbmdfY3J0Y19zdGF0ZShzdGF0ZS0+c3RhdGUs CisJCQkJCQkJc3RhdGUtPmNydGMpOworCXZyZWZyZXNoID0gZHJtX21vZGVfdnJlZnJlc2goJmNy dGNfc3RhdGUtPmFkanVzdGVkX21vZGUpOworCisJLyogVGhlIEhWUyBpcyBhYmxlIHRvIHByb2Nl c3MgMiBwaXhlbHMvY3ljbGUgd2hlbiBzY2FsaW5nIHRoZSBzb3VyY2UsCisJICogNCBwaXhlbHMv Y3ljbGUgb3RoZXJ3aXNlLgorCSAqIEFscGhhIGJsZW5kaW5nIHN0ZXAgc2VlbXMgdG8gYmUgcGlw ZWxpbmVkIGFuZCBpdCdzIGFsd2F5cyBvcGVyYXRpbmcKKwkgKiBhdCA0IHBpeGVscy9jeWNsZSwg c28gdGhlIGxpbWl0aW5nIGFzcGVjdCBoZXJlIHNlZW1zIHRvIGJlIHRoZQorCSAqIHNjYWxlciBi bG9jay4KKwkgKiBIVlMgbG9hZCBpcyBleHByZXNzZWQgaW4gY2xrLWN5Y2xlcy9zZWMgKEFLQSBI eikuCisJICovCisJaWYgKHZjNF9zdGF0ZS0+eF9zY2FsaW5nWzBdICE9IFZDNF9TQ0FMSU5HX05P TkUgfHwKKwkgICAgdmM0X3N0YXRlLT54X3NjYWxpbmdbMV0gIT0gVkM0X1NDQUxJTkdfTk9ORSB8 fAorCSAgICB2YzRfc3RhdGUtPnlfc2NhbGluZ1swXSAhPSBWQzRfU0NBTElOR19OT05FIHx8CisJ ICAgIHZjNF9zdGF0ZS0+eV9zY2FsaW5nWzFdICE9IFZDNF9TQ0FMSU5HX05PTkUpCisJCWh2c19s b2FkX3NoaWZ0ID0gMTsKKwllbHNlCisJCWh2c19sb2FkX3NoaWZ0ID0gMjsKKworCXZjNF9zdGF0 ZS0+bWVtYnVzX2xvYWQgPSAwOworCXZjNF9zdGF0ZS0+aHZzX2xvYWQgPSAwOworCWZvciAoaSA9 IDA7IGkgPCBmYi0+Zm9ybWF0LT5udW1fcGxhbmVzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBw aXhlbHNfbG9hZDsKKworCQkvKiBFdmVuIGlmIHRoZSBiYW5kd2lkdGgvcGxhbmUgcmVxdWlyZWQg Zm9yIGEgc2luZ2xlIGZyYW1lIGlzCisJCSAqCisJCSAqIHZjNF9zdGF0ZS0+c3JjX3dbaV0gKiB2 YzRfc3RhdGUtPnNyY19oW2ldICogY3BwICogdnJlZnJlc2gKKwkJICoKKwkJICogd2hlbiBkb3du c2NhbGluZywgd2UgaGF2ZSB0byByZWFkIG1vcmUgcGl4ZWxzIHBlciBsaW5lIGluCisJCSAqIHRo ZSB0aW1lIGZyYW1lIHJlc2VydmVkIGZvciBhIHNpbmdsZSBsaW5lLCBzbyB0aGUgYmFuZHdpZHRo CisJCSAqIGRlbWFuZCBjYW4gYmUgcHVuY3R1YWxseSBoaWdoZXIuIFRvIGFjY291bnQgZm9yIHRo YXQsIHdlCisJCSAqIGNhbGN1bGF0ZSB0aGUgZG93bi1zY2FsaW5nIGZhY3RvciBhbmQgbXVsdGlw bHkgdGhlIHBsYW5lCisJCSAqIGxvYWQgYnkgdGhpcyBudW1iZXIuIFdlJ3JlIGxpa2VseSBvdmVy LWVzdGltYXRpbmcgdGhlIHJlYWQKKwkJICogZGVtYW5kLCBidXQgdGhhdCdzIGJldHRlciB0aGFu IHVuZGVyLWVzdGltYXRpbmcgaXQuCisJCSAqLworCQl2c2NhbGVfZmFjdG9yID0gRElWX1JPVU5E X1VQKHZjNF9zdGF0ZS0+c3JjX2hbaV0sCisJCQkJCSAgICAgdmM0X3N0YXRlLT5jcnRjX2gpOwor CQlwaXhlbHNfbG9hZCA9IHZjNF9zdGF0ZS0+c3JjX3dbaV0gKiB2YzRfc3RhdGUtPnNyY19oW2ld ICoKKwkJCSAgICAgIHZzY2FsZV9mYWN0b3I7CisKKwkJdmM0X3N0YXRlLT5tZW1idXNfbG9hZCAr PSBmYi0+Zm9ybWF0LT5jcHBbaV0gKiBwaXhlbHNfbG9hZDsKKwkJdmM0X3N0YXRlLT5odnNfbG9h ZCArPSBwaXhlbHNfbG9hZDsKKwl9CisKKwl2YzRfc3RhdGUtPmh2c19sb2FkICo9IHZyZWZyZXNo OworCXZjNF9zdGF0ZS0+aHZzX2xvYWQgPj49IGh2c19sb2FkX3NoaWZ0OworCXZjNF9zdGF0ZS0+ bWVtYnVzX2xvYWQgKj0gdnJlZnJlc2g7Cit9CisKIC8qIFdyaXRlcyBvdXQgYSBmdWxsIGRpc3Bs YXkgbGlzdCBmb3IgYW4gYWN0aXZlIHBsYW5lIHRvIHRoZSBwbGFuZSdzCiAgKiBwcml2YXRlIGRs aXN0IHN0YXRlLgogICovCkBAIC03MjIsNiArNzgwLDggQEAgc3RhdGljIGludCB2YzRfcGxhbmVf bW9kZV9zZXQoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCiAJdmM0X3N0YXRlLT5uZWVkc19iZ19m aWxsID0gZmItPmZvcm1hdC0+aGFzX2FscGhhIHx8ICFjb3ZlcnNfc2NyZWVuIHx8CiAJCQkJICAg c3RhdGUtPmFscGhhICE9IERSTV9CTEVORF9BTFBIQV9PUEFRVUU7CiAKKwl2YzRfcGxhbmVfY2Fs Y19sb2FkKHN0YXRlKTsKKwogCXJldHVybiAwOwogfQogCi0tIAoyLjE0LjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=