From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 03/11] drm/i915/gtt: Reorder gen8 ppgtt free/clear/alloc Date: Sun, 7 Jul 2019 22:00:16 +0100 Message-ID: <20190707210024.26192-4-chris@chris-wilson.co.uk> References: <20190707210024.26192-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9B65389AB2 for ; Sun, 7 Jul 2019 21:00:50 +0000 (UTC) In-Reply-To: <20190707210024.26192-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SW4gcHJlcGFyYXRpb24gZm9yIHJlZmFjdG9yaW5nIHRoZSBmcmVlL2NsZWFyL2FsbG9jLCBmaXJz dCBtb3ZlIHRoZSBjb2RlCmFyb3VuZCBzbyB0aGF0IHdlIGNhbiBhdm9pZCBmb3J3YXJkIGRlY2xh cmF0aW9ucyBpbiB0aGUgbmV4dCBzZXQgb2YKcGF0Y2hlcy4KClNpZ25lZC1vZmYtYnk6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jIHwgNjczICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDEg ZmlsZSBjaGFuZ2VkLCAzMzcgaW5zZXJ0aW9ucygrKSwgMzM2IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXggMWZhOTNmNTY3OTJlLi5kYTRkYjc2Y2UwNTQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCkBAIC04MzEsNiArODMxLDEwNCBAQCBz dGF0aWMgdm9pZCBtYXJrX3RsYnNfZGlydHkoc3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0KQogCXBw Z3R0LT5wZF9kaXJ0eV9lbmdpbmVzID0gQUxMX0VOR0lORVM7CiB9CiAKK3N0YXRpYyBpbnQgZ2Vu OF9wcGd0dF9ub3RpZnlfdmd0KHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCwgYm9vbCBjcmVhdGUp Cit7CisJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSAmcHBndHQtPnZtOworCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHZtLT5pOTE1OworCWVudW0gdmd0X2cydl90 eXBlIG1zZzsKKwlpbnQgaTsKKworCWlmIChjcmVhdGUpCisJCWF0b21pY19pbmMocHhfdXNlZChw cGd0dC0+cGQpKTsgLyogbmV2ZXIgcmVtb3ZlICovCisJZWxzZQorCQlhdG9taWNfZGVjKHB4X3Vz ZWQocHBndHQtPnBkKSk7CisKKwlpZiAoaTkxNV92bV9pc180bHZsKHZtKSkgeworCQljb25zdCB1 NjQgZGFkZHIgPSBweF9kbWEocHBndHQtPnBkKTsKKworCQlJOTE1X1dSSVRFKHZndGlmX3JlZyhw ZHBbMF0ubG8pLCBsb3dlcl8zMl9iaXRzKGRhZGRyKSk7CisJCUk5MTVfV1JJVEUodmd0aWZfcmVn KHBkcFswXS5oaSksIHVwcGVyXzMyX2JpdHMoZGFkZHIpKTsKKworCQltc2cgPSAoY3JlYXRlID8g VkdUX0cyVl9QUEdUVF9MNF9QQUdFX1RBQkxFX0NSRUFURSA6CisJCQkJVkdUX0cyVl9QUEdUVF9M NF9QQUdFX1RBQkxFX0RFU1RST1kpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBHRU44 XzNMVkxfUERQRVM7IGkrKykgeworCQkJY29uc3QgdTY0IGRhZGRyID0gaTkxNV9wYWdlX2Rpcl9k bWFfYWRkcihwcGd0dCwgaSk7CisKKwkJCUk5MTVfV1JJVEUodmd0aWZfcmVnKHBkcFtpXS5sbyks IGxvd2VyXzMyX2JpdHMoZGFkZHIpKTsKKwkJCUk5MTVfV1JJVEUodmd0aWZfcmVnKHBkcFtpXS5o aSksIHVwcGVyXzMyX2JpdHMoZGFkZHIpKTsKKwkJfQorCisJCW1zZyA9IChjcmVhdGUgPyBWR1Rf RzJWX1BQR1RUX0wzX1BBR0VfVEFCTEVfQ1JFQVRFIDoKKwkJCQlWR1RfRzJWX1BQR1RUX0wzX1BB R0VfVEFCTEVfREVTVFJPWSk7CisJfQorCisJSTkxNV9XUklURSh2Z3RpZl9yZWcoZzJ2X25vdGlm eSksIG1zZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2VuOF9mcmVlX3BhZ2Vf dGFibGVzKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCSAgc3RydWN0IGk5MTVf cGFnZV9kaXJlY3RvcnkgKnBkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEk5MTVf UERFUzsgaSsrKSB7CisJCWlmIChwZC0+ZW50cnlbaV0gIT0gJnZtLT5zY3JhdGNoX3B0KQorCQkJ ZnJlZV9wZCh2bSwgcGQtPmVudHJ5W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdlbjhfcHBn dHRfY2xlYW51cF8zbHZsKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJCSAgICBz dHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBw ZHBlcyA9IGk5MTVfcGRwZXNfcGVyX3BkcCh2bSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgcGRwZXM7IGkrKykgeworCQlpZiAocGRwLT5lbnRyeVtpXSA9PSAmdm0tPnNjcmF0Y2hfcGQp CisJCQljb250aW51ZTsKKworCQlnZW44X2ZyZWVfcGFnZV90YWJsZXModm0sIHBkcC0+ZW50cnlb aV0pOworCQlmcmVlX3BkKHZtLCBwZHAtPmVudHJ5W2ldKTsKKwl9CisKKwlmcmVlX3B4KHZtLCBw ZHApOworfQorCitzdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXBfNGx2bChzdHJ1Y3QgaTkx NV9wcGd0dCAqcHBndHQpCit7CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKiBjb25zdCBw bWw0ID0gcHBndHQtPnBkOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdFTjhfUE1MNEVT X1BFUl9QTUw0OyBpKyspIHsKKwkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCA9IGk5 MTVfcGRwX2VudHJ5KHBtbDQsIGkpOworCisJCWlmIChweF9iYXNlKHBkcCkgPT0gJnBwZ3R0LT52 bS5zY3JhdGNoX3BkcCkKKwkJCWNvbnRpbnVlOworCisJCWdlbjhfcHBndHRfY2xlYW51cF8zbHZs KCZwcGd0dC0+dm0sIHBkcCk7CisJfQorCisJZnJlZV9weCgmcHBndHQtPnZtLCBwbWw0KTsKK30K Kworc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3Bh Y2UgKnZtKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gdm0tPmk5MTU7CisJ c3RydWN0IGk5MTVfcHBndHQgKnBwZ3R0ID0gaTkxNV92bV90b19wcGd0dCh2bSk7CisKKwlpZiAo aW50ZWxfdmdwdV9hY3RpdmUoaTkxNSkpCisJCWdlbjhfcHBndHRfbm90aWZ5X3ZndChwcGd0dCwg ZmFsc2UpOworCisJaWYgKGk5MTVfdm1faXNfNGx2bCh2bSkpCisJCWdlbjhfcHBndHRfY2xlYW51 cF80bHZsKHBwZ3R0KTsKKwllbHNlCisJCWdlbjhfcHBndHRfY2xlYW51cF8zbHZsKCZwcGd0dC0+ dm0sIHBwZ3R0LT5wZCk7CisKKwlmcmVlX3NjcmF0Y2godm0pOworfQorCiAvKiBSZW1vdmVzIGVu dHJpZXMgZnJvbSBhIHNpbmdsZSBwYWdlIHRhYmxlLCByZWxlYXNpbmcgaXQgaWYgaXQncyBlbXB0 eS4KICAqIENhbGxlciBjYW4gdXNlIHRoZSByZXR1cm4gdmFsdWUgdG8gdXBkYXRlIGhpZ2hlci1s ZXZlbCBlbnRyaWVzLgogICovCkBAIC05MTcsOTUgKzEwMTUsMjY1IEBAIHN0YXRpYyB2b2lkIGdl bjhfcHBndHRfY2xlYXJfNGx2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKIAl9CiB9 CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNndF9kbWEgewotCXN0cnVjdCBzY2F0dGVybGlzdCAq c2c7Ci0JZG1hX2FkZHJfdCBkbWEsIG1heDsKLX0gc2d0X2RtYShzdHJ1Y3QgaTkxNV92bWEgKnZt YSkgewotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSB2bWEtPnBhZ2VzLT5zZ2w7Ci0JZG1hX2Fk ZHJfdCBhZGRyID0gc2dfZG1hX2FkZHJlc3Moc2cpOwotCXJldHVybiAoc3RydWN0IHNndF9kbWEp IHsgc2csIGFkZHIsIGFkZHIgKyBzZy0+bGVuZ3RoIH07Ci19Ci0KLXN0cnVjdCBnZW44X2luc2Vy dF9wdGUgewotCXUxNiBwbWw0ZTsKLQl1MTYgcGRwZTsKLQl1MTYgcGRlOwotCXUxNiBwdGU7Ci19 OwogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBnZW44X2luc2VydF9wdGUgZ2VuOF9p bnNlcnRfcHRlKHU2NCBzdGFydCkKK3N0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZChzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKKwkJCSAgICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeSAqcGQsCisJCQkgICAgICAgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQogewotCXJldHVy biAoc3RydWN0IGdlbjhfaW5zZXJ0X3B0ZSkgewotCQkgZ2VuOF9wbWw0ZV9pbmRleChzdGFydCks Ci0JCSBnZW44X3BkcGVfaW5kZXgoc3RhcnQpLAotCQkgZ2VuOF9wZGVfaW5kZXgoc3RhcnQpLAot CQkgZ2VuOF9wdGVfaW5kZXgoc3RhcnQpLAotCX07Ci19CisJc3RydWN0IGk5MTVfcGFnZV90YWJs ZSAqcHQsICphbGxvYyA9IE5VTEw7CisJdTY0IGZyb20gPSBzdGFydDsKKwl1bnNpZ25lZCBpbnQg cGRlOworCWludCByZXQgPSAwOwogCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wKLWdlbjhf cHBndHRfaW5zZXJ0X3B0ZV9lbnRyaWVzKHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCwKLQkJCSAg ICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHAsCi0JCQkgICAgICBzdHJ1Y3Qgc2d0 X2RtYSAqaXRlciwKLQkJCSAgICAgIHN0cnVjdCBnZW44X2luc2VydF9wdGUgKmlkeCwKLQkJCSAg ICAgIGVudW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKLQkJCSAgICAgIHUzMiBmbGFn cykKLXsKLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQ7Ci0JY29uc3QgZ2VuOF9wdGVf dCBwdGVfZW5jb2RlID0gZ2VuOF9wdGVfZW5jb2RlKDAsIGNhY2hlX2xldmVsLCBmbGFncyk7Ci0J Z2VuOF9wdGVfdCAqdmFkZHI7Ci0JYm9vbCByZXQ7CisJc3Bpbl9sb2NrKCZwZC0+bG9jayk7CisJ Z2VuOF9mb3JfZWFjaF9wZGUocHQsIHBkLCBzdGFydCwgbGVuZ3RoLCBwZGUpIHsKKwkJY29uc3Qg aW50IGNvdW50ID0gZ2VuOF9wdGVfY291bnQoc3RhcnQsIGxlbmd0aCk7CiAKLQlHRU1fQlVHX09O KGlkeC0+cGRwZSA+PSBpOTE1X3BkcGVzX3Blcl9wZHAoJnBwZ3R0LT52bSkpOwotCXBkID0gaTkx NV9wZF9lbnRyeShwZHAsIGlkeC0+cGRwZSk7Ci0JdmFkZHIgPSBrbWFwX2F0b21pY19weChpOTE1 X3B0X2VudHJ5KHBkLCBpZHgtPnBkZSkpOwotCWRvIHsKLQkJdmFkZHJbaWR4LT5wdGVdID0gcHRl X2VuY29kZSB8IGl0ZXItPmRtYTsKKwkJaWYgKHB4X2Jhc2UocHQpID09ICZ2bS0+c2NyYXRjaF9w dCkgeworCQkJc3Bpbl91bmxvY2soJnBkLT5sb2NrKTsKIAotCQlpdGVyLT5kbWEgKz0gSTkxNV9H VFRfUEFHRV9TSVpFOwotCQlpZiAoaXRlci0+ZG1hID49IGl0ZXItPm1heCkgewotCQkJaXRlci0+ c2cgPSBfX3NnX25leHQoaXRlci0+c2cpOwotCQkJaWYgKCFpdGVyLT5zZykgewotCQkJCXJldCA9 IGZhbHNlOwotCQkJCWJyZWFrOworCQkJcHQgPSBmZXRjaF9hbmRfemVybygmYWxsb2MpOworCQkJ aWYgKCFwdCkKKwkJCQlwdCA9IGFsbG9jX3B0KHZtKTsKKwkJCWlmIChJU19FUlIocHQpKSB7CisJ CQkJcmV0ID0gUFRSX0VSUihwdCk7CisJCQkJZ290byB1bndpbmQ7CiAJCQl9CiAKLQkJCWl0ZXIt PmRtYSA9IHNnX2RtYV9hZGRyZXNzKGl0ZXItPnNnKTsKLQkJCWl0ZXItPm1heCA9IGl0ZXItPmRt YSArIGl0ZXItPnNnLT5sZW5ndGg7CisJCQlpZiAoY291bnQgPCBHRU44X1BURVMgfHwgaW50ZWxf dmdwdV9hY3RpdmUodm0tPmk5MTUpKQorCQkJCWZpbGxfcHgocHQsIHZtLT5zY3JhdGNoX3B0ZSk7 CisKKwkJCXNwaW5fbG9jaygmcGQtPmxvY2spOworCQkJaWYgKHBkLT5lbnRyeVtwZGVdID09ICZ2 bS0+c2NyYXRjaF9wdCkgeworCQkJCXNldF9wZF9lbnRyeShwZCwgcGRlLCBwdCk7CisJCQl9IGVs c2UgeworCQkJCWFsbG9jID0gcHQ7CisJCQkJcHQgPSBwZC0+ZW50cnlbcGRlXTsKKwkJCX0KIAkJ fQogCi0JCWlmICgrK2lkeC0+cHRlID09IEdFTjhfUFRFUykgewotCQkJaWR4LT5wdGUgPSAwOwor CQlhdG9taWNfYWRkKGNvdW50LCAmcHQtPnVzZWQpOworCX0KKwlzcGluX3VubG9jaygmcGQtPmxv Y2spOworCWdvdG8gb3V0OwogCi0JCQlpZiAoKytpZHgtPnBkZSA9PSBJOTE1X1BERVMpIHsKLQkJ CQlpZHgtPnBkZSA9IDA7Cit1bndpbmQ6CisJZ2VuOF9wcGd0dF9jbGVhcl9wZCh2bSwgcGQsIGZy b20sIHN0YXJ0IC0gZnJvbSk7CitvdXQ6CisJaWYgKGFsbG9jKQorCQlmcmVlX3B4KHZtLCBhbGxv Yyk7CisJcmV0dXJuIHJldDsKK30KIAotCQkJCS8qIExpbWl0ZWQgYnkgc2cgbGVuZ3RoIGZvciAz bHZsICovCi0JCQkJaWYgKCsraWR4LT5wZHBlID09IEdFTjhfUE1MNEVTX1BFUl9QTUw0KSB7Ci0J CQkJCWlkeC0+cGRwZSA9IDA7Ci0JCQkJCXJldCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0K K3N0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZHAoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFj ZSAqdm0sCisJCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkcCwKKwkJCQl1NjQgc3Rh cnQsIHU2NCBsZW5ndGgpCit7CisJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkLCAqYWxs b2MgPSBOVUxMOworCXU2NCBmcm9tID0gc3RhcnQ7CisJdW5zaWduZWQgaW50IHBkcGU7CisJaW50 IHJldCA9IDA7CiAKLQkJCQlHRU1fQlVHX09OKGlkeC0+cGRwZSA+PSBpOTE1X3BkcGVzX3Blcl9w ZHAoJnBwZ3R0LT52bSkpOwotCQkJCXBkID0gcGRwLT5lbnRyeVtpZHgtPnBkcGVdOworCXNwaW5f bG9jaygmcGRwLT5sb2NrKTsKKwlnZW44X2Zvcl9lYWNoX3BkcGUocGQsIHBkcCwgc3RhcnQsIGxl bmd0aCwgcGRwZSkgeworCQlpZiAocHhfYmFzZShwZCkgPT0gJnZtLT5zY3JhdGNoX3BkKSB7CisJ CQlzcGluX3VubG9jaygmcGRwLT5sb2NrKTsKKworCQkJcGQgPSBmZXRjaF9hbmRfemVybygmYWxs b2MpOworCQkJaWYgKCFwZCkKKwkJCQlwZCA9IGFsbG9jX3BkKHZtKTsKKwkJCWlmIChJU19FUlIo cGQpKSB7CisJCQkJcmV0ID0gUFRSX0VSUihwZCk7CisJCQkJZ290byB1bndpbmQ7CiAJCQl9CiAK LQkJCWt1bm1hcF9hdG9taWModmFkZHIpOwotCQkJdmFkZHIgPSBrbWFwX2F0b21pY19weChpOTE1 X3B0X2VudHJ5KHBkLCBpZHgtPnBkZSkpOworCQkJaW5pdF9wZChwZCwgJnZtLT5zY3JhdGNoX3B0 KTsKKworCQkJc3Bpbl9sb2NrKCZwZHAtPmxvY2spOworCQkJaWYgKHBkcC0+ZW50cnlbcGRwZV0g PT0gJnZtLT5zY3JhdGNoX3BkKSB7CisJCQkJc2V0X3BkX2VudHJ5KHBkcCwgcGRwZSwgcGQpOwor CQkJfSBlbHNlIHsKKwkJCQlhbGxvYyA9IHBkOworCQkJCXBkID0gcGRwLT5lbnRyeVtwZHBlXTsK KwkJCX0KIAkJfQotCX0gd2hpbGUgKDEpOwotCWt1bm1hcF9hdG9taWModmFkZHIpOworCQlhdG9t aWNfaW5jKHB4X3VzZWQocGQpKTsKKwkJc3Bpbl91bmxvY2soJnBkcC0+bG9jayk7CisKKwkJcmV0 ID0gZ2VuOF9wcGd0dF9hbGxvY19wZCh2bSwgcGQsIHN0YXJ0LCBsZW5ndGgpOworCQlpZiAodW5s aWtlbHkocmV0KSkKKwkJCWdvdG8gdW53aW5kX3BkOworCisJCXNwaW5fbG9jaygmcGRwLT5sb2Nr KTsKKwkJYXRvbWljX2RlYyhweF91c2VkKHBkKSk7CisJfQorCXNwaW5fdW5sb2NrKCZwZHAtPmxv Y2spOworCWdvdG8gb3V0OwogCit1bndpbmRfcGQ6CisJaWYgKHJlbGVhc2VfcGRfZW50cnkocGRw LCBwZHBlLCAmcGQtPnB0LCAmdm0tPnNjcmF0Y2hfcGQpKQorCQlmcmVlX3B4KHZtLCBwZCk7Cit1 bndpbmQ6CisJZ2VuOF9wcGd0dF9jbGVhcl9wZHAodm0sIHBkcCwgZnJvbSwgc3RhcnQgLSBmcm9t KTsKK291dDoKKwlpZiAoYWxsb2MpCisJCWZyZWVfcHgodm0sIGFsbG9jKTsKIAlyZXR1cm4gcmV0 OwogfQogCi1zdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2luc2VydF8zbHZsKHN0cnVjdCBpOTE1X2Fk ZHJlc3Nfc3BhY2UgKnZtLAotCQkJCSAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAotCQkJCSAgIGVu dW0gaTkxNV9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbCwKLQkJCQkgICB1MzIgZmxhZ3MpCitzdGF0 aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSwKKwkJCQkgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQogewotCXN0cnVjdCBpOTE1X3BwZ3R0ICpw cGd0dCA9IGk5MTVfdm1fdG9fcHBndHQodm0pOworCXJldHVybiBnZW44X3BwZ3R0X2FsbG9jX3Bk cCh2bSwKKwkJCQkgICAgaTkxNV92bV90b19wcGd0dCh2bSktPnBkLCBzdGFydCwgbGVuZ3RoKTsK K30KKworc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVz c19zcGFjZSAqdm0sCisJCQkJIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgaTkx NV9wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKKwlzdHJ1Y3QgaTkxNV9wYWdl X2RpcmVjdG9yeSAqIGNvbnN0IHBtbDQgPSBwcGd0dC0+cGQ7CisJc3RydWN0IGk5MTVfcGFnZV9k aXJlY3RvcnkgKnBkcCwgKmFsbG9jID0gTlVMTDsKKwl1NjQgZnJvbSA9IHN0YXJ0OworCWludCBy ZXQgPSAwOworCXUzMiBwbWw0ZTsKKworCXNwaW5fbG9jaygmcG1sNC0+bG9jayk7CisJZ2VuOF9m b3JfZWFjaF9wbWw0ZShwZHAsIHBtbDQsIHN0YXJ0LCBsZW5ndGgsIHBtbDRlKSB7CisJCWlmIChw eF9iYXNlKHBkcCkgPT0gJnZtLT5zY3JhdGNoX3BkcCkgeworCQkJc3Bpbl91bmxvY2soJnBtbDQt PmxvY2spOworCisJCQlwZHAgPSBmZXRjaF9hbmRfemVybygmYWxsb2MpOworCQkJaWYgKCFwZHAp CisJCQkJcGRwID0gYWxsb2NfcGQodm0pOworCQkJaWYgKElTX0VSUihwZHApKSB7CisJCQkJcmV0 ID0gUFRSX0VSUihwZHApOworCQkJCWdvdG8gdW53aW5kOworCQkJfQorCisJCQlpbml0X3BkKHBk cCwgJnZtLT5zY3JhdGNoX3BkKTsKKworCQkJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKKwkJCWlm IChwbWw0LT5lbnRyeVtwbWw0ZV0gPT0gJnZtLT5zY3JhdGNoX3BkcCkgeworCQkJCXNldF9wZF9l bnRyeShwbWw0LCBwbWw0ZSwgcGRwKTsKKwkJCX0gZWxzZSB7CisJCQkJYWxsb2MgPSBwZHA7CisJ CQkJcGRwID0gcG1sNC0+ZW50cnlbcG1sNGVdOworCQkJfQorCQl9CisJCWF0b21pY19pbmMocHhf dXNlZChwZHApKTsKKwkJc3Bpbl91bmxvY2soJnBtbDQtPmxvY2spOworCisJCXJldCA9IGdlbjhf cHBndHRfYWxsb2NfcGRwKHZtLCBwZHAsIHN0YXJ0LCBsZW5ndGgpOworCQlpZiAodW5saWtlbHko cmV0KSkKKwkJCWdvdG8gdW53aW5kX3BkcDsKKworCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwor CQlhdG9taWNfZGVjKHB4X3VzZWQocGRwKSk7CisJfQorCXNwaW5fdW5sb2NrKCZwbWw0LT5sb2Nr KTsKKwlnb3RvIG91dDsKKwordW53aW5kX3BkcDoKKwlpZiAocmVsZWFzZV9wZF9lbnRyeShwbWw0 LCBwbWw0ZSwgJnBkcC0+cHQsICZ2bS0+c2NyYXRjaF9wZHApKQorCQlmcmVlX3B4KHZtLCBwZHAp OwordW53aW5kOgorCWdlbjhfcHBndHRfY2xlYXJfNGx2bCh2bSwgZnJvbSwgc3RhcnQgLSBmcm9t KTsKK291dDoKKwlpZiAoYWxsb2MpCisJCWZyZWVfcHgodm0sIGFsbG9jKTsKKwlyZXR1cm4gcmV0 OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZ3RfZG1hIHsKKwlzdHJ1Y3Qgc2NhdHRlcmxp c3QgKnNnOworCWRtYV9hZGRyX3QgZG1hLCBtYXg7Cit9IHNndF9kbWEoc3RydWN0IGk5MTVfdm1h ICp2bWEpIHsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gdm1hLT5wYWdlcy0+c2dsOworCWRt YV9hZGRyX3QgYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwlyZXR1cm4gKHN0cnVjdCBzZ3Rf ZG1hKSB7IHNnLCBhZGRyLCBhZGRyICsgc2ctPmxlbmd0aCB9OworfQorCitzdHJ1Y3QgZ2VuOF9p bnNlcnRfcHRlIHsKKwl1MTYgcG1sNGU7CisJdTE2IHBkcGU7CisJdTE2IHBkZTsKKwl1MTYgcHRl OworfTsKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBzdHJ1Y3QgZ2VuOF9pbnNlcnRfcHRlIGdl bjhfaW5zZXJ0X3B0ZSh1NjQgc3RhcnQpCit7CisJcmV0dXJuIChzdHJ1Y3QgZ2VuOF9pbnNlcnRf cHRlKSB7CisJCSBnZW44X3BtbDRlX2luZGV4KHN0YXJ0KSwKKwkJIGdlbjhfcGRwZV9pbmRleChz dGFydCksCisJCSBnZW44X3BkZV9pbmRleChzdGFydCksCisJCSBnZW44X3B0ZV9pbmRleChzdGFy dCksCisJfTsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sCitnZW44X3BwZ3R0X2lu c2VydF9wdGVfZW50cmllcyhzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQsCisJCQkgICAgICBzdHJ1 Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGRwLAorCQkJICAgICAgc3RydWN0IHNndF9kbWEgKml0 ZXIsCisJCQkgICAgICBzdHJ1Y3QgZ2VuOF9pbnNlcnRfcHRlICppZHgsCisJCQkgICAgICBlbnVt IGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWwsCisJCQkgICAgICB1MzIgZmxhZ3MpCit7CisJ c3RydWN0IGk5MTVfcGFnZV9kaXJlY3RvcnkgKnBkOworCWNvbnN0IGdlbjhfcHRlX3QgcHRlX2Vu Y29kZSA9IGdlbjhfcHRlX2VuY29kZSgwLCBjYWNoZV9sZXZlbCwgZmxhZ3MpOworCWdlbjhfcHRl X3QgKnZhZGRyOworCWJvb2wgcmV0OworCisJR0VNX0JVR19PTihpZHgtPnBkcGUgPj0gaTkxNV9w ZHBlc19wZXJfcGRwKCZwcGd0dC0+dm0pKTsKKwlwZCA9IGk5MTVfcGRfZW50cnkocGRwLCBpZHgt PnBkcGUpOworCXZhZGRyID0ga21hcF9hdG9taWNfcHgoaTkxNV9wdF9lbnRyeShwZCwgaWR4LT5w ZGUpKTsKKwlkbyB7CisJCXZhZGRyW2lkeC0+cHRlXSA9IHB0ZV9lbmNvZGUgfCBpdGVyLT5kbWE7 CisKKwkJaXRlci0+ZG1hICs9IEk5MTVfR1RUX1BBR0VfU0laRTsKKwkJaWYgKGl0ZXItPmRtYSA+ PSBpdGVyLT5tYXgpIHsKKwkJCWl0ZXItPnNnID0gX19zZ19uZXh0KGl0ZXItPnNnKTsKKwkJCWlm ICghaXRlci0+c2cpIHsKKwkJCQlyZXQgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJ aXRlci0+ZG1hID0gc2dfZG1hX2FkZHJlc3MoaXRlci0+c2cpOworCQkJaXRlci0+bWF4ID0gaXRl ci0+ZG1hICsgaXRlci0+c2ctPmxlbmd0aDsKKwkJfQorCisJCWlmICgrK2lkeC0+cHRlID09IEdF TjhfUFRFUykgeworCQkJaWR4LT5wdGUgPSAwOworCisJCQlpZiAoKytpZHgtPnBkZSA9PSBJOTE1 X1BERVMpIHsKKwkJCQlpZHgtPnBkZSA9IDA7CisKKwkJCQkvKiBMaW1pdGVkIGJ5IHNnIGxlbmd0 aCBmb3IgM2x2bCAqLworCQkJCWlmICgrK2lkeC0+cGRwZSA9PSBHRU44X1BNTDRFU19QRVJfUE1M NCkgeworCQkJCQlpZHgtPnBkcGUgPSAwOworCQkJCQlyZXQgPSB0cnVlOworCQkJCQlicmVhazsK KwkJCQl9CisKKwkJCQlHRU1fQlVHX09OKGlkeC0+cGRwZSA+PSBpOTE1X3BkcGVzX3Blcl9wZHAo JnBwZ3R0LT52bSkpOworCQkJCXBkID0gcGRwLT5lbnRyeVtpZHgtPnBkcGVdOworCQkJfQorCisJ CQlrdW5tYXBfYXRvbWljKHZhZGRyKTsKKwkJCXZhZGRyID0ga21hcF9hdG9taWNfcHgoaTkxNV9w dF9lbnRyeShwZCwgaWR4LT5wZGUpKTsKKwkJfQorCX0gd2hpbGUgKDEpOworCWt1bm1hcF9hdG9t aWModmFkZHIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ2VuOF9wcGd0dF9p bnNlcnRfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKKwkJCQkgICBzdHJ1Y3Qg aTkxNV92bWEgKnZtYSwKKwkJCQkgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgY2FjaGVfbGV2ZWws CisJCQkJICAgdTMyIGZsYWdzKQoreworCXN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCA9IGk5MTVf dm1fdG9fcHBndHQodm0pOwogCXN0cnVjdCBzZ3RfZG1hIGl0ZXIgPSBzZ3RfZG1hKHZtYSk7CiAJ c3RydWN0IGdlbjhfaW5zZXJ0X3B0ZSBpZHggPSBnZW44X2luc2VydF9wdGUodm1hLT5ub2RlLnN0 YXJ0KTsKIApAQCAtMTE2MSwxNyArMTQyOSw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfcHBndHRfaW5z ZXJ0XzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sCiAJfQogfQogCi1zdGF0aWMg dm9pZCBnZW44X2ZyZWVfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0s Ci0JCQkJICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQpCi17Ci0JaW50IGk7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgSTkxNV9QREVTOyBpKyspIHsKLQkJaWYgKHBkLT5lbnRyeVtpXSAhPSAm dm0tPnNjcmF0Y2hfcHQpCi0JCQlmcmVlX3BkKHZtLCBwZC0+ZW50cnlbaV0pOwotCX0KLX0KLQog c3RhdGljIGludCBnZW44X2luaXRfc2NyYXRjaChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2 bSkKIHsKIAlpbnQgcmV0OwpAQCAtMTIzOSwyNjIgKzE0OTYsNiBAQCBzdGF0aWMgaW50IGdlbjhf aW5pdF9zY3JhdGNoKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQogCXJldHVybiByZXQ7 CiB9CiAKLXN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9ub3RpZnlfdmd0KHN0cnVjdCBpOTE1X3BwZ3R0 ICpwcGd0dCwgYm9vbCBjcmVhdGUpCi17Ci0Jc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0g PSAmcHBndHQtPnZtOwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHZtLT5p OTE1OwotCWVudW0gdmd0X2cydl90eXBlIG1zZzsKLQlpbnQgaTsKLQotCWlmIChjcmVhdGUpCi0J CWF0b21pY19pbmMocHhfdXNlZChwcGd0dC0+cGQpKTsgLyogbmV2ZXIgcmVtb3ZlICovCi0JZWxz ZQotCQlhdG9taWNfZGVjKHB4X3VzZWQocHBndHQtPnBkKSk7Ci0KLQlpZiAoaTkxNV92bV9pc180 bHZsKHZtKSkgewotCQljb25zdCB1NjQgZGFkZHIgPSBweF9kbWEocHBndHQtPnBkKTsKLQotCQlJ OTE1X1dSSVRFKHZndGlmX3JlZyhwZHBbMF0ubG8pLCBsb3dlcl8zMl9iaXRzKGRhZGRyKSk7Ci0J CUk5MTVfV1JJVEUodmd0aWZfcmVnKHBkcFswXS5oaSksIHVwcGVyXzMyX2JpdHMoZGFkZHIpKTsK LQotCQltc2cgPSAoY3JlYXRlID8gVkdUX0cyVl9QUEdUVF9MNF9QQUdFX1RBQkxFX0NSRUFURSA6 Ci0JCQkJVkdUX0cyVl9QUEdUVF9MNF9QQUdFX1RBQkxFX0RFU1RST1kpOwotCX0gZWxzZSB7Ci0J CWZvciAoaSA9IDA7IGkgPCBHRU44XzNMVkxfUERQRVM7IGkrKykgewotCQkJY29uc3QgdTY0IGRh ZGRyID0gaTkxNV9wYWdlX2Rpcl9kbWFfYWRkcihwcGd0dCwgaSk7Ci0KLQkJCUk5MTVfV1JJVEUo dmd0aWZfcmVnKHBkcFtpXS5sbyksIGxvd2VyXzMyX2JpdHMoZGFkZHIpKTsKLQkJCUk5MTVfV1JJ VEUodmd0aWZfcmVnKHBkcFtpXS5oaSksIHVwcGVyXzMyX2JpdHMoZGFkZHIpKTsKLQkJfQotCi0J CW1zZyA9IChjcmVhdGUgPyBWR1RfRzJWX1BQR1RUX0wzX1BBR0VfVEFCTEVfQ1JFQVRFIDoKLQkJ CQlWR1RfRzJWX1BQR1RUX0wzX1BBR0VfVEFCTEVfREVTVFJPWSk7Ci0JfQotCi0JSTkxNV9XUklU RSh2Z3RpZl9yZWcoZzJ2X25vdGlmeSksIG1zZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj IHZvaWQgZ2VuOF9wcGd0dF9jbGVhbnVwXzNsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAq dm0sCi0JCQkJICAgIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5ICpwZHApCi17Ci0JY29uc3Qg dW5zaWduZWQgaW50IHBkcGVzID0gaTkxNV9wZHBlc19wZXJfcGRwKHZtKTsKLQlpbnQgaTsKLQot CWZvciAoaSA9IDA7IGkgPCBwZHBlczsgaSsrKSB7Ci0JCWlmIChwZHAtPmVudHJ5W2ldID09ICZ2 bS0+c2NyYXRjaF9wZCkKLQkJCWNvbnRpbnVlOwotCi0JCWdlbjhfZnJlZV9wYWdlX3RhYmxlcyh2 bSwgcGRwLT5lbnRyeVtpXSk7Ci0JCWZyZWVfcGQodm0sIHBkcC0+ZW50cnlbaV0pOwotCX0KLQot CWZyZWVfcHgodm0sIHBkcCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbjhfcHBndHRfY2xlYW51cF80 bHZsKHN0cnVjdCBpOTE1X3BwZ3R0ICpwcGd0dCkKLXsKLQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVj dG9yeSAqIGNvbnN0IHBtbDQgPSBwcGd0dC0+cGQ7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBp IDwgR0VOOF9QTUw0RVNfUEVSX1BNTDQ7IGkrKykgewotCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVj dG9yeSAqcGRwID0gaTkxNV9wZHBfZW50cnkocG1sNCwgaSk7Ci0KLQkJaWYgKHB4X2Jhc2UocGRw KSA9PSAmcHBndHQtPnZtLnNjcmF0Y2hfcGRwKQotCQkJY29udGludWU7Ci0KLQkJZ2VuOF9wcGd0 dF9jbGVhbnVwXzNsdmwoJnBwZ3R0LT52bSwgcGRwKTsKLQl9Ci0KLQlmcmVlX3B4KCZwcGd0dC0+ dm0sIHBtbDQpOwotfQotCi1zdGF0aWMgdm9pZCBnZW44X3BwZ3R0X2NsZWFudXAoc3RydWN0IGk5 MTVfYWRkcmVzc19zcGFjZSAqdm0pCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUg PSB2bS0+aTkxNTsKLQlzdHJ1Y3QgaTkxNV9wcGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0 KHZtKTsKLQotCWlmIChpbnRlbF92Z3B1X2FjdGl2ZShpOTE1KSkKLQkJZ2VuOF9wcGd0dF9ub3Rp Znlfdmd0KHBwZ3R0LCBmYWxzZSk7Ci0KLQlpZiAoaTkxNV92bV9pc180bHZsKHZtKSkKLQkJZ2Vu OF9wcGd0dF9jbGVhbnVwXzRsdmwocHBndHQpOwotCWVsc2UKLQkJZ2VuOF9wcGd0dF9jbGVhbnVw XzNsdmwoJnBwZ3R0LT52bSwgcHBndHQtPnBkKTsKLQotCWZyZWVfc2NyYXRjaCh2bSk7Ci19Ci0K LXN0YXRpYyBpbnQgZ2VuOF9wcGd0dF9hbGxvY19wZChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNl ICp2bSwKLQkJCSAgICAgICBzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSAqcGQsCi0JCQkgICAg ICAgdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQotewotCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGUgKnB0 LCAqYWxsb2MgPSBOVUxMOwotCXU2NCBmcm9tID0gc3RhcnQ7Ci0JdW5zaWduZWQgaW50IHBkZTsK LQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9jaygmcGQtPmxvY2spOwotCWdlbjhfZm9yX2VhY2hf cGRlKHB0LCBwZCwgc3RhcnQsIGxlbmd0aCwgcGRlKSB7Ci0JCWNvbnN0IGludCBjb3VudCA9IGdl bjhfcHRlX2NvdW50KHN0YXJ0LCBsZW5ndGgpOwotCi0JCWlmIChweF9iYXNlKHB0KSA9PSAmdm0t PnNjcmF0Y2hfcHQpIHsKLQkJCXNwaW5fdW5sb2NrKCZwZC0+bG9jayk7Ci0KLQkJCXB0ID0gZmV0 Y2hfYW5kX3plcm8oJmFsbG9jKTsKLQkJCWlmICghcHQpCi0JCQkJcHQgPSBhbGxvY19wdCh2bSk7 Ci0JCQlpZiAoSVNfRVJSKHB0KSkgewotCQkJCXJldCA9IFBUUl9FUlIocHQpOwotCQkJCWdvdG8g dW53aW5kOwotCQkJfQotCi0JCQlpZiAoY291bnQgPCBHRU44X1BURVMgfHwgaW50ZWxfdmdwdV9h Y3RpdmUodm0tPmk5MTUpKQotCQkJCWZpbGxfcHgocHQsIHZtLT5zY3JhdGNoX3B0ZSk7Ci0KLQkJ CXNwaW5fbG9jaygmcGQtPmxvY2spOwotCQkJaWYgKHBkLT5lbnRyeVtwZGVdID09ICZ2bS0+c2Ny YXRjaF9wdCkgewotCQkJCXNldF9wZF9lbnRyeShwZCwgcGRlLCBwdCk7Ci0JCQl9IGVsc2Ugewot CQkJCWFsbG9jID0gcHQ7Ci0JCQkJcHQgPSBwZC0+ZW50cnlbcGRlXTsKLQkJCX0KLQkJfQotCi0J CWF0b21pY19hZGQoY291bnQsICZwdC0+dXNlZCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZwZC0+bG9j ayk7Ci0JZ290byBvdXQ7Ci0KLXVud2luZDoKLQlnZW44X3BwZ3R0X2NsZWFyX3BkKHZtLCBwZCwg ZnJvbSwgc3RhcnQgLSBmcm9tKTsKLW91dDoKLQlpZiAoYWxsb2MpCi0JCWZyZWVfcHgodm0sIGFs bG9jKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdlbjhfcHBndHRfYWxsb2NfcGRw KHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtLAotCQkJCXN0cnVjdCBpOTE1X3BhZ2VfZGly ZWN0b3J5ICpwZHAsCi0JCQkJdTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQotewotCXN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5ICpwZCwgKmFsbG9jID0gTlVMTDsKLQl1NjQgZnJvbSA9IHN0YXJ0Owot CXVuc2lnbmVkIGludCBwZHBlOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrKCZwZHAtPmxv Y2spOwotCWdlbjhfZm9yX2VhY2hfcGRwZShwZCwgcGRwLCBzdGFydCwgbGVuZ3RoLCBwZHBlKSB7 Ci0JCWlmIChweF9iYXNlKHBkKSA9PSAmdm0tPnNjcmF0Y2hfcGQpIHsKLQkJCXNwaW5fdW5sb2Nr KCZwZHAtPmxvY2spOwotCi0JCQlwZCA9IGZldGNoX2FuZF96ZXJvKCZhbGxvYyk7Ci0JCQlpZiAo IXBkKQotCQkJCXBkID0gYWxsb2NfcGQodm0pOwotCQkJaWYgKElTX0VSUihwZCkpIHsKLQkJCQly ZXQgPSBQVFJfRVJSKHBkKTsKLQkJCQlnb3RvIHVud2luZDsKLQkJCX0KLQotCQkJaW5pdF9wZChw ZCwgJnZtLT5zY3JhdGNoX3B0KTsKLQotCQkJc3Bpbl9sb2NrKCZwZHAtPmxvY2spOwotCQkJaWYg KHBkcC0+ZW50cnlbcGRwZV0gPT0gJnZtLT5zY3JhdGNoX3BkKSB7Ci0JCQkJc2V0X3BkX2VudHJ5 KHBkcCwgcGRwZSwgcGQpOwotCQkJfSBlbHNlIHsKLQkJCQlhbGxvYyA9IHBkOwotCQkJCXBkID0g cGRwLT5lbnRyeVtwZHBlXTsKLQkJCX0KLQkJfQotCQlhdG9taWNfaW5jKHB4X3VzZWQocGQpKTsK LQkJc3Bpbl91bmxvY2soJnBkcC0+bG9jayk7Ci0KLQkJcmV0ID0gZ2VuOF9wcGd0dF9hbGxvY19w ZCh2bSwgcGQsIHN0YXJ0LCBsZW5ndGgpOwotCQlpZiAodW5saWtlbHkocmV0KSkKLQkJCWdvdG8g dW53aW5kX3BkOwotCi0JCXNwaW5fbG9jaygmcGRwLT5sb2NrKTsKLQkJYXRvbWljX2RlYyhweF91 c2VkKHBkKSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZwZHAtPmxvY2spOwotCWdvdG8gb3V0OwotCi11 bndpbmRfcGQ6Ci0JaWYgKHJlbGVhc2VfcGRfZW50cnkocGRwLCBwZHBlLCAmcGQtPnB0LCAmdm0t PnNjcmF0Y2hfcGQpKQotCQlmcmVlX3B4KHZtLCBwZCk7Ci11bndpbmQ6Ci0JZ2VuOF9wcGd0dF9j bGVhcl9wZHAodm0sIHBkcCwgZnJvbSwgc3RhcnQgLSBmcm9tKTsKLW91dDoKLQlpZiAoYWxsb2Mp Ci0JCWZyZWVfcHgodm0sIGFsbG9jKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGdl bjhfcHBndHRfYWxsb2NfM2x2bChzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKLQkJCQkg dTY0IHN0YXJ0LCB1NjQgbGVuZ3RoKQotewotCXJldHVybiBnZW44X3BwZ3R0X2FsbG9jX3BkcCh2 bSwKLQkJCQkgICAgaTkxNV92bV90b19wcGd0dCh2bSktPnBkLCBzdGFydCwgbGVuZ3RoKTsKLX0K LQotc3RhdGljIGludCBnZW44X3BwZ3R0X2FsbG9jXzRsdmwoc3RydWN0IGk5MTVfYWRkcmVzc19z cGFjZSAqdm0sCi0JCQkJIHU2NCBzdGFydCwgdTY0IGxlbmd0aCkKLXsKLQlzdHJ1Y3QgaTkxNV9w cGd0dCAqcHBndHQgPSBpOTE1X3ZtX3RvX3BwZ3R0KHZtKTsKLQlzdHJ1Y3QgaTkxNV9wYWdlX2Rp cmVjdG9yeSAqIGNvbnN0IHBtbDQgPSBwcGd0dC0+cGQ7Ci0Jc3RydWN0IGk5MTVfcGFnZV9kaXJl Y3RvcnkgKnBkcCwgKmFsbG9jID0gTlVMTDsKLQl1NjQgZnJvbSA9IHN0YXJ0OwotCWludCByZXQg PSAwOwotCXUzMiBwbWw0ZTsKLQotCXNwaW5fbG9jaygmcG1sNC0+bG9jayk7Ci0JZ2VuOF9mb3Jf ZWFjaF9wbWw0ZShwZHAsIHBtbDQsIHN0YXJ0LCBsZW5ndGgsIHBtbDRlKSB7Ci0JCWlmIChweF9i YXNlKHBkcCkgPT0gJnZtLT5zY3JhdGNoX3BkcCkgewotCQkJc3Bpbl91bmxvY2soJnBtbDQtPmxv Y2spOwotCi0JCQlwZHAgPSBmZXRjaF9hbmRfemVybygmYWxsb2MpOwotCQkJaWYgKCFwZHApCi0J CQkJcGRwID0gYWxsb2NfcGQodm0pOwotCQkJaWYgKElTX0VSUihwZHApKSB7Ci0JCQkJcmV0ID0g UFRSX0VSUihwZHApOwotCQkJCWdvdG8gdW53aW5kOwotCQkJfQotCi0JCQlpbml0X3BkKHBkcCwg JnZtLT5zY3JhdGNoX3BkKTsKLQotCQkJc3Bpbl9sb2NrKCZwbWw0LT5sb2NrKTsKLQkJCWlmIChw bWw0LT5lbnRyeVtwbWw0ZV0gPT0gJnZtLT5zY3JhdGNoX3BkcCkgewotCQkJCXNldF9wZF9lbnRy eShwbWw0LCBwbWw0ZSwgcGRwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYWxsb2MgPSBwZHA7Ci0JCQkJ cGRwID0gcG1sNC0+ZW50cnlbcG1sNGVdOwotCQkJfQotCQl9Ci0JCWF0b21pY19pbmMocHhfdXNl ZChwZHApKTsKLQkJc3Bpbl91bmxvY2soJnBtbDQtPmxvY2spOwotCi0JCXJldCA9IGdlbjhfcHBn dHRfYWxsb2NfcGRwKHZtLCBwZHAsIHN0YXJ0LCBsZW5ndGgpOwotCQlpZiAodW5saWtlbHkocmV0 KSkKLQkJCWdvdG8gdW53aW5kX3BkcDsKLQotCQlzcGluX2xvY2soJnBtbDQtPmxvY2spOwotCQlh dG9taWNfZGVjKHB4X3VzZWQocGRwKSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZwbWw0LT5sb2NrKTsK LQlnb3RvIG91dDsKLQotdW53aW5kX3BkcDoKLQlpZiAocmVsZWFzZV9wZF9lbnRyeShwbWw0LCBw bWw0ZSwgJnBkcC0+cHQsICZ2bS0+c2NyYXRjaF9wZHApKQotCQlmcmVlX3B4KHZtLCBwZHApOwot dW53aW5kOgotCWdlbjhfcHBndHRfY2xlYXJfNGx2bCh2bSwgZnJvbSwgc3RhcnQgLSBmcm9tKTsK LW91dDoKLQlpZiAoYWxsb2MpCi0JCWZyZWVfcHgodm0sIGFsbG9jKTsKLQlyZXR1cm4gcmV0Owot fQotCiBzdGF0aWMgaW50IGdlbjhfcHJlYWxsb2NhdGVfdG9wX2xldmVsX3BkcChzdHJ1Y3QgaTkx NV9wcGd0dCAqcHBndHQpCiB7CiAJc3RydWN0IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0gPSAmcHBn dHQtPnZtOwotLSAKMi4yMC4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p bnRlbC1nZng=