From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v4 01/19] drm: Add |struct drm_gem_vram_object| and helpers Date: Mon, 6 May 2019 10:26:31 +0200 Message-ID: <20190506082649.942-2-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 073908923C 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 VGhlIHR5cGUgfHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0fCBpbXBsZW1lbnRzIGEgR0VNIG9i amVjdCBmb3Igc2ltcGxlCmZyYW1lYnVmZmVyIGRldmljZXMgd2l0aCBkZWRpY2F0ZWQgdmlkZW8g bWVtb3J5LiBUaGUgQk8gaXMgZWl0aGVyIGxvY2F0ZWQKaW4gVlJBTSBvciBzeXN0ZW0gbWVtb3J5 LgoKVGhlIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIGNyZWF0ZWQgZnJvbSB0aGUgcmVzcGVjdGl2 ZSBjb2RlIGluIGFzdCwKYm9jaHMgYW5kIG1nYWcyMDAuIFRoZXNlIGRyaXZlcnMgY29weSB0aGVp ciBpbXBsZW1lbnRhdGlvbiBmcm9tIGVhY2gKb3RoZXI7IGV4Y2VwdCBmb3IgdGhlIG5hbWVzIG9m IHNldmVyYWwgZGF0YSB0eXBlcy4gVGhlIGhlbHBlcnMgYXJlCmN1cnJlbnRseSBidWlsZCB3aXRo IFRUTSwgYnV0IHRoaXMgaXMgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbgpkZXRhaWwgYW5k IG1heSBjaGFuZ2UgaW4gZnV0dXJlIHVwZGF0ZXMuCgp2NDoKCSogY2xlYW51cHMgZnJvbSBjaGVj a3BhdGNoLnBsCgkqIHJlbW92ZWQgc2V2ZXJhbCBmaXhlZC1zaXplIHR5cGVzIGZyb20gaW50ZXJm YWNlcwoJKiBEUk1fVlJBTV9IRUxQRVIgbm93IHNlbGVjdHMgRFJNX1RUTQoJKiByZW1vdmUgc2Vw YXJhdGUgY29uZmlnIG9wdGlvbiBmb3IgR0VNIFZSQU0KdjI6CgkqIHJlbmFtZSB0byB8c3RydWN0 IGRybV9nZW1fdnJhbV9vYmplY3R8CgkqIG1vdmUgZHJtX2lzX2dlbV90dG0oKSB0byBhIGxhdGVy IHBhdGNoIGluIHRoZSBzZXJpZXMKCSogYWRkIGRybV9nZW1fdnJhbV9rbWFwX2F0KCkKCSogcmV0 dXJuIGlzX2lvbWVtIGZyb20ga21hcCBmdW5jdGlvbnMKCSogcmVkZWZpbmUgVFRNIHBsYWNlbWVu dCBmbGFncyBmb3IgcHVibGljIGludGVyZmFjZQoJKiBkb2N1bWVudGF0aW9uIGZpeGVzCgpTaWdu ZWQtb2ZmLWJ5OiBUaG9tYXMgWmltbWVybWFubiA8dHppbW1lcm1hbm5Ac3VzZS5kZT4KLS0tCiBE b2N1bWVudGF0aW9uL2dwdS9kcm0tbW0ucnN0ICAgICAgICAgICAgIHwgIDE1ICsKIGRyaXZlcnMv Z3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgNCArCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dl bV92cmFtX2hlbHBlci5jICAgIHwgNDEyICsrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2NvbW1vbi5jIHwgICA2ICsKIGluY2x1ZGUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuaCAgICAgICAgfCAgOTIgKysrKysKIDYgZmlsZXMgY2hhbmdlZCwg NTM2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJt X2dlbV92cmFtX2hlbHBlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ry bV92cmFtX2hlbHBlcl9jb21tb24uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuaAoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1t bS5yc3QgYi9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0ucnN0CmluZGV4IDU0YTY5NmQ5NjFhNy4u YTNiNjg1MDg5NTEyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0tbW0ucnN0Cisr KyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKQEAgLTM4MCw2ICszODAsMjEgQEAgR0VN IENNQSBIZWxwZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQogLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMv Z3B1L2RybS9kcm1fZ2VtX2NtYV9oZWxwZXIuYwogICAgOmV4cG9ydDoKIAorVlJBTSBIZWxwZXIg RnVuY3Rpb24gUmVmZXJlbmNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworR0VN IFZSQU0gSGVscGVyIEZ1bmN0aW9ucyBSZWZlcmVuY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisKKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92 cmFtX2hlbHBlci5jCisgICA6ZG9jOiBvdmVydmlldworCisuLiBrZXJuZWwtZG9jOjogaW5jbHVk ZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oCisgICA6aW50ZXJuYWw6CisKKy4uIGtlcm5lbC1k b2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5jCisgICA6ZXhwb3J0Ogor CiBWTUEgT2Zmc2V0IE1hbmFnZXIKID09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDIy NjdlODRkNWNiNC4uMTNkN2IzMjFkYjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMTYwLDYgKzE2MCwxMyBAQCBj b25maWcgRFJNX1RUTQogCSAgR1BVIG1lbW9yeSB0eXBlcy4gV2lsbCBiZSBlbmFibGVkIGF1dG9t YXRpY2FsbHkgaWYgYSBkZXZpY2UgZHJpdmVyCiAJICB1c2VzIGl0LgogCitjb25maWcgRFJNX1ZS QU1fSEVMUEVSCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIERSTQorCXNlbGVjdCBEUk1fVFRNCisJ aGVscAorCSAgSGVscGVycyBmb3IgVlJBTSBtZW1vcnkgbWFuYWdlbWVudAorCiBjb25maWcgRFJN X0dFTV9DTUFfSEVMUEVSCiAJYm9vbAogCWRlcGVuZHMgb24gRFJNCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKaW5kZXggNzJm NTAzNmQ5YmZhLi5lZDQ5YjI0ODA3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTMyLDYgKzMyLDEwIEBAIGRy bS0kKENPTkZJR19BR1ApICs9IGRybV9hZ3BzdXBwb3J0Lm8KIGRybS0kKENPTkZJR19ERUJVR19G UykgKz0gZHJtX2RlYnVnZnMubyBkcm1fZGVidWdmc19jcmMubwogZHJtLSQoQ09ORklHX0RSTV9M T0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwogCitkcm1fdnJhbV9oZWxwZXIt eSA6PSBkcm1fZ2VtX3ZyYW1faGVscGVyLm8gXAorCQkgICAgIGRybV92cmFtX2hlbHBlcl9jb21t b24ubworb2JqLSQoQ09ORklHX0RSTV9WUkFNX0hFTFBFUikgKz0gZHJtX3ZyYW1faGVscGVyLm8K KwogZHJtX2ttc19oZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8g ZHJtX2RzYy5vIGRybV9wcm9iZV9oZWxwZXIubyBcCiAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1f ZHBfbXN0X3RvcG9sb2d5Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCiAJCWRybV9rbXNfaGVscGVy X2NvbW1vbi5vIGRybV9kcF9kdWFsX21vZGVfaGVscGVyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt X3ZyYW1faGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j YWM1YjcwYzdmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92 cmFtX2hlbHBlci5jCkBAIC0wLDAgKzEsNDEyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vci1sYXRlcgorCisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9wYWdlX2FsbG9jLmg+CisKKy8qKgorICogRE9DOiBv dmVydmlldworICoKKyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBhIEdFTSBidWZmZXIgb2JqZWN0 IHRoYXQgaXMgYmFja2VkIGJ5IHZpZGVvIFJBTQorICogKFZSQU0pLiBJdCBjYW4gYmUgdXNlZCBm b3IgZnJhbWVidWZmZXIgZGV2aWNlcyB3aXRoIGRlZGljYXRlZCBtZW1vcnkuCisgKi8KKworLyoK KyAqIEJ1ZmZlci1vYmplY3RzIGhlbHBlcnMKKyAqLworCitzdGF0aWMgdm9pZCBkcm1fZ2VtX3Zy YW1fY2xlYW51cChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQoreworCS8qIFdlIGdv dCBoZXJlIHZpYSB0dG1fYm9fcHV0KCksIHdoaWNoIG1lYW5zIHRoYXQgdGhlCisJICogVFRNIGJ1 ZmZlciBvYmplY3QgaW4gJ2JvJyBoYXMgYWxyZWFkeSBiZWVuIGNsZWFuZWQKKwkgKiB1cDsgb25s eSByZWxlYXNlIHRoZSBHRU0gb2JqZWN0LgorCSAqLworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2Uo Jmdiby0+Z2VtKTsKK30KKworc3RhdGljIHZvaWQgZHJtX2dlbV92cmFtX2Rlc3Ryb3koc3RydWN0 IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKK3sKKwlkcm1fZ2VtX3ZyYW1fY2xlYW51cChnYm8p OworCWtmcmVlKGdibyk7Cit9CisKK3N0YXRpYyB2b2lkIHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ry b3koc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV92cmFt X29iamVjdCAqZ2JvID0gZHJtX2dlbV92cmFtX29mX2JvKGJvKTsKKworCWRybV9nZW1fdnJhbV9k ZXN0cm95KGdibyk7Cit9CisKK3N0YXRpYyB2b2lkIGRybV9nZW1fdnJhbV9wbGFjZW1lbnQoc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywKKwkJCQkgICB1bnNpZ25lZCBsb25nIHBsX2Zs YWcpCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGMgPSAwOworCisJZ2JvLT5w bGFjZW1lbnQucGxhY2VtZW50ID0gZ2JvLT5wbGFjZW1lbnRzOworCWdiby0+cGxhY2VtZW50LmJ1 c3lfcGxhY2VtZW50ID0gZ2JvLT5wbGFjZW1lbnRzOworCisJaWYgKHBsX2ZsYWcgJiBUVE1fUExf RkxBR19WUkFNKQorCQlnYm8tPnBsYWNlbWVudHNbYysrXS5mbGFncyA9IFRUTV9QTF9GTEFHX1dD IHwKKwkJCQkJICAgICBUVE1fUExfRkxBR19VTkNBQ0hFRCB8CisJCQkJCSAgICAgVFRNX1BMX0ZM QUdfVlJBTTsKKworCWlmIChwbF9mbGFnICYgVFRNX1BMX0ZMQUdfU1lTVEVNKQorCQlnYm8tPnBs YWNlbWVudHNbYysrXS5mbGFncyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkcgfAorCQkJCQkgICAgIFRU TV9QTF9GTEFHX1NZU1RFTTsKKworCWlmICghYykKKwkJZ2JvLT5wbGFjZW1lbnRzW2MrK10uZmxh Z3MgPSBUVE1fUExfTUFTS19DQUNISU5HIHwKKwkJCQkJICAgICBUVE1fUExfRkxBR19TWVNURU07 CisKKwlnYm8tPnBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gYzsKKwlnYm8tPnBsYWNlbWVudC5u dW1fYnVzeV9wbGFjZW1lbnQgPSBjOworCisJZm9yIChpID0gMDsgaSA8IGM7ICsraSkgeworCQln Ym8tPnBsYWNlbWVudHNbaV0uZnBmbiA9IDA7CisJCWdiby0+cGxhY2VtZW50c1tpXS5scGZuID0g MDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZHJtX2dlbV92cmFtX2luaXQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCSAgICAgc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkgICAgIHN0 cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sCisJCQkgICAgIHNpemVfdCBzaXplLCB1bnNp Z25lZCBsb25nIHBnX2FsaWduLAorCQkJICAgICBib29sIGludGVycnVwdGlibGUpCit7CisJaW50 IHJldDsKKwlzaXplX3QgYWNjX3NpemU7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVjdF9pbml0KGRl diwgJmdiby0+Z2VtLCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYWNjX3Np emUgPSB0dG1fYm9fZG1hX2FjY19zaXplKGJkZXYsIHNpemUsIHNpemVvZigqZ2JvKSk7CisKKwln Ym8tPmJvLmJkZXYgPSBiZGV2OworCWRybV9nZW1fdnJhbV9wbGFjZW1lbnQoZ2JvLCBUVE1fUExf RkxBR19WUkFNIHwgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKworCXJldCA9IHR0bV9ib19pbml0KGJk ZXYsICZnYm8tPmJvLCBzaXplLCB0dG1fYm9fdHlwZV9kZXZpY2UsCisJCQkgICZnYm8tPnBsYWNl bWVudCwgcGdfYWxpZ24sIGludGVycnVwdGlibGUsIGFjY19zaXplLAorCQkJICBOVUxMLCBOVUxM LCB0dG1fYnVmZmVyX29iamVjdF9kZXN0cm95KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9kcm1f Z2VtX29iamVjdF9yZWxlYXNlOworCisJcmV0dXJuIDA7CisKK2Vycl9kcm1fZ2VtX29iamVjdF9y ZWxlYXNlOgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Z2VtKTsKKwlyZXR1cm4gcmV0 OworfQorCisvKioKKyAqIGRybV9nZW1fdnJhbV9jcmVhdGUoKSAtIENyZWF0ZXMgYSBWUkFNLWJh Y2tlZCBHRU0gb2JqZWN0CisgKiBAZGV2OgkJdGhlIERSTSBkZXZpY2UKKyAqIEBiZGV2OgkJdGhl IFRUTSBCTyBkZXZpY2UgYmFja2luZyB0aGUgb2JqZWN0CisgKiBAc2l6ZToJCXRoZSBidWZmZXIg c2l6ZSBpbiBieXRlcworICogQHBnX2FsaWduOgkJdGhlIGJ1ZmZlcidzIGFsaWdubWVudCBpbiBt dWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZQorICogQGludGVycnVwdGlibGU6CXNsZWVwIGludGVy cnVwdGlibGUgaWYgd2FpdGluZyBmb3IgbWVtb3J5CisgKgorICogUmV0dXJuczoKKyAqIEEgbmV3 IGluc3RhbmNlIG9mICZzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCBvbiBzdWNjZXNzLCBvcgor ICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK3N0cnVj dCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpkcm1fZ2VtX3ZyYW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKKwkJCQkJCXNpemVf dCBzaXplLAorCQkJCQkJdW5zaWduZWQgbG9uZyBwZ19hbGlnbiwKKwkJCQkJCWJvb2wgaW50ZXJy dXB0aWJsZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvOworCWludCByZXQ7 CisKKwlnYm8gPSBremFsbG9jKHNpemVvZigqZ2JvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnYm8p CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcmV0ID0gZHJtX2dlbV92cmFtX2luaXQo ZGV2LCBiZGV2LCBnYm8sIHNpemUsIHBnX2FsaWduLCBpbnRlcnJ1cHRpYmxlKTsKKwlpZiAocmV0 IDwgMCkKKwkJZ290byBlcnJfa2ZyZWU7CisKKwlyZXR1cm4gZ2JvOworCitlcnJfa2ZyZWU6CisJ a2ZyZWUoZ2JvKTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorRVhQT1JUX1NZTUJPTChkcm1f Z2VtX3ZyYW1fY3JlYXRlKTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fcHV0KCkgLSBSZWxlYXNl cyBhIHJlZmVyZW5jZSB0byBhIFZSQU0tYmFja2VkIEdFTSBvYmplY3QKKyAqIEBnYm86CXRoZSBH RU0gVlJBTSBvYmplY3QKKyAqCisgKiBTZWUgdHRtX2JvX3B1dCgpIGZvciBtb3JlIGluZm9ybWF0 aW9uLgorICovCit2b2lkIGRybV9nZW1fdnJhbV9wdXQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgKmdibykKK3sKKwl0dG1fYm9fcHV0KCZnYm8tPmJvKTsKK30KK0VYUE9SVF9TWU1CT0woZHJt X2dlbV92cmFtX3B1dCk7CisKKy8qKgorICogZHJtX2dlbV92cmFtX3Jlc2VydmUoKSAtIFJlc2Vy dmVzIGEgVlJBTS1iYWNrZWQgR0VNIG9iamVjdAorICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVj dAorICogQG5vX3dhaXQ6CWRvbid0IHdhaXQgZm9yIGJ1ZmZlciBvYmplY3QgdG8gYmVjb21lIGF2 YWlsYWJsZQorICoKKyAqIFNlZSB0dG1fYm9fcmVzZXJ2ZSgpIGZvciBtb3JlIGluZm9ybWF0aW9u LgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG9yCisgKiBhIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb3RoZXJ3aXNlCisgKi8KK2ludCBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZShzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBib29sIG5vX3dhaXQpCit7CisJcmV0dXJuIHR0bV9i b19yZXNlcnZlKCZnYm8tPmJvLCB0cnVlLCBub193YWl0LCBOVUxMKTsKK30KK0VYUE9SVF9TWU1C T0woZHJtX2dlbV92cmFtX3Jlc2VydmUpOworCisvKioKKyAqIGRybV9nZW1fdnJhbV91bnJlc2Vy dmUoKSAtIFwKKwlSZWxlYXNlIGEgcmVzZXJ2YXRpb24gYWNxdWlyZWQgYnkgZHJtX2dlbV92cmFt X3Jlc2VydmUoKQorICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAorICoKKyAqIFNlZSB0dG1f Ym9fdW5yZXNlcnZlKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQgZHJtX2dlbV92 cmFtX3VucmVzZXJ2ZShzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQoreworCXR0bV9i b191bnJlc2VydmUoJmdiby0+Ym8pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fdW5y ZXNlcnZlKTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fbW1hcF9vZmZzZXQoKSAtIFJldHVybnMg YSBHRU0gVlJBTSBvYmplY3QncyBtbWFwIG9mZnNldAorICogQGdibzoJdGhlIEdFTSBWUkFNIG9i amVjdAorICoKKyAqIFNlZSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoKSBmb3IgbW9yZSBpbmZv cm1hdGlvbi4KKyAqCisgKiBSZXR1cm5zOgorICogVGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQg Zm9yIHVzZXJzcGFjZSBtYXBwaW5ncyBvbiBzdWNjZXNzLCBvcgorICogMCBpZiBubyBvZmZzZXQg aXMgYWxsb2NhdGVkLgorICovCit1NjQgZHJtX2dlbV92cmFtX21tYXBfb2Zmc2V0KHN0cnVjdCBk cm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pCit7CisJcmV0dXJuIGRybV92bWFfbm9kZV9vZmZzZXRf YWRkcigmZ2JvLT5iby52bWFfbm9kZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9t bWFwX29mZnNldCk7CisKKy8qKgorICogZHJtX2dlbV92cmFtX29mZnNldCgpIC0gXAorCVJldHVy bnMgYSBHRU0gVlJBTSBvYmplY3QncyBvZmZzZXQgaW4gdmlkZW8gbWVtb3J5CisgKiBAZ2JvOgl0 aGUgR0VNIFZSQU0gb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBidWZm ZXIgb2JqZWN0J3Mgb2Zmc2V0IGluIHRoZSBkZXZpY2UncyB2aWRlbworICogbWVtb3J5LiBUaGUg YnVmZmVyIG9iamVjdCBoYXMgdG8gYmUgcGlubmVkIHRvICVUVE1fUExfVlJBTS4KKyAqCisgKiBS ZXR1cm5zOgorICogVGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgaW4gdmlkZW8gbWVtb3J5IG9u IHN1Y2Nlc3MsIG9yCisgKiBhIG5lZ2F0aXZlIGVycm5vIGNvZGUgb3RoZXJ3aXNlLgorICovCitz NjQgZHJtX2dlbV92cmFtX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQor eworCWlmICghZ2JvLT5waW5fY291bnQpCisJCXJldHVybiAoczY0KS1FTk9ERVY7CisJcmV0dXJu IGdiby0+Ym8ub2Zmc2V0OworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fb2Zmc2V0KTsK KworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fcGluKCkgLSBQaW5zIGEgR0VNIFZSQU0gb2JqZWN0IGlu IGEgcmVnaW9uLgorICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAorICogQHBsX2ZsYWc6CWEg Yml0bWFzayBvZiBwb3NzaWJsZSBtZW1vcnkgcmVnaW9ucworICoKKyAqIFBpbm5pbmcgYSBidWZm ZXIgb2JqZWN0IGVuc3VyZXMgdGhhdCBpdCBpcyBub3QgZXZpY3RlZCBmcm9tCisgKiBhIG1lbW9y eSByZWdpb24uIEEgcGlubmVkIGJ1ZmZlciBvYmplY3QgaGFzIHRvIGJlIHVucGlubmVkIGJlZm9y ZQorICogaXQgY2FuIGJlIHBpbm5lZCB0byBhbm90aGVyIHJlZ2lvbi4KKyAqCisgKiBSZXR1cm5z OgorICogMCBvbiBzdWNjZXNzLCBvcgorICogYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lz ZS4KKyAqLworaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qg KmdibywgdW5zaWduZWQgbG9uZyBwbF9mbGFnKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHR0 bV9vcGVyYXRpb25fY3R4IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07CisKKwlpZiAoZ2JvLT5waW5f Y291bnQpIHsKKwkJKytnYm8tPnBpbl9jb3VudDsKKwkJcmV0dXJuIDA7CisJfQorCisJZHJtX2dl bV92cmFtX3BsYWNlbWVudChnYm8sIHBsX2ZsYWcpOworCWZvciAoaSA9IDA7IGkgPCBnYm8tPnBs YWNlbWVudC5udW1fcGxhY2VtZW50OyArK2kpCisJCWdiby0+cGxhY2VtZW50c1tpXS5mbGFncyB8 PSBUVE1fUExfRkxBR19OT19FVklDVDsKKworCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmZ2JvLT5i bywgJmdiby0+cGxhY2VtZW50LCAmY3R4KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK KworCWdiby0+cGluX2NvdW50ID0gMTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChk cm1fZ2VtX3ZyYW1fcGluKTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fdW5waW4oKSAtIFVucGlu cyBhIEdFTSBWUkFNIG9iamVjdAorICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAorICoKKyAq IFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG9yCisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUg b3RoZXJ3aXNlLgorICovCitpbnQgZHJtX2dlbV92cmFtX3VucGluKHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8pCit7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9j dHggY3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKKworCWlmICghZ2JvLT5waW5fY291bnQpCisJCXJl dHVybiAwOworCisJLS1nYm8tPnBpbl9jb3VudDsKKwlpZiAoZ2JvLT5waW5fY291bnQpCisJCXJl dHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQg OyArK2kpCisJCWdiby0+cGxhY2VtZW50c1tpXS5mbGFncyAmPSB+VFRNX1BMX0ZMQUdfTk9fRVZJ Q1Q7CisKKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUoJmdiby0+Ym8sICZnYm8tPnBsYWNlbWVudCwg JmN0eCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KK0VY UE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX3VucGluKTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1f cHVzaF90b19zeXN0ZW0oKSAtIFwKKwlVbnBpbnMgYSBHRU0gVlJBTSBvYmplY3QgYW5kIG1vdmVz IGl0IHRvIHN5c3RlbSBtZW1vcnkKKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKKyAqCisg KiBUaGlzIG9wZXJhdGlvbiBvbmx5IHdvcmtzIGlmIHRoZSBjYWxsZXIgaG9sZHMgdGhlIGZpbmFs IHBpbiBvbiB0aGUKKyAqIGJ1ZmZlciBvYmplY3QuCisgKgorICogUmV0dXJuczoKKyAqIDAgb24g c3VjY2Vzcywgb3IKKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK2lu dCBkcm1fZ2VtX3ZyYW1fcHVzaF90b19zeXN0ZW0oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qg KmdibykKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7 IGZhbHNlLCBmYWxzZSB9OworCisJaWYgKCFnYm8tPnBpbl9jb3VudCkKKwkJcmV0dXJuIDA7CisK KwktLWdiby0+cGluX2NvdW50OworCWlmIChnYm8tPnBpbl9jb3VudCkKKwkJcmV0dXJuIDA7CisK KwlpZiAoZ2JvLT5rbWFwLnZpcnR1YWwpCisJCXR0bV9ib19rdW5tYXAoJmdiby0+a21hcCk7CisK Kwlkcm1fZ2VtX3ZyYW1fcGxhY2VtZW50KGdibywgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKwlmb3Ig KGkgPSAwOyBpIDwgZ2JvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA7ICsraSkKKwkJZ2JvLT5w bGFjZW1lbnRzW2ldLmZsYWdzIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOworCisJcmV0ID0gdHRt X2JvX3ZhbGlkYXRlKCZnYm8tPmJvLCAmZ2JvLT5wbGFjZW1lbnQsICZjdHgpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92 cmFtX3B1c2hfdG9fc3lzdGVtKTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fa21hcF9hdCgpIC0g TWFwcyBhIEdFTSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlCisgKiBAZ2Jv Ogl0aGUgR0VNIFZSQU0gb2JqZWN0CisgKiBAbWFwOgllc3RhYmxpc2ggYSBtYXBwaW5nIGlmIG5l Y2Vzc2FyeQorICogQGlzX2lvbWVtOglyZXR1cm5zIHRydWUgaWYgdGhlIG1hcHBlZCBtZW1vcnkg aXMgSS9PIG1lbW9yeSwgb3IgZmFsc2UgXAorCW90aGVyd2lzZTsgY2FuIGJlIE5VTEwKKyAqIEBr bWFwOgl0aGUgbWFwcGluZydzIGttYXAgb2JqZWN0CisgKgorICogVGhpcyBmdW5jdGlvbiBtYXBz IHRoZSBidWZmZXIgb2JqZWN0IGludG8gdGhlIGtlcm5lbCdzIGFkZHJlc3Mgc3BhY2UKKyAqIG9y IHJldHVybnMgdGhlIGN1cnJlbnQgbWFwcGluZy4gSWYgdGhlIHBhcmFtZXRlciBtYXAgaXMgZmFs c2UsIHRoZQorICogZnVuY3Rpb24gb25seSBxdWVyaWVzIHRoZSBjdXJyZW50IG1hcHBpbmcsIGJ1 dCBkb2VzIG5vdCBlc3RhYmxpc2ggYQorICogbmV3IG9uZS4KKyAqCisgKiBSZXR1cm5zOgorICog VGhlIGJ1ZmZlcnMgdmlydHVhbCBhZGRyZXNzIGlmIG1hcHBlZCwgb3IKKyAqIE5VTEwgaWYgbm90 IG1hcHBlZCwgb3IKKyAqIGFuIEVSUl9QVFIoKS1lbmNvZGVkIGVycm9yIGNvZGUgb3RoZXJ3aXNl LgorICovCit2b2lkICpkcm1fZ2VtX3ZyYW1fa21hcF9hdChzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqZ2JvLCBib29sIG1hcCwKKwkJCSAgIGJvb2wgKmlzX2lvbWVtLCBzdHJ1Y3QgdHRtX2Jv X2ttYXBfb2JqICprbWFwKQoreworCWludCByZXQ7CisKKwlpZiAoa21hcC0+dmlydHVhbCB8fCAh bWFwKQorCQlnb3RvIG91dDsKKworCXJldCA9IHR0bV9ib19rbWFwKCZnYm8tPmJvLCAwLCBnYm8t PmJvLm51bV9wYWdlcywga21hcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsK Kworb3V0OgorCWlmICghaXNfaW9tZW0pCisJCXJldHVybiBrbWFwLT52aXJ0dWFsOworCWlmICgh a21hcC0+dmlydHVhbCkgeworCQkqaXNfaW9tZW0gPSBmYWxzZTsKKwkJcmV0dXJuIE5VTEw7CisJ fQorCXJldHVybiB0dG1fa21hcF9vYmpfdmlydHVhbChrbWFwLCBpc19pb21lbSk7Cit9CitFWFBP UlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rbWFwX2F0KTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1f a21hcCgpIC0gTWFwcyBhIEdFTSBWUkFNIG9iamVjdCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNl CisgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0CisgKiBAbWFwOgllc3RhYmxpc2ggYSBtYXBw aW5nIGlmIG5lY2Vzc2FyeQorICogQGlzX2lvbWVtOglyZXR1cm5zIHRydWUgaWYgdGhlIG1hcHBl ZCBtZW1vcnkgaXMgSS9PIG1lbW9yeSwgb3IgZmFsc2UgXAorCW90aGVyd2lzZTsgY2FuIGJlIE5V TEwKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1hcHMgdGhlIGJ1ZmZlciBvYmplY3QgaW50byB0aGUg a2VybmVsJ3MgYWRkcmVzcyBzcGFjZQorICogb3IgcmV0dXJucyB0aGUgY3VycmVudCBtYXBwaW5n LiBJZiB0aGUgcGFyYW1ldGVyIG1hcCBpcyBmYWxzZSwgdGhlCisgKiBmdW5jdGlvbiBvbmx5IHF1 ZXJpZXMgdGhlIGN1cnJlbnQgbWFwcGluZywgYnV0IGRvZXMgbm90IGVzdGFibGlzaCBhCisgKiBu ZXcgb25lLgorICoKKyAqIFJldHVybnM6CisgKiBUaGUgYnVmZmVycyB2aXJ0dWFsIGFkZHJlc3Mg aWYgbWFwcGVkLCBvcgorICogTlVMTCBpZiBub3QgbWFwcGVkLCBvcgorICogYW4gRVJSX1BUUigp LWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KK3ZvaWQgKmRybV9nZW1fdnJhbV9r bWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGJvb2wgbWFwLAorCQkJYm9vbCAq aXNfaW9tZW0pCit7CisJcmV0dXJuIGRybV9nZW1fdnJhbV9rbWFwX2F0KGdibywgbWFwLCBpc19p b21lbSwgJmdiby0+a21hcCk7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9rbWFwKTsK KworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fa3VubWFwX2F0KCkgLSBVbm1hcHMgYSBHRU0gVlJBTSBv YmplY3QKKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKKyAqIEBrbWFwOgl0aGUgbWFwcGlu ZydzIGttYXAgb2JqZWN0CisgKi8KK3ZvaWQgZHJtX2dlbV92cmFtX2t1bm1hcF9hdChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAorCQkJICAgIHN0cnVjdCB0dG1fYm9fa21hcF9vYmog KmttYXApCit7CisJaWYgKCFrbWFwLT52aXJ0dWFsKQorCQlyZXR1cm47CisKKwl0dG1fYm9fa3Vu bWFwKGttYXApOworCWttYXAtPnZpcnR1YWwgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTChkcm1f Z2VtX3ZyYW1fa3VubWFwX2F0KTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fa3VubWFwKCkgLSBV bm1hcHMgYSBHRU0gVlJBTSBvYmplY3QKKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKKyAq Lwordm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpn Ym8pCit7CisJZHJtX2dlbV92cmFtX2t1bm1hcF9hdChnYm8sICZnYm8tPmttYXApOworfQorRVhQ T1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fa3VubWFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fdnJhbV9oZWxwZXJfY29tbW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1f aGVscGVyX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u N2MyNWRhY2ExOGQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV92cmFt X2hlbHBlcl9jb21tb24uYwpAQCAtMCwwICsxLDYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wLW9yLWxhdGVyCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworTU9E VUxFX0RFU0NSSVBUSU9OKCJEUk0gVlJBTSBtZW1vcnktbWFuYWdlbWVudCBoZWxwZXJzIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZ2VtX3Zy YW1faGVscGVyLmggYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hOGZkNTgwZDQzNGQKLS0tIC9kZXYvbnVs bAorKysgYi9pbmNsdWRlL2RybS9kcm1fZ2VtX3ZyYW1faGVscGVyLmgKQEAgLTAsMCArMSw5MiBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKworI2lm bmRlZiBEUk1fR0VNX1ZSQU1fSEVMUEVSX0gKKyNkZWZpbmUgRFJNX0dFTV9WUkFNX0hFTFBFUl9I CisKKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGRybS90dG0vdHRtX2JvX2Fw aS5oPgorI2luY2x1ZGUgPGRybS90dG0vdHRtX3BsYWNlbWVudC5oPgorI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPiAvKiBmb3IgY29udGFpbmVyX29mKCkgKi8KKworc3RydWN0IGZpbHA7CisKKyNk ZWZpbmUgRFJNX0dFTV9WUkFNX1BMX0ZMQUdfVlJBTQlUVE1fUExfRkxBR19WUkFNCisjZGVmaW5l IERSTV9HRU1fVlJBTV9QTF9GTEFHX1NZU1RFTQlUVE1fUExfRkxBR19TWVNURU0KKworLyoKKyAq IEJ1ZmZlci1vYmplY3QgaGVscGVycworICovCisKKy8qKgorICogc3RydWN0IGRybV9nZW1fdnJh bV9vYmplY3QgLSBHRU0gb2JqZWN0IGJhY2tlZCBieSBWUkFNCisgKiBAZ2VtOglHRU0gb2JqZWN0 CisgKiBAYm86CQlUVE0gYnVmZmVyIG9iamVjdAorICogQGttYXA6CU1hcHBpbmcgaW5mb3JtYXRp b24gZm9yIEBibworICogQHBsYWNlbWVudDoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4gU3Vw cG9ydGVkIHBsYWNlbWVudHMgYXJlIFwKKwklVFRNX1BMX1ZSQU0gYW5kICVUVE1fUExfU1lTVEVN CisgKiBAcGxhY2VtZW50czoJVFRNIHBsYWNlbWVudCBpbmZvcm1hdGlvbi4KKyAqIEBwaW5fY291 bnQ6CVBpbiBjb3VudGVyCisgKgorICogVGhlIHR5cGUgc3RydWN0IGRybV9nZW1fdnJhbV9vYmpl Y3QgcmVwcmVzZW50cyBhIEdFTSBvYmplY3QgdGhhdCBpcworICogYmFja2VkIGJ5IFZSQU0uIEl0 IGNhbiBiZSB1c2VkIGZvciBzaW1wbGUgZnJhbWVidWZmZXIgZGV2aWNlcyB3aXRoCisgKiBkZWRp Y2F0ZWQgbWVtb3J5LiBUaGUgYnVmZmVyIG9iamVjdCBjYW4gYmUgZXZpY3RlZCB0byBzeXN0ZW0g bWVtb3J5IGlmCisgKiB2aWRlbyBtZW1vcnkgYmVjb21lcyBzY2FyY2UuCisgKi8KK3N0cnVjdCBk cm1fZ2VtX3ZyYW1fb2JqZWN0IHsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgZ2VtOworCXN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCBibzsKKwlzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqIGttYXA7CisK KwkvKiBTdXBwb3J0ZWQgcGxhY2VtZW50cyBhcmUgJVRUTV9QTF9WUkFNIGFuZCAlVFRNX1BMX1NZ U1RFTSAqLworCXN0cnVjdCB0dG1fcGxhY2VtZW50IHBsYWNlbWVudDsKKwlzdHJ1Y3QgdHRtX3Bs YWNlIHBsYWNlbWVudHNbM107CisKKwlpbnQgcGluX2NvdW50OworfTsKKworLyoqCisgKiBSZXR1 cm5zIHRoZSBjb250YWluZXIgb2YgdHlwZSAmc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QKKyAq IGZvciBmaWVsZCBiby4KKyAqIEBibzoJCXRoZSBWUkFNIGJ1ZmZlciBvYmplY3QKKyAqIFJldHVy bnM6CVRoZSBjb250YWluaW5nIEdFTSBWUkFNIG9iamVjdAorICovCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpkcm1fZ2VtX3ZyYW1fb2ZfYm8oCisJc3RydWN0IHR0 bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCwgYm8pOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbnRh aW5lciBvZiB0eXBlICZzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdAorICogZm9yIGZpZWxkIGdl bS4KKyAqIEBnZW06CXRoZSBHRU0gb2JqZWN0CisgKiBSZXR1cm5zOglUaGUgY29udGFpbmluZyBH RU0gVlJBTSBvYmplY3QKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqZHJtX2dlbV92cmFtX29mX2dlbSgKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qs IGdlbSk7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpkcm1fZ2VtX3ZyYW1fY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAq YmRldiwKKwkJCQkJCXNpemVfdCBzaXplLAorCQkJCQkJdW5zaWduZWQgbG9uZyBwZ19hbGlnbiwK KwkJCQkJCWJvb2wgaW50ZXJydXB0aWJsZSk7Cit2b2lkIGRybV9nZW1fdnJhbV9wdXQoc3RydWN0 IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7CitpbnQgZHJtX2dlbV92cmFtX3Jlc2VydmUoc3Ry dWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgYm9vbCBub193YWl0KTsKK3ZvaWQgZHJtX2dl bV92cmFtX3VucmVzZXJ2ZShzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKTsKK3U2NCBk cm1fZ2VtX3ZyYW1fbW1hcF9vZmZzZXQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7 CitzNjQgZHJtX2dlbV92cmFtX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKK2ludCBkcm1fZ2VtX3ZyYW1fcGluKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8s IHVuc2lnbmVkIGxvbmcgcGxfZmxhZyk7CitpbnQgZHJtX2dlbV92cmFtX3VucGluKHN0cnVjdCBk cm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOworaW50IGRybV9nZW1fdnJhbV9wdXNoX3RvX3N5c3Rl bShzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKTsKK3ZvaWQgKmRybV9nZW1fdnJhbV9r bWFwX2F0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGJvb2wgbWFwLAorCQkJICAg Ym9vbCAqaXNfaW9tZW0sIHN0cnVjdCB0dG1fYm9fa21hcF9vYmogKmttYXApOwordm9pZCAqZHJt X2dlbV92cmFtX2ttYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywgYm9vbCBtYXAs CisJCQlib29sICppc19pb21lbSk7Cit2b2lkIGRybV9nZW1fdnJhbV9rdW5tYXBfYXQoc3RydWN0 IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywKKwkJCSAgICBzdHJ1Y3QgdHRtX2JvX2ttYXBfb2Jq ICprbWFwKTsKK3ZvaWQgZHJtX2dlbV92cmFtX2t1bm1hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCAqZ2JvKTsKKworI2VuZGlmCi0tIAoyLjIxLjAKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==