From mboxrd@z Thu Jan 1 00:00:00 1970 From: jglisse@redhat.com Subject: [RFC PATCH 09/13] drm/nouveau: add SVM through HMM support to nouveau client Date: Fri, 9 Mar 2018 22:21:37 -0500 Message-ID: <20180310032141.6096-10-jglisse@redhat.com> References: <20180310032141.6096-1-jglisse@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180310032141.6096-1-jglisse@redhat.com> 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, nouveau@lists.freedesktop.org Cc: Ralph Campbell , Evgeny Baskakov , linux-mm@kvack.org, =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Ben Skeggs , John Hubbard List-Id: dri-devel@lists.freedesktop.org RnJvbTogSsOpcsO0bWUgR2xpc3NlIDxqZ2xpc3NlQHJlZGhhdC5jb20+CgpTVk0gKFNoYXJlIFZp cnR1YWwgTWVtb3J5KSB0aHJvdWdoIEhNTSAoSGV0ZXJvZ2VuZW91cyBNZW1vcnkgTWFuYWdlbWVu dCkKdG8gbm91dmVhdSBjbGllbnQuIFNWTSBtZWFucyB0aGF0IGFueSB2YWxpZCBwb2ludGVyIChw cml2YXRlIGFub255bW91cywKc2hhcmUgbWVtb3J5IG9yIG1tYXAgb2YgcmVndWxhciBmaWxlKSBv biB0aGUgQ1BVIGlzIGFsc28gdmFsaWQgb24gdGhlCkdQVS4gVG8gYWNoaWV2ZSBTVk0gd2l0aCBu b3V2ZWF1IHdlIHVzZSBITU0ga2VybmVsIGluZnJhc3RydWN0dXJlLgoKVGhlcmUgaXMgb25lIG5v dXZlYXUgY2xpZW50IG9iamVjdCBjcmVhdGVkIGVhY2ggdGltZSB0aGUgZGV2aWNlIGZpbGUgaXMK b3BlbiBieSBhIHByb2Nlc3MsIHRoaXMgaXMgYmVzdCB3ZSBjYW4gYWNoaWV2ZS4gSWRlYWx5IHdl IHdvdWxkIGxpa2UgYW4Kb2JqZWN0IHRoYXQgZXhpc3QgZm9yIGVhY2ggcHJvY2VzcyBhZGRyZXNz IHNwYWNlIGJ1dCB0aGVyZSBpcyBubyBzdWNoCnRoaW5nIGluIHRoZSBrZXJuZWwuCgpTaWduZWQt b2ZmLWJ5OiBKw6lyw7RtZSBHbGlzc2UgPGpnbGlzc2VAcmVkaGF0LmNvbT4KQ2M6IEJlbiBTa2Vn Z3MgPGJza2VnZ3NAcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVp bGQgICAgICAgIHwgICAzICsKIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMg fCAgIDUgKwogZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaCB8ICAgMyArCiBk cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2htbS5jIHwgMzM5ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaG1t LmggfCAgNjMgKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA0MTMgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaG1tLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2htbS5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2J1aWxkIGIvZHJpdmVycy9ncHUv ZHJtL25vdXZlYXUvS2J1aWxkCmluZGV4IDljMGM2NTA2NTVlOS4uOGU2MWUxMThjY2ZlIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LYnVpbGQKKysrIGIvZHJpdmVycy9ncHUv ZHJtL25vdXZlYXUvS2J1aWxkCkBAIC0zNSw2ICszNSw5IEBAIG5vdXZlYXUteSArPSBub3V2ZWF1 X3ByaW1lLm8KIG5vdXZlYXUteSArPSBub3V2ZWF1X3NnZG1hLm8KIG5vdXZlYXUteSArPSBub3V2 ZWF1X3R0bS5vCiBub3V2ZWF1LXkgKz0gbm91dmVhdV92bW0ubworaWZkZWYgQ09ORklHX0hNTV9N SVJST1IKK25vdXZlYXUtJChDT05GSUdfREVWSUNFX1BSSVZBVEUpICs9IG5vdXZlYXVfaG1tLm8K K2VuZGlmCiAKICMgRFJNIC0gbW9kZXNldHRpbmcKIG5vdXZlYXUtJChDT05GSUdfRFJNX05PVVZF QVVfQkFDS0xJR0hUKSArPSBub3V2ZWF1X2JhY2tsaWdodC5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv bm91dmVhdV9kcm0uYwppbmRleCAzZTI5MzAyOWUzYTYuLmU2N2IwOGJhOGI4MCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jCkBAIC0xNjcsNiArMTY3LDcgQEAgbm91dmVhdV9j bGlfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCiBzdGF0aWMgdm9pZAogbm91dmVhdV9jbGlf ZmluaShzdHJ1Y3Qgbm91dmVhdV9jbGkgKmNsaSkKIHsKKwlub3V2ZWF1X2htbV9maW5pKGNsaSk7 CiAJbm91dmVhdV9jbGlfd29ya19mbHVzaChjbGksIHRydWUpOwogCXVzaWZfY2xpZW50X2Zpbmko Y2xpKTsKIAlub3V2ZWF1X3ZtbV9maW5pKCZjbGktPnZtbSk7CkBAIC05NjUsNiArOTY2LDEwIEBA IG5vdXZlYXVfZHJtX29wZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmcHJpdikKIAlsaXN0X2FkZCgmY2xpLT5oZWFkLCAmZHJtLT5jbGllbnRzKTsKIAltdXRleF91 bmxvY2soJmRybS0+Y2xpZW50Lm11dGV4KTsKIAorCXJldCA9IG5vdXZlYXVfaG1tX2luaXQoY2xp KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiBkb25lOgogCWlmIChyZXQgJiYgY2xpKSB7 CiAJCW5vdXZlYXVfY2xpX2ZpbmkoY2xpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9u b3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Ry di5oCmluZGV4IDk2ZjZiZDhhZWU1ZC4uNzVjNzQxZDUxMjVjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2 ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTY1LDYgKzY1LDcgQEAgc3RydWN0IHBsYXRmb3JtX2Rldmlj ZTsKICNpbmNsdWRlICJub3V2ZWF1X2ZlbmNlLmgiCiAjaW5jbHVkZSAibm91dmVhdV9iaW9zLmgi CiAjaW5jbHVkZSAibm91dmVhdV92bW0uaCIKKyNpbmNsdWRlICJub3V2ZWF1X2htbS5oIgogCiBz dHJ1Y3Qgbm91dmVhdV9kcm1fdGlsZSB7CiAJc3RydWN0IG5vdXZlYXVfZmVuY2UgKmZlbmNlOwpA QCAtMTA0LDYgKzEwNSw4IEBAIHN0cnVjdCBub3V2ZWF1X2NsaSB7CiAJc3RydWN0IGxpc3RfaGVh ZCBub3RpZnlzOwogCWNoYXIgbmFtZVszMl07CiAKKwlzdHJ1Y3Qgbm91dmVhdV9obW0gaG1tOwor CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGxpc3RfaGVhZCB3b3JrZXI7CiAJ c3RydWN0IG11dGV4IGxvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X2htbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9obW0uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmE0YzZmNjg3ZjZhOAotLS0gL2Rl di9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaG1tLmMKQEAgLTAs MCArMSwzMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggUmVkIEhhdCBBbGwgUmlnaHRz IFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2Yg Y2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdh cmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUi KSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n CisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwg bWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBj b3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9y dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBN RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMp IEFORC9PUiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04KKyAqIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcjogSsOpcsO0bWUgR2xpc3NlLCBCZW4gU2tlZ2dz CisgKi8KKyNpbmNsdWRlIDxudmlmL2NsYXNzLmg+CisjaW5jbHVkZSA8bnZpZi9jbGIwNjkuaD4K KyNpbmNsdWRlICJub3V2ZWF1X2htbS5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5j bHVkZSAibm91dmVhdV9iby5oIgorI2luY2x1ZGUgPG52a20vc3ViZGV2L21tdS5oPgorI2luY2x1 ZGUgPGxpbnV4L3NjaGVkL21tLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworc3RydWN0IGZh dWx0X2VudHJ5IHsKKwl1MzIgaW5zdGxvOworCXUzMiBpbnN0aGk7CisJdTMyIGFkZHJsbzsKKwl1 MzIgYWRkcmhpOworCXUzMiB0aW1lbG87CisJdTMyIHRpbWVoaTsKKwl1MzIgcnN2ZDsKKwl1MzIg aW5mbzsKK307CisKKyNkZWZpbmUgTlZfUEZBVUxUX0FDQ0VTU19SIDAgLyogcmVhZCAqLworI2Rl ZmluZSBOVl9QRkFVTFRfQUNDRVNTX1cgMSAvKiB3cml0ZSAqLworI2RlZmluZSBOVl9QRkFVTFRf QUNDRVNTX0EgMiAvKiBhdG9taWMgKi8KKyNkZWZpbmUgTlZfUEZBVUxUX0FDQ0VTU19QIDMgLyog cHJlZmV0Y2ggKi8KKworc3RhdGljIGlubGluZSB1NjQKK2ZhdWx0X2VudHJ5X2FkZHIoY29uc3Qg c3RydWN0IGZhdWx0X2VudHJ5ICpmZSkKK3sKKwlyZXR1cm4gKCh1NjQpZmUtPmFkZHJoaSA8PCAz MikgfCAoZmUtPmFkZHJsbyAmIFBBR0VfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWdu ZWQKK2ZhdWx0X2VudHJ5X2FjY2Vzcyhjb25zdCBzdHJ1Y3QgZmF1bHRfZW50cnkgKmZlKQorewor CXJldHVybiAoKHU2NClmZS0+aW5mbyA+PiAxNikgJiA3OworfQorCitzdHJ1Y3Qgbm91dmVhdV92 bWYgeworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBub3V2ZWF1X2NsaSAq Y2xpOworCXVpbnQ2NF90ICpwYWdlczs7CisJdTY0IG5wYWdlczsKKwl1NjQgc3RhcnQ7Cit9Owor CitzdGF0aWMgdm9pZAorbm91dmVhdV9obW1fZmF1bHRfc2lnbmFsKHN0cnVjdCBub3V2ZWF1X2Ns aSAqY2xpLAorCQkJIHN0cnVjdCBmYXVsdF9lbnRyeSAqZmUsCisJCQkgYm9vbCBzdWNjZXNzKQor eworCXUzMiBncGMsIGlzZ3BjLCBjbGllbnQ7CisKKwlpZiAoIShmZS0+aW5mbyAmIDB4ODAwMDAw MDApKQorCQlyZXR1cm47CisKKwlncGMgICAgPSAoZmUtPmluZm8gJiAweDFmMDAwMDAwKSA+PiAy NDsKKwlpc2dwYyAgPSAoZmUtPmluZm8gJiAweDAwMTAwMDAwKSA+PiAyMDsKKwljbGllbnQgPSAo ZmUtPmluZm8gJiAweDAwMDA3ZjAwKSA+PiA4OworCWZlLT5pbmZvICY9IDB4N2ZmZmZmZmY7CisK KwlpZiAoc3VjY2VzcykgeworCQludmlmX3dyMzIoJmNsaS0+ZGV2aWNlLm9iamVjdCwgMHgxMDBj YmMsIDB4ODAwMDAwMDAgfAorCQkJICAoMSA8PCAzKSB8IChjbGllbnQgPDwgOSkgfAorCQkJICAo Z3BjIDw8IDE1KSB8IChpc2dwYyA8PCAyMCkpOworCX0gZWxzZSB7CisJCW52aWZfd3IzMigmY2xp LT5kZXZpY2Uub2JqZWN0LCAweDEwMGNiYywgMHg4MDAwMDAwMCB8CisJCQkgICg0IDw8IDMpIHwg KGNsaWVudCA8PCA5KSB8CisJCQkgIChncGMgPDwgMTUpIHwgKGlzZ3BjIDw8IDIwKSk7CisJfQor fQorCitzdGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3Bmbl9mbGFnc1tITU1fUEZOX0ZMQUdfTUFY XSA9IHsKKwkvKiBGSVhNRSBmaW5kIGEgd2F5IHRvIGJ1aWxkIHRpbWUgY2hlY2sgb3JkZXIgKi8K KwlOVl9ITU1fUEFHRV9GTEFHX1YsIC8qIEhNTV9QRk5fRkxBR19WQUxJRCAqLworCU5WX0hNTV9Q QUdFX0ZMQUdfVywgLyogSE1NX1BGTl9GTEFHX1dSSVRFICovCisJTlZfSE1NX1BBR0VfRkxBR19F LCAvKiBITU1fUEZOX0ZMQUdfRVJST1IgKi8KKwlOVl9ITU1fUEFHRV9GTEFHX04sIC8qIEhNTV9Q Rk5fRkxBR19OT05FICovCisJTlZfSE1NX1BBR0VfRkxBR19TLCAvKiBITU1fUEZOX0ZMQUdfU1BF Q0lBTCAqLworCTAsIC8qIEhNTV9QRk5fRkxBR19ERVZJQ0VfVU5BRERSRVNTQUJMRSAqLworfTsK Kworc3RhdGljIGludAorbm91dmVhdV9obW1faGFuZGxlX2ZhdWx0KHN0cnVjdCBub3V2ZWF1X3Zt ZiAqdm1mKQoreworCXN0cnVjdCBub3V2ZWF1X2htbSAqaG1tID0gJnZtZi0+Y2xpLT5obW07CisJ c3RydWN0IGhtbV9yYW5nZSByYW5nZTsKKwlpbnQgcmV0OworCisJcmFuZ2Uudm1hID0gdm1mLT52 bWE7CisJcmFuZ2Uuc3RhcnQgPSB2bWYtPnN0YXJ0OworCXJhbmdlLmVuZCA9IHZtZi0+c3RhcnQg KyB2bWYtPm5wYWdlczsKKwlyYW5nZS5wZm5zID0gdm1mLT5wYWdlczsKKwlyYW5nZS5wZm5fc2hp ZnQgPSBOVl9ITU1fUEFHRV9QRk5fU0hJRlQ7CisJcmFuZ2UuZmxhZ3MgPSBobW1fcGZuX2ZsYWdz OworCisJcmV0ID0gaG1tX3ZtYV9mYXVsdCgmcmFuZ2UsIHRydWUpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZobW0tPm11dGV4KTsKKwlpZiAoIWhtbV92bWFfcmFu Z2VfZG9uZSgmcmFuZ2UpKSB7CisJCW11dGV4X3VubG9jaygmaG1tLT5tdXRleCk7CisJCXJldHVy biAtRUFHQUlOOworCX0KKworCW52aWZfdm1tX2htbV9tYXAoJnZtZi0+Y2xpLT52bW0udm1tLCB2 bWYtPnN0YXJ0LAorCQkJIHZtZi0+bnBhZ2VzLCAodTY0ICopdm1mLT5wYWdlcyk7CisJbXV0ZXhf dW5sb2NrKCZobW0tPm11dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbm91dmVh dV9obW1fcnBmYl9wcm9jZXNzKHN0cnVjdCBudmlmX25vdGlmeSAqbnRmeSkKK3sKKwlzdHJ1Y3Qg bm91dmVhdV9obW0gKmhtbSA9IGNvbnRhaW5lcl9vZihudGZ5LCB0eXBlb2YoKmhtbSksIHBlbmRp bmcpOworCXN0cnVjdCBub3V2ZWF1X2NsaSAqY2xpID0gY29udGFpbmVyX29mKGhtbSwgdHlwZW9m KCpjbGkpLCBobW0pOworCXUzMiBnZXQgPSBudmlmX3JkMzIoJmNsaS0+ZGV2aWNlLm9iamVjdCwg MHgwMDJhN2MpOworCXUzMiBwdXQgPSBudmlmX3JkMzIoJmNsaS0+ZGV2aWNlLm9iamVjdCwgMHgw MDJhODApOworCXN0cnVjdCBmYXVsdF9lbnRyeSAqZmUgPSAodm9pZCAqKWhtbS0+cnBmYi5tYXAu cHRyOworCXUzMiBwcm9jZXNzZWQgPSAwLCBuZXh0ID0gZ2V0OworCisJZm9yICg7IGhtbS0+ZW5h YmxlZCAmJiAoZ2V0ICE9IHB1dCk7IGdldCA9IG5leHQpIHsKKwkJLyogRklYTUUgc29tZXRoaW5n IGVsc2UgdGhhbiBhIDE2IHBhZ2VzIHdpbmRvdyAuLi4gKi8KKwkJY29uc3QgdTY0IG1heF9wYWdl cyA9IDE2OworCQljb25zdCB1NjQgcmFuZ2VfbWFzayA9IChtYXhfcGFnZXMgPDwgUEFHRV9TSElG VCkgLSAxOworCQl1NjQgYWRkciwgc3RhcnQsIGVuZCwgaTsKKwkJc3RydWN0IG5vdXZlYXVfdm1m IHZtZjsKKwkJdTY0IHBhZ2VzWzE2XSA9IHswfTsKKwkJaW50IHJldDsKKworCQlpZiAoIShmZVtn ZXRdLmluZm8gJiAweDgwMDAwMDAwKSkgeworCQkJcHJvY2Vzc2VkKys7IGdldCsrOworCQkJY29u dGludWU7CisJCX0KKworCQlzdGFydCA9IGZhdWx0X2VudHJ5X2FkZHIoJmZlW2dldF0pICYgKH5y YW5nZV9tYXNrKTsKKwkJZW5kID0gc3RhcnQgKyByYW5nZV9tYXNrICsgMTsKKworCQlmb3IgKG5l eHQgPSBnZXQ7IG5leHQgPCBwdXQ7ICsrbmV4dCkgeworCQkJdW5zaWduZWQgYWNjZXNzOworCisJ CQlpZiAoIShmZVtuZXh0XS5pbmZvICYgMHg4MDAwMDAwMCkpIHsKKwkJCQljb250aW51ZTsKKwkJ CX0KKworCQkJYWRkciA9IGZhdWx0X2VudHJ5X2FkZHIoJmZlW25leHRdKTsKKwkJCWlmIChhZGRy IDwgc3RhcnQgfHwgYWRkciA+PSBlbmQpIHsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaSA9IChh ZGRyIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJCQlhY2Nlc3MgPSBmYXVsdF9lbnRyeV9hY2Nl c3MoJmZlW25leHRdKTsKKwkJCXBhZ2VzW2ldID0gKGFjY2VzcyA9PSBOVl9QRkFVTFRfQUNDRVNT X1cpID8KKwkJCQlOVl9ITU1fUEFHRV9GTEFHX1YgfAorCQkJCU5WX0hNTV9QQUdFX0ZMQUdfVyA6 CisJCQkJTlZfSE1NX1BBR0VfRkxBR19WOworCQl9CisKK2FnYWluOgorCQlkb3duX3JlYWQoJmht bS0+bW0tPm1tYXBfc2VtKTsKKwkJdm1mLnZtYSA9IGZpbmRfdm1hX2ludGVyc2VjdGlvbihobW0t Pm1tLCBzdGFydCwgZW5kKTsKKwkJaWYgKHZtZi52bWEgPT0gTlVMTCkgeworCQkJdXBfcmVhZCgm aG1tLT5tbS0+bW1hcF9zZW0pOworCQkJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgKytpKSB7 CisJCQkJcGFnZXNbaV0gPSBOVl9ITU1fUEFHRV9GTEFHX0U7CisJCQl9CisJCQlnb3RvIHNpZ25h bDsKKwkJfQorCisJCS8qIE1hcmsgZXJyb3IgKi8KKwkJZm9yIChhZGRyID0gc3RhcnQsIGkgPSAw OyBhZGRyIDwgdm1mLnZtYS0+dm1fc3RhcnQ7CisJCSAgICAgYWRkciArPSBQQUdFX1NJWkUsICsr aSkgeworCQkJcGFnZXNbaV0gPSBOVl9ITU1fUEFHRV9GTEFHX0U7CisJCX0KKwkJZm9yIChhZGRy ID0gZW5kIC0gUEFHRV9TSVpFLCBpID0gbWF4X3BhZ2VzIC0gMTsKKwkJICAgICBhZGRyID49IHZt Zi52bWEtPnZtX2VuZDsgYWRkciAtPSBQQUdFX1NJWkUsIC0taSkgeworCQkJcGFnZXNbaV0gPSBO Vl9ITU1fUEFHRV9GTEFHX0U7CisJCX0KKwkJdm1mLnN0YXJ0ID0gbWF4X3QodTY0LCBzdGFydCwg dm1mLnZtYS0+dm1fc3RhcnQpOworCQllbmQgPSBtaW5fdCh1NjQsIGVuZCwgdm1mLnZtYS0+dm1f ZW5kKTsKKworCQl2bWYuY2xpID0gY2xpOworCQl2bWYucGFnZXMgPSAmcGFnZXNbKHZtZi5zdGFy dCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUXTsKKwkJdm1mLm5wYWdlcyA9IChlbmQgLSB2bWYuc3Rh cnQpID4+IFBBR0VfU0hJRlQ7CisJCXJldCA9IG5vdXZlYXVfaG1tX2hhbmRsZV9mYXVsdCgmdm1m KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRUFHQUlOOgorCQkJdXBfcmVhZCgmaG1tLT5t bS0+bW1hcF9zZW0pOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJY2FzZSAtRUJVU1k6CisJCQkv KiBUcnkgYWdhaW4gKi8KKwkJCWdvdG8gYWdhaW47CisJCWRlZmF1bHQ6CisJCQl1cF9yZWFkKCZo bW0tPm1tLT5tbWFwX3NlbSk7CisJCQlicmVhazsKKwkJfQorCisJc2lnbmFsOgorCQlmb3IgKDsg Z2V0IDwgbmV4dDsgKytnZXQpIHsKKwkJCWJvb2wgc3VjY2VzczsKKworCQkJaWYgKCEoZmVbZ2V0 XS5pbmZvICYgMHg4MDAwMDAwMCkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYWRkciA9 IGZhdWx0X2VudHJ5X2FkZHIoJmZlW2dldF0pOworCQkJaSA9IChhZGRyIC0gc3RhcnQpID4+IFBB R0VfU0hJRlQ7CisJCQlzdWNjZXNzID0gIShwYWdlc1tpXSAmIE5WX0hNTV9QQUdFX0ZMQUdfRSk7 CisJCQlub3V2ZWF1X2htbV9mYXVsdF9zaWduYWwoY2xpLCAmZmVbZ2V0XSwgc3VjY2Vzcyk7CisJ CX0KKwl9CisKKwludmlmX3dyMzIoJmNsaS0+ZGV2aWNlLm9iamVjdCwgMHgwMDJhN2MsIGdldCk7 CisJcmV0dXJuIGhtbS0+ZW5hYmxlZCA/IE5WSUZfTk9USUZZX0tFRVAgOiBOVklGX05PVElGWV9E Uk9QOworfQorCitzdGF0aWMgdm9pZAorbm91dmVhdV92bW1fc3luY19wYWdldGFibGVzKHN0cnVj dCBobW1fbWlycm9yICptaXJyb3IsCisJCQkgICAgZW51bSBobW1fdXBkYXRlX3R5cGUgdXBkYXRl LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQp Cit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaG1tX21pcnJvcl9vcHMgbm91dmVhdV9obW1f bWlycm9yX29wcyA9IHsKKwkuc3luY19jcHVfZGV2aWNlX3BhZ2V0YWJsZXMJPSAmbm91dmVhdV92 bW1fc3luY19wYWdldGFibGVzLAorfTsKKwordm9pZAorbm91dmVhdV9obW1fZmluaShzdHJ1Y3Qg bm91dmVhdV9jbGkgKmNsaSkKK3sKKwlpZiAoIWNsaS0+aG1tLmVuYWJsZWQpCisJCXJldHVybjsK KworCWNsaS0+aG1tLmVuYWJsZWQgPSBmYWxzZTsKKwludmlmX25vdGlmeV9maW5pKCZjbGktPmht bS5wZW5kaW5nKTsKKwludmlmX29iamVjdF9maW5pKCZjbGktPmhtbS5ycGZiKTsKKworCWhtbV9t aXJyb3JfdW5yZWdpc3RlcigmY2xpLT5obW0ubWlycm9yKTsKKwlub3V2ZWF1X3ZtbV9zeW5jX3Bh Z2V0YWJsZXMoJmNsaS0+aG1tLm1pcnJvciwgSE1NX1VQREFURV9JTlZBTElEQVRFLAorCQkJCSAg ICBQQUdFX1NJWkUsIFRBU0tfU0laRSk7Cit9CisKK2ludAorbm91dmVhdV9obW1faW5pdChzdHJ1 Y3Qgbm91dmVhdV9jbGkgKmNsaSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGdldF90YXNr X21tKGN1cnJlbnQpOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZpZl9tY2xhc3MgcnBmYnNbXSA9 IHsKKwkJeyBNQVhXRUxMX0ZBVUxUX0JVRkZFUl9BLCAtMSB9LAorCQl7fQorCX07CisJYm9vbCBz dXBlcjsKKwlpbnQgcmV0OworCisJaWYgKGNsaS0+aG1tLmVuYWJsZWQpCisJCXJldHVybiAwOwor CisJbXV0ZXhfaW5pdCgmY2xpLT5obW0ubXV0ZXgpOworCisJZG93bl93cml0ZSgmbW0tPm1tYXBf c2VtKTsKKwltdXRleF9sb2NrKCZjbGktPmhtbS5tdXRleCk7CisJY2xpLT5obW0ubWlycm9yLm9w cyA9ICZub3V2ZWF1X2htbV9taXJyb3Jfb3BzOworCXJldCA9IGhtbV9taXJyb3JfcmVnaXN0ZXIo JmNsaS0+aG1tLm1pcnJvciwgbW0pOworCWlmICghcmV0KQorCQljbGktPmhtbS5tbSA9IG1tOwor CW11dGV4X3VubG9jaygmY2xpLT5obW0ubXV0ZXgpOworCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0p OworCW1tcHV0KG1tKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogQWxsb2NhdGUg cmVwbGF5YWJsZSBmYXVsdCBidWZmZXIuICovCisJcmV0ID0gbnZpZl9tY2xhc3MoJmNsaS0+ZGV2 aWNlLm9iamVjdCwgcnBmYnMpOworCWlmIChyZXQgPCAwKSB7CisJCWhtbV9taXJyb3JfdW5yZWdp c3RlcigmY2xpLT5obW0ubWlycm9yKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzdXBlciA9IGNs aS0+YmFzZS5zdXBlcjsKKwljbGktPmJhc2Uuc3VwZXIgPSB0cnVlOworCXJldCA9IG52aWZfb2Jq ZWN0X2luaXQoJmNsaS0+ZGV2aWNlLm9iamVjdCwgMCwKKwkJCSAgICAgICBycGZic1tyZXRdLm9j bGFzcywKKwkJCSAgICAgICBOVUxMLCAwLCAmY2xpLT5obW0ucnBmYik7CisJaWYgKHJldCkgewor CQlobW1fbWlycm9yX3VucmVnaXN0ZXIoJmNsaS0+aG1tLm1pcnJvcik7CisJCWNsaS0+YmFzZS5z dXBlciA9IHN1cGVyOworCQlyZXR1cm4gcmV0OworCX0KKwludmlmX29iamVjdF9tYXAoJmNsaS0+ aG1tLnJwZmIsIE5VTEwsIDApOworCisJLyogUmVxdWVzdCBub3RpZmljYXRpb24gb2YgcGVuZGlu ZyByZXBsYXlhYmxlIGZhdWx0cy4gKi8KKwlyZXQgPSBudmlmX25vdGlmeV9pbml0KCZjbGktPmht bS5ycGZiLCBub3V2ZWF1X2htbV9ycGZiX3Byb2Nlc3MsCisJCQkgICAgICAgdHJ1ZSwgTlZCMDY5 X1ZOX05URllfRkFVTFQsIE5VTEwsIDAsIDAsCisJCQkgICAgICAgJmNsaS0+aG1tLnBlbmRpbmcp OworCWNsaS0+YmFzZS5zdXBlciA9IHN1cGVyOworCWlmIChyZXQpCisJCWdvdG8gZXJyb3Jfbm90 aWZ5OworCisJcmV0ID0gbnZpZl9ub3RpZnlfZ2V0KCZjbGktPmhtbS5wZW5kaW5nKTsKKwlpZiAo cmV0KQorCQlnb3RvIGVycm9yX25vdGlmeV9nZXQ7CisKKwljbGktPmhtbS5tbSA9IGN1cnJlbnQt Pm1tOworCWNsaS0+aG1tLnRhc2sgPSBjdXJyZW50OworCWNsaS0+aG1tLmVuYWJsZWQgPSB0cnVl OworCXJldHVybiAwOworCitlcnJvcl9ub3RpZnlfZ2V0OgorCW52aWZfbm90aWZ5X2ZpbmkoJmNs aS0+aG1tLnBlbmRpbmcpOworZXJyb3Jfbm90aWZ5OgorCW52aWZfb2JqZWN0X2ZpbmkoJmNsaS0+ aG1tLnJwZmIpOworCWhtbV9taXJyb3JfdW5yZWdpc3RlcigmY2xpLT5obW0ubWlycm9yKTsKKwly ZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVh dV9obW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaG1tLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40N2YzMWNmOGFjNTYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2htbS5oCkBAIC0wLDAgKzEs NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggUmVkIEhhdCBBbGwgUmlnaHRzIFJlc2Vy dmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8g ZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3 aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNv ZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz IHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hh bGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbAorICogcG9ydGlvbnMg b2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFO VEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSKFMpIEFORC9P UiBJVFMgU1VQUExJRVJTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBP VEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgVE9S VCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAq IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqIEF1dGhvcjogSsOpcsO0bWUgR2xpc3NlLCBCZW4gU2tlZ2dzCisgKi8K KyNpZm5kZWYgTk9VVkVBVV9ITU1fSAorI2RlZmluZSBOT1VWRUFVX0hNTV9ICisjaW5jbHVkZSA8 bnZpZi9vYmplY3QuaD4KKyNpbmNsdWRlIDxudmlmL25vdGlmeS5oPgorI2luY2x1ZGUgPG5vdXZl YXVfdm1tLmg+CisjaW5jbHVkZSA8bGludXgvaG1tLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19I TU1fTUlSUk9SKSAmJiBkZWZpbmVkKENPTkZJR19ERVZJQ0VfUFJJVkFURSkKKworc3RydWN0IG5v dXZlYXVfaG1tIHsKKwlzdHJ1Y3QgbnZpZl9vYmplY3QgcnBmYjsKKwlzdHJ1Y3QgbnZpZl9ub3Rp ZnkgcGVuZGluZzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IGhtbV9taXJy b3IgbWlycm9yOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCBtdXRleCBtdXRleDsK Kwlib29sIGVuYWJsZWQ7Cit9OworCit2b2lkIG5vdXZlYXVfaG1tX2Zpbmkoc3RydWN0IG5vdXZl YXVfY2xpICpjbGkpOworaW50IG5vdXZlYXVfaG1tX2luaXQoc3RydWN0IG5vdXZlYXVfY2xpICpj bGkpOworCisjZWxzZSAvKiBkZWZpbmVkKENPTkZJR19ITU1fTUlSUk9SKSAmJiBkZWZpbmVkKENP TkZJR19ERVZJQ0VfUFJJVkFURSkgKi8KKworc3RydWN0IG5vdXZlYXVfaG1tIHsKK307CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBub3V2ZWF1X2htbV9maW5pKHN0cnVjdCBub3V2ZWF1X2NsaSAqY2xp KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbm91dmVhdV9obW1faW5pdChzdHJ1Y3Qgbm91 dmVhdV9jbGkgKmNsaSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2VuZGlmIC8qIGRlZmlu ZWQoQ09ORklHX0hNTV9NSVJST1IpICYmIGRlZmluZWQoQ09ORklHX0RFVklDRV9QUklWQVRFKSAq LworI2VuZGlmIC8qIE5PVVZFQVVfSE1NX0ggKi8KLS0gCjIuMTQuMwoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==