From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 1/4] drm/vmwgfx: Replace iowrite/ioread with volatile memory accesses Date: Fri, 30 Oct 2015 02:42:43 -0700 Message-ID: <1446198166-3068-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp-outbound-1.vmware.com (smtp-outbound-1.vmware.com [208.91.2.12]) by gabe.freedesktop.org (Postfix) with ESMTPS id 281FA6E773 for ; Fri, 30 Oct 2015 02:43:44 -0700 (PDT) Received: from sc9-mailhost3.vmware.com (sc9-mailhost3.vmware.com [10.113.161.73]) by smtp-outbound-1.vmware.com (Postfix) with ESMTP id 490FD280EF for ; Fri, 30 Oct 2015 02:43:42 -0700 (PDT) Received: from EX13-CAS-005.vmware.com (ex13-cas-005.vmware.com [10.113.191.55]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id DB0E2406A1 for ; Fri, 30 Oct 2015 02:43:41 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Thomas Hellstrom List-Id: dri-devel@lists.freedesktop.org Tm93IHRoYXQgd2UgdXNlIG1lbXJlbWFwIGluc3RlYWQgb2YgaW9yZW1hcCwgVXNlIFdSSVRFX09O Q0UgLyBSRUFEX09OQ0UKaW5zdGVhZCBvZiBpb3dyaXRlIC8gaW9yZWFkLgoKU2lnbmVkLW9mZi1i eTogVGhvbWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgpSZXZpZXdlZC1ieTog U2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZHJ2LmMgICB8ICAxNCArKy0tLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfZHJ2LmggICB8ICAyOCArKysrKysrKy0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4 X2ZlbmNlLmMgfCAgMjQgKysrKy0tLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Zp Zm8uYyAgfCAxMDkgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYyB8ICAxNiArKy0tLQogZHJpdmVycy9ncHUvZHJt L3Ztd2dmeC92bXdnZnhfaXJxLmMgICB8ICAgOSArLS0KIGRyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2ttcy5jICAgfCAgMjMgKysrLS0tLQogNyBmaWxlcyBjaGFuZ2VkLCAxMTggaW5zZXJ0 aW9ucygrKSwgMTA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMK aW5kZXggYmVlMGE0NS4uZDFjMzRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmMK QEAgLTc1MiwxNCArNzUyLDggQEAgc3RhdGljIGludCB2bXdfZHJpdmVyX2xvYWQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBjaGlwc2V0KQogCXR0bV9sb2NrX3NldF9raWxs KCZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyLmxvY2ssIGZhbHNlLCBTSUdURVJNKTsKIAlkZXZfcHJp di0+YWN0aXZlX21hc3RlciA9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyOwogCi0JLyoKLQkgKiBG b3JjZSBfX2lvbWVtIGZvciB0aGlzIG1hcHBpbmcgdW50aWwgdGhlIGltcGxpZWQgY29tcGlsZXIK LQkgKiBiYXJyaWVycyBhbmQge1JFQUR8V1JJVEV9X09OQ0Ugc2VtYW50aWNzIGZyb20gdGhlCi0J ICogaW97cmVhZHx3cml0ZX0zMigpIGFjY2Vzc29ycyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBleHBs aWNpdAotCSAqIGJhcnJpZXJzLgotCSAqLwotCWRldl9wcml2LT5tbWlvX3ZpcnQgPSAodm9pZCBf X2lvbWVtICopIG1lbXJlbWFwKGRldl9wcml2LT5tbWlvX3N0YXJ0LAotCQkJCQkgICAgZGV2X3By aXYtPm1taW9fc2l6ZSwgTUVNUkVNQVBfV0IpOworCWRldl9wcml2LT5tbWlvX3ZpcnQgPSBtZW1y ZW1hcChkZXZfcHJpdi0+bW1pb19zdGFydCwKKwkJCQkgICAgICAgZGV2X3ByaXYtPm1taW9fc2l6 ZSwgTUVNUkVNQVBfV0IpOwogCiAJaWYgKHVubGlrZWx5KGRldl9wcml2LT5tbWlvX3ZpcnQgPT0g TlVMTCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTkxMyw3ICs5MDcsNyBAQCBvdXRfbm9faXJx Ogogb3V0X25vX2RldmljZToKIAl0dG1fb2JqZWN0X2RldmljZV9yZWxlYXNlKCZkZXZfcHJpdi0+ dGRldik7CiBvdXRfZXJyNDoKLQltZW11bm1hcCgodm9pZCBfX2ZvcmNlICopIGRldl9wcml2LT5t bWlvX3ZpcnQpOworCW1lbXVubWFwKGRldl9wcml2LT5tbWlvX3ZpcnQpOwogb3V0X2VycjM6CiAJ dm13X3R0bV9nbG9iYWxfcmVsZWFzZShkZXZfcHJpdik7CiBvdXRfZXJyMDoKQEAgLTk2NCw3ICs5 NTgsNyBAQCBzdGF0aWMgaW50IHZtd19kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2LT5wZGV2KTsKIAogCXR0bV9vYmplY3RfZGV2 aWNlX3JlbGVhc2UoJmRldl9wcml2LT50ZGV2KTsKLQltZW11bm1hcCgodm9pZCBfX2ZvcmNlICop IGRldl9wcml2LT5tbWlvX3ZpcnQpOworCW1lbXVubWFwKGRldl9wcml2LT5tbWlvX3ZpcnQpOwog CWlmIChkZXZfcHJpdi0+Y3R4LnN0YWdlZF9iaW5kaW5ncykKIAkJdm13X2JpbmRpbmdfc3RhdGVf ZnJlZShkZXZfcHJpdi0+Y3R4LnN0YWdlZF9iaW5kaW5ncyk7CiAJdm13X3R0bV9nbG9iYWxfcmVs ZWFzZShkZXZfcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IGE2MTNi ZDQuLjE5OGM4YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Ry di5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC0zNzUsNyAr Mzc1LDcgQEAgc3RydWN0IHZtd19wcml2YXRlIHsKIAl1aW50MzJfdCBzdGR1X21heF9oZWlnaHQ7 CiAJdWludDMyX3QgaW5pdGlhbF93aWR0aDsKIAl1aW50MzJfdCBpbml0aWFsX2hlaWdodDsKLQl1 MzIgX19pb21lbSAqbW1pb192aXJ0OworCXUzMiAqbW1pb192aXJ0OwogCXVpbnQzMl90IGNhcGFi aWxpdGllczsKIAl1aW50MzJfdCBtYXhfZ21yX2lkczsKIAl1aW50MzJfdCBtYXhfZ21yX3BhZ2Vz OwpAQCAtMTIwNiw0ICsxMjA2LDMwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXdfZmlmb19yZXNv dXJjZV9kZWMoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKIAlhdG9taWNfZGVjKCZk ZXZfcHJpdi0+bnVtX2ZpZm9fcmVzb3VyY2VzKTsKIH0KKworLyoqCisgKiB2bXdfbW1pb19yZWFk IC0gUGVyZm9ybSBhIE1NSU8gcmVhZCBmcm9tIHZvbGF0aWxlIG1lbW9yeQorICoKKyAqIEBhZGRy OiBUaGUgYWRkcmVzcyB0byByZWFkIGZyb20KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVu ZGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gaW9yZWFkMzIoKSBvbgorICogbWVtcmVtYXAnZCBtZW1v cnksIGJ1dCB3aXRob3V0IGJ5dGVzd2FwcGluZy4KKyAqLworc3RhdGljIGlubGluZSB1MzIgdm13 X21taW9fcmVhZCh1MzIgKmFkZHIpCit7CisJcmV0dXJuIFJFQURfT05DRSgqYWRkcik7Cit9CisK Ky8qKgorICogdm13X21taW9fd3JpdGUgLSBQZXJmb3JtIGEgTU1JTyB3cml0ZSB0byB2b2xhdGls ZSBtZW1vcnkKKyAqCisgKiBAYWRkcjogVGhlIGFkZHJlc3MgdG8gd3JpdGUgdG8KKyAqCisgKiBU aGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIGVxdWl2YWxlbnQgdG8gaW93cml0ZTMyIG9u CisgKiBtZW1yZW1hcCdkIG1lbW9yeSwgYnV0IHdpdGhvdXQgYnl0ZXN3YXBwaW5nLgorICovCitz dGF0aWMgaW5saW5lIHZvaWQgdm13X21taW9fd3JpdGUodTMyIHZhbHVlLCB1MzIgKmFkZHIpCit7 CisJV1JJVEVfT05DRSgqYWRkciwgdmFsdWUpOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfZmVuY2UuYwppbmRleCA1NjdkZGVkLi44ZTY4OWI0IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mZW5jZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2ZlbmNlLmMKQEAgLTE0Miw4ICsxNDIsOCBAQCBzdGF0aWMgYm9vbCB2bXdf ZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZmVuY2UgKmYpCiAJc3RydWN0IHZtd19mZW5j ZV9tYW5hZ2VyICpmbWFuID0gZm1hbl9mcm9tX2ZlbmNlKGZlbmNlKTsKIAlzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2ID0gZm1hbi0+ZGV2X3ByaXY7CiAKLQl1MzIgX19pb21lbSAqZmlmb19t ZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OwotCXUzMiBzZXFubyA9IGlvcmVhZDMyKGZpZm9fbWVt ICsgU1ZHQV9GSUZPX0ZFTkNFKTsKKwl1MzIgKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmly dDsKKwl1MzIgc2Vxbm8gPSB2bXdfbW1pb19yZWFkKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNF KTsKIAlpZiAoc2Vxbm8gLSBmZW5jZS0+YmFzZS5zZXFubyA8IFZNV19GRU5DRV9XUkFQKQogCQly ZXR1cm4gZmFsc2U7CiAKQEAgLTM4NiwxNCArMzg2LDE0IEBAIHN0YXRpYyBib29sIHZtd19mZW5j ZV9nb2FsX25ld19sb2NrZWQoc3RydWN0IHZtd19mZW5jZV9tYW5hZ2VyICpmbWFuLAogCQkJCSAg ICAgIHUzMiBwYXNzZWRfc2Vxbm8pCiB7CiAJdTMyIGdvYWxfc2Vxbm87Ci0JdTMyIF9faW9tZW0g KmZpZm9fbWVtOworCXUzMiAqZmlmb19tZW07CiAJc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNl OwogCiAJaWYgKGxpa2VseSghZm1hbi0+c2Vxbm9fdmFsaWQpKQogCQlyZXR1cm4gZmFsc2U7CiAK IAlmaWZvX21lbSA9IGZtYW4tPmRldl9wcml2LT5tbWlvX3ZpcnQ7Ci0JZ29hbF9zZXFubyA9IGlv cmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFX0dPQUwpOworCWdvYWxfc2Vxbm8gPSB2 bXdfbW1pb19yZWFkKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFX0dPQUwpOwogCWlmIChsaWtl bHkocGFzc2VkX3NlcW5vIC0gZ29hbF9zZXFubyA+PSBWTVdfRkVOQ0VfV1JBUCkpCiAJCXJldHVy biBmYWxzZTsKIApAQCAtNDAxLDggKzQwMSw4IEBAIHN0YXRpYyBib29sIHZtd19mZW5jZV9nb2Fs X25ld19sb2NrZWQoc3RydWN0IHZtd19mZW5jZV9tYW5hZ2VyICpmbWFuLAogCWxpc3RfZm9yX2Vh Y2hfZW50cnkoZmVuY2UsICZmbWFuLT5mZW5jZV9saXN0LCBoZWFkKSB7CiAJCWlmICghbGlzdF9l bXB0eSgmZmVuY2UtPnNlcV9wYXNzZWRfYWN0aW9ucykpIHsKIAkJCWZtYW4tPnNlcW5vX3ZhbGlk ID0gdHJ1ZTsKLQkJCWlvd3JpdGUzMihmZW5jZS0+YmFzZS5zZXFubywKLQkJCQkgIGZpZm9fbWVt ICsgU1ZHQV9GSUZPX0ZFTkNFX0dPQUwpOworCQkJdm13X21taW9fd3JpdGUoZmVuY2UtPmJhc2Uu c2Vxbm8sCisJCQkJICAgICAgIGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFX0dPQUwpOwogCQkJ YnJlYWs7CiAJCX0KIAl9CkBAIC00MzAsMTggKzQzMCwxOCBAQCBzdGF0aWMgYm9vbCB2bXdfZmVu Y2VfZ29hbF9jaGVja19sb2NrZWQoc3RydWN0IHZtd19mZW5jZV9vYmogKmZlbmNlKQogewogCXN0 cnVjdCB2bXdfZmVuY2VfbWFuYWdlciAqZm1hbiA9IGZtYW5fZnJvbV9mZW5jZShmZW5jZSk7CiAJ dTMyIGdvYWxfc2Vxbm87Ci0JdTMyIF9faW9tZW0gKmZpZm9fbWVtOworCXUzMiAqZmlmb19tZW07 CiAKIAlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZmZW5jZS0+YmFzZSkpCiAJCXJldHVy biBmYWxzZTsKIAogCWZpZm9fbWVtID0gZm1hbi0+ZGV2X3ByaXYtPm1taW9fdmlydDsKLQlnb2Fs X3NlcW5vID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0VfR09BTCk7CisJZ29h bF9zZXFubyA9IHZtd19tbWlvX3JlYWQoZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0VfR09BTCk7 CiAJaWYgKGxpa2VseShmbWFuLT5zZXFub192YWxpZCAmJgogCQkgICBnb2FsX3NlcW5vIC0gZmVu Y2UtPmJhc2Uuc2Vxbm8gPCBWTVdfRkVOQ0VfV1JBUCkpCiAJCXJldHVybiBmYWxzZTsKIAotCWlv d3JpdGUzMihmZW5jZS0+YmFzZS5zZXFubywgZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0VfR09B TCk7CisJdm13X21taW9fd3JpdGUoZmVuY2UtPmJhc2Uuc2Vxbm8sIGZpZm9fbWVtICsgU1ZHQV9G SUZPX0ZFTkNFX0dPQUwpOwogCWZtYW4tPnNlcW5vX3ZhbGlkID0gdHJ1ZTsKIAogCXJldHVybiB0 cnVlOwpAQCAtNDUzLDkgKzQ1Myw5IEBAIHN0YXRpYyB2b2lkIF9fdm13X2ZlbmNlc191cGRhdGUo c3RydWN0IHZtd19mZW5jZV9tYW5hZ2VyICpmbWFuKQogCXN0cnVjdCBsaXN0X2hlYWQgYWN0aW9u X2xpc3Q7CiAJYm9vbCBuZWVkc19yZXJ1bjsKIAl1aW50MzJfdCBzZXFubywgbmV3X3NlcW5vOwot CXUzMiBfX2lvbWVtICpmaWZvX21lbSA9IGZtYW4tPmRldl9wcml2LT5tbWlvX3ZpcnQ7CisJdTMy ICpmaWZvX21lbSA9IGZtYW4tPmRldl9wcml2LT5tbWlvX3ZpcnQ7CiAKLQlzZXFubyA9IGlvcmVh ZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKKwlzZXFubyA9IHZtd19tbWlvX3JlYWQo Zmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0UpOwogcmVydW46CiAJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKGZlbmNlLCBuZXh0X2ZlbmNlLCAmZm1hbi0+ZmVuY2VfbGlzdCwgaGVhZCkgewogCQlp ZiAoc2Vxbm8gLSBmZW5jZS0+YmFzZS5zZXFubyA8IFZNV19GRU5DRV9XUkFQKSB7CkBAIC00Nzcs NyArNDc3LDcgQEAgcmVydW46CiAKIAluZWVkc19yZXJ1biA9IHZtd19mZW5jZV9nb2FsX25ld19s b2NrZWQoZm1hbiwgc2Vxbm8pOwogCWlmICh1bmxpa2VseShuZWVkc19yZXJ1bikpIHsKLQkJbmV3 X3NlcW5vID0gaW9yZWFkMzIoZmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0UpOworCQluZXdfc2Vx bm8gPSB2bXdfbW1pb19yZWFkKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKIAkJaWYgKG5l d19zZXFubyAhPSBzZXFubykgewogCQkJc2Vxbm8gPSBuZXdfc2Vxbm87CiAJCQlnb3RvIHJlcnVu OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jIGIvZHJp dmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCmluZGV4IDgwYzQwYzMuLjBjYmFmODgg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYworKysgYi9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKQEAgLTM2LDcgKzM2LDcgQEAgc3Ry dWN0IHZtd190ZW1wX3NldF9jb250ZXh0IHsKIAogYm9vbCB2bXdfZmlmb19oYXZlXzNkKHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JdTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2 X3ByaXYtPm1taW9fdmlydDsKKwl1MzIgKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsK IAl1aW50MzJfdCBmaWZvX21pbiwgaHd2ZXJzaW9uOwogCWNvbnN0IHN0cnVjdCB2bXdfZmlmb19z dGF0ZSAqZmlmbyA9ICZkZXZfcHJpdi0+ZmlmbzsKIApAQCAtNjAsMTUgKzYwLDE1IEBAIGJvb2wg dm13X2ZpZm9faGF2ZV8zZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCWlmICghKGRl dl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9FWFRFTkRFRF9GSUZPKSkKIAkJcmV0dXJu IGZhbHNlOwogCi0JZmlmb19taW4gPSBpb3JlYWQzMihmaWZvX21lbSAgKyBTVkdBX0ZJRk9fTUlO KTsKKwlmaWZvX21pbiA9IHZtd19tbWlvX3JlYWQoZmlmb19tZW0gICsgU1ZHQV9GSUZPX01JTik7 CiAJaWYgKGZpZm9fbWluIDw9IFNWR0FfRklGT18zRF9IV1ZFUlNJT04gKiBzaXplb2YodW5zaWdu ZWQgaW50KSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaHd2ZXJzaW9uID0gaW9yZWFkMzIoZmlmb19t ZW0gKwotCQkJICAgICAoKGZpZm8tPmNhcGFiaWxpdGllcyAmCi0JCQkgICAgICAgU1ZHQV9GSUZP X0NBUF8zRF9IV1ZFUlNJT05fUkVWSVNFRCkgPwotCQkJICAgICAgU1ZHQV9GSUZPXzNEX0hXVkVS U0lPTl9SRVZJU0VEIDoKLQkJCSAgICAgIFNWR0FfRklGT18zRF9IV1ZFUlNJT04pKTsKKwlod3Zl cnNpb24gPSB2bXdfbW1pb19yZWFkKGZpZm9fbWVtICsKKwkJCQkgICgoZmlmby0+Y2FwYWJpbGl0 aWVzICYKKwkJCQkgICAgU1ZHQV9GSUZPX0NBUF8zRF9IV1ZFUlNJT05fUkVWSVNFRCkgPworCQkJ CSAgIFNWR0FfRklGT18zRF9IV1ZFUlNJT05fUkVWSVNFRCA6CisJCQkJICAgU1ZHQV9GSUZPXzNE X0hXVkVSU0lPTikpOwogCiAJaWYgKGh3dmVyc2lvbiA9PSAwKQogCQlyZXR1cm4gZmFsc2U7CkBA IC04NSwxMyArODUsMTMgQEAgYm9vbCB2bXdfZmlmb19oYXZlXzNkKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYpCiAKIGJvb2wgdm13X2ZpZm9faGF2ZV9waXRjaGxvY2soc3RydWN0IHZtd19w cml2YXRlICpkZXZfcHJpdikKIHsKLQl1MzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+ bW1pb192aXJ0OworCXUzMiAgKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKIAl1aW50 MzJfdCBjYXBzOwogCiAJaWYgKCEoZGV2X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0VY VEVOREVEX0ZJRk8pKQogCQlyZXR1cm4gZmFsc2U7CiAKLQljYXBzID0gaW9yZWFkMzIoZmlmb19t ZW0gKyBTVkdBX0ZJRk9fQ0FQQUJJTElUSUVTKTsKKwljYXBzID0gdm13X21taW9fcmVhZChmaWZv X21lbSArIFNWR0FfRklGT19DQVBBQklMSVRJRVMpOwogCWlmIChjYXBzICYgU1ZHQV9GSUZPX0NB UF9QSVRDSExPQ0spCiAJCXJldHVybiB0cnVlOwogCkBAIC0xMDAsNyArMTAwLDcgQEAgYm9vbCB2 bXdfZmlmb19oYXZlX3BpdGNobG9jayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCiBp bnQgdm13X2ZpZm9faW5pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgdm13 X2ZpZm9fc3RhdGUgKmZpZm8pCiB7Ci0JdTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYt Pm1taW9fdmlydDsKKwl1MzIgICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CiAJdWlu dDMyX3QgbWF4OwogCXVpbnQzMl90IG1pbjsKIApAQCAtMTM3LDE5ICsxMzcsMTkgQEAgaW50IHZt d19maWZvX2luaXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IHZtd19maWZv X3N0YXRlICpmaWZvKQogCWlmIChtaW4gPCBQQUdFX1NJWkUpCiAJCW1pbiA9IFBBR0VfU0laRTsK IAotCWlvd3JpdGUzMihtaW4sIGZpZm9fbWVtICsgU1ZHQV9GSUZPX01JTik7Ci0JaW93cml0ZTMy KGRldl9wcml2LT5tbWlvX3NpemUsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX01BWCk7CisJdm13X21t aW9fd3JpdGUobWluLCBmaWZvX21lbSArIFNWR0FfRklGT19NSU4pOworCXZtd19tbWlvX3dyaXRl KGRldl9wcml2LT5tbWlvX3NpemUsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX01BWCk7CiAJd21iKCk7 Ci0JaW93cml0ZTMyKG1pbiwgIGZpZm9fbWVtICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKLQlpb3dy aXRlMzIobWluLCAgZmlmb19tZW0gKyBTVkdBX0ZJRk9fU1RPUCk7Ci0JaW93cml0ZTMyKDAsIGZp Zm9fbWVtICsgU1ZHQV9GSUZPX0JVU1kpOworCXZtd19tbWlvX3dyaXRlKG1pbiwgIGZpZm9fbWVt ICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKKwl2bXdfbW1pb193cml0ZShtaW4sICBmaWZvX21lbSAr IFNWR0FfRklGT19TVE9QKTsKKwl2bXdfbW1pb193cml0ZSgwLCBmaWZvX21lbSArIFNWR0FfRklG T19CVVNZKTsKIAltYigpOwogCiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19DT05GSUdf RE9ORSwgMSk7CiAKLQltYXggPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOwot CW1pbiA9IGlvcmVhZDMyKGZpZm9fbWVtICArIFNWR0FfRklGT19NSU4pOwotCWZpZm8tPmNhcGFi aWxpdGllcyA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0NBUEFCSUxJVElFUyk7CisJ bWF4ID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOworCW1pbiA9IHZt d19tbWlvX3JlYWQoZmlmb19tZW0gICsgU1ZHQV9GSUZPX01JTik7CisJZmlmby0+Y2FwYWJpbGl0 aWVzID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19DQVBBQklMSVRJRVMpOwog CiAJRFJNX0lORk8oIkZpZm8gbWF4IDB4JTA4eCBtaW4gMHglMDh4IGNhcCAweCUwOHhcbiIsCiAJ CSAodW5zaWduZWQgaW50KSBtYXgsCkBAIC0xNTcsNyArMTU3LDcgQEAgaW50IHZtd19maWZvX2lu aXQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IHZtd19maWZvX3N0YXRlICpm aWZvKQogCQkgKHVuc2lnbmVkIGludCkgZmlmby0+Y2FwYWJpbGl0aWVzKTsKIAogCWF0b21pY19z ZXQoJmRldl9wcml2LT5tYXJrZXJfc2VxLCBkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcW5vKTsKLQlp b3dyaXRlMzIoZGV2X3ByaXYtPmxhc3RfcmVhZF9zZXFubywgZmlmb19tZW0gKyBTVkdBX0ZJRk9f RkVOQ0UpOworCXZtd19tbWlvX3dyaXRlKGRldl9wcml2LT5sYXN0X3JlYWRfc2Vxbm8sIGZpZm9f bWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKIAl2bXdfbWFya2VyX3F1ZXVlX2luaXQoJmZpZm8tPm1h cmtlcl9xdWV1ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTE2NSwzMSArMTY1LDIzIEBAIGludCB2bXdf Zmlmb19pbml0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCB2bXdfZmlmb19z dGF0ZSAqZmlmbykKIAogdm9pZCB2bXdfZmlmb19waW5nX2hvc3Qoc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKQogewotCXUzMiBfX2lvbWVtICpmaWZvX21lbSA9 IGRldl9wcml2LT5tbWlvX3ZpcnQ7Ci0Jc3RhdGljIERFRklORV9TUElOTE9DSyhwaW5nX2xvY2sp OwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXUzMiAqZmlmb19tZW0gPSBkZXZfcHJpdi0+ bW1pb192aXJ0OwogCi0JLyoKLQkgKiBUaGUgcGluZ19sb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHdl IGRvbid0IGhhdmUgYW4gYXRvbWljCi0JICogdGVzdC1hbmQtc2V0IG9mIHRoZSBTVkdBX0ZJRk9f QlVTWSByZWdpc3Rlci4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcGluZ19sb2NrLCBpcnFf ZmxhZ3MpOwotCWlmICh1bmxpa2VseShpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19CVVNZ KSA9PSAwKSkgewotCQlpb3dyaXRlMzIoMSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQlVTWSk7CisJ cHJlZW1wdF9kaXNhYmxlKCk7CisJaWYgKGNtcHhjaGcoZmlmb19tZW0gKyBTVkdBX0ZJRk9fQlVT WSwgMCwgMSkgPT0gMCkKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19TWU5DLCByZWFz b24pOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5nX2xvY2ssIGlycV9mbGFncyk7 CisJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAogdm9pZCB2bXdfZmlmb19yZWxlYXNlKHN0cnVjdCB2 bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmbykKIHsKLQl1 MzIgX19pb21lbSAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCXUzMiAgKmZpZm9f bWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKIAogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9S RUdfU1lOQywgU1ZHQV9TWU5DX0dFTkVSSUMpOwogCXdoaWxlICh2bXdfcmVhZChkZXZfcHJpdiwg U1ZHQV9SRUdfQlVTWSkgIT0gMCkKIAkJOwogCi0JZGV2X3ByaXYtPmxhc3RfcmVhZF9zZXFubyA9 IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKKwlkZXZfcHJpdi0+bGFzdF9y ZWFkX3NlcW5vID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19GRU5DRSk7CiAK IAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0NPTkZJR19ET05FLAogCQkgIGRldl9wcml2 LT5jb25maWdfZG9uZV9zdGF0ZSk7CkBAIC0yMTMsMTEgKzIwNSwxMSBAQCB2b2lkIHZtd19maWZv X3JlbGVhc2Uoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IHZtd19maWZvX3N0 YXRlICpmaWZvKQogCiBzdGF0aWMgYm9vbCB2bXdfZmlmb19pc19mdWxsKHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKQogewotCXUzMiBfX2lvbWVtICpmaWZvX21l bSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7Ci0JdWludDMyX3QgbWF4ID0gaW9yZWFkMzIoZmlmb19t ZW0gKyBTVkdBX0ZJRk9fTUFYKTsKLQl1aW50MzJfdCBuZXh0X2NtZCA9IGlvcmVhZDMyKGZpZm9f bWVtICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKLQl1aW50MzJfdCBtaW4gPSBpb3JlYWQzMihmaWZv X21lbSArIFNWR0FfRklGT19NSU4pOwotCXVpbnQzMl90IHN0b3AgPSBpb3JlYWQzMihmaWZvX21l bSArIFNWR0FfRklGT19TVE9QKTsKKwl1MzIgICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3Zp cnQ7CisJdWludDMyX3QgbWF4ID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19N QVgpOworCXVpbnQzMl90IG5leHRfY21kID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0Ff RklGT19ORVhUX0NNRCk7CisJdWludDMyX3QgbWluID0gdm13X21taW9fcmVhZChmaWZvX21lbSAr IFNWR0FfRklGT19NSU4pOworCXVpbnQzMl90IHN0b3AgPSB2bXdfbW1pb19yZWFkKGZpZm9fbWVt ICsgU1ZHQV9GSUZPX1NUT1ApOwogCiAJcmV0dXJuICgobWF4IC0gbmV4dF9jbWQpICsgKHN0b3Ag LSBtaW4pIDw9IGJ5dGVzKTsKIH0KQEAgLTMyMSw3ICszMTMsNyBAQCBzdGF0aWMgdm9pZCAqdm13 X2xvY2FsX2ZpZm9fcmVzZXJ2ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCSAg ICB1aW50MzJfdCBieXRlcykKIHsKIAlzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUg PSAmZGV2X3ByaXYtPmZpZm87Ci0JdTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1t aW9fdmlydDsKKwl1MzIgICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CiAJdWludDMy X3QgbWF4OwogCXVpbnQzMl90IG1pbjsKIAl1aW50MzJfdCBuZXh0X2NtZDsKQEAgLTMyOSw5ICsz MjEsOSBAQCBzdGF0aWMgdm9pZCAqdm13X2xvY2FsX2ZpZm9fcmVzZXJ2ZShzdHJ1Y3Qgdm13X3By aXZhdGUgKmRldl9wcml2LAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZmaWZvX3N0YXRlLT5m aWZvX211dGV4KTsKLQltYXggPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOwot CW1pbiA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01JTik7Ci0JbmV4dF9jbWQgPSBp b3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CisJbWF4ID0gdm13X21taW9f cmVhZChmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOworCW1pbiA9IHZtd19tbWlvX3JlYWQoZmlm b19tZW0gKyBTVkdBX0ZJRk9fTUlOKTsKKwluZXh0X2NtZCA9IHZtd19tbWlvX3JlYWQoZmlmb19t ZW0gKyBTVkdBX0ZJRk9fTkVYVF9DTUQpOwogCiAJaWYgKHVubGlrZWx5KGJ5dGVzID49IChtYXgg LSBtaW4pKSkKIAkJZ290byBvdXRfZXJyOwpAQCAtMzQyLDcgKzMzNCw3IEBAIHN0YXRpYyB2b2lk ICp2bXdfbG9jYWxfZmlmb19yZXNlcnZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJ Zmlmb19zdGF0ZS0+cmVzZXJ2ZWRfc2l6ZSA9IGJ5dGVzOwogCiAJd2hpbGUgKDEpIHsKLQkJdWlu dDMyX3Qgc3RvcCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX1NUT1ApOworCQl1aW50 MzJfdCBzdG9wID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19TVE9QKTsKIAkJ Ym9vbCBuZWVkX2JvdW5jZSA9IGZhbHNlOwogCQlib29sIHJlc2VydmVfaW5fcGxhY2UgPSBmYWxz ZTsKIApAQCAtMzc2LDggKzM2OCw4IEBAIHN0YXRpYyB2b2lkICp2bXdfbG9jYWxfZmlmb19yZXNl cnZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJZmlmb19zdGF0ZS0+dXNpbmdf Ym91bmNlX2J1ZmZlciA9IGZhbHNlOwogCiAJCQkJaWYgKHJlc2VydmVhYmxlKQotCQkJCQlpb3dy aXRlMzIoYnl0ZXMsIGZpZm9fbWVtICsKLQkJCQkJCSAgU1ZHQV9GSUZPX1JFU0VSVkVEKTsKKwkJ CQkJdm13X21taW9fd3JpdGUoYnl0ZXMsIGZpZm9fbWVtICsKKwkJCQkJCSAgICAgICBTVkdBX0ZJ Rk9fUkVTRVJWRUQpOwogCQkJCXJldHVybiAodm9pZCBfX2ZvcmNlICopIChmaWZvX21lbSArCiAJ CQkJCQkJIChuZXh0X2NtZCA+PiAyKSk7CiAJCQl9IGVsc2UgewpAQCAtNDI3LDcgKzQxOSw3IEBA IHZvaWQgKnZtd19maWZvX3Jlc2VydmVfZHgoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwg dWludDMyX3QgYnl0ZXMsCiB9CiAKIHN0YXRpYyB2b2lkIHZtd19maWZvX3Jlc19jb3B5KHN0cnVj dCB2bXdfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSwKLQkJCSAgICAgIHUzMiBfX2lvbWVtICpmaWZv X21lbSwKKwkJCSAgICAgIHUzMiAgKmZpZm9fbWVtLAogCQkJICAgICAgdWludDMyX3QgbmV4dF9j bWQsCiAJCQkgICAgICB1aW50MzJfdCBtYXgsIHVpbnQzMl90IG1pbiwgdWludDMyX3QgYnl0ZXMp CiB7CkBAIC00MzksMTcgKzQzMSwxNiBAQCBzdGF0aWMgdm9pZCB2bXdfZmlmb19yZXNfY29weShz dHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUsCiAJaWYgKGJ5dGVzIDwgY2h1bmtfc2l6 ZSkKIAkJY2h1bmtfc2l6ZSA9IGJ5dGVzOwogCi0JaW93cml0ZTMyKGJ5dGVzLCBmaWZvX21lbSAr IFNWR0FfRklGT19SRVNFUlZFRCk7CisJdm13X21taW9fd3JpdGUoYnl0ZXMsIGZpZm9fbWVtICsg U1ZHQV9GSUZPX1JFU0VSVkVEKTsKIAltYigpOwotCW1lbWNweV90b2lvKGZpZm9fbWVtICsgKG5l eHRfY21kID4+IDIpLCBidWZmZXIsIGNodW5rX3NpemUpOworCW1lbWNweShmaWZvX21lbSArIChu ZXh0X2NtZCA+PiAyKSwgYnVmZmVyLCBjaHVua19zaXplKTsKIAlyZXN0ID0gYnl0ZXMgLSBjaHVu a19zaXplOwogCWlmIChyZXN0KQotCQltZW1jcHlfdG9pbyhmaWZvX21lbSArIChtaW4gPj4gMiks IGJ1ZmZlciArIChjaHVua19zaXplID4+IDIpLAotCQkJICAgIHJlc3QpOworCQltZW1jcHkoZmlm b19tZW0gKyAobWluID4+IDIpLCBidWZmZXIgKyAoY2h1bmtfc2l6ZSA+PiAyKSwgcmVzdCk7CiB9 CiAKIHN0YXRpYyB2b2lkIHZtd19maWZvX3Nsb3dfY29weShzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUg KmZpZm9fc3RhdGUsCi0JCQkgICAgICAgdTMyIF9faW9tZW0gKmZpZm9fbWVtLAorCQkJICAgICAg IHUzMiAgKmZpZm9fbWVtLAogCQkJICAgICAgIHVpbnQzMl90IG5leHRfY21kLAogCQkJICAgICAg IHVpbnQzMl90IG1heCwgdWludDMyX3QgbWluLCB1aW50MzJfdCBieXRlcykKIHsKQEAgLTQ1Nywx MiArNDQ4LDEyIEBAIHN0YXRpYyB2b2lkIHZtd19maWZvX3Nsb3dfY29weShzdHJ1Y3Qgdm13X2Zp Zm9fc3RhdGUgKmZpZm9fc3RhdGUsCiAJICAgIGZpZm9fc3RhdGUtPmR5bmFtaWNfYnVmZmVyIDog Zmlmb19zdGF0ZS0+c3RhdGljX2J1ZmZlcjsKIAogCXdoaWxlIChieXRlcyA+IDApIHsKLQkJaW93 cml0ZTMyKCpidWZmZXIrKywgZmlmb19tZW0gKyAobmV4dF9jbWQgPj4gMikpOworCQl2bXdfbW1p b193cml0ZSgqYnVmZmVyKyssIGZpZm9fbWVtICsgKG5leHRfY21kID4+IDIpKTsKIAkJbmV4dF9j bWQgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAkJaWYgKHVubGlrZWx5KG5leHRfY21kID09IG1heCkp CiAJCQluZXh0X2NtZCA9IG1pbjsKIAkJbWIoKTsKLQkJaW93cml0ZTMyKG5leHRfY21kLCBmaWZv X21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CisJCXZtd19tbWlvX3dyaXRlKG5leHRfY21kLCBm aWZvX21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CiAJCW1iKCk7CiAJCWJ5dGVzIC09IHNpemVv Zih1aW50MzJfdCk7CiAJfQpAQCAtNDcxLDEwICs0NjIsMTAgQEAgc3RhdGljIHZvaWQgdm13X2Zp Zm9fc2xvd19jb3B5KHN0cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmb19zdGF0ZSwKIHN0YXRpYyB2 b2lkIHZtd19sb2NhbF9maWZvX2NvbW1pdChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1 aW50MzJfdCBieXRlcykKIHsKIAlzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm9fc3RhdGUgPSAm ZGV2X3ByaXYtPmZpZm87Ci0JdTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9f dmlydDsKLQl1aW50MzJfdCBuZXh0X2NtZCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZP X05FWFRfQ01EKTsKLQl1aW50MzJfdCBtYXggPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklG T19NQVgpOwotCXVpbnQzMl90IG1pbiA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01J Tik7CisJdTMyICAqZmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OworCXVpbnQzMl90IG5l eHRfY21kID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19ORVhUX0NNRCk7CisJ dWludDMyX3QgbWF4ID0gdm13X21taW9fcmVhZChmaWZvX21lbSArIFNWR0FfRklGT19NQVgpOwor CXVpbnQzMl90IG1pbiA9IHZtd19tbWlvX3JlYWQoZmlmb19tZW0gKyBTVkdBX0ZJRk9fTUlOKTsK IAlib29sIHJlc2VydmVhYmxlID0gZmlmb19zdGF0ZS0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9GSUZP X0NBUF9SRVNFUlZFOwogCiAJaWYgKGZpZm9fc3RhdGUtPmR4KQpAQCAtNTA3LDExICs0OTgsMTEg QEAgc3RhdGljIHZvaWQgdm13X2xvY2FsX2ZpZm9fY29tbWl0KHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsIHVpbnQzMl90IGJ5dGVzKQogCQlpZiAobmV4dF9jbWQgPj0gbWF4KQogCQkJbmV4 dF9jbWQgLT0gbWF4IC0gbWluOwogCQltYigpOwotCQlpb3dyaXRlMzIobmV4dF9jbWQsIGZpZm9f bWVtICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKKwkJdm13X21taW9fd3JpdGUobmV4dF9jbWQsIGZp Zm9fbWVtICsgU1ZHQV9GSUZPX05FWFRfQ01EKTsKIAl9CiAKIAlpZiAocmVzZXJ2ZWFibGUpCi0J CWlvd3JpdGUzMigwLCBmaWZvX21lbSArIFNWR0FfRklGT19SRVNFUlZFRCk7CisJCXZtd19tbWlv X3dyaXRlKDAsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX1JFU0VSVkVEKTsKIAltYigpOwogCXVwX3dy aXRlKCZmaWZvX3N0YXRlLT5yd3NlbSk7CiAJdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBT VkdBX1NZTkNfR0VORVJJQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Zt d2dmeF9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaW9jdGwuYwppbmRl eCBhM2UzYzgzLi5iOGM2YTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Zt d2dmeF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMK QEAgLTY0LDcgKzY0LDcgQEAgaW50IHZtd19nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLAogCQlicmVhazsKIAljYXNlIERSTV9WTVdfUEFSQU1fRklGT19I V19WRVJTSU9OOgogCXsKLQkJdTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9f dmlydDsKKwkJdTMyICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CiAJCWNvbnN0IHN0 cnVjdCB2bXdfZmlmb19zdGF0ZSAqZmlmbyA9ICZkZXZfcHJpdi0+ZmlmbzsKIAogCQlpZiAoKGRl dl9wcml2LT5jYXBhYmlsaXRpZXMgJiBTVkdBX0NBUF9HQk9CSkVDVFMpKSB7CkBAIC03MywxMSAr NzMsMTEgQEAgaW50IHZtd19nZXRwYXJhbV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2 b2lkICpkYXRhLAogCQl9CiAKIAkJcGFyYW0tPnZhbHVlID0KLQkJCWlvcmVhZDMyKGZpZm9fbWVt ICsKLQkJCQkgKChmaWZvLT5jYXBhYmlsaXRpZXMgJgotCQkJCSAgIFNWR0FfRklGT19DQVBfM0Rf SFdWRVJTSU9OX1JFVklTRUQpID8KLQkJCQkgIFNWR0FfRklGT18zRF9IV1ZFUlNJT05fUkVWSVNF RCA6Ci0JCQkJICBTVkdBX0ZJRk9fM0RfSFdWRVJTSU9OKSk7CisJCQl2bXdfbW1pb19yZWFkKGZp Zm9fbWVtICsKKwkJCQkgICAgICAoKGZpZm8tPmNhcGFiaWxpdGllcyAmCisJCQkJCVNWR0FfRklG T19DQVBfM0RfSFdWRVJTSU9OX1JFVklTRUQpID8KKwkJCQkgICAgICAgU1ZHQV9GSUZPXzNEX0hX VkVSU0lPTl9SRVZJU0VEIDoKKwkJCQkgICAgICAgU1ZHQV9GSUZPXzNEX0hXVkVSU0lPTikpOwog CQlicmVhazsKIAl9CiAJY2FzZSBEUk1fVk1XX1BBUkFNX01BWF9TVVJGX01FTU9SWToKQEAgLTE3 OSw3ICsxNzksNyBAQCBpbnQgdm13X2dldF9jYXBfM2RfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKIAkJKHN0cnVjdCBkcm1fdm13X2dldF8zZF9jYXBfYXJnICopIGRh dGE7CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CiAJdWlu dDMyX3Qgc2l6ZTsKLQl1MzIgX19pb21lbSAqZmlmb19tZW07CisJdTMyICpmaWZvX21lbTsKIAl2 b2lkIF9fdXNlciAqYnVmZmVyID0gKHZvaWQgX191c2VyICopKCh1bnNpZ25lZCBsb25nKShhcmct PmJ1ZmZlcikpOwogCXZvaWQgKmJvdW5jZTsKIAlpbnQgcmV0OwpAQCAtMjI5LDcgKzIyOSw3IEBA IGludCB2bXdfZ2V0X2NhcF8zZF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLAogCQkJZ290byBvdXRfZXJyOwogCX0gZWxzZSB7CiAJCWZpZm9fbWVtID0gZGV2X3ByaXYt Pm1taW9fdmlydDsKLQkJbWVtY3B5X2Zyb21pbyhib3VuY2UsICZmaWZvX21lbVtTVkdBX0ZJRk9f M0RfQ0FQU10sIHNpemUpOworCQltZW1jcHkoYm91bmNlLCAmZmlmb19tZW1bU1ZHQV9GSUZPXzNE X0NBUFNdLCBzaXplKTsKIAl9CiAKIAlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmZmVyLCBib3VuY2Us IHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwppbmRleCA5NDk4YTVlLi5hYzNl Y2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwpAQCAtNzIsOCArNzIsOCBAQCBz dGF0aWMgYm9vbCB2bXdfZmlmb19pZGxlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVp bnQzMl90IHNlcW5vKQogdm9pZCB2bXdfdXBkYXRlX3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCQkgc3RydWN0IHZtd19maWZvX3N0YXRlICpmaWZvX3N0YXRlKQogewotCXUz MiBfX2lvbWVtICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7Ci0JdWludDMyX3Qgc2Vx bm8gPSBpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19GRU5DRSk7CisJdTMyICpmaWZvX21l bSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CisJdWludDMyX3Qgc2Vxbm8gPSB2bXdfbW1pb19yZWFk KGZpZm9fbWVtICsgU1ZHQV9GSUZPX0ZFTkNFKTsKIAogCWlmIChkZXZfcHJpdi0+bGFzdF9yZWFk X3NlcW5vICE9IHNlcW5vKSB7CiAJCWRldl9wcml2LT5sYXN0X3JlYWRfc2Vxbm8gPSBzZXFubzsK QEAgLTE3OCw4ICsxNzgsOSBAQCBpbnQgdm13X2ZhbGxiYWNrX3dhaXQoc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdiwKIAl9CiAJZmluaXNoX3dhaXQoJmRldl9wcml2LT5mZW5jZV9xdWV1ZSwg Jl9fd2FpdCk7CiAJaWYgKHJldCA9PSAwICYmIGZpZm9faWRsZSkgewotCQl1MzIgX19pb21lbSAq Zmlmb19tZW0gPSBkZXZfcHJpdi0+bW1pb192aXJ0OwotCQlpb3dyaXRlMzIoc2lnbmFsX3NlcSwg Zmlmb19tZW0gKyBTVkdBX0ZJRk9fRkVOQ0UpOworCQl1MzIgKmZpZm9fbWVtID0gZGV2X3ByaXYt Pm1taW9fdmlydDsKKworCQl2bXdfbW1pb193cml0ZShzaWduYWxfc2VxLCBmaWZvX21lbSArIFNW R0FfRklGT19GRU5DRSk7CiAJfQogCXdha2VfdXBfYWxsKCZkZXZfcHJpdi0+ZmVuY2VfcXVldWUp Owogb3V0X2VycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2tt cy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggMDNmZmFiMi4u YTk0YjI0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTEyMywxNCArMTIz LDE0IEBAIGVycl91bnJlc2VydmU6CiB2b2lkIHZtd19jdXJzb3JfdXBkYXRlX3Bvc2l0aW9uKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQkJYm9vbCBzaG93LCBpbnQgeCwgaW50IHkp CiB7Ci0JdTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKKwl1MzIg KmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKIAl1aW50MzJfdCBjb3VudDsKIAotCWlv d3JpdGUzMihzaG93ID8gMSA6IDAsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX0NVUlNPUl9PTik7Ci0J aW93cml0ZTMyKHgsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX0NVUlNPUl9YKTsKLQlpb3dyaXRlMzIo eSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX1kpOwotCWNvdW50ID0gaW9yZWFkMzIoZmlm b19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX0NPVU5UKTsKLQlpb3dyaXRlMzIoKytjb3VudCwgZmlm b19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX0NPVU5UKTsKKwl2bXdfbW1pb193cml0ZShzaG93ID8g MSA6IDAsIGZpZm9fbWVtICsgU1ZHQV9GSUZPX0NVUlNPUl9PTik7CisJdm13X21taW9fd3JpdGUo eCwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX1gpOworCXZtd19tbWlvX3dyaXRlKHksIGZp Zm9fbWVtICsgU1ZHQV9GSUZPX0NVUlNPUl9ZKTsKKwljb3VudCA9IHZtd19tbWlvX3JlYWQoZmlm b19tZW0gKyBTVkdBX0ZJRk9fQ1VSU09SX0NPVU5UKTsKKwl2bXdfbW1pb193cml0ZSgrK2NvdW50 LCBmaWZvX21lbSArIFNWR0FfRklGT19DVVJTT1JfQ09VTlQpOwogfQogCiBpbnQgdm13X2R1X2Ny dGNfY3Vyc29yX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2LApAQCAtMTE1NSw3ICsxMTU1LDggQEAgaW50IHZtd19rbXNfd3JpdGVfc3ZnYShzdHJ1 Y3Qgdm13X3ByaXZhdGUgKnZtd19wcml2LAogCWlmICh2bXdfcHJpdi0+Y2FwYWJpbGl0aWVzICYg U1ZHQV9DQVBfUElUQ0hMT0NLKQogCQl2bXdfd3JpdGUodm13X3ByaXYsIFNWR0FfUkVHX1BJVENI TE9DSywgcGl0Y2gpOwogCWVsc2UgaWYgKHZtd19maWZvX2hhdmVfcGl0Y2hsb2NrKHZtd19wcml2 KSkKLQkJaW93cml0ZTMyKHBpdGNoLCB2bXdfcHJpdi0+bW1pb192aXJ0ICsgU1ZHQV9GSUZPX1BJ VENITE9DSyk7CisJCXZtd19tbWlvX3dyaXRlKHBpdGNoLCB2bXdfcHJpdi0+bW1pb192aXJ0ICsK KwkJCSAgICAgICBTVkdBX0ZJRk9fUElUQ0hMT0NLKTsKIAl2bXdfd3JpdGUodm13X3ByaXYsIFNW R0FfUkVHX1dJRFRILCB3aWR0aCk7CiAJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19IRUlH SFQsIGhlaWdodCk7CiAJdm13X3dyaXRlKHZtd19wcml2LCBTVkdBX1JFR19CSVRTX1BFUl9QSVhF TCwgYnBwKTsKQEAgLTExODEsOCArMTE4Miw4IEBAIGludCB2bXdfa21zX3NhdmVfdmdhKHN0cnVj dCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCiAJCXZtd19wcml2LT52Z2FfcGl0Y2hsb2NrID0KIAkJ ICB2bXdfcmVhZCh2bXdfcHJpdiwgU1ZHQV9SRUdfUElUQ0hMT0NLKTsKIAllbHNlIGlmICh2bXdf Zmlmb19oYXZlX3BpdGNobG9jayh2bXdfcHJpdikpCi0JCXZtd19wcml2LT52Z2FfcGl0Y2hsb2Nr ID0gaW9yZWFkMzIodm13X3ByaXYtPm1taW9fdmlydCArCi0JCQkJCQkgICBTVkdBX0ZJRk9fUElU Q0hMT0NLKTsKKwkJdm13X3ByaXYtPnZnYV9waXRjaGxvY2sgPSB2bXdfbW1pb19yZWFkKHZtd19w cml2LT5tbWlvX3ZpcnQgKworCQkJCQkJCVNWR0FfRklGT19QSVRDSExPQ0spOwogCiAJaWYgKCEo dm13X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0RJU1BMQVlfVE9QT0xPR1kpKQogCQly ZXR1cm4gMDsKQEAgLTEyMzAsOCArMTIzMSw4IEBAIGludCB2bXdfa21zX3Jlc3RvcmVfdmdhKHN0 cnVjdCB2bXdfcHJpdmF0ZSAqdm13X3ByaXYpCiAJCXZtd193cml0ZSh2bXdfcHJpdiwgU1ZHQV9S RUdfUElUQ0hMT0NLLAogCQkJICB2bXdfcHJpdi0+dmdhX3BpdGNobG9jayk7CiAJZWxzZSBpZiAo dm13X2ZpZm9faGF2ZV9waXRjaGxvY2sodm13X3ByaXYpKQotCQlpb3dyaXRlMzIodm13X3ByaXYt PnZnYV9waXRjaGxvY2ssCi0JCQkgIHZtd19wcml2LT5tbWlvX3ZpcnQgKyBTVkdBX0ZJRk9fUElU Q0hMT0NLKTsKKwkJdm13X21taW9fd3JpdGUodm13X3ByaXYtPnZnYV9waXRjaGxvY2ssCisJCQkg ICAgICAgdm13X3ByaXYtPm1taW9fdmlydCArIFNWR0FfRklGT19QSVRDSExPQ0spOwogCiAJaWYg KCEodm13X3ByaXYtPmNhcGFiaWxpdGllcyAmIFNWR0FfQ0FQX0RJU1BMQVlfVE9QT0xPR1kpKQog CQlyZXR1cm4gMDsKLS0gCjIuNC4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=