From mboxrd@z Thu Jan 1 00:00:00 1970 From: j.glisse@gmail.com Subject: [PATCH 1/3] drm/radeon: improve sa allocator (add fence and make it self contain) Date: Wed, 2 May 2012 11:59:14 -0400 Message-ID: <1335974356-3009-2-git-send-email-j.glisse@gmail.com> References: <1335974356-3009-1-git-send-email-j.glisse@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qa0-f48.google.com (mail-qa0-f48.google.com [209.85.216.48]) by gabe.freedesktop.org (Postfix) with ESMTP id 722D49EF6A for ; Wed, 2 May 2012 08:59:33 -0700 (PDT) Received: by qady23 with SMTP id y23so672346qad.14 for ; Wed, 02 May 2012 08:59:32 -0700 (PDT) In-Reply-To: <1335974356-3009-1-git-send-email-j.glisse@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: dri-devel@lists.freedesktop.org Cc: Jerome Glisse , =?UTF-8?q?Christian=20K=C3=B6nig?= List-Id: dri-devel@lists.freedesktop.org RnJvbTogSmVyb21lIEdsaXNzZSA8amdsaXNzZUByZWRoYXQuY29tPgoKVGhpcyBwYXRjaCBpcyBn cm91bmQgd29yayBmb3IgaGF2aW5nIHRoZSBzYSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lCnNl bGYgY29udGFpbmVkIGhlbHBlci4gRWFjaCBzYV9ibyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEg ZmVuY2UgYW5kCndoZW4gYWxsb2NhdGluZyBuZXcgb25lIHlvdSBjYW4gYXNrIHRvIGJsb2NrIHVu dGlsIHRoZXJlIGlzIHJvb20gZm9yCnNhdGlzZnlpbmcgeW91ciByZXF1ZXN0LgoKSXQgYWxzbyBj aGFuZ2UgdGhlIHNhIGFsbG9jYXRpb24gbG9naWMuIFRoZSBzYSBtYW5hZ2VyIG5vdyBrZWVwIGEK bGFzdCBwdHIgdGhhdCBwb2ludCB0byB0aGUgbGFzdCBhbGxvY2F0ZWQgc2EgYm8uIEFzIHNhIGJv IGFyZQphbGxvY2F0ZWQgZnJvbSBiZWdpbmluZyB0byBlbmQgYW5kIGFzIHRoZSBzYSBibyBsaXN0 IGlzIHNob3J0ZWQgaW4Kb2Zmc2V0IG9yZGVyIHRoZW4gdGhlIHNhIGJvIGFmdGVyIHRoZSBsYXN0 IG9uZSBpbiB0aGUgbGlzdCBpcyBhbHNvCnRoZSBvbGRlc3Qgc2EgYm8gc28gdGhlIG9uZSB0aGF0 IHNob3VsZCBmaW5pc2ggZmlyc3QuCgpUaHVzIHRoZSBhbGxvY2F0aW9uIGFsb2dpcnRobSBpcyBz aW1wbGUsIGl0IGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaApyb29tIGFmdGVyIHRoZSBsYXN0IHNh IGJvLCBpZiBzbyBpdCBhbGxvY2F0ZSBuZXcgc2EgYm8gdGhlcmUuIElmCnRoZXJlIGlzbid0IGl0 IGNhbiB3YWl0IHRoZSBuZXh0IHNhIGJvIHRvIGZpbmlzaC4gQ29kZSBhbHNvIGhhbmRsZQp3cmFw IGFyb3VuZCBpZSB3aGVuIGxhc3QgcmVhY2ggdGhlIGVuZCBvZmZzZXQgb2YgdGhlIHNhIG1hbmFn ZXIsCm5leHQgc2EgYm8gaXMgYWxsb2NhdGVkIGZyb20gYmVnaW5pbmcgKG9mZnNldCAwKS4KCklk ZWEgaXMgdGhhdCBibyBhbGxvY2F0ZWQgdGhyb3VnaCB0aGlzIGFyZSBibyB0aGF0IGhhdmUgbGlm ZXRpbWUKbGlua2VkIHRvIG9uZSBvZiB0aGUgcmluZyBvZiB0aGUgR1BVLCB0aHVzIHdoZW4gcmlu ZyBwcm9ncmVzcyBzYQpibyBhcmUgcHJvZ3Jlc2l2bHkgZnJlZWQgc3RhcnRpbmcgd2l0aCBsYXN0 LT5uZXh0LgoKU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8ZGVhdGhzaW1wbGVAdm9k YWZvbmUuZGU+ClNpZ25lZC1vZmYtYnk6IEplcm9tZSBHbGlzc2UgPGpnbGlzc2VAcmVkaGF0LmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgICAgICB8ICAgMTYg KystCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jICAgICAgICB8ICAgIDQgKy0K IGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyAgICAgIHwgICAxMSArLQogZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmggICAgfCAgIDExICstCiBkcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgICAgICB8ICAgMzMgKysrLQogZHJpdmVycy9n cHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYyAgICAgICAgfCAgMjY2ICsrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zZW1hcGhvcmUuYyB8 ICAgIDQgKy0KIDcgZmlsZXMgY2hhbmdlZCwgMjc4IGluc2VydGlvbnMoKyksIDY3IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IDcyOWQzMzIuLmFjYmI2NDIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtMzgwLDIzICszODAsMjkgQEAgc3RydWN0IHJhZGVvbl9i b19saXN0IHsKICAqIEFzc3VtcHRpb24gaXMgdGhhdCB0aGVyZSB3b24ndCBiZSBob2xlIChhbGwg b2JqZWN0IG9uIHNhbWUKICAqIGFsaWdubWVudCkuCiAgKi8KKworc3RydWN0IHJhZGVvbl9zYV9i bzsKKwogc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyIHsKKwlzcGlubG9ja190CQlsb2NrOwogCXN0 cnVjdCByYWRlb25fYm8JKmJvOwogCXN0cnVjdCBsaXN0X2hlYWQJc2FfYm87CiAJdW5zaWduZWQJ CXNpemU7CisJc3RydWN0IHJhZGVvbl9zYV9ibwkqbGFzdDsKIAl1aW50NjRfdAkJZ3B1X2FkZHI7 CiAJdm9pZAkJCSpjcHVfcHRyOwogCXVpbnQzMl90CQlkb21haW47CiB9OwogCi1zdHJ1Y3QgcmFk ZW9uX3NhX2JvOwotCiAvKiBzdWItYWxsb2NhdGlvbiBidWZmZXIgKi8KIHN0cnVjdCByYWRlb25f c2FfYm8gewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CiAJc3RydWN0IHJhZGVvbl9zYV9tYW5h Z2VyCSptYW5hZ2VyOwotCXVuc2lnbmVkCQkJb2Zmc2V0OworCXVuc2lnbmVkCQkJc29mZnNldDsK Kwl1bnNpZ25lZAkJCWVvZmZzZXQ7CiAJdW5zaWduZWQJCQlzaXplOworCXN0cnVjdCByYWRlb25f ZmVuY2UJCSpmZW5jZTsKKwlib29sCQkJCWZyZWU7CiB9OwogCiAvKgpAQCAtNjI4LDcgKzYzNCw3 IEBAIHZvaWQgcmFkZW9uX2lycV9rbXNfcGZsaXBfaXJxX3B1dChzdHJ1Y3QgcmFkZW9uX2Rldmlj ZSAqcmRldiwgaW50IGNydGMpOwogICovCiAKIHN0cnVjdCByYWRlb25faWIgewotCXN0cnVjdCBy YWRlb25fc2FfYm8Jc2FfYm87CisJc3RydWN0IHJhZGVvbl9zYV9ibwkqc2FfYm87CiAJdW5zaWdu ZWQJCWlkeDsKIAl1aW50MzJfdAkJbGVuZ3RoX2R3OwogCXVpbnQ2NF90CQlncHVfYWRkcjsKQEAg LTY4NCw3ICs2OTAsNyBAQCBzdHJ1Y3QgcmFkZW9uX3ZtIHsKIAl1bnNpZ25lZAkJCWxhc3RfcGZu OwogCXU2NAkJCQlwdF9ncHVfYWRkcjsKIAl1NjQJCQkJKnB0OwotCXN0cnVjdCByYWRlb25fc2Ff Ym8JCXNhX2JvOworCXN0cnVjdCByYWRlb25fc2FfYm8JCSpzYV9ibzsKIAlzdHJ1Y3QgbXV0ZXgJ CQltdXRleDsKIAkvKiBsYXN0IGZlbmNlIGZvciBjcyB1c2luZyB0aGlzIHZtICovCiAJc3RydWN0 IHJhZGVvbl9mZW5jZQkJKmZlbmNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVv bi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXgg YTA4MjZiYi4uMzk4OTAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRl b25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC00NjUs NyArNDY1LDcgQEAgc3RhdGljIGludCByYWRlb25fY3NfaWJfdm1fY2h1bmsoc3RydWN0IHJhZGVv bl9kZXZpY2UgKnJkZXYsCiAJCS8qIGliIHBvb2wgaXMgYmluZCBhdCAwIGluIHZpcnR1YWwgYWRk cmVzcyBzcGFjZSB0byBncHVfYWRkciBpcyB0aGUKIAkJICogb2Zmc2V0IGluc2lkZSB0aGUgcG9v bCBibwogCQkgKi8KLQkJcGFyc2VyLT5jb25zdF9pYi0+Z3B1X2FkZHIgPSBwYXJzZXItPmNvbnN0 X2liLT5zYV9iby5vZmZzZXQ7CisJCXBhcnNlci0+Y29uc3RfaWItPmdwdV9hZGRyID0gcGFyc2Vy LT5jb25zdF9pYi0+c2FfYm8tPnNvZmZzZXQ7CiAJCXIgPSByYWRlb25faWJfc2NoZWR1bGUocmRl diwgcGFyc2VyLT5jb25zdF9pYik7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CkBAIC00NzUsNyAr NDc1LDcgQEAgc3RhdGljIGludCByYWRlb25fY3NfaWJfdm1fY2h1bmsoc3RydWN0IHJhZGVvbl9k ZXZpY2UgKnJkZXYsCiAJLyogaWIgcG9vbCBpcyBiaW5kIGF0IDAgaW4gdmlydHVhbCBhZGRyZXNz IHNwYWNlIHRvIGdwdV9hZGRyIGlzIHRoZQogCSAqIG9mZnNldCBpbnNpZGUgdGhlIHBvb2wgYm8K IAkgKi8KLQlwYXJzZXItPmliLT5ncHVfYWRkciA9IHBhcnNlci0+aWItPnNhX2JvLm9mZnNldDsK KwlwYXJzZXItPmliLT5ncHVfYWRkciA9IHBhcnNlci0+aWItPnNhX2JvLT5zb2Zmc2V0OwogCXBh cnNlci0+aWItPmlzX2NvbnN0X2liID0gZmFsc2U7CiAJciA9IHJhZGVvbl9pYl9zY2hlZHVsZShy ZGV2LCBwYXJzZXItPmliKTsKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwpp bmRleCBjNThhMDM2Li5jYzUwMzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9u L3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5j CkBAIC0zOTMsMTAgKzM5MywxMyBAQCBpbnQgcmFkZW9uX3ZtX2JpbmQoc3RydWN0IHJhZGVvbl9k ZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fdm0gKnZtKQogCX0KIAogcmV0cnk6Ci0JciA9IHJh ZGVvbl9zYV9ib19uZXcocmRldiwgJnJkZXYtPnZtX21hbmFnZXIuc2FfbWFuYWdlciwgJnZtLT5z YV9ibywKKwlyID0gcmFkZW9uX3NhX2JvX25ldyhyZGV2LCAmdm0tPnNhX2JvLCAmcmRldi0+dm1f bWFuYWdlci5zYV9tYW5hZ2VyLAogCQkJICAgICBSQURFT05fR1BVX1BBR0VfQUxJR04odm0tPmxh c3RfcGZuICogOCksCi0JCQkgICAgIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKKwkJCSAgICAgUkFE RU9OX0dQVV9QQUdFX1NJWkUsIGZhbHNlLCBOVUxMKTsKIAlpZiAocikgeworCQlpZiAociAhPSAt RU5PTUVNKSB7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlpZiAobGlzdF9lbXB0eSgmcmRldi0+dm1f bWFuYWdlci5scnVfdm0pKSB7CiAJCQlyZXR1cm4gcjsKIAkJfQpAQCAtNDA1LDkgKzQwOCw5IEBA IHJldHJ5OgogCQlnb3RvIHJldHJ5OwogCX0KIAl2bS0+cHQgPSByZGV2LT52bV9tYW5hZ2VyLnNh X21hbmFnZXIuY3B1X3B0cjsKLQl2bS0+cHQgKz0gKHZtLT5zYV9iby5vZmZzZXQgPj4gMyk7CisJ dm0tPnB0ICs9ICh2bS0+c2FfYm8tPnNvZmZzZXQgPj4gMyk7CiAJdm0tPnB0X2dwdV9hZGRyID0g cmRldi0+dm1fbWFuYWdlci5zYV9tYW5hZ2VyLmdwdV9hZGRyOwotCXZtLT5wdF9ncHVfYWRkciAr PSB2bS0+c2FfYm8ub2Zmc2V0OworCXZtLT5wdF9ncHVfYWRkciArPSB2bS0+c2FfYm8tPnNvZmZz ZXQ7CiAJbWVtc2V0KHZtLT5wdCwgMCwgUkFERU9OX0dQVV9QQUdFX0FMSUdOKHZtLT5sYXN0X3Bm biAqIDgpKTsKIAogcmV0cnlfaWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9u L3JhZGVvbl9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5o CmluZGV4IGY5MTA0YmUuLjM1ZTU0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uX29iamVjdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29i amVjdC5oCkBAIC0xNTYsMTAgKzE1NiwxNSBAQCBleHRlcm4gaW50IHJhZGVvbl9zYV9ib19tYW5h Z2VyX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogZXh0ZXJuIGludCByYWRlb25f c2FfYm9fbWFuYWdlcl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCQlz dHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21hbmFnZXIpOwogZXh0ZXJuIGludCByYWRlb25f c2FfYm9fbmV3KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCByYWRl b25fc2FfYm8gKipzYV9ibywKIAkJCSAgICBzdHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21h bmFnZXIsCi0JCQkgICAgc3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm8sCi0JCQkgICAgdW5zaWdu ZWQgc2l6ZSwgdW5zaWduZWQgYWxpZ24pOworCQkJICAgIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVk IGFsaWduLAorCQkJICAgIGJvb2wgYmxvY2ssIHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsK IGV4dGVybiB2b2lkIHJhZGVvbl9zYV9ib19mcmVlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2 LAotCQkJICAgICAgc3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm8pOworCQkJICAgICAgc3RydWN0 IHJhZGVvbl9zYV9ibyAqKnNhX2JvKTsKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKK2V4 dGVybiB2b2lkIHJhZGVvbl9zYV9ib19kdW1wX2RlYnVnX2luZm8oc3RydWN0IHJhZGVvbl9zYV9t YW5hZ2VyICpzYV9tYW5hZ2VyLAorCQkJCQkgc3RydWN0IHNlcV9maWxlICptKTsKKyNlbmRpZgog CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Jpbmcu YyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwppbmRleCAyZWI0YzZlLi5h N2RiODkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCkBAIC0xMjIsMTUgKzEy MiwxNSBAQCByZXRyeToKIAlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX0lCX1BPT0xfU0laRTsgaSsr KSB7CiAJCXJhZGVvbl9pYl90cnlfZnJlZShyZGV2LCAmcmRldi0+aWJfcG9vbC5pYnNbaWR4XSk7 CiAJCWlmIChyZGV2LT5pYl9wb29sLmlic1tpZHhdLmZlbmNlID09IE5VTEwpIHsKLQkJCXIgPSBy YWRlb25fc2FfYm9fbmV3KHJkZXYsICZyZGV2LT5pYl9wb29sLnNhX21hbmFnZXIsCi0JCQkJCSAg ICAgJnJkZXYtPmliX3Bvb2wuaWJzW2lkeF0uc2FfYm8sCi0JCQkJCSAgICAgc2l6ZSwgMjU2KTsK KwkJCXIgPSByYWRlb25fc2FfYm9fbmV3KHJkZXYsICZyZGV2LT5pYl9wb29sLmlic1tpZHhdLnNh X2JvLAorCQkJCQkgICAgICZyZGV2LT5pYl9wb29sLnNhX21hbmFnZXIsCisJCQkJCSAgICAgc2l6 ZSwgMjU2LCBmYWxzZSwgTlVMTCk7CiAJCQlpZiAoIXIpIHsKIAkJCQkqaWIgPSAmcmRldi0+aWJf cG9vbC5pYnNbaWR4XTsKIAkJCQkoKmliKS0+cHRyID0gcmRldi0+aWJfcG9vbC5zYV9tYW5hZ2Vy LmNwdV9wdHI7Ci0JCQkJKCppYiktPnB0ciArPSAoKCppYiktPnNhX2JvLm9mZnNldCA+PiAyKTsK KwkJCQkoKmliKS0+cHRyICs9ICgoKmliKS0+c2FfYm8tPnNvZmZzZXQgPj4gMik7CiAJCQkJKCpp YiktPmdwdV9hZGRyID0gcmRldi0+aWJfcG9vbC5zYV9tYW5hZ2VyLmdwdV9hZGRyOwotCQkJCSgq aWIpLT5ncHVfYWRkciArPSAoKmliKS0+c2FfYm8ub2Zmc2V0OworCQkJCSgqaWIpLT5ncHVfYWRk ciArPSAoKmliKS0+c2FfYm8tPnNvZmZzZXQ7CiAJCQkJKCppYiktPmZlbmNlID0gZmVuY2U7CiAJ CQkJKCppYiktPnZtX2lkID0gMDsKIAkJCQkoKmliKS0+aXNfY29uc3RfaWIgPSBmYWxzZTsKQEAg LTE0OCw2ICsxNDgsNyBAQCByZXRyeToKIAl9CiAJLyogdGhpcyBzaG91bGQgYmUgcmFyZSBldmVu dCwgaWUgYWxsIGliIHNjaGVkdWxlZCBub25lIHNpZ25hbGVkIHlldC4KIAkgKi8KKwlyID0gLUVO T01FTTsKIAlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX0lCX1BPT0xfU0laRTsgaSsrKSB7CiAJCWlm IChyZGV2LT5pYl9wb29sLmlic1tpZHhdLmZlbmNlICYmIHJkZXYtPmliX3Bvb2wuaWJzW2lkeF0u ZmVuY2UtPmVtaXR0ZWQpIHsKIAkJCXIgPSByYWRlb25fZmVuY2Vfd2FpdChyZGV2LT5pYl9wb29s Lmlic1tpZHhdLmZlbmNlLCBmYWxzZSk7CkBAIC0yMjgsNyArMjI5LDcgQEAgaW50IHJhZGVvbl9p Yl9wb29sX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiAJCXJkZXYtPmliX3Bvb2wu aWJzW2ldLmZlbmNlID0gTlVMTDsKIAkJcmRldi0+aWJfcG9vbC5pYnNbaV0uaWR4ID0gaTsKIAkJ cmRldi0+aWJfcG9vbC5pYnNbaV0ubGVuZ3RoX2R3ID0gMDsKLQkJSU5JVF9MSVNUX0hFQUQoJnJk ZXYtPmliX3Bvb2wuaWJzW2ldLnNhX2JvLmxpc3QpOworCQlyZGV2LT5pYl9wb29sLmlic1tpXS5z YV9ibyA9IE5VTEw7CiAJfQogCXJkZXYtPmliX3Bvb2wuaGVhZF9pZCA9IDA7CiAJcmRldi0+aWJf cG9vbC5yZWFkeSA9IHRydWU7CkBAIC02MDAsMTIgKzYwMSwzMiBAQCBzdGF0aWMgaW50IHJhZGVv bl9kZWJ1Z2ZzX2liX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQogc3RhdGlj IHN0cnVjdCBkcm1faW5mb19saXN0IHJhZGVvbl9kZWJ1Z2ZzX2liX2xpc3RbUkFERU9OX0lCX1BP T0xfU0laRV07CiBzdGF0aWMgY2hhciByYWRlb25fZGVidWdmc19pYl9uYW1lc1tSQURFT05fSUJf UE9PTF9TSVpFXVszMl07CiBzdGF0aWMgdW5zaWduZWQgcmFkZW9uX2RlYnVnZnNfaWJfaWR4W1JB REVPTl9JQl9QT09MX1NJWkVdOworCitzdGF0aWMgaW50IHJhZGVvbl9kZWJ1Z2ZzX3NhX2luZm8o c3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2Rl ICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2Ug KnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJcmFkZW9uX3NhX2JvX2R1bXBfZGVidWdfaW5m bygmcmRldi0+aWJfcG9vbC5zYV9tYW5hZ2VyLCBtKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX2RlYnVnZnNfc2FfbGlzdFtdID0geworICAg ICAgICB7InJhZGVvbl9zYV9pbmZvIiwgJnJhZGVvbl9kZWJ1Z2ZzX3NhX2luZm8sIDAsIE5VTEx9 LAorfTsKICNlbmRpZgogCiBpbnQgcmFkZW9uX2RlYnVnZnNfcmluZ19pbml0KHN0cnVjdCByYWRl b25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3JpbmcgKnJpbmcpCiB7CiAjaWYgZGVmaW5l ZChDT05GSUdfREVCVUdfRlMpCiAJdW5zaWduZWQgaTsKKwlpbnQgcjsKKworCXIgPSByYWRlb25f ZGVidWdmc19hZGRfZmlsZXMocmRldiwgcmFkZW9uX2RlYnVnZnNfc2FfbGlzdCwgMSk7CisJaWYg KHIpCisJCXJldHVybiByOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGVvbl9kZWJ1 Z2ZzX3JpbmdfaW5mb19saXN0KTsgKytpKSB7CiAJCXN0cnVjdCBkcm1faW5mb19saXN0ICppbmZv ID0gJnJhZGVvbl9kZWJ1Z2ZzX3JpbmdfaW5mb19saXN0W2ldOwogCQlpbnQgcmlkeCA9ICooaW50 KilyYWRlb25fZGVidWdmc19yaW5nX2luZm9fbGlzdFtpXS5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24v cmFkZW9uX3NhLmMKaW5kZXggOGZiZmU2OS4uZTc1OGFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Jh ZGVvbl9zYS5jCkBAIC0yNyw2ICsyNywyMyBAQAogICogQXV0aG9yczoKICAqICAgIEplcm9tZSBH bGlzc2UgPGdsaXNzZUBmcmVlZGVza3RvcC5vcmc+CiAgKi8KKy8qIHNhIGFsbG9jYXRpb24gbG9n aWMgOgorICoKKyAqIFRoZSBzYSBtYW5hZ2VyIG5vdyBrZWVwIGEgbGFzdCBwdHIgdGhhdCBwb2lu dCB0byB0aGUgbGFzdCBhbGxvY2F0ZWQKKyAqIHNhIGJvLiBBcyBzYSBibyBhcmUgYWxsb2NhdGVk IGZyb20gYmVnaW5pbmcgdG8gZW5kIGFuZCBhcyB0aGUgc2EgYm8KKyAqIGxpc3QgaXMgc2hvcnRl ZCBpbiBvZmZzZXQgb3JkZXIgdGhlbiB0aGUgc2EgYm8gYWZ0ZXIgdGhlIGxhc3Qgb25lIGluCisg KiB0aGUgbGlzdCBpcyBhbHNvIHRoZSBvbGRlc3Qgc2EgYm8gc28gdGhlIG9uZSB0aGF0IHNob3Vs ZCBmaW5pc2ggZmlyc3QuCisgKgorICogVGh1cyB0aGUgYWxsb2NhdGlvbiBhbG9naXJ0aG0gaXMg c2ltcGxlLCBpdCBjaGVjayBpZiB0aGVyZSBpcyBlbm91Z2gKKyAqIHJvb20gYWZ0ZXIgdGhlIGxh c3Qgc2EgYm8sIGlmIHNvIGl0IGFsbG9jYXRlIG5ldyBzYSBibyB0aGVyZS4gSWYKKyAqIHRoZXJl IGlzbid0IGl0IGNhbiB3YWl0IHRoZSBuZXh0IHNhIGJvIHRvIGZpbmlzaC4gQ29kZSBhbHNvIGhh bmRsZQorICogd3JhcCBhcm91bmQgaWUgd2hlbiBsYXN0IHJlYWNoIHRoZSBlbmQgb2Zmc2V0IG9m IHRoZSBzYSBtYW5hZ2VyLAorICogbmV4dCBzYSBibyBpcyBhbGxvY2F0ZWQgZnJvbSBiZWdpbmlu ZyAob2Zmc2V0IDApLgorICoKKyAqIElkZWEgaXMgdGhhdCBibyBhbGxvY2F0ZWQgdGhyb3VnaCB0 aGlzIGFyZSBibyB0aGF0IGhhdmUgbGlmZXRpbWUKKyAqIGxpbmtlZCB0byBvbmUgb2YgdGhlIHJp bmcgb2YgdGhlIEdQVSwgdGh1cyB3aGVuIHJpbmcgcHJvZ3Jlc3Mgc2EKKyAqIGJvIGFyZSBwcm9n cmVzaXZseSBmcmVlZCBzdGFydGluZyB3aXRoIGxhc3QtPm5leHQuCisgKi8KICNpbmNsdWRlICJk cm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAicmFkZW9uLmgiCkBAIC0zNyw5ICs1 NCwxMSBAQCBpbnQgcmFkZW9uX3NhX2JvX21hbmFnZXJfaW5pdChzdHJ1Y3QgcmFkZW9uX2Rldmlj ZSAqcmRldiwKIHsKIAlpbnQgcjsKIAorCXNwaW5fbG9ja19pbml0KCZzYV9tYW5hZ2VyLT5sb2Nr KTsKIAlzYV9tYW5hZ2VyLT5ibyA9IE5VTEw7CiAJc2FfbWFuYWdlci0+c2l6ZSA9IHNpemU7CiAJ c2FfbWFuYWdlci0+ZG9tYWluID0gZG9tYWluOworCXNhX21hbmFnZXItPmxhc3QgPSBOVUxMOwog CUlOSVRfTElTVF9IRUFEKCZzYV9tYW5hZ2VyLT5zYV9ibyk7CiAKIAlyID0gcmFkZW9uX2JvX2Ny ZWF0ZShyZGV2LCBzaXplLCBSQURFT05fR1BVX1BBR0VfU0laRSwgdHJ1ZSwKQEAgLTYzLDcgKzgy LDkgQEAgdm9pZCByYWRlb25fc2FfYm9fbWFuYWdlcl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNl ICpyZGV2LAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzYV9ibywgdG1wLCAmc2FfbWFuYWdl ci0+c2FfYm8sIGxpc3QpIHsKIAkJbGlzdF9kZWxfaW5pdCgmc2FfYm8tPmxpc3QpOwogCX0KLQly YWRlb25fYm9fdW5yZWYoJnNhX21hbmFnZXItPmJvKTsKKwlpZiAoc2FfbWFuYWdlci0+Ym8pIHsK KwkJcmFkZW9uX2JvX3VucmVmKCZzYV9tYW5hZ2VyLT5ibyk7CisJfQogCXNhX21hbmFnZXItPnNp emUgPSAwOwogfQogCkBAIC0xMTMsNzcgKzEzNCwyMzIgQEAgaW50IHJhZGVvbl9zYV9ib19tYW5h Z2VyX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJcmV0dXJuIHI7CiB9CiAK K3N0YXRpYyB2b2lkIHJhZGVvbl9zYV9ib19mcmVlX2xvY2tlZChzdHJ1Y3QgcmFkZW9uX2Rldmlj ZSAqcmRldiwgc3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm8pCit7CisJc3RydWN0IHJhZGVvbl9z YV9tYW5hZ2VyICpzYV9tYW5hZ2VyID0gc2FfYm8tPm1hbmFnZXI7CisJc3RydWN0IGxpc3RfaGVh ZCAqcHJldjsKKworCWlmIChzYV9iby0+ZmVuY2UpIHsKKwkJaWYgKCFyYWRlb25fZmVuY2Vfc2ln bmFsZWQoc2FfYm8tPmZlbmNlKSkgeworCQkJcmV0dXJuOworCQl9CisJCXJhZGVvbl9mZW5jZV91 bnJlZigmc2FfYm8tPmZlbmNlKTsKKwl9CisJcHJldiA9IHNhX2JvLT5saXN0LnByZXY7CisJbGlz dF9kZWxfaW5pdCgmc2FfYm8tPmxpc3QpOworCWlmIChsaXN0X2VtcHR5KCZzYV9tYW5hZ2VyLT5z YV9ibykpIHsKKwkJLyogdGhpcyBibyB3YXMgYWxvbmUgaW4gdGhlIGxpc3QgKi8KKwkJc2FfbWFu YWdlci0+bGFzdCA9IE5VTEw7CisJfSBlbHNlIGlmIChzYV9tYW5hZ2VyLT5sYXN0ID09IHNhX2Jv KSB7CisJCWlmIChwcmV2ID09ICZzYV9tYW5hZ2VyLT5zYV9ibykgeworCQkJLyogc2FfYm8gaXMg YmVnaW5pbmcgb2YgbGlzdCwgdGhlIG5ldyBsYXN0IGJlY2FtZQorCQkJICogdGhlIGxhc3Qgb2Yg dGhlIGxpc3QKKwkJCSAqLworCQkJc2FfbWFuYWdlci0+bGFzdCA9IGxpc3RfZW50cnkoc2FfbWFu YWdlci0+c2FfYm8ucHJldiwgc3RydWN0IHJhZGVvbl9zYV9ibywgbGlzdCk7CisJCX0gZWxzZSB7 CisJCQkvKiBwcmV2IGJlY2FtZSB0aGUgbmV3IGxhc3QgKi8KKwkJCXNhX21hbmFnZXItPmxhc3Qg PSBsaXN0X2VudHJ5KHByZXYsIHN0cnVjdCByYWRlb25fc2FfYm8sIGxpc3QpOworCQl9CisJfQor CS8qIGluIGNhc2UgdHJ5IGZyZWUgYWxyZWFkeSBmcmVlIHRoZSBzYV9ibyBidXQgcmFkZW9uX3Nh X2JvX2ZyZWUKKwkgKiB3YXNuJ3QgeWV0IGNhbGwsIHRoZSBmcmVlIGJvb2wgcHJvdGVjdCB1cyBm cm9tIGZyZWVpbmcgdG8KKwkgKiBlYXJseSB0aGUgc3RydWN0dXJlCisJICovCisJaWYgKHNhX2Jv LT5mcmVlKSB7CisJCWtmcmVlKHNhX2JvKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHJhZGVvbl9z YV9tYW5hZ2VyX3RyeV9mcmVlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCSAgICAg ICBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpvbGRlc3QpCit7CisJaWYgKG9sZGVzdC0+ZmVuY2UgJiYg b2xkZXN0LT5mZW5jZS0+ZW1pdHRlZCkgeworCQlpZiAocmFkZW9uX2ZlbmNlX3NpZ25hbGVkKG9s ZGVzdC0+ZmVuY2UpKSB7CisJCQlyYWRlb25fc2FfYm9fZnJlZV9sb2NrZWQocmRldiwgb2xkZXN0 KTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCXJldHVybiBmYWxzZTsKK30KKwogLyoKICAq IFByaW5jaXBlIGlzIHNpbXBsZSwgd2Uga2VlcCBhIGxpc3Qgb2Ygc3ViIGFsbG9jYXRpb24gaW4g b2Zmc2V0CiAgKiBvcmRlciAoZmlyc3QgZW50cnkgaGFzIG9mZnNldCA9PSAwLCBsYXN0IGVudHJ5 IGhhcyB0aGUgaGlnaGVzdAogICogb2Zmc2V0KS4KICAqCi0gKiBXaGVuIGFsbG9jYXRpbmcgbmV3 IG9iamVjdCB3ZSBmaXJzdCBjaGVjayBpZiB0aGVyZSBpcyByb29tIGF0Ci0gKiB0aGUgZW5kIHRv dGFsX3NpemUgLSAobGFzdF9vYmplY3Rfb2Zmc2V0ICsgbGFzdF9vYmplY3Rfc2l6ZSkgPj0KLSAq IGFsbG9jX3NpemUuIElmIHNvIHdlIGFsbG9jYXRlIG5ldyBvYmplY3QgdGhlcmUuCi0gKgotICog V2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gYXQgdGhlIGVuZCwgd2Ugc3RhcnQgd2FpdGlu ZyBmb3IKLSAqIGVhY2ggc3ViIG9iamVjdCB1bnRpbCB3ZSByZWFjaCBvYmplY3Rfb2Zmc2V0K29i amVjdF9zaXplID49Ci0gKiBhbGxvY19zaXplLCB0aGlzIG9iamVjdCB0aGVuIGJlY29tZSB0aGUg c3ViIG9iamVjdCB3ZSByZXR1cm4uCisgKiBUaGUgbGFzdCBwdHIgc2VydmUgYXMgZXF1aXZhbGVu dCB0byByZWFkIHBvc2l0aW9uIGluIGNwIHJpbmcuCisgKiBsYXN0LT5wcmV2IGlzIHRoZSBwcmV2 aW91cyBsYXN0LCB3aGlsZSBsYXN0LT5uZXh0IGlzIHRoZSBvbGRlc3QKKyAqIHNhX2JvIGFsbG9j YXRlZC4KICAqCiAgKiBBbGlnbm1lbnQgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gcGFnZSBzaXplCisg KgorICogUmV0dXJuIHZhbHVlOgorICogLUVOT01FTSBmYWlsdXJlIHRvIGFsbG9jYXRlCisgKiAt RVJFU1RBUlRTWVMgcmVzdGFydCBpb2N0bAorICogLUVERUFETEsgd2hlbiBmZW5jZSB3YWl0IHJl cG9ydCBHUFUgbG9ja3VwCiAgKi8KIGludCByYWRlb25fc2FfYm9fbmV3KHN0cnVjdCByYWRlb25f ZGV2aWNlICpyZGV2LAorCQkgICAgIHN0cnVjdCByYWRlb25fc2FfYm8gKip0bXAsCiAJCSAgICAg c3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyLAotCQkgICAgIHN0cnVjdCByYWRl b25fc2FfYm8gKnNhX2JvLAotCQkgICAgIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGFsaWduKQor CQkgICAgIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGFsaWduLAorCQkgICAgIGJvb2wgYmxvY2ss IHN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKQogewotCXN0cnVjdCByYWRlb25fc2FfYm8gKnRt cDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwotCXVuc2lnbmVkIG9mZnNldCA9IDAsIHdhc3Rl ZCA9IDA7CisJc3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm8sICpuZXh0LCAqb2xkZXN0OworCXVu c2lnbmVkIG9mZnNldCwgd2FzdGVkLCBob2xlX29mZnNldCwgaG9sZV9zaXplOworCWJvb2wgdHJ5 X2JlZ2luaW5nID0gZmFsc2UsIGFkZF9iZWdpbmluZyA9IGZhbHNlOworCWludCByID0gLUVOT01F TTsKIAogCUJVR19PTihhbGlnbiA+IFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAlCVUdfT04oc2l6 ZSA+IHNhX21hbmFnZXItPnNpemUpOwogCi0JLyogbm8gb25lID8gKi8KLQloZWFkID0gc2FfbWFu YWdlci0+c2FfYm8ucHJldjsKLQlpZiAobGlzdF9lbXB0eSgmc2FfbWFuYWdlci0+c2FfYm8pKSB7 CisJKnRtcCA9IE5VTEw7CisJc2FfYm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Nh X2JvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNhX2JvID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCXNhX2JvLT5tYW5hZ2VyID0gc2FfbWFuYWdlcjsKKwlzYV9iby0+ZmVuY2UgPSBO VUxMOworCXNhX2JvLT5mcmVlID0gZmFsc2U7CisJc2FfYm8tPnNvZmZzZXQgPSAwOworCXNhX2Jv LT5lb2Zmc2V0ID0gMDsKKwlzYV9iby0+c2l6ZSA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJnNhX2Jv LT5saXN0KTsKKworCXNwaW5fbG9jaygmc2FfbWFuYWdlci0+bG9jayk7CityZXRyeToKKwlpZiAo c2FfbWFuYWdlci0+bGFzdCA9PSBOVUxMKSB7CisJCW9mZnNldCA9IDA7CisJCWFkZF9iZWdpbmlu ZyA9IHRydWU7CiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIGxvb2sgZm9yIGEgaG9sZSBiaWcgZW5v dWdoICovCi0Jb2Zmc2V0ID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnNhX21hbmFn ZXItPnNhX2JvLCBsaXN0KSB7Ci0JCS8qIHJvb20gYmVmb3JlIHRoaXMgb2JqZWN0ID8gKi8KLQkJ aWYgKG9mZnNldCA8IHRtcC0+b2Zmc2V0ICYmICh0bXAtPm9mZnNldCAtIG9mZnNldCkgPj0gc2l6 ZSkgewotCQkJaGVhZCA9IHRtcC0+bGlzdC5wcmV2OworCWhvbGVfb2Zmc2V0ID0gc2FfbWFuYWdl ci0+bGFzdC0+ZW9mZnNldDsKKwl3YXN0ZWQgPSAoYWxpZ24gLSAoaG9sZV9vZmZzZXQgJSBhbGln bikpICUgYWxpZ247CisJaWYgKHNhX21hbmFnZXItPmxhc3QtPmxpc3QubmV4dCA9PSAmc2FfbWFu YWdlci0+c2FfYm8pIHsKKwkJLyogbm8gc2EgYm8gYWZ0ZXIgdGhhdCBvbmUgKi8KKwkJaG9sZV9z aXplID0gc2FfbWFuYWdlci0+c2l6ZSAtIGhvbGVfb2Zmc2V0OworCQl0cnlfYmVnaW5pbmcgPSB0 cnVlOworCQlvbGRlc3QgPSBsaXN0X2VudHJ5KHNhX21hbmFnZXItPnNhX2JvLm5leHQsIHN0cnVj dCByYWRlb25fc2FfYm8sIGxpc3QpOworCX0gZWxzZSB7CisJCW5leHQgPSBsaXN0X2VudHJ5KHNh X21hbmFnZXItPmxhc3QtPmxpc3QubmV4dCwgc3RydWN0IHJhZGVvbl9zYV9ibywgbGlzdCk7CisJ CWhvbGVfc2l6ZSA9IG5leHQtPnNvZmZzZXQgLSBob2xlX29mZnNldDsKKwkJb2xkZXN0ID0gbmV4 dDsKKwl9CisJaWYgKChzaXplICsgd2FzdGVkKSA8PSBob2xlX3NpemUpIHsKKwkJb2Zmc2V0ID0g aG9sZV9vZmZzZXQgKyB3YXN0ZWQ7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAodHJ5X2JlZ2lu aW5nKSB7CisJCS8qIGxhc3Qgd2FzIGF0IGVuZCBvZiBsaXN0LCBzbyBpZiB3ZSB3cmFwIG92ZXIg d2UgbWlnaHQgZmluZAorCQkgKiByb29tIGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgbGlzdAorCQkg Ki8KKwkJb2Zmc2V0ID0gMDsKKwkJaG9sZV9zaXplID0gb2xkZXN0LT5zb2Zmc2V0OworCQlpZiAo c2l6ZSA8PSBob2xlX3NpemUpIHsKKwkJCWFkZF9iZWdpbmluZyA9IHRydWU7CiAJCQlnb3RvIG91 dDsKIAkJfQotCQlvZmZzZXQgPSB0bXAtPm9mZnNldCArIHRtcC0+c2l6ZTsKLQkJd2FzdGVkID0g b2Zmc2V0ICUgYWxpZ247Ci0JCWlmICh3YXN0ZWQpIHsKLQkJCXdhc3RlZCA9IGFsaWduIC0gd2Fz dGVkOworCX0KKwkvKiB0cnkgdG8gYmUgb3B0aW1pc3QgYW5kIGZyZWUgdGhlIG9sZGVzdCBvbmUg Ki8KKwlpZiAocmFkZW9uX3NhX21hbmFnZXJfdHJ5X2ZyZWUocmRldiwgb2xkZXN0KSkgeworCQln b3RvIHJldHJ5OworCX0KKworCS8qIGlmIGJsb2NrIGlzIHVzZWQgYWxsIHRoZSBzYV9ibyBtdXN0 IGJlIGFzc29jaWF0ZWQgd2l0aCBhCisJICogZmVuY2UsIHdlIHBlcmZvcm0gc2FuaXR5IGNoZWNr IGJ1dCBleHBlY3QgdGhpbmdzIHRvIGdvCisJICogYmVyc2VyayBpZiB5b3UgZG9uJ3QgZm9sbG93 IHRoaXMKKwkgKi8KKwlpZiAoYmxvY2spIHsKKwkJc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2Ug PSBOVUxMOworCisJCWlmIChvbGRlc3QtPmZlbmNlKSB7CisJCQlmZW5jZSA9IHJhZGVvbl9mZW5j ZV9yZWYob2xkZXN0LT5mZW5jZSk7CiAJCX0KLQkJb2Zmc2V0ICs9IHdhc3RlZDsKLQl9Ci0JLyog cm9vbSBhdCB0aGUgZW5kID8gKi8KLQloZWFkID0gc2FfbWFuYWdlci0+c2FfYm8ucHJldjsKLQl0 bXAgPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCByYWRlb25fc2FfYm8sIGxpc3QpOwotCW9mZnNl dCA9IHRtcC0+b2Zmc2V0ICsgdG1wLT5zaXplOwotCXdhc3RlZCA9IG9mZnNldCAlIGFsaWduOwot CWlmICh3YXN0ZWQpIHsKLQkJd2FzdGVkID0gYWxpZ24gLSB3YXN0ZWQ7Ci0JfQotCW9mZnNldCAr PSB3YXN0ZWQ7Ci0JaWYgKChzYV9tYW5hZ2VyLT5zaXplIC0gb2Zmc2V0KSA8IHNpemUpIHsKLQkJ LyogZmFpbGVkIHRvIGZpbmQgc29tZXRoaW5ncyBiaWcgZW5vdWdoICovCi0JCXJldHVybiAtRU5P TUVNOworCQlzcGluX3VubG9jaygmc2FfbWFuYWdlci0+bG9jayk7CisKKwkJaWYgKGZlbmNlID09 IE5VTEwpIHsKKwkJCS8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQkJZGV2X3dhcm4o cmRldi0+ZGV2LCAic2EgYWxsb2NhdG9yIG5vdGhpbmcgd2UgY2FuIHdhaXQgZm9yXG4iKTsKKwkJ CWdvdG8gb3V0X2VycjsKKwkJfQorCisJCXIgPSByYWRlb25fZmVuY2Vfd2FpdChmZW5jZSwgZmFs c2UpOworCQlyYWRlb25fZmVuY2VfdW5yZWYoJmZlbmNlKTsKKwkJaWYgKHIpIHsKKwkJCWdvdG8g b3V0X2VycjsKKwkJfQorCisJCXNwaW5fbG9jaygmc2FfbWFuYWdlci0+bG9jayk7CisJCWdvdG8g cmV0cnk7CiAJfQorCXNwaW5fdW5sb2NrKCZzYV9tYW5hZ2VyLT5sb2NrKTsKKworb3V0X2VycjoK KwlrZnJlZShzYV9ibyk7CisJcmV0dXJuIHI7CiAKIG91dDoKLQlzYV9iby0+bWFuYWdlciA9IHNh X21hbmFnZXI7Ci0Jc2FfYm8tPm9mZnNldCA9IG9mZnNldDsKKwkqdG1wID0gc2FfYm87CisJaWYg KGFkZF9iZWdpbmluZykgeworCQlsaXN0X2FkZCgmc2FfYm8tPmxpc3QsICZzYV9tYW5hZ2VyLT5z YV9ibyk7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGQoJnNhX2JvLT5saXN0LCAmc2FfbWFuYWdlci0+ bGFzdC0+bGlzdCk7CisJfQorCXNhX21hbmFnZXItPmxhc3QgPSBzYV9ibzsKKwlpZiAoZmVuY2Up IHsKKwkJc2FfYm8tPmZlbmNlID0gcmFkZW9uX2ZlbmNlX3JlZihmZW5jZSk7CisJfQorCXNhX2Jv LT5zb2Zmc2V0ID0gb2Zmc2V0OworCXNhX2JvLT5lb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTsKIAlz YV9iby0+c2l6ZSA9IHNpemU7Ci0JbGlzdF9hZGQoJnNhX2JvLT5saXN0LCBoZWFkKTsKKwlzcGlu X3VubG9jaygmc2FfbWFuYWdlci0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcmFkZW9u X3NhX2JvX2ZyZWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fc2Ff Ym8gKnNhX2JvKQordm9pZCByYWRlb25fc2FfYm9fZnJlZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAq cmRldiwgc3RydWN0IHJhZGVvbl9zYV9ibyAqKnRtcCkKIHsKLQlsaXN0X2RlbF9pbml0KCZzYV9i by0+bGlzdCk7CisJc3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm87CisJc3RydWN0IHJhZGVvbl9z YV9tYW5hZ2VyICpzYV9tYW5hZ2VyOworCisJaWYgKHRtcCA9PSBOVUxMIHx8ICp0bXAgPT0gTlVM TCkgeworCQlyZXR1cm47CisJfQorCisJc2FfYm8gPSAqdG1wOworCXNhX21hbmFnZXIgPSBzYV9i by0+bWFuYWdlcjsKKwkqdG1wID0gTlVMTDsKKwlzcGluX2xvY2soJnNhX21hbmFnZXItPmxvY2sp OworCXNhX2JvLT5mcmVlID0gdHJ1ZTsKKwlpZiAobGlzdF9lbXB0eSgmc2FfYm8tPmxpc3QpKSB7 CisJCS8qIGl0IGhhcyBhbHJlYWR5IGJlZW4gZnJlZSAqLworCQlrZnJlZShzYV9ibyk7CisJCWdv dG8gb3V0OworCX0KKwlpZiAoc2FfYm8tPmZlbmNlICYmICFzYV9iby0+ZmVuY2UtPmVtaXR0ZWQp IHsKKwkJcmFkZW9uX2ZlbmNlX3VucmVmKCZzYV9iby0+ZmVuY2UpOworCX0KKwlyYWRlb25fc2Ff Ym9fZnJlZV9sb2NrZWQocmRldiwgc2FfYm8pOworCitvdXQ6CisJc3Bpbl91bmxvY2soJnNhX21h bmFnZXItPmxvY2spOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCit2b2lkIHJh ZGVvbl9zYV9ib19kdW1wX2RlYnVnX2luZm8oc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyICpzYV9t YW5hZ2VyLAorCQkJCSAgc3RydWN0IHNlcV9maWxlICptKQoreworCXN0cnVjdCByYWRlb25fc2Ff Ym8gKmk7CisKKwlzcGluX2xvY2soJnNhX21hbmFnZXItPmxvY2spOworCXNlcV9wcmludGYobSwg Imxhc3QgWyVwXVxuIiwgc2FfbWFuYWdlci0+bGFzdCk7CisJaWYgKHNhX21hbmFnZXItPmxhc3Qp IHsKKwkJaSA9IHNhX21hbmFnZXItPmxhc3Q7CisJCXNlcV9wcmludGYobSwgIlsweCUwOHggMHgl MDh4XS8weCUwOHggc2l6ZSAlZCBbJXBdIExBU1RcbiIsIGktPnNvZmZzZXQsCisJCQkgICBpLT5l b2Zmc2V0LCBzYV9tYW5hZ2VyLT5zaXplLCBpLT5zaXplLCBpKTsKKwl9CisJbGlzdF9mb3JfZWFj aF9lbnRyeShpLCAmc2FfbWFuYWdlci0+c2FfYm8sIGxpc3QpIHsKKwkJc2VxX3ByaW50ZihtLCAi WzB4JTA4eCAweCUwOHhdLzB4JTA4eCBzaXplICVkIFslcF1cbiIsIGktPnNvZmZzZXQsCisJCQkg ICBpLT5lb2Zmc2V0LCBzYV9tYW5hZ2VyLT5zaXplLCBpLT5zaXplLCBpKTsKKwl9CisJc3Bpbl91 bmxvY2soJnNhX21hbmFnZXItPmxvY2spOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zZW1hcGhvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uX3NlbWFwaG9yZS5jCmluZGV4IDkzMGEwOGEuLjgyMjcyM2UgMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3NlbWFwaG9yZS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9yYWRlb24vcmFkZW9uX3NlbWFwaG9yZS5jCkBAIC01NSw5ICs1NSw5IEBAIHN0YXRp YyBpbnQgcmFkZW9uX3NlbWFwaG9yZV9hZGRfYm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYp CiAJCXJldHVybiByOwogCX0KIAlncHVfYWRkciA9IHJkZXYtPmliX3Bvb2wuc2FfbWFuYWdlci5n cHVfYWRkcjsKLQlncHVfYWRkciArPSBiby0+aWItPnNhX2JvLm9mZnNldDsKKwlncHVfYWRkciAr PSBiby0+aWItPnNhX2JvLT5zb2Zmc2V0OwogCWNwdV9wdHIgPSByZGV2LT5pYl9wb29sLnNhX21h bmFnZXIuY3B1X3B0cjsKLQljcHVfcHRyICs9IChiby0+aWItPnNhX2JvLm9mZnNldCA+PiAyKTsK KwljcHVfcHRyICs9IChiby0+aWItPnNhX2JvLT5zb2Zmc2V0ID4+IDIpOwogCWZvciAoaSA9IDA7 IGkgPCAoUkFERU9OX1NFTUFQSE9SRV9CT19TSVpFLzgpOyBpKyspIHsKIAkJYm8tPnNlbWFwaG9y ZXNbaV0uZ3B1X2FkZHIgPSBncHVfYWRkcjsKIAkJYm8tPnNlbWFwaG9yZXNbaV0uY3B1X3B0ciA9 IGNwdV9wdHI7Ci0tIAoxLjcuNy42CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAo=