From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v4 05/19] drm: Add VRAM MM, a simple memory manager for dedicated VRAM Date: Mon, 6 May 2019 10:26:35 +0200 Message-ID: <20190506082649.942-6-tzimmermann@suse.de> References: <20190506082649.942-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id AA5F58923C for ; Mon, 6 May 2019 08:26:57 +0000 (UTC) In-Reply-To: <20190506082649.942-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: daniel@ffwll.ch, airlied@linux.ie, kraxel@redhat.com, christian.koenig@amd.com, ray.huang@amd.com, hdegoede@redhat.com, noralf@tronnes.org, sam@ravnborg.org, z.liuxinliang@hisilicon.com, zourongrong@gmail.com, kong.kongxinwei@hisilicon.com, puck.chen@hisilicon.com Cc: Thomas Zimmermann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org List-Id: dri-devel@lists.freedesktop.org VGhlIFZSQU0gTU0gbWVtb3J5IG1hbmFnZXIgaXMgYSBoZWxwZXIgbGlicmFyeSB0aGF0IG1hbmFn ZXMgZGVkaWNhdGVkIHZpZGVvCm1lbW9yeSBvZiBzaW1wbGUgZnJhbWVidWZmZXIgZGV2aWNlcy4g SXQgaXMgc3VwcG9ydGVkIHRvIGJlIHVzZWQgd2l0aApzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVj dCwgYnV0IGRvZXMgbm90IGRlcGVuZCBvbiBpdC4KClRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNl ZCBvbiB0aGUgcmVzcGVjdGl2ZSBjb2RlIGZyb20gYXN0LCBib2NocywgYW5kCm1nYWcyMDAuIFRo ZXNlIGRyaXZlcnMgc2hhcmUgdGhlIGV4YWN0IHNhbWUgaW1wbGVtZW50YXRpb24gZXhjZXB0IGZv ciB0eXBlCm5hbWVzLiBUaGUgaGVscGVycyBhcmUgY3VycmVudGx5IGJ1aWxkIHdpdGggVFRNLiBU aGlzIG1heSBjaGFuZ2UgaW4gZnV0dXJlCnJldmlzaW9ucy4KCnY0OgoJKiBjbGVhbnVwcyBmcm9t IGNoZWNrcGF0Y2gucGwKdjI6CgkqIHJlbmFtZWQgdG8gc3RydWN0IGRybV92cmFtX21tCgkqIGFk ZCBkcm1fdnJhbV9tbV9tbWFwKCkgaGVscGVyCgkqIGRvY3VtZW50YXRpb24gZml4ZXMKClNpZ25l ZC1vZmYtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgotLS0KIERv Y3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QgICAgICAgICB8ICAxMyArLQogZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlICAgICAgICAgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX3Zy YW1fbW1faGVscGVyLmMgfCAyMTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRl L2RybS9kcm1fdnJhbV9tbV9oZWxwZXIuaCAgICAgfCAgNjkgKysrKysrKysrCiA0IGZpbGVzIGNo YW5nZWQsIDI5MyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1fdnJhbV9tbV9oZWxwZXIuYwogY3JlYXRlIG1vZGUgMTAw NjQ0IGluY2x1ZGUvZHJtL2RybV92cmFtX21tX2hlbHBlci5oCgpkaWZmIC0tZ2l0IGEvRG9jdW1l bnRhdGlvbi9ncHUvZHJtLW1tLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKaW5k ZXggYTNiNjg1MDg5NTEyLi5lYmE1MGFmYmRhNDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24v Z3B1L2RybS1tbS5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdApAQCAtNzks NyArNzksNiBAQCBjb3VudCBmb3IgdGhlIFRUTSwgd2hpY2ggd2lsbCBjYWxsIHlvdXIgaW5pdGlh bGl6YXRpb24gZnVuY3Rpb24uCiAKIFNlZSB0aGUgcmFkZW9uX3R0bS5jIGZpbGUgZm9yIGFuIGV4 YW1wbGUgb2YgdXNhZ2UuCiAKLQogVGhlIEdyYXBoaWNzIEV4ZWN1dGlvbiBNYW5hZ2VyIChHRU0p CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMzk1LDYgKzM5NCwx OCBAQCBHRU0gVlJBTSBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQogLi4ga2VybmVsLWRvYzo6 IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmMKICAgIDpleHBvcnQ6CiAKK1ZS QU0gTU0gSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fdnJhbV9t bV9oZWxwZXIuYworICAgOmRvYzogb3ZlcnZpZXcKKworLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUv ZHJtL2RybV92cmFtX21tX2hlbHBlci5oCisgICA6aW50ZXJuYWw6CisKKy4uIGtlcm5lbC1kb2M6 OiBkcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1fbW1faGVscGVyLmMKKyAgIDpleHBvcnQ6CisKIFZN QSBPZmZzZXQgTWFuYWdlcgogPT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCBlZDQ5 YjI0ODA3NjYuLjRjM2RjNDI2OGI2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMzMsNyArMzMsOCBAQCBkcm0t JChDT05GSUdfREVCVUdfRlMpICs9IGRybV9kZWJ1Z2ZzLm8gZHJtX2RlYnVnZnNfY3JjLm8KIGRy bS0kKENPTkZJR19EUk1fTE9BRF9FRElEX0ZJUk1XQVJFKSArPSBkcm1fZWRpZF9sb2FkLm8KIAog ZHJtX3ZyYW1faGVscGVyLXkgOj0gZHJtX2dlbV92cmFtX2hlbHBlci5vIFwKLQkJICAgICBkcm1f dnJhbV9oZWxwZXJfY29tbW9uLm8KKwkJICAgICBkcm1fdnJhbV9oZWxwZXJfY29tbW9uLm8gXAor CQkgICAgIGRybV92cmFtX21tX2hlbHBlci5vCiBvYmotJChDT05GSUdfRFJNX1ZSQU1fSEVMUEVS KSArPSBkcm1fdnJhbV9oZWxwZXIubwogCiBkcm1fa21zX2hlbHBlci15IDo9IGRybV9jcnRjX2hl bHBlci5vIGRybV9kcF9oZWxwZXIubyBkcm1fZHNjLm8gZHJtX3Byb2JlX2hlbHBlci5vIFwKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fdnJhbV9tbV9oZWxwZXIuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fdnJhbV9tbV9oZWxwZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmQxN2M1MTY5YjAxOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fdnJhbV9tbV9oZWxwZXIuYwpAQCAtMCwwICsxLDIxMCBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKworI2luY2x1ZGUgPGRybS9kcm1fdnJh bV9tbV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS90dG0v dHRtX3BhZ2VfYWxsb2MuaD4KKworLyoqCisgKiBET0M6IG92ZXJ2aWV3CisgKgorICogVGhlIGRh dGEgc3RydWN0dXJlICZzdHJ1Y3QgZHJtX3ZyYW1fbW0gYW5kIGl0cyBoZWxwZXJzIGltcGxlbWVu dCBhIG1lbW9yeQorICogbWFuYWdlciBmb3Igc2ltcGxlIGZyYW1lYnVmZmVyIGRldmljZXMgd2l0 aCBkZWRpY2F0ZWQgdmlkZW8gbWVtb3J5LiBCdWZmZXIKKyAqIG9iamVjdHMgYXJlIGVpdGhlciBw bGFjZWQgaW4gdmlkZW8gUkFNIG9yIGV2aWN0ZWQgdG8gc3lzdGVtIG1lbW9yeS4gVGhlc2UKKyAq IGhlbHBlciBmdW5jdGlvbnMgd29yayB3ZWxsIHdpdGggJnN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2Jq ZWN0LgorICovCisKKy8qCisgKiBUVE0gVFQKKyAqLworCitzdGF0aWMgdm9pZCBiYWNrZW5kX2Z1 bmNfZGVzdHJveShzdHJ1Y3QgdHRtX3R0ICp0dCkKK3sKKwl0dG1fdHRfZmluaSh0dCk7CisJa2Zy ZWUodHQpOworfQorCitzdGF0aWMgc3RydWN0IHR0bV9iYWNrZW5kX2Z1bmMgYmFja2VuZF9mdW5j ID0geworCS5kZXN0cm95ID0gYmFja2VuZF9mdW5jX2Rlc3Ryb3kKK307CisKKy8qCisgKiBUVE0g Qk8gZGV2aWNlCisgKi8KKworc3RhdGljIHN0cnVjdCB0dG1fdHQgKmJvX2RyaXZlcl90dG1fdHRf Y3JlYXRlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCisJCQkJCSAgICAgIHVpbnQzMl90 IHBhZ2VfZmxhZ3MpCit7CisJc3RydWN0IHR0bV90dCAqdHQ7CisJaW50IHJldDsKKworCXR0ID0g a3phbGxvYyhzaXplb2YoKnR0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0dCkKKwkJcmV0dXJuIE5V TEw7CisKKwl0dC0+ZnVuYyA9ICZiYWNrZW5kX2Z1bmM7CisKKwlyZXQgPSB0dG1fdHRfaW5pdCh0 dCwgYm8sIHBhZ2VfZmxhZ3MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl90dG1fdHRfaW5p dDsKKworCXJldHVybiB0dDsKKworZXJyX3R0bV90dF9pbml0OgorCWtmcmVlKHR0KTsKKwlyZXR1 cm4gTlVMTDsKK30KKworc3RhdGljIGludCBib19kcml2ZXJfaW5pdF9tZW1fdHlwZShzdHJ1Y3Qg dHRtX2JvX2RldmljZSAqYmRldiwgdWludDMyX3QgdHlwZSwKKwkJCQkgICBzdHJ1Y3QgdHRtX21l bV90eXBlX21hbmFnZXIgKm1hbikKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRUTV9QTF9T WVNURU06CisJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOworCQltYW4t PmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tfQ0FDSElORzsKKwkJbWFuLT5kZWZhdWx0 X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CisJCWJyZWFrOworCWNhc2UgVFRNX1BMX1ZS QU06CisJCW1hbi0+ZnVuYyA9ICZ0dG1fYm9fbWFuYWdlcl9mdW5jOworCQltYW4tPmZsYWdzID0g VFRNX01FTVRZUEVfRkxBR19GSVhFRCB8CisJCQkgICAgIFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFC TEU7CisJCW1hbi0+YXZhaWxhYmxlX2NhY2hpbmcgPSBUVE1fUExfRkxBR19VTkNBQ0hFRCB8CisJ CQkJCSBUVE1fUExfRkxBR19XQzsKKwkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxB R19XQzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBib19kcml2ZXJfZXZpY3RfZmxhZ3Moc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0ICpibywKKwkJCQkgIHN0cnVjdCB0dG1fcGxhY2VtZW50ICpwbGFjZW1lbnQp Cit7CisJc3RydWN0IGRybV92cmFtX21tICp2bW0gPSBkcm1fdnJhbV9tbV9vZl9iZGV2KGJvLT5i ZGV2KTsKKworCWlmICh2bW0tPmZ1bmNzICYmIHZtbS0+ZnVuY3MtPmV2aWN0X2ZsYWdzKQorCQl2 bW0tPmZ1bmNzLT5ldmljdF9mbGFncyhibywgcGxhY2VtZW50KTsKK30KKworc3RhdGljIGludCBi b19kcml2ZXJfdmVyaWZ5X2FjY2VzcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJ CSAgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBkcm1fdnJhbV9tbSAqdm1tID0gZHJt X3ZyYW1fbW1fb2ZfYmRldihiby0+YmRldik7CisKKwlpZiAoIXZtbS0+ZnVuY3MgfHwgIXZtbS0+ ZnVuY3MtPnZlcmlmeV9hY2Nlc3MpCisJCXJldHVybiAwOworCXJldHVybiB2bW0tPmZ1bmNzLT52 ZXJpZnlfYWNjZXNzKGJvLCBmaWxwKTsKK30KKworc3RhdGljIGludCBib19kcml2ZXJfaW9fbWVt X3Jlc2VydmUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkJICAgIHN0cnVjdCB0dG1f bWVtX3JlZyAqbWVtKQoreworCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0gYmRl di0+bWFuICsgbWVtLT5tZW1fdHlwZTsKKwlzdHJ1Y3QgZHJtX3ZyYW1fbW0gKnZtbSA9IGRybV92 cmFtX21tX29mX2JkZXYoYmRldik7CisKKwlpZiAoIShtYW4tPmZsYWdzICYgVFRNX01FTVRZUEVf RkxBR19NQVBQQUJMRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtLT5idXMuYWRkciA9IE5V TEw7CisJbWVtLT5idXMuc2l6ZSA9IG1lbS0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7CisKKwlz d2l0Y2ggKG1lbS0+bWVtX3R5cGUpIHsKKwljYXNlIFRUTV9QTF9TWVNURU06CS8qIG5vdGhpbmcg dG8gZG8gKi8KKwkJbWVtLT5idXMub2Zmc2V0ID0gMDsKKwkJbWVtLT5idXMuYmFzZSA9IDA7CisJ CW1lbS0+YnVzLmlzX2lvbWVtID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgVFRNX1BMX1ZSQU06 CisJCW1lbS0+YnVzLm9mZnNldCA9IG1lbS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKKwkJbWVtLT5i dXMuYmFzZSA9IHZtbS0+dnJhbV9iYXNlOworCQltZW0tPmJ1cy5pc19pb21lbSA9IHRydWU7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBib19kcml2ZXJfaW9fbWVtX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZp Y2UgKmJkZXYsCisJCQkJICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sgfQorCitzdGF0aWMg c3RydWN0IHR0bV9ib19kcml2ZXIgYm9fZHJpdmVyID0geworCS50dG1fdHRfY3JlYXRlID0gYm9f ZHJpdmVyX3R0bV90dF9jcmVhdGUsCisJLnR0bV90dF9wb3B1bGF0ZSA9IHR0bV9wb29sX3BvcHVs YXRlLAorCS50dG1fdHRfdW5wb3B1bGF0ZSA9IHR0bV9wb29sX3VucG9wdWxhdGUsCisJLmluaXRf bWVtX3R5cGUgPSBib19kcml2ZXJfaW5pdF9tZW1fdHlwZSwKKwkuZXZpY3Rpb25fdmFsdWFibGUg PSB0dG1fYm9fZXZpY3Rpb25fdmFsdWFibGUsCisJLmV2aWN0X2ZsYWdzID0gYm9fZHJpdmVyX2V2 aWN0X2ZsYWdzLAorCS52ZXJpZnlfYWNjZXNzID0gYm9fZHJpdmVyX3ZlcmlmeV9hY2Nlc3MsCisJ LmlvX21lbV9yZXNlcnZlID0gYm9fZHJpdmVyX2lvX21lbV9yZXNlcnZlLAorCS5pb19tZW1fZnJl ZSA9IGJvX2RyaXZlcl9pb19tZW1fZnJlZSwKK307CisKKy8qCisgKiBzdHJ1Y3QgZHJtX3ZyYW1f bW0KKyAqLworCisvKioKKyAqIGRybV92cmFtX21tX2luaXQoKSAtIEluaXRpYWxpemUgYW4gaW5z dGFuY2Ugb2YgVlJBTSBNTS4KKyAqIEB2bW06CXRoZSBWUkFNIE1NIGluc3RhbmNlIHRvIGluaXRp YWxpemUKKyAqIEBkZXY6CXRoZSBEUk0gZGV2aWNlCisgKiBAdnJhbV9iYXNlOgl0aGUgYmFzZSBh ZGRyZXNzIG9mIHRoZSB2aWRlbyBtZW1vcnkKKyAqIEB2cmFtX3NpemU6CXRoZSBzaXplIG9mIHRo ZSB2aWRlbyBtZW1vcnkgaW4gYnl0ZXMKKyAqIEBmdW5jczoJY2FsbGJhY2sgZnVuY3Rpb25zIGZv ciBidWZmZXIgb2JqZWN0cworICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG9yCisg KiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHJtX3ZyYW1fbW1f aW5pdChzdHJ1Y3QgZHJtX3ZyYW1fbW0gKnZtbSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ ICAgICB1aW50NjRfdCB2cmFtX2Jhc2UsIHNpemVfdCB2cmFtX3NpemUsCisJCSAgICAgY29uc3Qg c3RydWN0IGRybV92cmFtX21tX2Z1bmNzICpmdW5jcykKK3sKKwlpbnQgcmV0OworCisJdm1tLT52 cmFtX2Jhc2UgPSB2cmFtX2Jhc2U7CisJdm1tLT52cmFtX3NpemUgPSB2cmFtX3NpemU7CisJdm1t LT5mdW5jcyA9IGZ1bmNzOworCisJcmV0ID0gdHRtX2JvX2RldmljZV9pbml0KCZ2bW0tPmJkZXYs ICZib19kcml2ZXIsCisJCQkJIGRldi0+YW5vbl9pbm9kZS0+aV9tYXBwaW5nLAorCQkJCSB0cnVl KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHRtX2JvX2luaXRfbW0oJnZt bS0+YmRldiwgVFRNX1BMX1ZSQU0sIHZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV92cmFt X21tX2luaXQpOworCisvKioKKyAqIGRybV92cmFtX21tX2NsZWFudXAoKSAtIENsZWFucyB1cCBh biBpbml0aWFsaXplZCBpbnN0YW5jZSBvZiBWUkFNIE1NLgorICogQHZtbToJdGhlIFZSQU0gTU0g aW5zdGFuY2UgdG8gY2xlYW4gdXAKKyAqLwordm9pZCBkcm1fdnJhbV9tbV9jbGVhbnVwKHN0cnVj dCBkcm1fdnJhbV9tbSAqdm1tKQoreworCXR0bV9ib19kZXZpY2VfcmVsZWFzZSgmdm1tLT5iZGV2 KTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX3ZyYW1fbW1fY2xlYW51cCk7CisKKy8qKgorICogZHJt X3ZyYW1fbW1fbW1hcCgpIC0gSGVscGVyIGZvciBpbXBsZW1lbnRpbmcgJnN0cnVjdCBmaWxlX29w ZXJhdGlvbnMubW1hcCgpCisgKiBAZmlscDoJdGhlIG1hcHBpbmcncyBmaWxlIHN0cnVjdHVyZQor ICogQHZtYToJdGhlIG1hcHBpbmcncyBtZW1vcnkgYXJlYQorICogQHZtbToJdGhlIFZSQU0gTU0g aW5zdGFuY2UKKyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzLCBvcgorICogYSBuZWdh dGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRybV92cmFtX21tX21tYXAoc3Ry dWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgIHN0cnVj dCBkcm1fdnJhbV9tbSAqdm1tKQoreworCXJldHVybiB0dG1fYm9fbW1hcChmaWxwLCB2bWEsICZ2 bW0tPmJkZXYpOworfQorRVhQT1JUX1NZTUJPTChkcm1fdnJhbV9tbV9tbWFwKTsKZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL2RybV92cmFtX21tX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX3Zy YW1fbW1faGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41 ZDQ1YzY0NDdmYTQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fdnJhbV9tbV9o ZWxwZXIuaApAQCAtMCwwICsxLDY5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMC1vci1sYXRlciAqLworCisjaWZuZGVmIERSTV9WUkFNX01NX0hFTFBFUl9ICisjZGVmaW5l IERSTV9WUkFNX01NX0hFTFBFUl9ICisKKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9ib19kcml2ZXIu aD4KKworc3RydWN0IGRybV9kZXZpY2U7CisKKy8qKgorICogc3RydWN0IGRybV92cmFtX21tX2Z1 bmNzIC0gQ2FsbGJhY2sgZnVuY3Rpb25zIGZvciAmc3RydWN0IGRybV92cmFtX21tCisgKiBAZXZp Y3RfZmxhZ3M6CVByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIGZvciBzdHJ1Y3QgXAorCSZ0dG1f Ym9fZHJpdmVyLmV2aWN0X2ZsYWdzCisgKiBAdmVyaWZ5X2FjY2VzczoJUHJvdmlkZXMgYW4gaW1w bGVtZW50YXRpb24gZm9yIFwKKwlzdHJ1Y3QgJnR0bV9ib19kcml2ZXIudmVyaWZ5X2FjY2Vzcwor ICoKKyAqIFRoZXNlIGNhbGxiYWNrIGZ1bmN0aW9uIGludGVncmF0ZSBWUkFNIE1NIHdpdGggVFRN IGJ1ZmZlciBvYmplY3RzLiBOZXcKKyAqIGZ1bmN0aW9ucyBjYW4gYmUgYWRkZWQgaWYgbmVjZXNz YXJ5LgorICovCitzdHJ1Y3QgZHJtX3ZyYW1fbW1fZnVuY3MgeworCXZvaWQgKCpldmljdF9mbGFn cykoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKKwkJCSAgICBzdHJ1Y3QgdHRtX3BsYWNl bWVudCAqcGxhY2VtZW50KTsKKwlpbnQgKCp2ZXJpZnlfYWNjZXNzKShzdHJ1Y3QgdHRtX2J1ZmZl cl9vYmplY3QgKmJvLCBzdHJ1Y3QgZmlsZSAqZmlscCk7Cit9OworCisvKioKKyAqIHN0cnVjdCBk cm1fdnJhbV9tbSAtIEFuIGluc3RhbmNlIG9mIFZSQU0gTU0KKyAqIEB2cmFtX2Jhc2U6CUJhc2Ug YWRkcmVzcyBvZiB0aGUgbWFuYWdlZCB2aWRlbyBtZW1vcnkKKyAqIEB2cmFtX3NpemU6CVNpemUg b2YgdGhlIG1hbmFnZWQgdmlkZW8gbWVtb3J5IGluIGJ5dGVzCisgKiBAYmRldjoJVGhlIFRUTSBC TyBkZXZpY2UuCisgKiBAZnVuY3M6CVRUTSBCTyBmdW5jdGlvbnMKKyAqCisgKiBUaGUgZmllbGRz ICZzdHJ1Y3QgZHJtX3ZyYW1fbW0udnJhbV9iYXNlIGFuZAorICogJnN0cnVjdCBkcm1fdnJhbV9t bS52cm1fc2l6ZSBhcmUgbWFuYWdlZCBieSBWUkFNIE1NLCBidXQgYXJlCisgKiBhdmFpbGFibGUg Zm9yIHB1YmxpYyByZWFkIGFjY2Vzcy4gVXNlIHRoZSBmaWVsZAorICogJnN0cnVjdCBkcm1fdnJh bV9tbS5iZGV2IHRvIGFjY2VzcyB0aGUgVFRNIEJPIGRldmljZS4KKyAqLworc3RydWN0IGRybV92 cmFtX21tIHsKKwl1aW50NjRfdCB2cmFtX2Jhc2U7CisJc2l6ZV90IHZyYW1fc2l6ZTsKKworCXN0 cnVjdCB0dG1fYm9fZGV2aWNlIGJkZXY7CisKKwljb25zdCBzdHJ1Y3QgZHJtX3ZyYW1fbW1fZnVu Y3MgKmZ1bmNzOworfTsKKworLyoqCisgKiBkcm1fdnJhbV9tbV9vZl9iZGV2KCkgLSBcCisJUmV0 dXJucyB0aGUgY29udGFpbmVyIG9mIHR5cGUgJnN0cnVjdCB0dG1fYm9fZGV2aWNlIGZvciBmaWVs ZCBiZGV2LgorICogQGJkZXY6CXRoZSBUVE0gQk8gZGV2aWNlCisgKgorICogUmV0dXJuczoKKyAq IFRoZSBjb250YWluaW5nIGluc3RhbmNlIG9mICZzdHJ1Y3QgZHJtX3ZyYW1fbW0KKyAqLworc3Rh dGljIGlubGluZSBzdHJ1Y3QgZHJtX3ZyYW1fbW0gKmRybV92cmFtX21tX29mX2JkZXYoCisJc3Ry dWN0IHR0bV9ib19kZXZpY2UgKmJkZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihiZGV2LCBz dHJ1Y3QgZHJtX3ZyYW1fbW0sIGJkZXYpOworfQorCitpbnQgZHJtX3ZyYW1fbW1faW5pdChzdHJ1 Y3QgZHJtX3ZyYW1fbW0gKnZtbSwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICB1aW50 NjRfdCB2cmFtX2Jhc2UsIHNpemVfdCB2cmFtX3NpemUsCisJCSAgICAgY29uc3Qgc3RydWN0IGRy bV92cmFtX21tX2Z1bmNzICpmdW5jcyk7Cit2b2lkIGRybV92cmFtX21tX2NsZWFudXAoc3RydWN0 IGRybV92cmFtX21tICp2bW0pOworCitpbnQgZHJtX3ZyYW1fbW1fbW1hcChzdHJ1Y3QgZmlsZSAq ZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCSAgICAgc3RydWN0IGRybV92cmFt X21tICp2bW0pOworCisjZW5kaWYKLS0gCjIuMjEuMAoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVs