From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v3 01/19] drm: Add |struct drm_gem_vram_object| and helpers Date: Mon, 29 Apr 2019 16:43:23 +0200 Message-ID: <20190429144341.12615-2-tzimmermann@suse.de> References: <20190429144341.12615-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 74B048924A for ; Mon, 29 Apr 2019 14:43:49 +0000 (UTC) In-Reply-To: <20190429144341.12615-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, Jerry.Zhang@amd.com, hdegoede@redhat.com, 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 IG1heSBjaGFuZ2UgaW4gZnV0dXJlIHVwZGF0ZXMuCgp2MjoKCSogcmVuYW1lIHRvIHxzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdHwKCSogbW92ZSBkcm1faXNfZ2VtX3R0bSgpIHRvIGEgbGF0ZXIg cGF0Y2ggaW4gdGhlIHNlcmllcwoJKiBhZGQgZHJtX2dlbV92cmFtX2ttYXBfYXQoKQoJKiByZXR1 cm4gaXNfaW9tZW0gZnJvbSBrbWFwIGZ1bmN0aW9ucwoJKiByZWRlZmluZSBUVE0gcGxhY2VtZW50 IGZsYWdzIGZvciBwdWJsaWMgaW50ZXJmYWNlCgkqIGRvY3VtZW50YXRpb24gZml4ZXMKClNpZ25l ZC1vZmYtYnk6IFRob21hcyBaaW1tZXJtYW5uIDx0emltbWVybWFubkBzdXNlLmRlPgotLS0KIERv Y3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QgICAgICAgICAgICAgfCAgMTIgKwogZHJpdmVycy9n cHUvZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICB8ICAxMyArCiBkcml2ZXJzL2dwdS9kcm0v TWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2Vt X3ZyYW1faGVscGVyLmMgICAgfCA0MTAgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9kcm1fdnJhbV9oZWxwZXJfY29tbW9uLmMgfCAgIDYgKwogaW5jbHVkZS9kcm0vZHJt X2dlbV92cmFtX2hlbHBlci5oICAgICAgICB8ICA5MiArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA1 MzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtX3ZyYW1faGVscGVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJt X3ZyYW1faGVscGVyX2NvbW1vbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJt X2dlbV92cmFtX2hlbHBlci5oCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1t LnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKaW5kZXggNTRhNjk2ZDk2MWE3Li5k NTMyN2VkNjA4ZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1tbS5yc3QKKysr IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLW1tLnJzdApAQCAtMzgwLDYgKzM4MCwxOCBAQCBHRU0g Q01BIEhlbHBlciBGdW5jdGlvbnMgUmVmZXJlbmNlCiAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9n cHUvZHJtL2RybV9nZW1fY21hX2hlbHBlci5jCiAgICA6ZXhwb3J0OgogCitHRU0gVlJBTSBIZWxw ZXIgRnVuY3Rpb25zIFJlZmVyZW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIu YworICAgOmRvYzogb3ZlcnZpZXcKKworLi4ga2VybmVsLWRvYzo6IGluY2x1ZGUvZHJtL2RybV9n ZW1fdnJhbV9oZWxwZXIuaAorICAgOmludGVybmFsOgorCisuLiBrZXJuZWwtZG9jOjogZHJpdmVy cy9ncHUvZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuYworICAgOmV4cG9ydDoKKwogVk1BIE9mZnNl dCBNYW5hZ2VyCiA9PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRleCAyMjY3ZTg0ZDVjYjQu LmMwZDQ5YTZjMDlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIv ZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTE2MCw2ICsxNjAsMTIgQEAgY29uZmlnIERSTV9U VE0KIAkgIEdQVSBtZW1vcnkgdHlwZXMuIFdpbGwgYmUgZW5hYmxlZCBhdXRvbWF0aWNhbGx5IGlm IGEgZGV2aWNlIGRyaXZlcgogCSAgdXNlcyBpdC4KIAorY29uZmlnIERSTV9WUkFNX0hFTFBFUgor CXRyaXN0YXRlCisJZGVwZW5kcyBvbiBEUk0gJiYgRFJNX1RUTQorCWhlbHAKKwkgIEhlbHBlcnMg Zm9yIFZSQU0gbWVtb3J5IG1hbmFnZW1lbnQKKwogY29uZmlnIERSTV9HRU1fQ01BX0hFTFBFUgog CWJvb2wKIAlkZXBlbmRzIG9uIERSTQpAQCAtMTc5LDYgKzE4NSwxMyBAQCBjb25maWcgRFJNX0dF TV9TSE1FTV9IRUxQRVIKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBpZiB5b3UgbmVlZCB0aGUgR0VN IHNobWVtIGhlbHBlciBmdW5jdGlvbnMKIAorY29uZmlnIERSTV9HRU1fVlJBTV9IRUxQRVIKKwli b29sCisJZGVwZW5kcyBvbiBEUk0KKwlzZWxlY3QgRFJNX1ZSQU1fSEVMUEVSCisJaGVscAorCSAg Q2hvb3NlIHRoaXMgaWYgeW91IG5lZWQgdGhlIEdFTSBWUkFNIGhlbHBlciBmdW5jdGlvbnMKKwog Y29uZmlnIERSTV9WTQogCWJvb2wKIAlkZXBlbmRzIG9uIERSTSAmJiBNTVUKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRl eCA3MmY1MDM2ZDliZmEuLmRiZTM4ZmUxYmNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAtMzIsNiArMzIsMTAg QEAgZHJtLSQoQ09ORklHX0FHUCkgKz0gZHJtX2FncHN1cHBvcnQubwogZHJtLSQoQ09ORklHX0RF QlVHX0ZTKSArPSBkcm1fZGVidWdmcy5vIGRybV9kZWJ1Z2ZzX2NyYy5vCiBkcm0tJChDT05GSUdf RFJNX0xPQURfRURJRF9GSVJNV0FSRSkgKz0gZHJtX2VkaWRfbG9hZC5vCiAKK2RybV92cmFtX2hl bHBlci15IDo9IGRybV92cmFtX2hlbHBlcl9jb21tb24ubworZHJtX3ZyYW1faGVscGVyLSQoQ09O RklHX0RSTV9HRU1fVlJBTV9IRUxQRVIpICs9IGRybV9nZW1fdnJhbV9oZWxwZXIubworb2JqLSQo Q09ORklHX0RSTV9WUkFNX0hFTFBFUikgKz0gZHJtX3ZyYW1faGVscGVyLm8KKwogZHJtX2ttc19o ZWxwZXIteSA6PSBkcm1fY3J0Y19oZWxwZXIubyBkcm1fZHBfaGVscGVyLm8gZHJtX2RzYy5vIGRy bV9wcm9iZV9oZWxwZXIubyBcCiAJCWRybV9wbGFuZV9oZWxwZXIubyBkcm1fZHBfbXN0X3RvcG9s b2d5Lm8gZHJtX2F0b21pY19oZWxwZXIubyBcCiAJCWRybV9rbXNfaGVscGVyX2NvbW1vbi5vIGRy bV9kcF9kdWFsX21vZGVfaGVscGVyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9nZW1fdnJhbV9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3ZyYW1faGVscGVy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMzlkOGE1ZjM2ZGYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5j CkBAIC0wLDAgKzEsNDEwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1v ci1sYXRlciAqLworCisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fdnJhbV9oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vdHRtL3R0bV9wYWdlX2FsbG9jLmg+CisKKy8qKgorICogRE9DOiBvdmVydmlldwor ICoKKyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyBhIEdFTSBvYmplY3QgdGhhdCBpcyBiYWNrZWQg YnkgVlJBTS4gSXQKKyAqIGNhbiBiZSB1c2VkIGZvciBzaW1wbGUgZnJhbWVidWZmZXIgZGV2aWNl cyB3aXRoIGRlZGljYXRlZCBtZW1vcnkuCisgKi8KKworLyoKKyAqIEJ1ZmZlci1vYmplY3RzIGhl bHBlcnMKKyAqLworCitzdGF0aWMgdm9pZCBkcm1fZ2VtX3ZyYW1fY2xlYW51cChzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvKQoreworCS8qIFdlIGdvdCBoZXJlIHZpYSB0dG1fYm9fcHV0 KCksIHdoaWNoIG1lYW5zIHRoYXQgdGhlCisJICogVFRNIGJ1ZmZlciBvYmplY3QgaW4gJ2JvJyBo YXMgYWxyZWFkeSBiZWVuIGNsZWFuZWQKKwkgKiB1cDsgb25seSByZWxlYXNlIHRoZSBHRU0gb2Jq ZWN0LiAqLworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Z2VtKTsKK30KKworc3RhdGlj IHZvaWQgZHJtX2dlbV92cmFtX2Rlc3Ryb3koc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bykKK3sKKwlkcm1fZ2VtX3ZyYW1fY2xlYW51cChnYm8pOworCWtmcmVlKGdibyk7Cit9CisKK3N0 YXRpYyB2b2lkIHR0bV9idWZmZXJfb2JqZWN0X2Rlc3Ryb3koc3RydWN0IHR0bV9idWZmZXJfb2Jq ZWN0ICpibykKK3sKKwlzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvID0gZHJtX2dlbV92 cmFtX29mX2JvKGJvKTsKKwlkcm1fZ2VtX3ZyYW1fZGVzdHJveShnYm8pOworfQorCitzdGF0aWMg dm9pZCBkcm1fZ2VtX3ZyYW1fcGxhY2VtZW50KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpn Ym8sIGludCBwbF9mbGFnKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBjID0g MDsKKworCWdiby0+cGxhY2VtZW50LnBsYWNlbWVudCA9IGdiby0+cGxhY2VtZW50czsKKwlnYm8t PnBsYWNlbWVudC5idXN5X3BsYWNlbWVudCA9IGdiby0+cGxhY2VtZW50czsKKworCWlmIChwbF9m bGFnICYgVFRNX1BMX0ZMQUdfVlJBTSkKKwkJZ2JvLT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBU VE1fUExfRkxBR19XQyB8CisJCQkJCSAgICAgVFRNX1BMX0ZMQUdfVU5DQUNIRUQgfAorCQkJCQkg ICAgIFRUTV9QTF9GTEFHX1ZSQU07CisKKwlpZiAocGxfZmxhZyAmIFRUTV9QTF9GTEFHX1NZU1RF TSkKKwkJZ2JvLT5wbGFjZW1lbnRzW2MrK10uZmxhZ3MgPSBUVE1fUExfTUFTS19DQUNISU5HIHwK KwkJCQkJICAgICBUVE1fUExfRkxBR19TWVNURU07CisKKwlpZiAoIWMpCisJCWdiby0+cGxhY2Vt ZW50c1tjKytdLmZsYWdzID0gVFRNX1BMX01BU0tfQ0FDSElORyB8CisJCQkJCSAgICAgVFRNX1BM X0ZMQUdfU1lTVEVNOworCisJZ2JvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudCA9IGM7CisJZ2Jv LT5wbGFjZW1lbnQubnVtX2J1c3lfcGxhY2VtZW50ID0gYzsKKworCWZvciAoaSA9IDA7IGkgPCBj OyArK2kpIHsKKwkJZ2JvLT5wbGFjZW1lbnRzW2ldLmZwZm4gPSAwOworCQlnYm8tPnBsYWNlbWVu dHNbaV0ubHBmbiA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGRybV9nZW1fdnJhbV9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2 LAorCQkJICAgICBzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLAorCQkJICAgICB1bnNp Z25lZCBsb25nIHNpemUsIHVpbnQzMl90IHBnX2FsaWduLAorCQkJICAgICBib29sIGludGVycnVw dGlibGUpCit7CisJaW50IHJldDsKKwlzaXplX3QgYWNjX3NpemU7CisKKwlyZXQgPSBkcm1fZ2Vt X29iamVjdF9pbml0KGRldiwgJmdiby0+Z2VtLCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJYWNjX3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKGJkZXYsIHNpemUsIHNpemVv ZigqZ2JvKSk7CisKKwlnYm8tPmJvLmJkZXYgPSBiZGV2OworCWRybV9nZW1fdnJhbV9wbGFjZW1l bnQoZ2JvLCBUVE1fUExfRkxBR19WUkFNIHwgVFRNX1BMX0ZMQUdfU1lTVEVNKTsKKworCXJldCA9 IHR0bV9ib19pbml0KGJkZXYsICZnYm8tPmJvLCBzaXplLCB0dG1fYm9fdHlwZV9kZXZpY2UsCisJ CQkgICZnYm8tPnBsYWNlbWVudCwgcGdfYWxpZ24sIGludGVycnVwdGlibGUsIGFjY19zaXplLAor CQkJICBOVUxMLCBOVUxMLCB0dG1fYnVmZmVyX29iamVjdF9kZXN0cm95KTsKKwlpZiAocmV0KQor CQlnb3RvIGVycl9kcm1fZ2VtX29iamVjdF9yZWxlYXNlOworCisJcmV0dXJuIDA7CisKK2Vycl9k cm1fZ2VtX29iamVjdF9yZWxlYXNlOgorCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJmdiby0+Z2Vt KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGRybV9nZW1fdnJhbV9jcmVhdGUoKSAtIENy ZWF0ZXMgYSBWUkFNLWJhY2tlZCBHRU0gb2JqZWN0CisgKiBAZGV2OgkJdGhlIERSTSBkZXZpY2UK KyAqIEBiZGV2OgkJdGhlIFRUTSBCTyBkZXZpY2UgYmFja2luZyB0aGUgb2JqZWN0CisgKiBAc2l6 ZToJCXRoZSBidWZmZXIgc2l6ZSBpbiBieXRlcworICogQHBnX2FsaWduOgkJdGhlIGJ1ZmZlcidz IGFsaWdubWVudCBpbiBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZQorICogQGludGVycnVwdGli bGU6CXNsZWVwIGludGVycnVwdGlibGUgaWYgd2FpdGluZyBmb3IgbWVtb3J5CisgKgorICogUmV0 dXJuczoKKyAqIEEgbmV3IGluc3RhbmNlIG9mICZzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCBv biBzdWNjZXNzLCBvcgorICogYW4gRVJSX1BUUigpLWVuY29kZWQgZXJyb3IgY29kZSBvdGhlcndp c2UuCisgKi8KK3N0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRl diwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJCXVpbnQzMl90IHBnX2FsaWduLAor CQkJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlKQoreworCXN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm87CisJaW50IHJldDsKKworCWdibyA9IGt6YWxsb2Moc2l6ZW9mKCpnYm8pLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWdibykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBk cm1fZ2VtX3ZyYW1faW5pdChkZXYsIGJkZXYsIGdibywgc2l6ZSwgcGdfYWxpZ24sIGludGVycnVw dGlibGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9rZnJlZTsKKworCXJldHVybiBnYm87 CisKK2Vycl9rZnJlZToKKwlrZnJlZShnYm8pOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitF WFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV9jcmVhdGUpOworCisvKioKKyAqIGRybV9nZW1fdnJh bV9wdXQoKSAtIFJlbGVhc2VzIGEgcmVmZXJlbmNlIHRvIGEgVlJBTS1iYWNrZWQgR0VNIG9iamVj dAorICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAorICoKKyAqIFNlZSB0dG1fYm9fcHV0KCkg Zm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KK3ZvaWQgZHJtX2dlbV92cmFtX3B1dChzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKQoreworCXR0bV9ib19wdXQoJmdiby0+Ym8pOworfQor RVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fcHV0KTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1f cmVzZXJ2ZSgpIC0gUmVzZXJ2ZXMgYSBWUkFNLWJhY2tlZCBHRU0gb2JqZWN0CisgKiBAZ2JvOgl0 aGUgR0VNIFZSQU0gb2JqZWN0CisgKiBAbm9fd2FpdDoJZG9uJ3Qgd2FpdCBmb3IgYnVmZmVyIG9i amVjdCB0byBiZWNvbWUgYXZhaWxhYmxlCisgKgorICogU2VlIHR0bV9ib19yZXNlcnZlKCkgZm9y IG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogUmV0dXJuczoKKyAqIDAgb24gc3VjY2Vzcywgb3IK KyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UKKyAqLworaW50IGRybV9nZW1fdnJh bV9yZXNlcnZlKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGJvb2wgbm9fd2FpdCkK K3sKKwlyZXR1cm4gdHRtX2JvX3Jlc2VydmUoJmdiby0+Ym8sIHRydWUsIG5vX3dhaXQsIE5VTEwp OworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZSk7CisKKy8qKgorICogZHJt X2dlbV92cmFtX3VucmVzZXJ2ZSgpIC0gXAorCVJlbGVhc2UgYSByZXNlcnZhdGlvbiBhY3F1aXJl ZCBieSBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZSgpCisgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0 CisgKgorICogU2VlIHR0bV9ib191bnJlc2VydmUoKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAq Lwordm9pZCBkcm1fZ2VtX3ZyYW1fdW5yZXNlcnZlKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0 ICpnYm8pCit7CisJdHRtX2JvX3VucmVzZXJ2ZSgmZ2JvLT5ibyk7Cit9CitFWFBPUlRfU1lNQk9M KGRybV9nZW1fdnJhbV91bnJlc2VydmUpOworCisvKioKKyAqIGRybV9nZW1fdnJhbV9tbWFwX29m ZnNldCgpIC0gUmV0dXJucyBhIEdFTSBWUkFNIG9iamVjdCdzIG1tYXAgb2Zmc2V0CisgKiBAZ2Jv Ogl0aGUgR0VNIFZSQU0gb2JqZWN0CisgKgorICogU2VlIGRybV92bWFfbm9kZV9vZmZzZXRfYWRk cigpIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIFJldHVybnM6CisgKiBUaGUgYnVmZmVy IG9iamVjdCdzIG9mZnNldCBmb3IgdXNlcnNwYWNlIG1hcHBpbmdzIG9uIHN1Y2Nlc3MsIG9yCisg KiAwIGlmIG5vIG9mZnNldCBpcyBhbGxvY2F0ZWQuCisgKi8KK3U2NCBkcm1fZ2VtX3ZyYW1fbW1h cF9vZmZzZXQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibykKK3sKKwlyZXR1cm4gZHJt X3ZtYV9ub2RlX29mZnNldF9hZGRyKCZnYm8tPmJvLnZtYV9ub2RlKTsKK30KK0VYUE9SVF9TWU1C T0woZHJtX2dlbV92cmFtX21tYXBfb2Zmc2V0KTsKKworLyoqCisgKiBkcm1fZ2VtX3ZyYW1fb2Zm c2V0KCkgLSBcCisJUmV0dXJucyBhIEdFTSBWUkFNIG9iamVjdCdzIG9mZnNldCBpbiB2aWRlbyBt ZW1vcnkKKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QKKyAqCisgKiBUaGlzIGZ1bmN0aW9u IHJldHVybnMgdGhlIGJ1ZmZlciBvYmplY3QncyBvZmZzZXQgaW4gdGhlIGRldmljZSdzIHZpZGVv CisgKiBtZW1vcnkuIFRoZSBidWZmZXIgb2JqZWN0IGhhcyB0byBiZSBwaW5uZWQgdG8gJVRUTV9Q TF9WUkFNLgorICoKKyAqIFJldHVybnM6CisgKiBUaGUgYnVmZmVyIG9iamVjdCdzIG9mZnNldCBp biB2aWRlbyBtZW1vcnkgb24gc3VjY2Vzcywgb3IKKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBv dGhlcndpc2UuCisgKi8KK3M2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3Zy YW1fb2JqZWN0ICpnYm8pCit7CisJaWYgKCFnYm8tPnBpbl9jb3VudCkKKwkJcmV0dXJuIChzNjQp LUVOT0RFVjsKKwlyZXR1cm4gZ2JvLT5iby5vZmZzZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9n ZW1fdnJhbV9vZmZzZXQpOworCisvKioKKyAqIGRybV9nZW1fdnJhbV9waW4oKSAtIFBpbnMgYSBH RU0gVlJBTSBvYmplY3QgaW4gYSByZWdpb24uCisgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0 CisgKiBAcGxfZmxhZzoJYSBiaXRtYXNrIG9mIHBvc3NpYmxlIG1lbW9yeSByZWdpb25zCisgKgor ICogUGlubmluZyBhIGJ1ZmZlciBvYmplY3QgZW5zdXJlcyB0aGF0IGl0IGlzIG5vdCBldmljdGVk IGZyb20KKyAqIGEgbWVtb3J5IHJlZ2lvbi4gQSBwaW5uZWQgYnVmZmVyIG9iamVjdCBoYXMgdG8g YmUgdW5waW5uZWQgYmVmb3JlCisgKiBpdCBjYW4gYmUgcGlubmVkIHRvIGFub3RoZXIgcmVnaW9u LgorICoKKyAqIFJldHVybnM6CisgKiAwIG9uIHN1Y2Nlc3MsIG9yCisgKiBhIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCitpbnQgZHJtX2dlbV92cmFtX3BpbihzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvLCB1MzIgcGxfZmxhZykKK3sKKwlpbnQgaSwgcmV0OworCXN0 cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9OworCisJaWYgKGdi by0+cGluX2NvdW50KSB7CisJCSsrZ2JvLT5waW5fY291bnQ7CisJCXJldHVybiAwOworCX0KKwor CWRybV9nZW1fdnJhbV9wbGFjZW1lbnQoZ2JvLCBwbF9mbGFnKTsKKwlmb3IgKGkgPSAwOyBpIDwg Z2JvLT5wbGFjZW1lbnQubnVtX3BsYWNlbWVudDsgKytpKQorCQlnYm8tPnBsYWNlbWVudHNbaV0u ZmxhZ3MgfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7CisKKwlyZXQgPSB0dG1fYm9fdmFsaWRhdGUo Jmdiby0+Ym8sICZnYm8tPnBsYWNlbWVudCwgJmN0eCk7CisJaWYgKHJldCA8IDApCisJCXJldHVy biByZXQ7CisKKwlnYm8tPnBpbl9jb3VudCA9IDE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9T WU1CT0woZHJtX2dlbV92cmFtX3Bpbik7CisKKy8qKgorICogZHJtX2dlbV92cmFtX3VucGluKCkg LSBVbnBpbnMgYSBHRU0gVlJBTSBvYmplY3QKKyAqIEBnYm86CXRoZSBHRU0gVlJBTSBvYmplY3QK KyAqCisgKiBSZXR1cm5zOgorICogMCBvbiBzdWNjZXNzLCBvcgorICogYSBuZWdhdGl2ZSBlcnJv ciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRybV9nZW1fdnJhbV91bnBpbihzdHJ1Y3QgZHJt X2dlbV92cmFtX29iamVjdCAqZ2JvKQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHR0bV9vcGVy YXRpb25fY3R4IGN0eCA9IHsgZmFsc2UsIGZhbHNlIH07CisKKwlpZiAoIWdiby0+cGluX2NvdW50 KQorCQlyZXR1cm4gMDsKKworCS0tZ2JvLT5waW5fY291bnQ7CisJaWYgKGdiby0+cGluX2NvdW50 KQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBnYm8tPnBsYWNlbWVudC5udW1fcGxh Y2VtZW50IDsgKytpKQorCQlnYm8tPnBsYWNlbWVudHNbaV0uZmxhZ3MgJj0gflRUTV9QTF9GTEFH X05PX0VWSUNUOworCisJcmV0ID0gdHRtX2JvX3ZhbGlkYXRlKCZnYm8tPmJvLCAmZ2JvLT5wbGFj ZW1lbnQsICZjdHgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7 Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fdnJhbV91bnBpbik7CisKKy8qKgorICogZHJtX2dl bV92cmFtX3B1c2hfdG9fc3lzdGVtKCkgLSBcCisJVW5waW5zIGEgR0VNIFZSQU0gb2JqZWN0IGFu ZCBtb3ZlcyBpdCB0byBzeXN0ZW0gbWVtb3J5CisgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0 CisgKgorICogVGhpcyBvcGVyYXRpb24gb25seSB3b3JrcyBpZiB0aGUgY2FsbGVyIGhvbGRzIHRo ZSBmaW5hbCBwaW4gb24gdGhlCisgKiBidWZmZXIgb2JqZWN0LgorICoKKyAqIFJldHVybnM6Cisg KiAwIG9uIHN1Y2Nlc3MsIG9yCisgKiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgor ICovCitpbnQgZHJtX2dlbV92cmFtX3B1c2hfdG9fc3lzdGVtKHN0cnVjdCBkcm1fZ2VtX3ZyYW1f b2JqZWN0ICpnYm8pCit7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHgg Y3R4ID0geyBmYWxzZSwgZmFsc2UgfTsKKworCWlmICghZ2JvLT5waW5fY291bnQpCisJCXJldHVy biAwOworCisJLS1nYm8tPnBpbl9jb3VudDsKKwlpZiAoZ2JvLT5waW5fY291bnQpCisJCXJldHVy biAwOworCisJaWYgKGdiby0+a21hcC52aXJ0dWFsKQorCQl0dG1fYm9fa3VubWFwKCZnYm8tPmtt YXApOworCisJZHJtX2dlbV92cmFtX3BsYWNlbWVudChnYm8sIFRUTV9QTF9GTEFHX1NZU1RFTSk7 CisJZm9yIChpID0gMDsgaSA8IGdiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgOyArK2kpCisJ CWdiby0+cGxhY2VtZW50c1tpXS5mbGFncyB8PSBUVE1fUExfRkxBR19OT19FVklDVDsKKworCXJl dCA9IHR0bV9ib192YWxpZGF0ZSgmZ2JvLT5ibywgJmdiby0+cGxhY2VtZW50LCAmY3R4KTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRy bV9nZW1fdnJhbV9wdXNoX3RvX3N5c3RlbSk7CisKKy8qKgorICogZHJtX2dlbV92cmFtX2ttYXBf YXQoKSAtIE1hcHMgYSBHRU0gVlJBTSBvYmplY3QgaW50byBrZXJuZWwgYWRkcmVzcyBzcGFjZQor ICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAorICogQG1hcDoJZXN0YWJsaXNoIGEgbWFwcGlu ZyBpZiBuZWNlc3NhcnkKKyAqIEBpc19pb21lbToJcmV0dXJucyB0cnVlIGlmIHRoZSBtYXBwZWQg bWVtb3J5IGlzIEkvTyBtZW1vcnksIG9yIGZhbHNlIFwKKwlvdGhlcndpc2U7IGNhbiBiZSBOVUxM CisgKiBAa21hcDoJdGhlIG1hcHBpbmcncyBrbWFwIG9iamVjdAorICoKKyAqIFRoaXMgZnVuY3Rp b24gbWFwcyB0aGUgYnVmZmVyIG9iamVjdCBpbnRvIHRoZSBrZXJuZWwncyBhZGRyZXNzIHNwYWNl CisgKiBvciByZXR1cm5zIHRoZSBjdXJyZW50IG1hcHBpbmcuIElmIHRoZSBwYXJhbWV0ZXIgbWFw IGlzIGZhbHNlLCB0aGUKKyAqIGZ1bmN0aW9uIG9ubHkgcXVlcmllcyB0aGUgY3VycmVudCBtYXBw aW5nLCBidXQgZG9lcyBub3QgZXN0YWJsaXNoIGEKKyAqIG5ldyBvbmUuCisgKgorICogUmV0dXJu czoKKyAqIFRoZSBidWZmZXJzIHZpcnR1YWwgYWRkcmVzcyBpZiBtYXBwZWQsIG9yCisgKiBOVUxM IGlmIG5vdCBtYXBwZWQsIG9yCisgKiBhbiBFUlJfUFRSKCktZW5jb2RlZCBlcnJvciBjb2RlIG90 aGVyd2lzZS4KKyAqLwordm9pZCogZHJtX2dlbV92cmFtX2ttYXBfYXQoc3RydWN0IGRybV9nZW1f dnJhbV9vYmplY3QgKmdibywgYm9vbCBtYXAsCisJCQkgICBib29sICppc19pb21lbSwgc3RydWN0 IHR0bV9ib19rbWFwX29iaiAqa21hcCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGttYXAtPnZpcnR1 YWwgfHwgIW1hcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB0dG1fYm9fa21hcCgmZ2JvLT5ibywg MCwgZ2JvLT5iby5udW1fcGFnZXMsIGttYXApOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRS KHJldCk7CisKK291dDoKKwlpZiAoIWlzX2lvbWVtKSB7CisJCXJldHVybiBrbWFwLT52aXJ0dWFs OworCX0KKwlpZiAoIWttYXAtPnZpcnR1YWwpIHsKKwkJKmlzX2lvbWVtID0gZmFsc2U7CisJCXJl dHVybiBOVUxMOworCX0KKwlyZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoa21hcCwgaXNfaW9t ZW0pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2VtX3ZyYW1fa21hcF9hdCk7CisKKy8qKgorICog ZHJtX2dlbV92cmFtX2ttYXAoKSAtIE1hcHMgYSBHRU0gVlJBTSBvYmplY3QgaW50byBrZXJuZWwg YWRkcmVzcyBzcGFjZQorICogQGdibzoJdGhlIEdFTSBWUkFNIG9iamVjdAorICogQG1hcDoJZXN0 YWJsaXNoIGEgbWFwcGluZyBpZiBuZWNlc3NhcnkKKyAqIEBpc19pb21lbToJcmV0dXJucyB0cnVl IGlmIHRoZSBtYXBwZWQgbWVtb3J5IGlzIEkvTyBtZW1vcnksIG9yIGZhbHNlIFwKKwlvdGhlcndp c2U7IGNhbiBiZSBOVUxMCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIHRoZSBidWZmZXIgb2Jq ZWN0IGludG8gdGhlIGtlcm5lbCdzIGFkZHJlc3Mgc3BhY2UKKyAqIG9yIHJldHVybnMgdGhlIGN1 cnJlbnQgbWFwcGluZy4gSWYgdGhlIHBhcmFtZXRlciBtYXAgaXMgZmFsc2UsIHRoZQorICogZnVu Y3Rpb24gb25seSBxdWVyaWVzIHRoZSBjdXJyZW50IG1hcHBpbmcsIGJ1dCBkb2VzIG5vdCBlc3Rh Ymxpc2ggYQorICogbmV3IG9uZS4KKyAqCisgKiBSZXR1cm5zOgorICogVGhlIGJ1ZmZlcnMgdmly dHVhbCBhZGRyZXNzIGlmIG1hcHBlZCwgb3IKKyAqIE5VTEwgaWYgbm90IG1hcHBlZCwgb3IKKyAq IGFuIEVSUl9QVFIoKS1lbmNvZGVkIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorICovCit2b2lkKiBk cm1fZ2VtX3ZyYW1fa21hcChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBib29sIG1h cCwKKwkJCWJvb2wgKmlzX2lvbWVtKQoreworCXJldHVybiBkcm1fZ2VtX3ZyYW1fa21hcF9hdChn Ym8sIG1hcCwgaXNfaW9tZW0sICZnYm8tPmttYXApOworfQorRVhQT1JUX1NZTUJPTChkcm1fZ2Vt X3ZyYW1fa21hcCk7CisKKy8qKgorICogZHJtX2dlbV92cmFtX2t1bm1hcF9hdCgpIC0gVW5tYXBz IGEgR0VNIFZSQU0gb2JqZWN0CisgKiBAZ2JvOgl0aGUgR0VNIFZSQU0gb2JqZWN0CisgKiBAa21h cDoJdGhlIG1hcHBpbmcncyBrbWFwIG9iamVjdAorICovCit2b2lkIGRybV9nZW1fdnJhbV9rdW5t YXBfYXQoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibywKKwkJCSAgICBzdHJ1Y3QgdHRt X2JvX2ttYXBfb2JqICprbWFwKQoreworCWlmICgha21hcC0+dmlydHVhbCkKKwkJcmV0dXJuOwor CisJdHRtX2JvX2t1bm1hcChrbWFwKTsKKwlrbWFwLT52aXJ0dWFsID0gTlVMTDsKK30KK0VYUE9S VF9TWU1CT0woZHJtX2dlbV92cmFtX2t1bm1hcF9hdCk7CisKKy8qKgorICogZHJtX2dlbV92cmFt X2t1bm1hcCgpIC0gVW5tYXBzIGEgR0VNIFZSQU0gb2JqZWN0CisgKiBAZ2JvOgl0aGUgR0VNIFZS QU0gb2JqZWN0CisgKi8KK3ZvaWQgZHJtX2dlbV92cmFtX2t1bm1hcChzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKQoreworCWRybV9nZW1fdnJhbV9rdW5tYXBfYXQoZ2JvLCAmZ2JvLT5r bWFwKTsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2dlbV92cmFtX2t1bm1hcCk7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZyYW1faGVscGVyX2NvbW1vbi5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV92cmFtX2hlbHBlcl9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjc2YjY1NjljOWFhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fdnJhbV9oZWxwZXJfY29tbW9uLmMKQEAgLTAsMCArMSw2IEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLworCisjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiRFJNIFZSQU0gbWVtb3J5LW1hbmFnZW1l bnQgaGVscGVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hl bHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTY3NjE2ZjU1 MmU1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2dlbV92cmFtX2hlbHBlci5o CkBAIC0wLDAgKzEsOTIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9y LWxhdGVyICovCisKKyNpZm5kZWYgRFJNX0dFTV9WUkFNX0hFTFBFUl9ICisjZGVmaW5lIERSTV9H RU1fVlJBTV9IRUxQRVJfSAorCisjaW5jbHVkZSA8ZHJtL2RybV9nZW0uaD4KKyNpbmNsdWRlIDxk cm0vdHRtL3R0bV9ib19hcGkuaD4KKyNpbmNsdWRlIDxkcm0vdHRtL3R0bV9wbGFjZW1lbnQuaD4K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLyogZm9yIGNvbnRhaW5lcl9vZigpICovCisKK3N0 cnVjdCBmaWxwOworCisjZGVmaW5lIERSTV9HRU1fVlJBTV9QTF9GTEFHX1ZSQU0JVFRNX1BMX0ZM QUdfVlJBTQorI2RlZmluZSBEUk1fR0VNX1ZSQU1fUExfRkxBR19TWVNURU0JVFRNX1BMX0ZMQUdf U1lTVEVNCisKKy8qCisgKiBCdWZmZXItb2JqZWN0IGhlbHBlcnMKKyAqLworCisvKioKKyAqIHN0 cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IC0gR0VNIG9iamVjdCBiYWNrZWQgYnkgVlJBTQorICog QGdlbToJR0VNIG9iamVjdAorICogQGJvOgkJVFRNIGJ1ZmZlciBvYmplY3QKKyAqIEBrbWFwOglN YXBwaW5nIGluZm9ybWF0aW9uIGZvciBAYm8KKyAqIEBwbGFjZW1lbnQ6CVRUTSBwbGFjZW1lbnQg aW5mb3JtYXRpb24uIFN1cHBvcnRlZCBwbGFjZW1lbnRzIGFyZSBcCisJJVRUTV9QTF9WUkFNIGFu ZCAlVFRNX1BMX1NZU1RFTQorICogQHBsYWNlbWVudHM6CVRUTSBwbGFjZW1lbnQgaW5mb3JtYXRp b24uCisgKiBAcGluX2NvdW50OglQaW4gY291bnRlcgorICoKKyAqIFRoZSB0eXBlIHN0cnVjdCBk cm1fZ2VtX3ZyYW1fb2JqZWN0IHJlcHJlc2VudHMgYSBHRU0gb2JqZWN0IHRoYXQgaXMKKyAqIGJh Y2tlZCBieSBWUkFNLiBJdCBjYW4gYmUgdXNlZCBmb3Igc2ltcGxlIGZyYW1idWZmZXIgZGV2aWNl cyB3aXRoCisgKiBkZWRpY2F0ZWQgbWVtb3J5LiBUaGUgYnVmZmVyIG9iamVjdCBjYW4gYmUgZXZp Y3RlZCB0byBzeXN0ZW0gbWVtb3J5IGlmCisgKiB2aWRlbyBtZW1vcnkgYmVjb21lcyBzY2FyY2Uu CisgKi8KK3N0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0IHsKKyAgICAgICAgc3RydWN0IGRybV9n ZW1fb2JqZWN0IGdlbTsKKyAgICAgICAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IGJvOworICAg ICAgICBzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqIGttYXA7CisKKwkvKiBTdXBwb3J0ZWQgcGxhY2Vt ZW50cyBhcmUgJVRUTV9QTF9WUkFNIGFuZCAlVFRNX1BMX1NZU1RFTSAqLworICAgICAgICBzdHJ1 Y3QgdHRtX3BsYWNlbWVudCBwbGFjZW1lbnQ7CisgICAgICAgIHN0cnVjdCB0dG1fcGxhY2UgcGxh Y2VtZW50c1szXTsKKworICAgICAgICBpbnQgcGluX2NvdW50OworfTsKKworLyoqCisgKiBSZXR1 cm5zIHRoZSBjb250YWluZXIgb2YgdHlwZSAmc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QKKyAq IGZvciBmaWVsZCBiby4KKyAqIEBibzoJCXRoZSBWUkFNIGJ1ZmZlciBvYmplY3QKKyAqIFJldHVy bnM6CVRoZSBjb250YWluaW5nIEdFTSBWUkFNIG9iamVjdAorICovCitzdGF0aWMgaW5saW5lIHN0 cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fb2ZfYm8oCisJc3RydWN0IHR0 bV9idWZmZXJfb2JqZWN0ICpibykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJvLCBzdHJ1Y3Qg ZHJtX2dlbV92cmFtX29iamVjdCwgYm8pOworfQorCisvKioKKyAqIFJldHVybnMgdGhlIGNvbnRh aW5lciBvZiB0eXBlICZzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdAorICogZm9yIGZpZWxkIGdl bS4KKyAqIEBnZW06CXRoZSBHRU0gb2JqZWN0CisgKiBSZXR1cm5zOglUaGUgY29udGFpbmluZyBH RU0gVlJBTSBvYmplY3QKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHJtX2dlbV92cmFtX29i amVjdCogZHJtX2dlbV92cmFtX29mX2dlbSgKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbSkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdlbSwgc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3Qs IGdlbSk7Cit9CisKK3N0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0KiBkcm1fZ2VtX3ZyYW1fY3Jl YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgdHRtX2JvX2RldmljZSog YmRldiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJCXVpbnQzMl90IHBnX2FsaWdu LAorCQkJCQkJYm9vbCBpbnRlcnJ1cHRpYmxlKTsKK3ZvaWQgZHJtX2dlbV92cmFtX3B1dChzdHJ1 Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvKTsKK2ludCBkcm1fZ2VtX3ZyYW1fcmVzZXJ2ZShz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBib29sIG5vX3dhaXQpOwordm9pZCBkcm1f Z2VtX3ZyYW1fdW5yZXNlcnZlKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8pOwordTY0 IGRybV9nZW1fdnJhbV9tbWFwX29mZnNldChzdHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2Jv KTsKK3M2NCBkcm1fZ2VtX3ZyYW1fb2Zmc2V0KHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpn Ym8pOworaW50IGRybV9nZW1fdnJhbV9waW4oc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi bywgdTMyIHBsX2ZsYWcpOworaW50IGRybV9nZW1fdnJhbV91bnBpbihzdHJ1Y3QgZHJtX2dlbV92 cmFtX29iamVjdCAqZ2JvKTsKK2ludCBkcm1fZ2VtX3ZyYW1fcHVzaF90b19zeXN0ZW0oc3RydWN0 IGRybV9nZW1fdnJhbV9vYmplY3QgKmdibyk7Cit2b2lkKiBkcm1fZ2VtX3ZyYW1fa21hcF9hdChz dHJ1Y3QgZHJtX2dlbV92cmFtX29iamVjdCAqZ2JvLCBib29sIG1hcCwKKwkJCSAgIGJvb2wgKmlz X2lvbWVtLCBzdHJ1Y3QgdHRtX2JvX2ttYXBfb2JqICprbWFwKTsKK3ZvaWQqIGRybV9nZW1fdnJh bV9rbWFwKHN0cnVjdCBkcm1fZ2VtX3ZyYW1fb2JqZWN0ICpnYm8sIGJvb2wgbWFwLAorCQkJYm9v bCAqaXNfaW9tZW0pOwordm9pZCBkcm1fZ2VtX3ZyYW1fa3VubWFwX2F0KHN0cnVjdCBkcm1fZ2Vt X3ZyYW1fb2JqZWN0ICpnYm8sCisJCQkgICAgc3RydWN0IHR0bV9ib19rbWFwX29iaiAqa21hcCk7 Cit2b2lkIGRybV9nZW1fdnJhbV9rdW5tYXAoc3RydWN0IGRybV9nZW1fdnJhbV9vYmplY3QgKmdi byk7CisKKyNlbmRpZgotLSAKMi4yMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWw=