From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom St Denis Subject: [PATCH] drm/amd/amdgpu: Code comments for the amdgpu_ttm.c driver. (v2) Date: Tue, 15 May 2018 10:02:15 -0400 Message-ID: <20180515140215.8461-1-tom.stdenis@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Tom St Denis TkZDIGp1c3QgY29tbWVudHMuCgoodjIpOiAgVXBkYXRlZCBiYXNlZCBvbiBmZWVkYmFjayBmcm9t IEFsZXggRGV1Y2hlci4KClNpZ25lZC1vZmYtYnk6IFRvbSBTdCBEZW5pcyA8dG9tLnN0ZGVuaXNA YW1kLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgfCAz NDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAzNDAg aW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdHRtLmMKaW5kZXggZGZkMjJkYjEzZmIxLi4yZWFhYTFmYjdiNTkgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmMKQEAgLTYzLDE2ICs2Myw0NCBAQCBzdGF0aWMg dm9pZCBhbWRncHVfdHRtX2RlYnVnZnNfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7 CiAvKgogICogR2xvYmFsIG1lbW9yeS4KICAqLworCisvKioKKyAqIGFtZGdwdV90dG1fbWVtX2ds b2JhbF9pbml0IC0gSW5pdGlhbGl6ZSBhbmQgYWNxdWlyZSByZWZlcmVuY2UgdG8KKyAqIG1lbW9y eSBvYmplY3QKKyAqCisgKiBAcmVmOiBPYmplY3QgZm9yIGluaXRpYWxpemF0aW9uLgorICoKKyAq IFRoaXMgaXMgY2FsbGVkIGJ5IGRybV9nbG9iYWxfaXRlbV9yZWYoKSB3aGVuIGFuIG9iamVjdCBp cyBiZWluZworICogaW5pdGlhbGl6ZWQuCisgKi8KIHN0YXRpYyBpbnQgYW1kZ3B1X3R0bV9tZW1f Z2xvYmFsX2luaXQoc3RydWN0IGRybV9nbG9iYWxfcmVmZXJlbmNlICpyZWYpCiB7CiAJcmV0dXJu IHR0bV9tZW1fZ2xvYmFsX2luaXQocmVmLT5vYmplY3QpOwogfQogCisvKioKKyAqIGFtZGdwdV90 dG1fbWVtX2dsb2JhbF9yZWxlYXNlIC0gRHJvcCByZWZlcmVuY2UgdG8gYSBtZW1vcnkgb2JqZWN0 CisgKgorICogQHJlZjogT2JqZWN0IGJlaW5nIHJlbW92ZWQKKyAqCisgKiBUaGlzIGlzIGNhbGxl ZCBieSBkcm1fZ2xvYmFsX2l0ZW1fdW5yZWYoKSB3aGVuIGFuIG9iamVjdCBpcyBiZWluZworICog cmVsZWFzZWQuCisgKi8KIHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fbWVtX2dsb2JhbF9yZWxlYXNl KHN0cnVjdCBkcm1fZ2xvYmFsX3JlZmVyZW5jZSAqcmVmKQogewogCXR0bV9tZW1fZ2xvYmFsX3Jl bGVhc2UocmVmLT5vYmplY3QpOwogfQogCisvKioKKyAqIGFtZGdwdV90dG1fZ2xvYmFsX2luaXQg LSBJbml0aWFsaXplIGdsb2JhbCBUVE0gbWVtb3J5IHJlZmVyZW5jZQorICogCQkJCQkJCXN0cnVj dHVyZXMuCisgKgorICogQGFkZXY6ICAJQU1ER1BVIGRldmljZSBmb3Igd2hpY2ggdGhlIGdsb2Jh bCBzdHJ1Y3R1cmVzIG5lZWQgdG8gYmUKKyAqCQkJcmVnaXN0ZXJlZC4KKyAqCisgKiBUaGlzIGlz IGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBBTURHUFUgdHRtIGluaXQgZnJvbSBhbWRncHVfdHRtX2lu aXQoKQorICogZHVyaW5nIGJyaW5nIHVwLgorICovCiBzdGF0aWMgaW50IGFtZGdwdV90dG1fZ2xv YmFsX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiB7CiAJc3RydWN0IGRybV9nbG9i YWxfcmVmZXJlbmNlICpnbG9iYWxfcmVmOwpAQCAtODAsNyArMTA4LDkgQEAgc3RhdGljIGludCBh bWRncHVfdHRtX2dsb2JhbF9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCXN0cnVj dCBkcm1fc2NoZWRfcnEgKnJxOwogCWludCByOwogCisJLyogZW5zdXJlIHJlZmVyZW5jZSBpcyBm YWxzZSBpbiBjYXNlIGluaXQgZmFpbHMgKi8KIAlhZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVmZXJl bmNlZCA9IGZhbHNlOworCiAJZ2xvYmFsX3JlZiA9ICZhZGV2LT5tbWFuLm1lbV9nbG9iYWxfcmVm OwogCWdsb2JhbF9yZWYtPmdsb2JhbF90eXBlID0gRFJNX0dMT0JBTF9UVE1fTUVNOwogCWdsb2Jh bF9yZWYtPnNpemUgPSBzaXplb2Yoc3RydWN0IHR0bV9tZW1fZ2xvYmFsKTsKQEAgLTE0Niw2ICsx NzYsMTggQEAgc3RhdGljIGludCBhbWRncHVfaW52YWxpZGF0ZV9jYWNoZXMoc3RydWN0IHR0bV9i b19kZXZpY2UgKmJkZXYsIHVpbnQzMl90IGZsYWdzKQogCXJldHVybiAwOwogfQogCisvKioKKyAq IGFtZGdwdV9pbml0X21lbV90eXBlIC0gCUluaXRpYWxpemUgYSBtZW1vcnkgbWFuYWdlciBmb3Ig YSBzcGVjaWZpYworICogCQkJCQkJCXR5cGUgb2YgbWVtb3J5IHJlcXVlc3QuCisgKgorICogQGJk ZXY6CVRoZSBUVE0gQk8gZGV2aWNlIG9iamVjdCAoY29udGFpbnMgYSByZWZlcmVuY2UgdG8KKyAq IAkJCWFtZGdwdV9kZXZpY2UpCisgKiBAdHlwZToJVGhlIHR5cGUgb2YgbWVtb3J5IHJlcXVlc3Rl ZAorICogQG1hbjoKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0dG1fYm9faW5pdF9tbSgpIHdo ZW4gYSBidWZmZXIgb2JqZWN0IGlzIGJlaW5nCisgKiBpbml0aWFsaXplZC4KKyAqLwogc3RhdGlj IGludCBhbWRncHVfaW5pdF9tZW1fdHlwZShzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgdWlu dDMyX3QgdHlwZSwKIAkJCQlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbikKIHsKQEAg LTE2MSw2ICsyMDMsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV9pbml0X21lbV90eXBlKHN0cnVjdCB0 dG1fYm9fZGV2aWNlICpiZGV2LCB1aW50MzJfdCB0eXBlLAogCQltYW4tPmRlZmF1bHRfY2FjaGlu ZyA9IFRUTV9QTF9GTEFHX0NBQ0hFRDsKIAkJYnJlYWs7CiAJY2FzZSBUVE1fUExfVFQ6CisJCS8q IEdUVCBtZW1vcnkgICovCiAJCW1hbi0+ZnVuYyA9ICZhbWRncHVfZ3R0X21ncl9mdW5jOwogCQlt YW4tPmdwdV9vZmZzZXQgPSBhZGV2LT5nbWMuZ2FydF9zdGFydDsKIAkJbWFuLT5hdmFpbGFibGVf Y2FjaGluZyA9IFRUTV9QTF9NQVNLX0NBQ0hJTkc7CkBAIC0xOTMsNiArMjM2LDE0IEBAIHN0YXRp YyBpbnQgYW1kZ3B1X2luaXRfbWVtX3R5cGUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsIHVp bnQzMl90IHR5cGUsCiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogYW1kZ3B1X2V2aWN0X2ZsYWdz IC0gQ29tcHV0ZSBwbGFjZW1lbnQgZmxhZ3MKKyAqCisgKiBAYm86IFRoZSBidWZmZXIgb2JqZWN0 IHRvIGV2aWN0CisgKiBAcGxhY2VtZW50OiBQb3NzaWJsZSBkZXN0aW5hdGlvbihzKSBmb3IgZXZp Y3RlZCBCTworICoKKyAqIEZpbGwgaW4gcGxhY2VtZW50IGRhdGEgd2hlbiB0dG1fYm9fZXZpY3Qo KSBpcyBjYWxsZWQKKyAqLwogc3RhdGljIHZvaWQgYW1kZ3B1X2V2aWN0X2ZsYWdzKHN0cnVjdCB0 dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCQkJc3RydWN0IHR0bV9wbGFjZW1lbnQgKnBsYWNlbWVu dCkKIHsKQEAgLTIwNCwxMiArMjU1LDE0IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9ldmljdF9mbGFn cyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkuZmxhZ3MgPSBUVE1fUExfTUFTS19D QUNISU5HIHwgVFRNX1BMX0ZMQUdfU1lTVEVNCiAJfTsKIAorCS8qIERvbid0IGhhbmRsZSBzY2F0 dGVyIGdhdGhlciBCT3MgKi8KIAlpZiAoYm8tPnR5cGUgPT0gdHRtX2JvX3R5cGVfc2cpIHsKIAkJ cGxhY2VtZW50LT5udW1fcGxhY2VtZW50ID0gMDsKIAkJcGxhY2VtZW50LT5udW1fYnVzeV9wbGFj ZW1lbnQgPSAwOwogCQlyZXR1cm47CiAJfQogCisJLyogT2JqZWN0IGlzbid0IGFuIEFNREdQVSBv YmplY3Qgc28gaWdub3JlICovCiAJaWYgKCFhbWRncHVfdHRtX2JvX2lzX2FtZGdwdV9ibyhibykp IHsKIAkJcGxhY2VtZW50LT5wbGFjZW1lbnQgPSAmcGxhY2VtZW50czsKIAkJcGxhY2VtZW50LT5i dXN5X3BsYWNlbWVudCA9ICZwbGFjZW1lbnRzOwpAQCAtMjE3LDEwICsyNzAsMTIgQEAgc3RhdGlj IHZvaWQgYW1kZ3B1X2V2aWN0X2ZsYWdzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJ CXBsYWNlbWVudC0+bnVtX2J1c3lfcGxhY2VtZW50ID0gMTsKIAkJcmV0dXJuOwogCX0KKwogCWFi byA9IHR0bV90b19hbWRncHVfYm8oYm8pOwogCXN3aXRjaCAoYm8tPm1lbS5tZW1fdHlwZSkgewog CWNhc2UgVFRNX1BMX1ZSQU06CiAJCWlmICghYWRldi0+bW1hbi5idWZmZXJfZnVuY3NfZW5hYmxl ZCkgeworCQkJLyogTW92ZSB0byBzeXN0ZW0gbWVtb3J5ICovCiAJCQlhbWRncHVfdHRtX3BsYWNl bWVudF9mcm9tX2RvbWFpbihhYm8sIEFNREdQVV9HRU1fRE9NQUlOX0NQVSk7CiAJCX0gZWxzZSBp ZiAoYWRldi0+Z21jLnZpc2libGVfdnJhbV9zaXplIDwgYWRldi0+Z21jLnJlYWxfdnJhbV9zaXpl ICYmCiAJCQkgICAhKGFiby0+ZmxhZ3MgJiBBTURHUFVfR0VNX0NSRUFURV9DUFVfQUNDRVNTX1JF UVVJUkVEKSAmJgpAQCAtMjM4LDYgKzI5Myw3IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9ldmljdF9m bGFncyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJYWJvLT5wbGFjZW1lbnQuYnVz eV9wbGFjZW1lbnQgPSAmYWJvLT5wbGFjZW1lbnRzWzFdOwogCQkJYWJvLT5wbGFjZW1lbnQubnVt X2J1c3lfcGxhY2VtZW50ID0gMTsKIAkJfSBlbHNlIHsKKwkJCS8qIE1vdmUgdG8gR1RUIG1lbW9y eSAqLwogCQkJYW1kZ3B1X3R0bV9wbGFjZW1lbnRfZnJvbV9kb21haW4oYWJvLCBBTURHUFVfR0VN X0RPTUFJTl9HVFQpOwogCQl9CiAJCWJyZWFrOwpAQCAtMjQ4LDYgKzMwNCwxNSBAQCBzdGF0aWMg dm9pZCBhbWRncHVfZXZpY3RfZmxhZ3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkq cGxhY2VtZW50ID0gYWJvLT5wbGFjZW1lbnQ7CiB9CiAKKy8qKgorICogYW1kZ3B1X3ZlcmlmeV9h Y2Nlc3MgLSBWZXJpZnkgYWNjZXNzIGZvciBhIG1tYXAgY2FsbAorICoKKyAqIEBibzoJCVRoZSBi dWZmZXIgb2JqZWN0IHRvIG1hcAorICogQGZpbHA6CVRoZSBmaWxlIHBvaW50ZXIgZnJvbSB0aGUg cHJvY2VzcyBwZXJmb3JtaW5nIHRoZSBtbWFwCisgKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdHRt X2JvX21tYXAoKSB0byB2ZXJpZnkgd2hldGhlciBhIHByb2Nlc3MKKyAqIGhhcyB0aGUgcmlnaHQg dG8gbW1hcCBhIEJPIHRvIHRoZWlyIHByb2Nlc3Mgc3BhY2UuCisgKi8KIHN0YXRpYyBpbnQgYW1k Z3B1X3ZlcmlmeV9hY2Nlc3Moc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgc3RydWN0IGZp bGUgKmZpbHApCiB7CiAJc3RydWN0IGFtZGdwdV9ibyAqYWJvID0gdHRtX3RvX2FtZGdwdV9ibyhi byk7CkBAIC0yNjUsNiArMzMwLDE1IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3ZlcmlmeV9hY2Nlc3Mo c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywgc3RydWN0IGZpbGUgKmZpbHApCiAJCQkJCSAg ZmlscC0+cHJpdmF0ZV9kYXRhKTsKIH0KIAorLyoqCisgKiBhbWRncHVfbW92ZV9udWxsIC0gUmVn aXN0ZXIgbWVtb3J5IGZvciBhIGJ1ZmZlciBvYmplY3QKKyAqCisgKiBAYm86CQkJVGhlIGJvIHRv IGFzc2lnbiB0aGUgbWVtb3J5IHRvCisgKiBAbmV3X21lbToJVGhlIG1lbW9yeSB0byBiZSBhc3Np Z25lZC4KKyAqCisgKiBBc3NpZ24gdGhlIG1lbW9yeSBmcm9tIG5ld19tZW0gdG8gdGhlIG1lbW9y eSBvZiB0aGUgYnVmZmVyIG9iamVjdAorICogYm8uCisgKi8KIHN0YXRpYyB2b2lkIGFtZGdwdV9t b3ZlX251bGwoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkJCSAgICAgc3RydWN0IHR0 bV9tZW1fcmVnICpuZXdfbWVtKQogewpAQCAtMjc1LDYgKzM0OSwxMCBAQCBzdGF0aWMgdm9pZCBh bWRncHVfbW92ZV9udWxsKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJbmV3X21lbS0+ bW1fbm9kZSA9IE5VTEw7CiB9CiAKKy8qKgorICogYW1kZ3B1X21tX25vZGVfYWRkciAtCUNvbXB1 dGUgdGhlIEdQVSByZWxhdGl2ZSBvZmZzZXQgb2YgYSBHVFQKKyAqIAkJCQkJCQlidWZmZXIuCisg Ki8KIHN0YXRpYyB1aW50NjRfdCBhbWRncHVfbW1fbm9kZV9hZGRyKHN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqYm8sCiAJCQkJICAgIHN0cnVjdCBkcm1fbW1fbm9kZSAqbW1fbm9kZSwKIAkJCQkg ICAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCkBAIC0yODksOSArMzY3LDEwIEBAIHN0YXRpYyB1 aW50NjRfdCBhbWRncHVfbW1fbm9kZV9hZGRyKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8s CiB9CiAKIC8qKgotICogYW1kZ3B1X2ZpbmRfbW1fbm9kZSAtIEhlbHBlciBmdW5jdGlvbiBmaW5k cyB0aGUgZHJtX21tX25vZGUKLSAqICBjb3JyZXNwb25kaW5nIHRvIEBvZmZzZXQuIEl0IGFsc28g bW9kaWZpZXMgdGhlIG9mZnNldCB0byBiZQotICogIHdpdGhpbiB0aGUgZHJtX21tX25vZGUgcmV0 dXJuZWQKKyAqIGFtZGdwdV9maW5kX21tX25vZGUgLQlIZWxwZXIgZnVuY3Rpb24gZmluZHMgdGhl IGRybV9tbV9ub2RlCisgKiAgCQkJCQkJY29ycmVzcG9uZGluZyB0byBAb2Zmc2V0LiBJdCBhbHNv IG1vZGlmaWVzCisgKiAJCQkJCQkJdGhlIG9mZnNldCB0byBiZSB3aXRoaW4gdGhlIGRybV9tbV9u b2RlCisgKiAJCQkJCQkJcmV0dXJuZWQKICAqLwogc3RhdGljIHN0cnVjdCBkcm1fbW1fbm9kZSAq YW1kZ3B1X2ZpbmRfbW1fbm9kZShzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSwKIAkJCQkJICAgICAg IHVuc2lnbmVkIGxvbmcgKm9mZnNldCkKQEAgLTQzMCw3ICs1MDksMTIgQEAgaW50IGFtZGdwdV90 dG1fY29weV9tZW1fdG9fbWVtKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAogCXJldHVybiBy OwogfQogCi0KKy8qKgorICogYW1kZ3B1X21vdmVfYmxpdCAtIENvcHkgYW4gZW50aXJlIGJ1ZmZl ciB0byBhbm90aGVyIGJ1ZmZlcgorICoKKyAqIFRoaXMgaXMgYSBoZWxwZXIgY2FsbGVkIGJ5IGFt ZGdwdV9ib19tb3ZlKCkgYW5kCisgKiBhbWRncHVfbW92ZV92cmFtX3JhbSgpIHRvIGhlbHAgbW92 ZSBidWZmZXJzIHRvIGFuZCBmcm9tIFZSQU0uCisgKi8KIHN0YXRpYyBpbnQgYW1kZ3B1X21vdmVf YmxpdChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAogCQkJICAgIGJvb2wgZXZpY3QsIGJv b2wgbm9fd2FpdF9ncHUsCiAJCQkgICAgc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtLApAQCAt NDY1LDYgKzU0OSwxMSBAQCBzdGF0aWMgaW50IGFtZGdwdV9tb3ZlX2JsaXQoc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0ICpibywKIAlyZXR1cm4gcjsKIH0KIAorLyoqCisgKiBhbWRncHVfbW92ZV92 cmFtX3JhbSAtIENvcHkgVlJBTSBidWZmZXIgdG8gUkFNIGJ1ZmZlcgorICoKKyAqIENhbGxlZCBi eSBhbWRncHVfYm9fbW92ZSgpLgorICovCiBzdGF0aWMgaW50IGFtZGdwdV9tb3ZlX3ZyYW1fcmFt KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGJvb2wgZXZpY3QsCiAJCQkJc3RydWN0IHR0 bV9vcGVyYXRpb25fY3R4ICpjdHgsCiAJCQkJc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQpA QCAtNDc3LDYgKzU2Niw4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X21vdmVfdnJhbV9yYW0oc3RydWN0 IHR0bV9idWZmZXJfb2JqZWN0ICpibywgYm9vbCBldmljdCwKIAlpbnQgcjsKIAogCWFkZXYgPSBh bWRncHVfdHRtX2FkZXYoYm8tPmJkZXYpOworCisJLyogY3JlYXRlIHNwYWNlL3BhZ2VzIGZvciBu ZXdfbWVtIGluIEdUVCBzcGFjZSAqLwogCXRtcF9tZW0gPSAqbmV3X21lbTsKIAl0bXBfbWVtLm1t X25vZGUgPSBOVUxMOwogCXBsYWNlbWVudC5udW1fcGxhY2VtZW50ID0gMTsKQEAgLTQ5MSwyNSAr NTgyLDM2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X21vdmVfdnJhbV9yYW0oc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0ICpibywgYm9vbCBldmljdCwKIAkJcmV0dXJuIHI7CiAJfQogCisJLyogc2V0IGNh Y2hpbmcgZmxhZ3MgKi8KIAlyID0gdHRtX3R0X3NldF9wbGFjZW1lbnRfY2FjaGluZyhiby0+dHRt LCB0bXBfbWVtLnBsYWNlbWVudCk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2Ns ZWFudXA7CiAJfQogCisJLyogQmluZCB0aGUgbWVtb3J5IHRvIHRoZSBHVFQgc3BhY2UgKi8KIAly ID0gdHRtX3R0X2JpbmQoYm8tPnR0bSwgJnRtcF9tZW0sIGN0eCk7CiAJaWYgKHVubGlrZWx5KHIp KSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CiAJfQorCisJLyogYmxpdCBWUkFNIHRvIEdUVCAqLwog CXIgPSBhbWRncHVfbW92ZV9ibGl0KGJvLCB0cnVlLCBjdHgtPm5vX3dhaXRfZ3B1LCAmdG1wX21l bSwgb2xkX21lbSk7CiAJaWYgKHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CiAJ fQorCisJLyogbW92ZSBCTyAoaW4gdG1wX21lbSkgdG8gbmV3X21lbSAqLwogCXIgPSB0dG1fYm9f bW92ZV90dG0oYm8sIGN0eCwgbmV3X21lbSk7CiBvdXRfY2xlYW51cDoKIAl0dG1fYm9fbWVtX3B1 dChibywgJnRtcF9tZW0pOwogCXJldHVybiByOwogfQogCisvKioKKyAqIGFtZGdwdV9tb3ZlX3Jh bV92cmFtIC0gQ29weSBidWZmZXIgZnJvbSBSQU0gdG8gVlJBTQorICoKKyAqIENhbGxlZCBieSBh bWRncHVfYm9fbW92ZSgpLgorICovCiBzdGF0aWMgaW50IGFtZGdwdV9tb3ZlX3JhbV92cmFtKHN0 cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGJvb2wgZXZpY3QsCiAJCQkJc3RydWN0IHR0bV9v cGVyYXRpb25fY3R4ICpjdHgsCiAJCQkJc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQpAQCAt NTIyLDYgKzYyNCw4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X21vdmVfcmFtX3ZyYW0oc3RydWN0IHR0 bV9idWZmZXJfb2JqZWN0ICpibywgYm9vbCBldmljdCwKIAlpbnQgcjsKIAogCWFkZXYgPSBhbWRn cHVfdHRtX2FkZXYoYm8tPmJkZXYpOworCisJLyogbWFrZSBzcGFjZSBpbiBHVFQgZm9yIG9sZF9t ZW0gYnVmZmVyICovCiAJdG1wX21lbSA9ICpuZXdfbWVtOwogCXRtcF9tZW0ubW1fbm9kZSA9IE5V TEw7CiAJcGxhY2VtZW50Lm51bV9wbGFjZW1lbnQgPSAxOwpAQCAtNTM1LDEwICs2MzksMTQgQEAg c3RhdGljIGludCBhbWRncHVfbW92ZV9yYW1fdnJhbShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3Qg KmJvLCBib29sIGV2aWN0LAogCWlmICh1bmxpa2VseShyKSkgewogCQlyZXR1cm4gcjsKIAl9CisK KwkvKiBtb3ZlL2JpbmQgb2xkIG1lbW9yeSB0byBHVFQgc3BhY2UgKi8KIAlyID0gdHRtX2JvX21v dmVfdHRtKGJvLCBjdHgsICZ0bXBfbWVtKTsKIAlpZiAodW5saWtlbHkocikpIHsKIAkJZ290byBv dXRfY2xlYW51cDsKIAl9CisKKwkvKiBjb3B5IHRvIFZSQU0gKi8KIAlyID0gYW1kZ3B1X21vdmVf YmxpdChibywgdHJ1ZSwgY3R4LT5ub193YWl0X2dwdSwgbmV3X21lbSwgb2xkX21lbSk7CiAJaWYg KHVubGlrZWx5KHIpKSB7CiAJCWdvdG8gb3V0X2NsZWFudXA7CkBAIC01NDgsNiArNjU2LDExIEBA IHN0YXRpYyBpbnQgYW1kZ3B1X21vdmVfcmFtX3ZyYW0oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICpibywgYm9vbCBldmljdCwKIAlyZXR1cm4gcjsKIH0KIAorLyoqCisgKiBhbWRncHVfYm9fbW92 ZSAtIE1vdmUgYSBidWZmZXIgb2JqZWN0IHRvIGEgbmV3IG1lbW9yeSBsb2NhdGlvbgorICoKKyAq IENhbGxlZCBieSB0dG1fYm9faGFuZGxlX21vdmVfbWVtKCkKKyAqLwogc3RhdGljIGludCBhbWRn cHVfYm9fbW92ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLCBib29sIGV2aWN0LAogCQkJ ICBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCwKIAkJCSAgc3RydWN0IHR0bV9tZW1fcmVn ICpuZXdfbWVtKQpAQCAtNjEzLDYgKzcyNiwxMSBAQCBzdGF0aWMgaW50IGFtZGdwdV9ib19tb3Zl KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sIGJvb2wgZXZpY3QsCiAJcmV0dXJuIDA7CiB9 CiAKKy8qKgorICogYW1kZ3B1X3R0bV9pb19tZW1fcmVzZXJ2ZSAtIFJlc2VydmUgYSBibG9jayBv ZiBtZW1vcnkgZHVyaW5nIGEgZmF1bHQKKyAqCisgKiBDYWxsZWQgYnkgdHRtX21lbV9pb19yZXNl cnZlKCkgdWx0aW1hdGVseSB2aWEgdHRtX2JvX3ZtX2ZhdWx0KCkKKyAqLwogc3RhdGljIGludCBh bWRncHVfdHRtX2lvX21lbV9yZXNlcnZlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LCBzdHJ1 Y3QgdHRtX21lbV9yZWcgKm1lbSkKIHsKIAlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1h biA9ICZiZGV2LT5tYW5bbWVtLT5tZW1fdHlwZV07CkBAIC02OTAsNiArODA4LDE0IEBAIHN0cnVj dCBhbWRncHVfdHRtX3R0IHsKIAl1aW50MzJfdAkJbGFzdF9zZXRfcGFnZXM7CiB9OwogCisvKioK KyAqIGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMgLSAJUGluIHBhZ2VzIG9mIG1lbW9yeSBw b2ludGVkIHRvCisgKiAJCQkJCQkJCQlieSBhIFVTRVJQVFIgcG9pbnRlciB0byBtZW1vcnkKKyAq CisgKiBDYWxsZWQgYnkgYW1kZ3B1X2dlbV91c2VycHRyX2lvY3RsKCkgYW5kIGFtZGdwdV9jc19w YXJzZXJfYm9zKCkuCisgKiBUaGlzIHByb3ZpZGVzIGEgd3JhcHBlciBhcm91bmQgdGhlIGdldF91 c2VyX3BhZ2VzKCkgY2FsbCB0byBwcm92aWRlCisgKiBkZXZpY2UgYWNjZXNzaWJsZSBwYWdlcyB0 aGF0IGJhY2sgdXNlciBtZW1vcnkuCisgKi8KIGludCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3Bh Z2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykKIHsKIAlzdHJ1Y3Qg YW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CkBAIC03MTUsNiArODQxLDcgQEAgaW50 IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90dCAqdHRtLCBzdHJ1Y3Qg cGFnZSAqKnBhZ2VzKQogCQl9CiAJfQogCisJLyogbG9vcCBlbm91Z2ggdGltZXMgdXNpbmcgY29u dGlndW91cyBwYWdlcyBvZiBtZW1vcnkgKi8KIAlkbyB7CiAJCXVuc2lnbmVkIG51bV9wYWdlcyA9 IHR0bS0+bnVtX3BhZ2VzIC0gcGlubmVkOwogCQl1aW50NjRfdCB1c2VycHRyID0gZ3R0LT51c2Vy cHRyICsgcGlubmVkICogUEFHRV9TSVpFOwpAQCAtNzQ4LDYgKzg3NSwxNCBAQCBpbnQgYW1kZ3B1 X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoq cGFnZXMpCiAJcmV0dXJuIHI7CiB9CiAKKy8qKgorICogYW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9w YWdlcyAtIAlDb3B5IHBhZ2VzIGluLCBwdXR0aW5nIG9sZCBwYWdlcworICogCQkJCQkJCQkJYXMg bmVjZXNzYXJ5LgorICoKKyAqIENhbGxlZCBieSBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZSgpLiAg VGhpcyBjcmVhdGVzIHRoZSBwYWdlIGxpc3QKKyAqIHRoYXQgYmFja3MgdXNlciBtZW1vcnkgYW5k IHdpbGwgdWx0aW1hdGVseSBiZSBtYXBwZWQgaW50byB0aGUgZGV2aWNlCisgKiBhZGRyZXNzIHNw YWNlLgorICovCiB2b2lkIGFtZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXMoc3RydWN0IHR0bV90 dCAqdHRtLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpn dHQgPSAodm9pZCAqKXR0bTsKQEAgLTc2Miw2ICs4OTcsMTEgQEAgdm9pZCBhbWRncHVfdHRtX3R0 X3NldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcykK IAl9CiB9CiAKKy8qKgorICogYW1kZ3B1X3R0bV90dF9tYXJrX3VzZXJfcGFnZSAtIE1hcmsgcGFn ZXMgYXMgZGlydHkKKyAqCisgKiBDYWxsZWQgd2hpbGUgdW5waW5uaW5nIHVzZXJwdHIgcGFnZXMK KyAqLwogdm9pZCBhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0 dG0pCiB7CiAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwpAQCAtNzgw LDcgKzkyMCwxMiBAQCB2b2lkIGFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHN0cnVjdCB0 dG1fdHQgKnR0bSkKIAl9CiB9CiAKLS8qIHByZXBhcmUgdGhlIHNnIHRhYmxlIHdpdGggdGhlIHVz ZXIgcGFnZXMgKi8KKy8qKgorICogYW1kZ3B1X3R0bV90dF9waW5fdXNlcnB0ciAtIAlwcmVwYXJl IHRoZSBzZyB0YWJsZSB3aXRoIHRoZQorICogCQkJCQkJCQl1c2VyIHBhZ2VzCisgKgorICogQ2Fs bGVkIGJ5IGFtZGdwdV90dG1fYmFja2VuZF9iaW5kKCkKKyAqKi8KIHN0YXRpYyBpbnQgYW1kZ3B1 X3R0bV90dF9waW5fdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiB7CiAJc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYodHRtLT5iZGV2KTsKQEAgLTc5MiwxNyAr OTM3LDIwIEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3R0bV90dF9waW5fdXNlcnB0cihzdHJ1Y3QgdHRt X3R0ICp0dG0pCiAJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uID0gd3JpdGUgPwog CQlETUFfQklESVJFQ1RJT05BTCA6IERNQV9UT19ERVZJQ0U7CiAKKwkvKiBBbGxvY2F0ZSBhbiBT RyBhcnJheSBhbmQgc3F1YXNoIHBhZ2VzIGludG8gaXQgKi8KIAlyID0gc2dfYWxsb2NfdGFibGVf ZnJvbV9wYWdlcyh0dG0tPnNnLCB0dG0tPnBhZ2VzLCB0dG0tPm51bV9wYWdlcywgMCwKIAkJCQkg ICAgICB0dG0tPm51bV9wYWdlcyA8PCBQQUdFX1NISUZULAogCQkJCSAgICAgIEdGUF9LRVJORUwp OwogCWlmIChyKQogCQlnb3RvIHJlbGVhc2Vfc2c7CiAKKwkvKiBNYXAgU0cgdG8gZGV2aWNlICov CiAJciA9IC1FTk9NRU07CiAJbmVudHMgPSBkbWFfbWFwX3NnKGFkZXYtPmRldiwgdHRtLT5zZy0+ c2dsLCB0dG0tPnNnLT5uZW50cywgZGlyZWN0aW9uKTsKIAlpZiAobmVudHMgIT0gdHRtLT5zZy0+ bmVudHMpCiAJCWdvdG8gcmVsZWFzZV9zZzsKIAorCS8qIGNvbnZlcnQgU0cgdG8gbGluZWFyIGFy cmF5IG9mIHBhZ2VzIGFuZCBkbWEgYWRkcmVzc2VzICovCiAJZHJtX3ByaW1lX3NnX3RvX3BhZ2Vf YWRkcl9hcnJheXModHRtLT5zZywgdHRtLT5wYWdlcywKIAkJCQkJIGd0dC0+dHRtLmRtYV9hZGRy ZXNzLCB0dG0tPm51bV9wYWdlcyk7CiAKQEAgLTgxMyw2ICs5NjEsOSBAQCBzdGF0aWMgaW50IGFt ZGdwdV90dG1fdHRfcGluX3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtKQogCXJldHVybiByOwog fQogCisvKioKKyAqIGFtZGdwdV90dG1fdHRfdW5waW5fdXNlcnB0ciAtIFVucGluIGFuZCB1bm1h cCB1c2VycHRyIHBhZ2VzCisgKi8KIHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRfdW5waW5fdXNl cnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYg PSBhbWRncHVfdHRtX2FkZXYodHRtLT5iZGV2KTsKQEAgLTgyNiwxNCArOTc3LDIyIEBAIHN0YXRp YyB2b2lkIGFtZGdwdV90dG1fdHRfdW5waW5fdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pCiAJ aWYgKCF0dG0tPnNnLT5zZ2wpCiAJCXJldHVybjsKIAotCS8qIGZyZWUgdGhlIHNnIHRhYmxlIGFu ZCBwYWdlcyBhZ2FpbiAqLworCS8qIHVubWFwIHRoZSBwYWdlcyBtYXBwZWQgdG8gdGhlIGRldmlj ZSAqLwogCWRtYV91bm1hcF9zZyhhZGV2LT5kZXYsIHR0bS0+c2ctPnNnbCwgdHRtLT5zZy0+bmVu dHMsIGRpcmVjdGlvbik7CiAKKwkvKiBtYXJrIHRoZSBwYWdlcyBhcyBkaXJ0eSAqLwogCWFtZGdw dV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHR0bSk7CiAKIAlzZ19mcmVlX3RhYmxlKHR0bS0+c2cp OwogfQogCisKKy8qKgorICogYW1kZ3B1X3R0bV9iYWNrZW5kX2JpbmQgLSBCaW5kIEdUVCBtZW1v cnkKKyAqCisgKiBDYWxsZWQgYnkgdHRtX3R0X2JpbmQoKSBvbiBiZWhhbGYgb2YgdHRtX2JvX2hh bmRsZV9tb3ZlX21lbSgpLgorICogVGhpcyBoYW5kbGVzIGJpbmRpbmcgR1RUIG1lbW9yeSB0byB0 aGUgZGV2aWNlIGFkZHJlc3Mgc3BhY2UuCisgKi8KIHN0YXRpYyBpbnQgYW1kZ3B1X3R0bV9iYWNr ZW5kX2JpbmQoc3RydWN0IHR0bV90dCAqdHRtLAogCQkJCSAgIHN0cnVjdCB0dG1fbWVtX3JlZyAq Ym9fbWVtKQogewpAQCAtODY0LDcgKzEwMjMsMTAgQEAgc3RhdGljIGludCBhbWRncHVfdHRtX2Jh Y2tlbmRfYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0sCiAJCXJldHVybiAwOwogCX0KIAorCS8qIGNv bXB1dGUgUFRFIGZsYWdzIHJlbGV2YW50IHRvIHRoaXMgQk8gbWVtb3J5ICovCiAJZmxhZ3MgPSBh bWRncHVfdHRtX3R0X3B0ZV9mbGFncyhhZGV2LCB0dG0sIGJvX21lbSk7CisKKwkvKiBiaW5kIHBh Z2VzIGludG8gR0FSVCBwYWdlIHRhYmxlcyAqLwogCWd0dC0+b2Zmc2V0ID0gKHU2NClib19tZW0t PnN0YXJ0IDw8IFBBR0VfU0hJRlQ7CiAJciA9IGFtZGdwdV9nYXJ0X2JpbmQoYWRldiwgZ3R0LT5v ZmZzZXQsIHR0bS0+bnVtX3BhZ2VzLAogCQl0dG0tPnBhZ2VzLCBndHQtPnR0bS5kbWFfYWRkcmVz cywgZmxhZ3MpOwpAQCAtODc1LDYgKzEwMzcsOSBAQCBzdGF0aWMgaW50IGFtZGdwdV90dG1fYmFj a2VuZF9iaW5kKHN0cnVjdCB0dG1fdHQgKnR0bSwKIAlyZXR1cm4gcjsKIH0KIAorLyoqCisgKiBh bWRncHVfdHRtX2FsbG9jX2dhcnQgLSBBbGxvY2F0ZSBHQVJUIG1lbW9yeSBmb3IgYnVmZmVyIG9i amVjdAorICovCiBpbnQgYW1kZ3B1X3R0bV9hbGxvY19nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCAqYm8pCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2Fk ZXYoYm8tPmJkZXYpOwpAQCAtODkwLDYgKzEwNTUsNyBAQCBpbnQgYW1kZ3B1X3R0bV9hbGxvY19n YXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8pCiAJICAgIGFtZGdwdV9ndHRfbWdyX2hh c19nYXJ0X2FkZHIoJmJvLT5tZW0pKQogCQlyZXR1cm4gMDsKIAorCS8qIGFsbG9jYXRlIEdUVCBz cGFjZSAqLwogCXRtcCA9IGJvLT5tZW07CiAJdG1wLm1tX25vZGUgPSBOVUxMOwogCXBsYWNlbWVu dC5udW1fcGxhY2VtZW50ID0gMTsKQEAgLTkwNSw3ICsxMDcxLDEwIEBAIGludCBhbWRncHVfdHRt X2FsbG9jX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibykKIAlpZiAodW5saWtlbHko cikpCiAJCXJldHVybiByOwogCisJLyogY29tcHV0ZSBQVEUgZmxhZ3MgZm9yIHRoaXMgYnVmZmVy IG9iamVjdCAqLwogCWZsYWdzID0gYW1kZ3B1X3R0bV90dF9wdGVfZmxhZ3MoYWRldiwgYm8tPnR0 bSwgJnRtcCk7CisKKwkvKiBCaW5kIHBhZ2VzICovCiAJZ3R0LT5vZmZzZXQgPSAodTY0KXRtcC5z dGFydCA8PCBQQUdFX1NISUZUOwogCXIgPSBhbWRncHVfZ2FydF9iaW5kKGFkZXYsIGd0dC0+b2Zm c2V0LCBiby0+dHRtLT5udW1fcGFnZXMsCiAJCQkgICAgIGJvLT50dG0tPnBhZ2VzLCBndHQtPnR0 bS5kbWFfYWRkcmVzcywgZmxhZ3MpOwpAQCAtOTIyLDYgKzEwOTEsMTIgQEAgaW50IGFtZGdwdV90 dG1fYWxsb2NfZ2FydChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKQogCXJldHVybiAwOwog fQogCisvKioKKyAqIGFtZGdwdV90dG1fcmVjb3Zlcl9nYXJ0IC0gUmViaW5kIEdUVCBwYWdlcwor ICoKKyAqIENhbGxlZCBieSBhbWRncHVfZ3R0X21ncl9yZWNvdmVyKCkgZnJvbSBhbWRncHVfZGV2 aWNlX3Jlc2V0KCkgdG8KKyAqIHJlYmluZCBHVFQgcGFnZXMgZHVyaW5nIGEgR1BVIHJlc2V0Lgor ICovCiBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVyX2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICp0Ym8pCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBhbWRncHVfdHRtX2FkZXYo dGJvLT5iZGV2KTsKQEAgLTk0MSwxMiArMTExNiwxOSBAQCBpbnQgYW1kZ3B1X3R0bV9yZWNvdmVy X2dhcnQoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pCiAJcmV0dXJuIHI7CiB9CiAKKy8q KgorICogYW1kZ3B1X3R0bV9iYWNrZW5kX3VuYmluZCAtIFVuYmluZCBHVFQgbWFwcGVkIHBhZ2Vz CisgKgorICogQ2FsbGVkIGJ5IHR0bV90dF91bmJpbmQoKSBvbiBiZWhhbGYgb2YgdHRtX2JvX21v dmVfdHRtKCkgYW5kCisgKiB0dG1fdHRfZGVzdHJveSgpLgorICovCiBzdGF0aWMgaW50IGFtZGdw dV90dG1fYmFja2VuZF91bmJpbmQoc3RydWN0IHR0bV90dCAqdHRtKQogewogCXN0cnVjdCBhbWRn cHVfZGV2aWNlICphZGV2ID0gYW1kZ3B1X3R0bV9hZGV2KHR0bS0+YmRldik7CiAJc3RydWN0IGFt ZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOwogCWludCByOwogCisJLyogaWYgdGhlIHBh Z2VzIGhhdmUgdXNlcnB0ciBwaW5uaW5nIHRoZW4gY2xlYXIgdGhhdCBmaXJzdCAqLwogCWlmIChn dHQtPnVzZXJwdHIpCiAJCWFtZGdwdV90dG1fdHRfdW5waW5fdXNlcnB0cih0dG0pOwogCkBAIC05 NzUsNiArMTE1NywxMyBAQCBzdGF0aWMgc3RydWN0IHR0bV9iYWNrZW5kX2Z1bmMgYW1kZ3B1X2Jh Y2tlbmRfZnVuYyA9IHsKIAkuZGVzdHJveSA9ICZhbWRncHVfdHRtX2JhY2tlbmRfZGVzdHJveSwK IH07CiAKKy8qKgorICogYW1kZ3B1X3R0bV90dF9jcmVhdGUgLSBDcmVhdGUgYSB0dG1fdHQgb2Jq ZWN0IGZvciBhIGdpdmVuIEJPCisgKgorICogQGJvOiBUaGUgYnVmZmVyIG9iamVjdCB0byBjcmVh dGUgYSBHVFQgdHRtX3R0IG9iamVjdCBhcm91bmQKKyAqCisgKiBDYWxsZWQgYnkgdHRtX3R0X2Ny ZWF0ZSgpLgorICovCiBzdGF0aWMgc3RydWN0IHR0bV90dCAqYW1kZ3B1X3R0bV90dF9jcmVhdGUo c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkJCQkJICAgdWludDMyX3QgcGFnZV9mbGFn cykKIHsKQEAgLTk4OCw2ICsxMTc3LDggQEAgc3RhdGljIHN0cnVjdCB0dG1fdHQgKmFtZGdwdV90 dG1fdHRfY3JlYXRlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCiAJCXJldHVybiBOVUxM OwogCX0KIAlndHQtPnR0bS50dG0uZnVuYyA9ICZhbWRncHVfYmFja2VuZF9mdW5jOworCisJLyog YWxsb2NhdGUgc3BhY2UgZm9yIHRoZSB1bmluaXRpYWxpemVkIHBhZ2UgZW50cmllcyAqLwogCWlm ICh0dG1fc2dfdHRfaW5pdCgmZ3R0LT50dG0sIGJvLCBwYWdlX2ZsYWdzKSkgewogCQlrZnJlZShn dHQpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTk5NSw2ICsxMTg2LDEyIEBAIHN0YXRpYyBzdHJ1Y3Qg dHRtX3R0ICphbWRncHVfdHRtX3R0X2NyZWF0ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJv LAogCXJldHVybiAmZ3R0LT50dG0udHRtOwogfQogCisvKioKKyAqIGFtZGdwdV90dG1fdHRfcG9w dWxhdGUgLSBNYXAgR1RUIHBhZ2VzIHZpc2libGUgdG8gdGhlIGRldmljZQorICoKKyAqIE1hcCB0 aGUgcGFnZXMgb2YgYSB0dG1fdHQgb2JqZWN0IHRvIGFuIGFkZHJlc3Mgc3BhY2UgdmlzaWJsZQor ICogdG8gdGhlIHVuZGVybHlpbmcgZGV2aWNlLgorICovCiBzdGF0aWMgaW50IGFtZGdwdV90dG1f dHRfcG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtLAogCQkJc3RydWN0IHR0bV9vcGVyYXRpb25f Y3R4ICpjdHgpCiB7CkBAIC0xMDAyLDYgKzExOTksNyBAQCBzdGF0aWMgaW50IGFtZGdwdV90dG1f dHRfcG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtLAogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpn dHQgPSAodm9pZCAqKXR0bTsKIAlib29sIHNsYXZlID0gISEodHRtLT5wYWdlX2ZsYWdzICYgVFRN X1BBR0VfRkxBR19TRyk7CiAKKwkvKiB1c2VyIHBhZ2VzIGFyZSBib3VuZCBieSBhbWRncHVfdHRt X3R0X3Bpbl91c2VycHRyKCkgKi8KIAlpZiAoZ3R0ICYmIGd0dC0+dXNlcnB0cikgewogCQl0dG0t PnNnID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNnX3RhYmxlKSwgR0ZQX0tFUk5FTCk7CiAJCWlm ICghdHRtLT5zZykKQEAgLTEwMjYsOSArMTIyNCwxNyBAQCBzdGF0aWMgaW50IGFtZGdwdV90dG1f dHRfcG9wdWxhdGUoc3RydWN0IHR0bV90dCAqdHRtLAogCX0KICNlbmRpZgogCisJLyogZmFsbCBi YWNrIHRvIGdlbmVyaWMgaGVscGVyIHRvIHBvcHVsYXRlIHRoZSBwYWdlIGFycmF5CisJICogYW5k IG1hcCB0aGVtIHRvIHRoZSBkZXZpY2UgKi8KIAlyZXR1cm4gdHRtX3BvcHVsYXRlX2FuZF9tYXBf cGFnZXMoYWRldi0+ZGV2LCAmZ3R0LT50dG0sIGN0eCk7CiB9CiAKKy8qKgorICogYW1kZ3B1X3R0 bV90dF91bnBvcHVsYXRlIC0gdW5tYXAgR1RUIHBhZ2VzIGFuZCB1bnBvcHVsYXRlIHBhZ2UgYXJy YXlzCisgKgorICogVW5tYXBzIHBhZ2VzIG9mIGEgdHRtX3R0IG9iamVjdCBmcm9tIHRoZSBkZXZp Y2UgYWRkcmVzcyBzcGFjZSBhbmQKKyAqIHVucG9wdWxhdGVzIHRoZSBwYWdlIGFycmF5IGJhY2tp bmcgaXQuCisgKi8KIHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRfdW5wb3B1bGF0ZShzdHJ1Y3Qg dHRtX3R0ICp0dG0pCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXY7CkBAIC0xMDU0LDkg KzEyNjAsMjEgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBvcHVsYXRlKHN0cnVjdCB0 dG1fdHQgKnR0bSkKIAl9CiAjZW5kaWYKIAorCS8qIGZhbGwgYmFjayB0byBnZW5lcmljIGhlbHBl ciB0byB1bm1hcCBhbmQgdW5wb3B1bGF0ZSBhcnJheSAqLwogCXR0bV91bm1hcF9hbmRfdW5wb3B1 bGF0ZV9wYWdlcyhhZGV2LT5kZXYsICZndHQtPnR0bSk7CiB9CiAKKy8qKgorICogYW1kZ3B1X3R0 bV90dF9zZXRfdXNlcnB0ciAtCUluaXRpYWxpemUgdXNlcnB0ciBHVFQgdHRtX3R0CisgKiAJCQkJ CQkJCWZvciB0aGUgY3VycmVudCB0YXNrCisgKgorICogQHR0bTogVGhlIHR0bV90dCBvYmplY3Qg dG8gYmluZCB0aGlzIHVzZXJwdHIgb2JqZWN0IHRvCisgKiBAYWRkcjogIFRoZSBhZGRyZXNzIGlu IHRoZSBjdXJyZW50IHRhc2tzIFZNIHNwYWNlIHRvIHVzZQorICogQGZsYWdzOiBSZXF1aXJlbWVu dHMgb2YgdXNlcnB0ciBvYmplY3QuCisgKgorICogQ2FsbGVkIGJ5IGFtZGdwdV9nZW1fdXNlcnB0 cl9pb2N0bCgpIHRvIGJpbmQgdXNlcnB0ciBwYWdlcworICogdG8gY3VycmVudCB0YXNrCisgKi8K IGludCBhbWRncHVfdHRtX3R0X3NldF91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0bSwgdWludDY0 X3QgYWRkciwKIAkJCSAgICAgIHVpbnQzMl90IGZsYWdzKQogewpAQCAtMTA3Niw2ICsxMjk0LDkg QEAgaW50IGFtZGdwdV90dG1fdHRfc2V0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1aW50 NjRfdCBhZGRyLAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGFtZGdwdV90dG1fdHRfZ2V0X3Vz ZXJtbSAtIFJldHVybiBtZW1vcnkgbWFuYWdlciBmb3IgdHRtX3R0IG9iamVjdAorICovCiBzdHJ1 Y3QgbW1fc3RydWN0ICphbWRncHVfdHRtX3R0X2dldF91c2VybW0oc3RydWN0IHR0bV90dCAqdHRt KQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsKQEAgLTEwODYs NiArMTMwNywxMiBAQCBzdHJ1Y3QgbW1fc3RydWN0ICphbWRncHVfdHRtX3R0X2dldF91c2VybW0o c3RydWN0IHR0bV90dCAqdHRtKQogCXJldHVybiBndHQtPnVzZXJtbTsKIH0KIAorLyoqCisgKiBh bWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyIC0JRGV0ZXJtaW5lIGlmIGEgdHRtX3R0IG9iamVj dCBsYXlzCisgKiAJCQkJCQkJCQlpbnNpZGUgYW4gYWRkcmVzcyByYW5nZSBmb3IgdGhlCisgKiAJ CQkJCQkJCQljdXJyZW50IHRhc2suCisgKgorICovCiBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0 X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAg dW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC0xMDk2LDEwICsxMzIzLDE0IEBAIGJvb2wgYW1kZ3B1 X3R0bV90dF9hZmZlY3RfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcg c3RhcnQsCiAJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpCiAJCXJldHVybiBmYWxz ZTsKIAorCS8qIGRvZXMgdGhlIGFkZHJlc3MgbGllIHdpdGhpbiB0aGUgc3BhbiBmb3IgdGhlIHVz ZXJwdHIgbWVtb3J5PyAqLwogCXNpemUgPSAodW5zaWduZWQgbG9uZylndHQtPnR0bS50dG0ubnVt X3BhZ2VzICogUEFHRV9TSVpFOwogCWlmIChndHQtPnVzZXJwdHIgPiBlbmQgfHwgZ3R0LT51c2Vy cHRyICsgc2l6ZSA8PSBzdGFydCkKIAkJcmV0dXJuIGZhbHNlOwogCisJLyogU2VhcmNoIHRoZSBs aXN0cyBvZiB0YXNrcyB0aGF0IGhvbGQgdGhpcyBtYXBwaW5nIGFuZCBzZWUKKwkgKiBpZiBjdXJy ZW50IGlzIG9uZSBvZiB0aGVtLiAgSWYgaXQgaXMgcmV0dXJuIGZhbHNlLgorCSAqLwogCXNwaW5f bG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmd0 dC0+Z3VwdGFza3MsIGxpc3QpIHsKIAkJaWYgKGVudHJ5LT50YXNrID09IGN1cnJlbnQpIHsKQEAg LTExMTQsNiArMTM0NSwxMCBAQCBib29sIGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3Ry dWN0IHR0bV90dCAqdHRtLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCXJldHVybiB0cnVlOwogfQog CisvKioKKyAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZCAtCUhhcyB0aGUgdHRt X3R0IG9iamVjdCBiZWVuCisgKiAJCQkJCQkJCQkJaW52YWxpZGF0ZWQ/CisgKi8KIGJvb2wgYW1k Z3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwKIAkJCQkg ICAgICAgaW50ICpsYXN0X2ludmFsaWRhdGVkKQogewpAQCAtMTEyNCw2ICsxMzU5LDEyIEBAIGJv b2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwK IAlyZXR1cm4gcHJldl9pbnZhbGlkYXRlZCAhPSAqbGFzdF9pbnZhbGlkYXRlZDsKIH0KIAorLyoq CisgKiBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMgLQlIYXZlIHRoZSBwYWdlcyBi YWNraW5nIHRoaXMKKyAqIAkJCQkJCQkJCQl0dG1fdHQgb2JqZWN0IGJlZW4gaW52YWxpZGF0ZWQK KyAqIAkJCQkJCQkJCQlzaW5jZSB0aGUgbGFzdCB0aW1lIHRoZXkndmUKKyAqIAkJCQkJCQkJCQli ZWVuIHNldD8KKyAqLwogYm9vbCBhbWRncHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMoc3Ry dWN0IHR0bV90dCAqdHRtKQogewogCXN0cnVjdCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAq KXR0bTsKQEAgLTExMzQsNiArMTM3NSw5IEBAIGJvb2wgYW1kZ3B1X3R0bV90dF91c2VycHRyX25l ZWRzX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSkKIAlyZXR1cm4gYXRvbWljX3JlYWQoJmd0dC0+ bW11X2ludmFsaWRhdGlvbnMpICE9IGd0dC0+bGFzdF9zZXRfcGFnZXM7CiB9CiAKKy8qKgorICog YW1kZ3B1X3R0bV90dF9pc19yZWFkb25seSAtIElzIHRoZSB0dG1fdHQgb2JqZWN0IHJlYWQgb25s eT8KKyAqLwogYm9vbCBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHN0cnVjdCB0dG1fdHQgKnR0 bSkKIHsKIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAqZ3R0ID0gKHZvaWQgKil0dG07CkBAIC0xMTQ0 LDYgKzEzODgsMTIgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2lzX3JlYWRvbmx5KHN0cnVjdCB0dG1f dHQgKnR0bSkKIAlyZXR1cm4gISEoZ3R0LT51c2VyZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJf UkVBRE9OTFkpOwogfQogCisvKioKKyAqIGFtZGdwdV90dG1fdHRfcHRlX2ZsYWdzIC0gQ29tcHV0 ZSBQVEUgZmxhZ3MgZm9yIHR0bV90dCBvYmplY3QKKyAqCisgKiBAdHRtOiBUaGUgdHRtX3R0IG9i amVjdCB0byBjb21wdXRlIHRoZSBmbGFncyBmb3IKKyAqIEBtZW06IFRoZSBtZW1vcnkgcmVnaXN0 cnkgYmFja2luZyB0aGlzIHR0bV90dCBvYmplY3QKKyAqLwogdWludDY0X3QgYW1kZ3B1X3R0bV90 dF9wdGVfZmxhZ3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCB0dG1fdHQgKnR0 bSwKIAkJCQkgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCiB7CkBAIC0xMTY4LDYgKzE0MTgsMTYg QEAgdWludDY0X3QgYW1kZ3B1X3R0bV90dF9wdGVfZmxhZ3Moc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYsIHN0cnVjdCB0dG1fdHQgKnR0bSwKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKKy8qKgorICog YW1kZ3B1X3R0bV9ib19ldmljdGlvbl92YWx1YWJsZSAtCUNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4g ZXZpY3QKKyAqIAkJCQkJCQkJCQlhIGJ1ZmZlciBvYmplY3QuCisgKgorICogUmV0dXJuIHRydWUg aWYgZXZpY3Rpb24gaXMgc2Vuc2libGUuICBDYWxsZWQgYnkKKyAqIHR0bV9tZW1fZXZpY3RfZmly c3QoKSBvbiBiZWhhbGYgb2YgdHRtX2JvX21lbV9mb3JjZV9zcGFjZSgpCisgKiB3aGljaCB0cmll cyB0byBldmljdCBidWZmZXIgb2JqZWN0cyB1bnRpbCBpdCBjYW4gZmluZCBzcGFjZQorICogZm9y IGEgbmV3IG9iamVjdCBhbmQgYnkgdHRtX2JvX2ZvcmNlX2xpc3RfY2xlYW4oKSB3aGljaCBpcwor ICogdXNlZCB0byBjbGVhbiBvdXQgYSBtZW1vcnkgc3BhY2UuCisgKi8KIHN0YXRpYyBib29sIGFt ZGdwdV90dG1fYm9fZXZpY3Rpb25fdmFsdWFibGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpi bywKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCB0dG1fcGxhY2UgKnBsYWNlKQogewpAQCAtMTIxNCw2 ICsxNDc0LDE5IEBAIHN0YXRpYyBib29sIGFtZGdwdV90dG1fYm9fZXZpY3Rpb25fdmFsdWFibGUo c3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAlyZXR1cm4gdHRtX2JvX2V2aWN0aW9uX3Zh bHVhYmxlKGJvLCBwbGFjZSk7CiB9CiAKKy8qKgorICogYW1kZ3B1X3R0bV9hY2Nlc3NfbWVtb3J5 IC0JUmVhZCBvciBXcml0ZSBtZW1vcnkgdGhhdCBiYWNrcyBhCisgKiAJCQkJCQkJCWJ1ZmZlciBv YmplY3QuCisgKgorICogQGJvOiAgVGhlIGJ1ZmZlciBvYmplY3QgdG8gcmVhZC93cml0ZQorICog QG9mZnNldDogIE9mZnNldCBpbnRvIGJ1ZmZlciBvYmplY3QKKyAqIEBidWY6ICBTZWNvbmRhcnkg YnVmZmVyIHRvIHdyaXRlL3JlYWQgZnJvbQorICogQGxlbjogTGVuZ3RoIGluIGJ5dGVzIG9mIGFj Y2VzcworICogQHdyaXRlOiAgdHJ1ZSBpZiB3cml0aW5nCisgKgorICogVGhpcyBpcyB1c2VkIHRv IGFjY2VzcyBWUkFNIHRoYXQgYmFja3MgYSBidWZmZXIgb2JqZWN0IHZpYSBNTUlPCisgKiBhY2Nl c3MgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAqLwogc3RhdGljIGludCBhbWRncHVfdHRtX2Fj Y2Vzc19tZW1vcnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKIAkJCQkgICAgdW5zaWdu ZWQgbG9uZyBvZmZzZXQsCiAJCQkJICAgIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQpA QCAtMTM5MCwxMyArMTY2MywyMiBAQCBzdGF0aWMgaW50IGFtZGdwdV90dG1fZndfcmVzZXJ2ZV92 cmFtX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJYWRldi0+ZndfdnJhbV91c2Fn ZS5yZXNlcnZlZF9ibyA9IE5VTEw7CiAJcmV0dXJuIHI7CiB9Ci0KKy8qKgorICogYW1kZ3B1X3R0 bV9pbml0IC0JSW5pdCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgKHR0bSkgYXMgd2VsbCBhcworICog CQkJCQkJdmFyaW91cyBndHQvdnJhbSByZWxhdGVkIGZpZWxkcy4KKyAqCisgKiBUaGlzIGluaXRp YWxpemVzIGFsbCBvZiB0aGUgbWVtb3J5IHNwYWNlIHBvb2xzIHRoYXQgdGhlIFRUTSBsYXllcgor ICogd2lsbCBuZWVkIHN1Y2ggYXMgdGhlIEdUVCBzcGFjZSAoc3lzdGVtIG1lbW9yeSBtYXBwZWQg dG8gdGhlIGRldmljZSksCisgKiBWUkFNIChvbi1ib2FyZCBtZW1vcnkpLCBhbmQgb24tY2hpcCBt ZW1vcmllcyAoR0RTLCBHV1MsIE9BKSB3aGljaAorICogY2FuIGJlIG1hcHBlZCBwZXIgVk1JRC4K KyAqLwogaW50IGFtZGdwdV90dG1faW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsK IAl1aW50NjRfdCBndHRfc2l6ZTsKIAlpbnQgcjsKIAl1NjQgdmlzX3ZyYW1fbGltaXQ7CiAKKwkv KiBpbml0aWFsaXplIGdsb2JhbCByZWZlcmVuY2VzIGZvciB2cmFtL2d0dCAqLwogCXIgPSBhbWRn cHVfdHRtX2dsb2JhbF9pbml0KGFkZXYpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwpAQCAtMTQx Nyw2ICsxNjk5LDcgQEAgaW50IGFtZGdwdV90dG1faW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikKIAkvKiBXZSBvcHQgdG8gYXZvaWQgT09NIG9uIHN5c3RlbSBwYWdlcyBhbGxvY2F0aW9u cyAqLwogCWFkZXYtPm1tYW4uYmRldi5ub19yZXRyeSA9IHRydWU7CiAKKwkvKiBJbml0aWFsaXpl IFZSQU0gcG9vbCB3aXRoIGFsbCBvZiBWUkFNIGRpdmlkZWQgaW50byBwYWdlcyAqLwogCXIgPSB0 dG1fYm9faW5pdF9tbSgmYWRldi0+bW1hbi5iZGV2LCBUVE1fUExfVlJBTSwKIAkJCQlhZGV2LT5n bWMucmVhbF92cmFtX3NpemUgPj4gUEFHRV9TSElGVCk7CiAJaWYgKHIpIHsKQEAgLTE0NDYsNiAr MTcyOSwxMCBAQCBpbnQgYW1kZ3B1X3R0bV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQogCQlyZXR1cm4gcjsKIAl9CiAKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgYXMgcmVxdWlyZWQgZm9y IFZHQQorCSAqIFRoaXMgaXMgdXNlZCBmb3IgVkdBIGVtdWxhdGlvbiBhbmQgcHJlLU9TIHNjYW5v dXQgYnVmZmVycyB0bworCSAqIGF2b2lkIGRpc3BsYXkgYXJ0aWZhY3RzIHdoaWxlIHRyYW5zaXRp b25pbmcgYmV0d2VlbiBwcmUtT1MKKwkgKiBhbmQgZHJpdmVyLiAgKi8KIAlpZiAoYWRldi0+Z21j LnN0b2xlbl9zaXplKSB7CiAJCXIgPSBhbWRncHVfYm9fY3JlYXRlX2tlcm5lbChhZGV2LCBhZGV2 LT5nbWMuc3RvbGVuX3NpemUsIFBBR0VfU0laRSwKIAkJCQkJICAgIEFNREdQVV9HRU1fRE9NQUlO X1ZSQU0sCkBAIC0xNDU3LDYgKzE3NDQsOCBAQCBpbnQgYW1kZ3B1X3R0bV9pbml0KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2KQogCURSTV9JTkZPKCJhbWRncHU6ICV1TSBvZiBWUkFNIG1lbW9y eSByZWFkeVxuIiwKIAkJICh1bnNpZ25lZCkgKGFkZXYtPmdtYy5yZWFsX3ZyYW1fc2l6ZSAvICgx MDI0ICogMTAyNCkpKTsKIAorCS8qIENvbXB1dGUgR1RUIHNpemUsIGVpdGhlciBic2FlZCBvbiAz LzR0aCB0aGUgc2l6ZSBvZiBSQU0gc2l6ZQorCSAqIG9yIHdoYXRldmVyIHRoZSB1c2VyIHBhc3Nl ZCBvbiBtb2R1bGUgaW5pdCAqLwogCWlmIChhbWRncHVfZ3R0X3NpemUgPT0gLTEpIHsKIAkJc3Ry dWN0IHN5c2luZm8gc2k7CiAKQEAgLTE0NjcsNiArMTc1Niw4IEBAIGludCBhbWRncHVfdHRtX2lu aXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJfQogCWVsc2UKIAkJZ3R0X3NpemUgPSAo dWludDY0X3QpYW1kZ3B1X2d0dF9zaXplIDw8IDIwOworCisJLyogSW5pdGlhbGl6ZSBHVFQgbWVt b3J5IHBvb2wgKi8KIAlyID0gdHRtX2JvX2luaXRfbW0oJmFkZXYtPm1tYW4uYmRldiwgVFRNX1BM X1RULCBndHRfc2l6ZSA+PiBQQUdFX1NISUZUKTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoIkZh aWxlZCBpbml0aWFsaXppbmcgR1RUIGhlYXAuXG4iKTsKQEAgLTE0NzUsNiArMTc2Niw3IEBAIGlu dCBhbWRncHVfdHRtX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCiAJRFJNX0lORk8o ImFtZGdwdTogJXVNIG9mIEdUVCBtZW1vcnkgcmVhZHkuXG4iLAogCQkgKHVuc2lnbmVkKShndHRf c2l6ZSAvICgxMDI0ICogMTAyNCkpKTsKIAorCS8qIEluaXRpYWxpemUgdmFyaW91cyBvbi1jaGlw IG1lbW9yeSBwb29scyAqLwogCWFkZXYtPmdkcy5tZW0udG90YWxfc2l6ZSA9IGFkZXYtPmdkcy5t ZW0udG90YWxfc2l6ZSA8PCBBTURHUFVfR0RTX1NISUZUOwogCWFkZXYtPmdkcy5tZW0uZ2Z4X3Bh cnRpdGlvbl9zaXplID0gYWRldi0+Z2RzLm1lbS5nZnhfcGFydGl0aW9uX3NpemUgPDwgQU1ER1BV X0dEU19TSElGVDsKIAlhZGV2LT5nZHMubWVtLmNzX3BhcnRpdGlvbl9zaXplID0gYWRldi0+Z2Rz Lm1lbS5jc19wYXJ0aXRpb25fc2l6ZSA8PCBBTURHUFVfR0RTX1NISUZUOwpAQCAtMTUxNCw2ICsx ODA2LDcgQEAgaW50IGFtZGdwdV90dG1faW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikK IAkJfQogCX0KIAorCS8qIFJlZ2lzdGVyIGRlYnVnZnMgZW50cmllcyBmb3IgYW1kZ3B1X3R0bSAq LwogCXIgPSBhbWRncHVfdHRtX2RlYnVnZnNfaW5pdChhZGV2KTsKIAlpZiAocikgewogCQlEUk1f RVJST1IoIkZhaWxlZCB0byBpbml0IGRlYnVnZnNcbiIpOwpAQCAtMTUyMiwxMSArMTgxNSwxOSBA QCBpbnQgYW1kZ3B1X3R0bV9pbml0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQogCXJldHVy biAwOwogfQogCisvKioKKyAqIGFtZGdwdV90dG1fbGF0ZV9pbml0IC0JSGFuZGxlIGFueSBsYXRl IGluaXRpYWxpemF0aW9uIGZvcgorICogCQkJCQkJCWFtZGdwdV90dG0KKyAqLwogdm9pZCBhbWRn cHVfdHRtX2xhdGVfaW5pdChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKIHsKKwkvKiByZXR1 cm4gdGhlIFZHQSBzdG9sZW4gbWVtb3J5IChpZiBhbnkpIGJhY2sgdG8gVlJBTSAqLwogCWFtZGdw dV9ib19mcmVlX2tlcm5lbCgmYWRldi0+c3RvbGVuX3ZnYV9tZW1vcnksIE5VTEwsIE5VTEwpOwog fQogCisvKioKKyAqIGFtZGdwdV90dG1fZmluaSAtIERlLWluaXRpYWxpemUgdGhlIFRUTSBtZW1v cnkgcG9vbHMKKyAqLwogdm9pZCBhbWRncHVfdHRtX2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYpCiB7CiAJaWYgKCFhZGV2LT5tbWFuLmluaXRpYWxpemVkKQpAQCAtMTg1NCw2ICsyMTU1 LDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBhbWRncHVfdHRtX2RlYnVn ZnNfbGlzdFtdID0gewogI2VuZGlmCiB9OwogCisvKioKKyAqIGFtZGdwdV90dG1fdnJhbV9yZWFk IC0gTGluZWFyIHJlYWQgYWNjZXNzIHRvIFZSQU0KKyAqCisgKiBBY2Nlc3NlcyBWUkFNIHZpYSBN TUlPIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgKi8KIHN0YXRpYyBzc2l6ZV90IGFtZGdwdV90 dG1fdnJhbV9yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICBz aXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCiB7CkBAIC0xODkzLDYgKzIxOTksMTEgQEAgc3RhdGlj IHNzaXplX3QgYW1kZ3B1X3R0bV92cmFtX3JlYWQoc3RydWN0IGZpbGUgKmYsIGNoYXIgX191c2Vy ICpidWYsCiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorLyoqCisgKiBhbWRncHVfdHRtX3ZyYW1fd3Jp dGUgLSBMaW5lYXIgd3JpdGUgYWNjZXNzIHRvIFZSQU0KKyAqCisgKiBBY2Nlc3NlcyBWUkFNIHZp YSBNTUlPIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgKi8KIHN0YXRpYyBzc2l6ZV90IGFtZGdw dV90dG1fdnJhbV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwK IAkJCQkgICAgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQogewpAQCAtMTk0MSw2ICsyMjUyLDkg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYW1kZ3B1X3R0bV92cmFtX2Zv cHMgPSB7CiAKICNpZmRlZiBDT05GSUdfRFJNX0FNREdQVV9HQVJUX0RFQlVHRlMKIAorLyoqCisg KiBhbWRncHVfdHRtX2d0dF9yZWFkIC0gTGluZWFyIHJlYWQgYWNjZXNzIHRvIEdUVCBtZW1vcnkK KyAqLwogc3RhdGljIHNzaXplX3QgYW1kZ3B1X3R0bV9ndHRfcmVhZChzdHJ1Y3QgZmlsZSAqZiwg Y2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkgICBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwb3MpCiB7CkBA IC0xOTg4LDYgKzIzMDIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg YW1kZ3B1X3R0bV9ndHRfZm9wcyA9IHsKIAogI2VuZGlmCiAKKy8qKgorICogYW1kZ3B1X2lvbWVt X3JlYWQgLSBWaXJ0dWFsIHJlYWQgYWNjZXNzIHRvIEdQVSBtYXBwZWQgbWVtb3J5CisgKgorICog VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJlYWQgbWVtb3J5IHRoYXQgaGFzIGJlZW4gbWFwcGVk IHRvIHRoZQorICogR1BVIGFuZCB0aGUga25vd24gYWRkcmVzc2VzIGFyZSBub3QgcGh5c2ljYWwg YWRkcmVzc2VzIGJ1dCBpbnN0ZWFkCisgKiBidXMgYWRkcmVzc2VzIChlLmcuLCB3aGF0IHlvdSdk IHB1dCBpbiBhbiBJQiBvciByaW5nIGJ1ZmZlcikuCisgKi8KIHN0YXRpYyBzc2l6ZV90IGFtZGdw dV9pb21lbV9yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSBzaXpl X3Qgc2l6ZSwgbG9mZl90ICpwb3MpCiB7CkBAIC0xOTk2LDYgKzIzMTcsNyBAQCBzdGF0aWMgc3Np emVfdCBhbWRncHVfaW9tZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZiwgY2hhciBfX3VzZXIgKmJ1ZiwK IAlzc2l6ZV90IHJlc3VsdCA9IDA7CiAJaW50IHI7CiAKKwkvKiByZXRyaWV2ZSB0aGUgSU9NTVUg ZG9tYWluIGlmIGFueSBmb3IgdGhpcyBkZXZpY2UgKi8KIAlkb20gPSBpb21tdV9nZXRfZG9tYWlu X2Zvcl9kZXYoYWRldi0+ZGV2KTsKIAogCXdoaWxlIChzaXplKSB7CkBAIC0yMDA4LDYgKzIzMzAs MTAgQEAgc3RhdGljIHNzaXplX3QgYW1kZ3B1X2lvbWVtX3JlYWQoc3RydWN0IGZpbGUgKmYsIGNo YXIgX191c2VyICpidWYsCiAKIAkJYnl0ZXMgPSBieXRlcyA8IHNpemUgPyBieXRlcyA6IHNpemU7 CiAKKwkJLyogVHJhbnNsYXRlIHRoZSBidXMgYWRkcmVzcyB0byBhIHBoeXNpY2FsIGFkZHJlc3Mu ICBJZgorCQkgKiB0aGUgZG9tYWluIGlzIE5VTEwgaXQgbWVhbnMgdGhlcmUgaXMgbm8gSU9NTVUg YWN0aXZlCisJCSAqIGFuZCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBpcyB0aGUgaWRlbnRpdHkK KwkJICovCiAJCWFkZHIgPSBkb20gPyBpb21tdV9pb3ZhX3RvX3BoeXMoZG9tLCBhZGRyKSA6IGFk ZHI7CiAKIAkJcGZuID0gYWRkciA+PiBQQUdFX1NISUZUOwpAQCAtMjAzMiw2ICsyMzU4LDEzIEBA IHN0YXRpYyBzc2l6ZV90IGFtZGdwdV9pb21lbV9yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9f dXNlciAqYnVmLAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qKgorICogYW1kZ3B1X2lvbWVtX3dy aXRlIC0gVmlydHVhbCB3cml0ZSBhY2Nlc3MgdG8gR1BVIG1hcHBlZCBtZW1vcnkKKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gd3JpdGUgbWVtb3J5IHRoYXQgaGFzIGJlZW4gbWFwcGVk IHRvIHRoZQorICogR1BVIGFuZCB0aGUga25vd24gYWRkcmVzc2VzIGFyZSBub3QgcGh5c2ljYWwg YWRkcmVzc2VzIGJ1dCBpbnN0ZWFkCisgKiBidXMgYWRkcmVzc2VzIChlLmcuLCB3aGF0IHlvdSdk IHB1dCBpbiBhbiBJQiBvciByaW5nIGJ1ZmZlcikuCisgKi8KIHN0YXRpYyBzc2l6ZV90IGFtZGdw dV9pb21lbV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJ CQkgc2l6ZV90IHNpemUsIGxvZmZfdCAqcG9zKQogewotLSAKMi4xNC4zCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAph bWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK