From mboxrd@z Thu Jan 1 00:00:00 1970 From: j.glisse@gmail.com Subject: [PATCH 12/18] drm/radeon: multiple ring allocator Date: Fri, 4 May 2012 18:43:53 -0400 Message-ID: <1336171439-7672-13-git-send-email-j.glisse@gmail.com> References: <1336171439-7672-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 2D1579EB03 for ; Fri, 4 May 2012 15:44:32 -0700 (PDT) Received: by mail-qa0-f48.google.com with SMTP id y23so1751834qad.14 for ; Fri, 04 May 2012 15:44:32 -0700 (PDT) In-Reply-To: <1336171439-7672-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: =?UTF-8?q?Christian=20K=C3=B6nig?= , Jerome Glisse List-Id: dri-devel@lists.freedesktop.org RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8ZGVhdGhzaW1wbGVAdm9kYWZvbmUuZGU+CgpBIHN0YXJ0 b3ZlciB3aXRoIGEgbmV3IGlkZWEgZm9yIGEgbXVsdGlwbGUgcmluZyBhbGxvY2F0b3IuClNob3Vs ZCBwZXJmb3JtIGFzIHdlbGwgYXMgYSBub3JtYWwgcmluZyBhbGxvY2F0b3IgYXMgbG9uZwphcyBv bmx5IG9uZSByaW5nIGRvZXMgc29tdGhpbmcsIGJ1dCBmYWxscyBiYWNrIHRvIGEgbW9yZQpjb21w bGV4IGFsZ29yaXRobSBpZiBtb3JlIGNvbXBsZXggdGhpbmdzIHN0YXJ0IHRvIGhhcHBlbi4KCldl IHN0b3JlIHRoZSBsYXN0IGFsbG9jYXRlZCBibyBpbiBsYXN0LCB3ZSBhbHdheXMgdHJ5IHRvIGFs bG9jYXRlCmFmdGVyIHRoZSBsYXN0IGFsbG9jYXRlZCBiby4gUHJpbmNpcGxlIGlzIHRoYXQgaW4g YSBsaW5lYXIgR1BVIHJpbmcKcHJvZ3Jlc3Npb24gd2FzIGlzIGFmdGVyIGxhc3QgaXMgdGhlIG9s ZGVzdCBibyB3ZSBhbGxvY2F0ZWQgYW5kIHRodXMKdGhlIGZpcnN0IG9uZSB0aGF0IHNob3VsZCBu byBsb25nZXIgYmUgaW4gdXNlIGJ5IHRoZSBHUFUuCgpJZiBpdCdzIG5vdCB0aGUgY2FzZSB3ZSBz a2lwIG92ZXIgdGhlIGJvIGFmdGVyIGxhc3QgdG8gdGhlIGNsb3Nlc3QKZG9uZSBibyBpZiBzdWNo IG9uZSBleGlzdC4gSWYgbm9uZSBleGlzdCBhbmQgd2UgYXJlIG5vdCBhc2tlZCB0bwpibG9jayB3 ZSByZXBvcnQgZmFpbHVyZSB0byBhbGxvY2F0ZS4KCklmIHdlIGFyZSBhc2tlZCB0byBibG9jayB3 ZSB3YWl0IG9uIGFsbCB0aGUgb2xkZXN0IGZlbmNlIG9mIGFsbApyaW5ncy4gV2UganVzdCB3YWl0 IGZvciBhbnkgb2YgdGhvc2UgZmVuY2UgdG8gY29tcGxldGUuCgpTaWduZWQtb2ZmLWJ5OiBDaHJp c3RpYW4gS8O2bmlnIDxkZWF0aHNpbXBsZUB2b2RhZm9uZS5kZT4KU2lnbmVkLW9mZi1ieTogSmVy b21lIEdsaXNzZSA8amdsaXNzZUByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uLmggICAgICB8ICAgIDcgKy0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9u X3JpbmcuYyB8ICAgMTkgKy0tCiBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zYS5jICAg fCAgMzE0ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdl ZCwgMjMzIGluc2VydGlvbnMoKyksIDEwNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRl b24uaAppbmRleCA2ZjhkMGY1Li4xYzNlYjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v cmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAg LTM4NSw3ICszODUsOSBAQCBzdHJ1Y3QgcmFkZW9uX2JvX2xpc3Qgewogc3RydWN0IHJhZGVvbl9z YV9tYW5hZ2VyIHsKIAlzcGlubG9ja190CQlsb2NrOwogCXN0cnVjdCByYWRlb25fYm8JKmJvOwot CXN0cnVjdCBsaXN0X2hlYWQJc2FfYm87CisJc3RydWN0IHJhZGVvbl9zYV9ibwkqbGFzdDsKKwlz dHJ1Y3QgbGlzdF9oZWFkCWZsaXN0W1JBREVPTl9OVU1fUklOR1NdOworCXN0cnVjdCBsaXN0X2hl YWQJb2xpc3Q7CiAJdW5zaWduZWQJCXNpemU7CiAJdWludDY0X3QJCWdwdV9hZGRyOwogCXZvaWQJ CQkqY3B1X3B0cjsKQEAgLTM5Niw3ICszOTgsOCBAQCBzdHJ1Y3QgcmFkZW9uX3NhX2JvOwogCiAv KiBzdWItYWxsb2NhdGlvbiBidWZmZXIgKi8KIHN0cnVjdCByYWRlb25fc2FfYm8gewotCXN0cnVj dCBsaXN0X2hlYWQJCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAkJb2xpc3Q7CisJc3RydWN0IGxp c3RfaGVhZAkJZmxpc3Q7CiAJc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyCSptYW5hZ2VyOwogCXVu c2lnbmVkCQkJc29mZnNldDsKIAl1bnNpZ25lZAkJCWVvZmZzZXQ7CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9u L3JhZGVvbl9yaW5nLmMKaW5kZXggYzg0YWY5Yy4uMmVlZDI1MSAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uX3JpbmcuYwpAQCAtMjA0LDI1ICsyMDQsMjIgQEAgaW50IHJhZGVvbl9pYl9zY2hl ZHVsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCiAK IGludCByYWRlb25faWJfcG9vbF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewot CXN0cnVjdCByYWRlb25fc2FfbWFuYWdlciB0bXA7CiAJaW50IGksIHI7CiAKLQlyID0gcmFkZW9u X3NhX2JvX21hbmFnZXJfaW5pdChyZGV2LCAmdG1wLAotCQkJCSAgICAgIFJBREVPTl9JQl9QT09M X1NJWkUqNjQqMTAyNCwKLQkJCQkgICAgICBSQURFT05fR0VNX0RPTUFJTl9HVFQpOwotCWlmIChy KSB7Ci0JCXJldHVybiByOwotCX0KLQogCXJhZGVvbl9tdXRleF9sb2NrKCZyZGV2LT5pYl9wb29s Lm11dGV4KTsKIAlpZiAocmRldi0+aWJfcG9vbC5yZWFkeSkgewogCQlyYWRlb25fbXV0ZXhfdW5s b2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQkJcmFkZW9uX3NhX2JvX21hbmFnZXJfZmluaShy ZGV2LCAmdG1wKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmRldi0+aWJfcG9vbC5zYV9tYW5hZ2Vy ID0gdG1wOwotCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLnNhX21hbmFnZXIuc2FfYm8p OworCXIgPSByYWRlb25fc2FfYm9fbWFuYWdlcl9pbml0KHJkZXYsICZyZGV2LT5pYl9wb29sLnNh X21hbmFnZXIsCisJCQkJICAgICAgUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0LAorCQkJCSAg ICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCk7CisJaWYgKHIpIHsKKwkJcmFkZW9uX211dGV4X3Vu bG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisJCXJldHVybiByOworCX0KKwogCWZvciAoaSA9 IDA7IGkgPCBSQURFT05fSUJfUE9PTF9TSVpFOyBpKyspIHsKIAkJcmRldi0+aWJfcG9vbC5pYnNb aV0uZmVuY2UgPSBOVUxMOwogCQlyZGV2LT5pYl9wb29sLmlic1tpXS5pZHggPSBpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3NhLmMKaW5kZXggYmM0ZWY4Ny4uZGM2N2NiNCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v cmFkZW9uL3JhZGVvbl9zYS5jCkBAIC0yNywyMSArMjcsNDIgQEAKICAqIEF1dGhvcnM6CiAgKiAg ICBKZXJvbWUgR2xpc3NlIDxnbGlzc2VAZnJlZWRlc2t0b3Aub3JnPgogICovCisvKiBBbGdvcml0 aG06CisgKgorICogV2Ugc3RvcmUgdGhlIGxhc3QgYWxsb2NhdGVkIGJvIGluIGxhc3QsIHdlIGFs d2F5cyB0cnkgdG8gYWxsb2NhdGUKKyAqIGFmdGVyIHRoZSBsYXN0IGFsbG9jYXRlZCBiby4gUHJp bmNpcGxlIGlzIHRoYXQgaW4gYSBsaW5lYXIgR1BVIHJpbmcKKyAqIHByb2dyZXNzaW9uIHdhcyBp cyBhZnRlciBsYXN0IGlzIHRoZSBvbGRlc3QgYm8gd2UgYWxsb2NhdGVkIGFuZCB0aHVzCisgKiB0 aGUgZmlyc3Qgb25lIHRoYXQgc2hvdWxkIG5vIGxvbmdlciBiZSBpbiB1c2UgYnkgdGhlIEdQVS4K KyAqCisgKiBJZiBpdCdzIG5vdCB0aGUgY2FzZSB3ZSBza2lwIG92ZXIgdGhlIGJvIGFmdGVyIGxh c3QgdG8gdGhlIGNsb3Nlc3QKKyAqIGRvbmUgYm8gaWYgc3VjaCBvbmUgZXhpc3QuIElmIG5vbmUg ZXhpc3QgYW5kIHdlIGFyZSBub3QgYXNrZWQgdG8KKyAqIGJsb2NrIHdlIHJlcG9ydCBmYWlsdXJl IHRvIGFsbG9jYXRlLgorICoKKyAqIElmIHdlIGFyZSBhc2tlZCB0byBibG9jayB3ZSB3YWl0IG9u IGFsbCB0aGUgb2xkZXN0IGZlbmNlIG9mIGFsbAorICogcmluZ3MuIFdlIGp1c3Qgd2FpdCBmb3Ig YW55IG9mIHRob3NlIGZlbmNlIHRvIGNvbXBsZXRlLgorICovCiAjaW5jbHVkZSAiZHJtUC5oIgog I2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogCitzdGF0aWMgdm9pZCByYWRl b25fc2FfYm9fcmVtb3ZlX2xvY2tlZChzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibyk7CitzdGF0 aWMgdm9pZCByYWRlb25fc2FfYm9fdHJ5X2ZyZWUoc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyICpz YV9tYW5hZ2VyKTsKKwogaW50IHJhZGVvbl9zYV9ib19tYW5hZ2VyX2luaXQoc3RydWN0IHJhZGVv bl9kZXZpY2UgKnJkZXYsCiAJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21h bmFnZXIsCiAJCQkgICAgICB1bnNpZ25lZCBzaXplLCB1MzIgZG9tYWluKQogewotCWludCByOwor CWludCBpLCByOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNhX21hbmFnZXItPmxvY2spOwogCXNhX21h bmFnZXItPmJvID0gTlVMTDsKIAlzYV9tYW5hZ2VyLT5zaXplID0gc2l6ZTsKIAlzYV9tYW5hZ2Vy LT5kb21haW4gPSBkb21haW47Ci0JSU5JVF9MSVNUX0hFQUQoJnNhX21hbmFnZXItPnNhX2JvKTsK KwlJTklUX0xJU1RfSEVBRCgmc2FfbWFuYWdlci0+b2xpc3QpOworCWZvciAoaSA9IDA7IGkgPCBS QURFT05fTlVNX1JJTkdTOyArK2kpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJnNhX21hbmFnZXItPmZs aXN0W2ldKTsKKwl9CisJc2FfbWFuYWdlci0+bGFzdCA9IE5VTEw7CiAKIAlyID0gcmFkZW9uX2Jv X2NyZWF0ZShyZGV2LCBzaXplLCBSQURFT05fR1BVX1BBR0VfU0laRSwgdHJ1ZSwKIAkJCSAgICAg UkFERU9OX0dFTV9ET01BSU5fQ1BVLCAmc2FfbWFuYWdlci0+Ym8pOwpAQCAtNTgsMTEgKzc5LDE3 IEBAIHZvaWQgcmFkZW9uX3NhX2JvX21hbmFnZXJfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAq cmRldiwKIHsKIAlzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibywgKnRtcDsKIAotCWlmICghbGlz dF9lbXB0eSgmc2FfbWFuYWdlci0+c2FfYm8pKSB7Ci0JCWRldl9lcnIocmRldi0+ZGV2LCAic2Ff bWFuYWdlciBpcyBub3QgZW1wdHksIGNsZWFyaW5nIGFueXdheVxuIik7CisJaWYgKCFsaXN0X2Vt cHR5KCZzYV9tYW5hZ2VyLT5vbGlzdCkpIHsKKwkJc2FfbWFuYWdlci0+bGFzdCA9IGxpc3RfZW50 cnkoc2FfbWFuYWdlci0+b2xpc3QubmV4dCwKKwkJCQkJICAgICAgc3RydWN0IHJhZGVvbl9zYV9i bywgb2xpc3QpOworCQlyYWRlb25fc2FfYm9fdHJ5X2ZyZWUoc2FfbWFuYWdlcik7CisJCXJhZGVv bl9zYV9ib19yZW1vdmVfbG9ja2VkKHNhX21hbmFnZXItPmxhc3QpOworCQlpZiAoIWxpc3RfZW1w dHkoJnNhX21hbmFnZXItPm9saXN0KSkgeworCQkJZGV2X2VycihyZGV2LT5kZXYsICJzYV9tYW5h Z2VyIGlzIG5vdCBlbXB0eSwgY2xlYXJpbmcgYW55d2F5XG4iKTsKKwkJfQogCX0KLQlsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoc2FfYm8sIHRtcCwgJnNhX21hbmFnZXItPnNhX2JvLCBsaXN0KSB7 Ci0JCWxpc3RfZGVsX2luaXQoJnNhX2JvLT5saXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoc2FfYm8sIHRtcCwgJnNhX21hbmFnZXItPm9saXN0LCBvbGlzdCkgeworCQlyYWRlb25fc2Ff Ym9fcmVtb3ZlX2xvY2tlZChzYV9ibyk7CiAJfQogCXJhZGVvbl9ib191bnJlZigmc2FfbWFuYWdl ci0+Ym8pOwogCXNhX21hbmFnZXItPnNpemUgPSAwOwpAQCAtMTE0LDExMSArMTQxLDIwNCBAQCBp bnQgcmFkZW9uX3NhX2JvX21hbmFnZXJfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRl diwKIAlyZXR1cm4gcjsKIH0KIAotLyoKLSAqIFByaW5jaXBlIGlzIHNpbXBsZSwgd2Uga2VlcCBh IGxpc3Qgb2Ygc3ViIGFsbG9jYXRpb24gaW4gb2Zmc2V0Ci0gKiBvcmRlciAoZmlyc3QgZW50cnkg aGFzIG9mZnNldCA9PSAwLCBsYXN0IGVudHJ5IGhhcyB0aGUgaGlnaGVzdAotICogb2Zmc2V0KS4K LSAqCi0gKiBXaGVuIGFsbG9jYXRpbmcgbmV3IG9iamVjdCB3ZSBmaXJzdCBjaGVjayBpZiB0aGVy ZSBpcyByb29tIGF0Ci0gKiB0aGUgZW5kIHRvdGFsX3NpemUgLSAobGFzdF9vYmplY3Rfb2Zmc2V0 ICsgbGFzdF9vYmplY3Rfc2l6ZSkgPj0KLSAqIGFsbG9jX3NpemUuIElmIHNvIHdlIGFsbG9jYXRl IG5ldyBvYmplY3QgdGhlcmUuCi0gKgotICogV2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20g YXQgdGhlIGVuZCwgd2Ugc3RhcnQgd2FpdGluZyBmb3IKLSAqIGVhY2ggc3ViIG9iamVjdCB1bnRp bCB3ZSByZWFjaCBvYmplY3Rfb2Zmc2V0K29iamVjdF9zaXplID49Ci0gKiBhbGxvY19zaXplLCB0 aGlzIG9iamVjdCB0aGVuIGJlY29tZSB0aGUgc3ViIG9iamVjdCB3ZSByZXR1cm4uCi0gKgotICog QWxpZ25tZW50IGNhbid0IGJlIGJpZ2dlciB0aGFuIHBhZ2Ugc2l6ZQotICovCi0KIHN0YXRpYyB2 b2lkIHJhZGVvbl9zYV9ib19yZW1vdmVfbG9ja2VkKHN0cnVjdCByYWRlb25fc2FfYm8gKnNhX2Jv KQogewotCWxpc3RfZGVsKCZzYV9iby0+bGlzdCk7CisJc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2Vy ICpzYV9tYW5hZ2VyID0gc2FfYm8tPm1hbmFnZXI7CisJc3RydWN0IGxpc3RfaGVhZCAqcHJldiA9 IHNhX2JvLT5vbGlzdC5wcmV2OworCisJbGlzdF9kZWxfaW5pdCgmc2FfYm8tPm9saXN0KTsKKwlp ZiAobGlzdF9lbXB0eSgmc2FfbWFuYWdlci0+b2xpc3QpKSB7CisJCXNhX21hbmFnZXItPmxhc3Qg PSBOVUxMOworCX0gaWYgKHNhX21hbmFnZXItPmxhc3QgPT0gc2FfYm8pIHsKKwkJaWYgKHByZXYg IT0gJnNhX21hbmFnZXItPm9saXN0KSB7CisJCQlzYV9tYW5hZ2VyLT5sYXN0ID0gbGlzdF9lbnRy eShwcmV2LAorCQkJCQkJICAgICAgc3RydWN0IHJhZGVvbl9zYV9ibywKKwkJCQkJCSAgICAgIG9s aXN0KTsKKwkJfSBlbHNlIHsKKwkJCXNhX21hbmFnZXItPmxhc3QgPSBsaXN0X2VudHJ5KHNhX21h bmFnZXItPm9saXN0LnByZXYsCisJCQkJCQkgICAgICBzdHJ1Y3QgcmFkZW9uX3NhX2JvLAorCQkJ CQkJICAgICAgb2xpc3QpOworCQl9CisJfQorCWxpc3RfZGVsX2luaXQoJnNhX2JvLT5mbGlzdCk7 CiAJcmFkZW9uX2ZlbmNlX3VucmVmKCZzYV9iby0+ZmVuY2UpOwogCWtmcmVlKHNhX2JvKTsKIH0K IAorc3RhdGljIHZvaWQgcmFkZW9uX3NhX2JvX3RyeV9mcmVlKHN0cnVjdCByYWRlb25fc2FfbWFu YWdlciAqc2FfbWFuYWdlcikKK3sKKwlzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibywgKnRtcDsK KworCWlmIChzYV9tYW5hZ2VyLT5sYXN0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlzYV9i byA9IHNhX21hbmFnZXItPmxhc3Q7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2NvbnRpbnVl KHNhX2JvLCB0bXAsICZzYV9tYW5hZ2VyLT5vbGlzdCwgb2xpc3QpIHsKKwkJaWYgKHNhX2JvLT5m ZW5jZSA9PSBOVUxMIHx8ICFyYWRlb25fZmVuY2Vfc2lnbmFsZWQoc2FfYm8tPmZlbmNlKSkgewor CQkJcmV0dXJuOworCQl9CisJCXJhZGVvbl9zYV9ib19yZW1vdmVfbG9ja2VkKHNhX2JvKTsKKwl9 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWRlb25fc2FfYm9faG9sZV9hZnRlcihzdHJ1Y3Qg cmFkZW9uX3NhX2JvICpzYV9ibywKKwkJCQkJICAgdW5zaWduZWQgKnNvZmZzZXQsIHVuc2lnbmVk ICplb2Zmc2V0KQoreworCisJaWYgKHNhX2JvID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwkq c29mZnNldCA9IHNhX2JvLT5lb2Zmc2V0OworCWlmIChzYV9iby0+b2xpc3QubmV4dCA9PSAmc2Ff Ym8tPm1hbmFnZXItPm9saXN0KSB7CisJCSplb2Zmc2V0ID0gc2FfYm8tPm1hbmFnZXItPnNpemU7 CisJfSBlbHNlIHsKKwkJc3RydWN0IHJhZGVvbl9zYV9ibyAqbmV4dDsKKworCQluZXh0ID0gbGlz dF9lbnRyeShzYV9iby0+b2xpc3QubmV4dCwgc3RydWN0IHJhZGVvbl9zYV9ibywgb2xpc3QpOwor CQkqZW9mZnNldCA9IG5leHQtPnNvZmZzZXQ7CisJfQorfQorCitzdGF0aWMgYm9vbCByYWRlb25f c2FfYm9fdHJ5X2FsbG9jKHN0cnVjdCByYWRlb25fc2FfbWFuYWdlciAqc2FfbWFuYWdlciwKKwkJ CQkgICBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibywKKwkJCQkgICB1bnNpZ25lZCBzaXplLCB1 bnNpZ25lZCBhbGlnbikKK3sKKwl1bnNpZ25lZCBzb2Zmc2V0LCBlb2Zmc2V0LCB3YXN0ZWQ7CisK Kwlzb2Zmc2V0ID0gMDsKKwllb2Zmc2V0ID0gc2FfbWFuYWdlci0+c2l6ZTsKKwlyYWRlb25fc2Ff Ym9faG9sZV9hZnRlcihzYV9tYW5hZ2VyLT5sYXN0LCAmc29mZnNldCwgJmVvZmZzZXQpOworCXdh c3RlZCA9IChhbGlnbiAtIChzb2Zmc2V0ICUgYWxpZ24pKSAlIGFsaWduOworCisJaWYgKChlb2Zm c2V0IC0gc29mZnNldCkgPj0gKHNpemUgKyB3YXN0ZWQpKSB7CisJCXNvZmZzZXQgKz0gd2FzdGVk OworCisJCXNhX2JvLT5tYW5hZ2VyID0gc2FfbWFuYWdlcjsKKwkJc2FfYm8tPnNvZmZzZXQgPSBz b2Zmc2V0OworCQlzYV9iby0+ZW9mZnNldCA9IHNvZmZzZXQgKyBzaXplOworCQlpZiAoc2FfbWFu YWdlci0+bGFzdCkgeworCQkJbGlzdF9hZGQoJnNhX2JvLT5vbGlzdCwgJnNhX21hbmFnZXItPmxh c3QtPm9saXN0KTsKKwkJfSBlbHNlIHsKKwkJCWxpc3RfYWRkKCZzYV9iby0+b2xpc3QsICZzYV9t YW5hZ2VyLT5vbGlzdCk7CisJCX0KKwkJSU5JVF9MSVNUX0hFQUQoJnNhX2JvLT5mbGlzdCk7CisJ CXNhX21hbmFnZXItPmxhc3QgPSBzYV9ibzsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBm YWxzZTsKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX3NhX2JvX25leHRfaG9sZShzdHJ1Y3QgcmFk ZW9uX3NhX21hbmFnZXIgKnNhX21hbmFnZXIpCit7CisJdW5zaWduZWQgaSwgc29mZnNldCwgYmVz dCwgdG1wOworCisJLyogbGFzdCBjYW4ndCBiZSBOVUxMIGlmIHdlIHJlYWNoIHRoaXMgZnVuY3Rp b24gKi8KKwlzb2Zmc2V0ID0gc2FfbWFuYWdlci0+bGFzdC0+ZW9mZnNldDsKKwkvKiB0byBoYW5k bGUgd3JhcCBhcm91bmQgd2UgYWRkIHNhX21hbmFnZXItPnNpemUgKi8KKwliZXN0ID0gc2FfbWFu YWdlci0+c2l6ZSAqIDI7CisJLyogZ28gb3ZlciBhbGwgZmVuY2UgbGlzdCBhbmQgdHJ5IHRvIGZp bmQgdGhlIGNsb3Nlc3Qgc2FfYm8KKwkgKiBvZiB0aGUgY3VycmVudCBsYXN0CisJICovCisJZm9y IChpID0gMDsgaSA8IFJBREVPTl9OVU1fUklOR1M7ICsraSkgeworCQlzdHJ1Y3QgcmFkZW9uX3Nh X2JvICpzYV9ibzsKKworCQlpZiAobGlzdF9lbXB0eSgmc2FfbWFuYWdlci0+Zmxpc3RbaV0pKQor CQkJY29udGludWU7CisJCXNhX2JvID0gbGlzdF9maXJzdF9lbnRyeSgmc2FfbWFuYWdlci0+Zmxp c3RbaV0sCisJCQkJCSBzdHJ1Y3QgcmFkZW9uX3NhX2JvLCBmbGlzdCk7CisKKwkJaWYgKCFyYWRl b25fZmVuY2Vfc2lnbmFsZWQoc2FfYm8tPmZlbmNlKSkKKwkJCWNvbnRpbnVlOworCisJCXRtcCA9 IHNhX2JvLT5zb2Zmc2V0OworCQlpZiAodG1wIDwgc29mZnNldCkgeworCQkJLyogd3JhcCBhcm91 bmQsIHByZXRlbmQgaXQncyBhZnRlciAqLworCQkJdG1wICs9IHNhX21hbmFnZXItPnNpemU7CisJ CX0KKwkJdG1wIC09IHNvZmZzZXQ7CisJCWlmICh0bXAgPCBiZXN0KSB7CisJCQkvKiB0aGlzIHNh IGJvIGlzIHRoZSBjbG9zZXN0IG9uZSAqLworCQkJYmVzdCA9IHRtcDsKKwkJCXNhX21hbmFnZXIt Pmxhc3QgPSBsaXN0X2VudHJ5KHNhX2JvLT5vbGlzdC5wcmV2LAorCQkJCQkJICAgICAgc3RydWN0 IHJhZGVvbl9zYV9ibywKKwkJCQkJCSAgICAgIG9saXN0KTsKKwkJfQorCX0KK30KKworc3RhdGlj IGludCByYWRlb25fc2FfYm9fYmxvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQkg ICAgICBzdHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21hbmFnZXIpCit7CisJc3RydWN0IHJh ZGVvbl9mZW5jZSAqZmVuY2VzW1JBREVPTl9OVU1fUklOR1NdOworCWludCBpLCByOworCisJZm9y IChpID0gMDsgaSA8IFJBREVPTl9OVU1fUklOR1M7ICsraSkgeworCQlzdHJ1Y3QgcmFkZW9uX3Nh X2JvICpzYV9ibzsKKworCQlmZW5jZXNbaV0gPSBOVUxMOworCQlpZiAobGlzdF9lbXB0eSgmc2Ff bWFuYWdlci0+Zmxpc3RbaV0pKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlzYV9ibyA9IGxpc3Rf Zmlyc3RfZW50cnkoJnNhX21hbmFnZXItPmZsaXN0W2ldLAorCQkJCQkgc3RydWN0IHJhZGVvbl9z YV9ibywgZmxpc3QpOworCQlmZW5jZXNbaV0gPSBzYV9iby0+ZmVuY2U7CisJfQorCisJc3Bpbl91 bmxvY2soJnNhX21hbmFnZXItPmxvY2spOworCXIgPSByYWRlb25fZmVuY2Vfd2FpdF9hbnkocmRl diwgZmVuY2VzLCBmYWxzZSk7CisJc3Bpbl9sb2NrKCZzYV9tYW5hZ2VyLT5sb2NrKTsKKwlyZXR1 cm4gcjsKK30KKwogaW50IHJhZGVvbl9zYV9ib19uZXcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJk ZXYsCiAJCSAgICAgc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyLAogCQkgICAg IHN0cnVjdCByYWRlb25fc2FfYm8gKipzYV9ibywKIAkJICAgICB1bnNpZ25lZCBzaXplLCB1bnNp Z25lZCBhbGlnbiwgYm9vbCBibG9jaykKIHsKLQlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSA9 IE5VTEw7Ci0Jc3RydWN0IHJhZGVvbl9zYV9ibyAqdG1wLCAqbmV4dDsKLQlzdHJ1Y3QgbGlzdF9o ZWFkICpoZWFkOwotCXVuc2lnbmVkIG9mZnNldCA9IDAsIHdhc3RlZCA9IDA7Ci0JaW50IHI7CisJ dW5zaWduZWQgaTsKKwlpbnQgciA9IC1FTk9NRU07CiAKIAlCVUdfT04oYWxpZ24gPiBSQURFT05f R1BVX1BBR0VfU0laRSk7CiAJQlVHX09OKHNpemUgPiBzYV9tYW5hZ2VyLT5zaXplKTsKIAogCSpz YV9ibyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByYWRlb25fc2FfYm8pLCBHRlBfS0VSTkVMKTsK LQotcmV0cnk6CisJaWYgKCgqc2FfYm8pID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJ fQorCSgqc2FfYm8pLT5tYW5hZ2VyID0gc2FfbWFuYWdlcjsKKwkoKnNhX2JvKS0+ZmVuY2UgPSBO VUxMOworCUlOSVRfTElTVF9IRUFEKCYoKnNhX2JvKS0+b2xpc3QpOworCUlOSVRfTElTVF9IRUFE KCYoKnNhX2JvKS0+Zmxpc3QpOwogCiAJc3Bpbl9sb2NrKCZzYV9tYW5hZ2VyLT5sb2NrKTsKKwlk byB7CisJCS8qIHRyeSB0byBhbGxvY2F0ZSBjb3VwbGUgdGltZSBiZWZvcmUgZ29pbmcgdG8gd2Fp dCAqLworCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisJCQlyYWRlb25fc2FfYm9fdHJ5X2Zy ZWUoc2FfbWFuYWdlcik7CiAKLQkvKiBubyBvbmUgPyAqLwotCWhlYWQgPSBzYV9tYW5hZ2VyLT5z YV9iby5wcmV2OwotCWlmIChsaXN0X2VtcHR5KCZzYV9tYW5hZ2VyLT5zYV9ibykpIHsKLQkJZ290 byBvdXQ7Ci0JfQotCi0JLyogbG9vayBmb3IgYSBob2xlIGJpZyBlbm91Z2ggKi8KLQlvZmZzZXQg PSAwOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0bXAsIG5leHQsICZzYV9tYW5hZ2VyLT5z YV9ibywgbGlzdCkgewotCQkvKiB0cnkgdG8gZnJlZSB0aGlzIG9iamVjdCAqLwotCQlpZiAodG1w LT5mZW5jZSkgewotCQkJaWYgKHJhZGVvbl9mZW5jZV9zaWduYWxlZCh0bXAtPmZlbmNlKSkgewot CQkJCXJhZGVvbl9zYV9ib19yZW1vdmVfbG9ja2VkKHRtcCk7Ci0JCQkJY29udGludWU7Ci0JCQl9 IGVsc2UgewotCQkJCWZlbmNlID0gdG1wLT5mZW5jZTsKKwkJCWlmIChyYWRlb25fc2FfYm9fdHJ5 X2FsbG9jKHNhX21hbmFnZXIsICpzYV9ibywKKwkJCQkJCSAgIHNpemUsIGFsaWduKSkgeworCQkJ CXNwaW5fdW5sb2NrKCZzYV9tYW5hZ2VyLT5sb2NrKTsKKwkJCQlyZXR1cm4gMDsKIAkJCX0KLQkJ fQogCi0JCS8qIHJvb20gYmVmb3JlIHRoaXMgb2JqZWN0ID8gKi8KLQkJaWYgKG9mZnNldCA8IHRt cC0+c29mZnNldCAmJiAodG1wLT5zb2Zmc2V0IC0gb2Zmc2V0KSA+PSBzaXplKSB7Ci0JCQloZWFk ID0gdG1wLT5saXN0LnByZXY7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlvZmZzZXQgPSB0bXAtPmVv ZmZzZXQ7Ci0JCXdhc3RlZCA9IG9mZnNldCAlIGFsaWduOwotCQlpZiAod2FzdGVkKSB7Ci0JCQl3 YXN0ZWQgPSBhbGlnbiAtIHdhc3RlZDsKKwkJCS8qIHNlZSBpZiB3ZSBjYW4gc2tpcCBvdmVyIHNv bWUgYWxsb2NhdGlvbnMgKi8KKwkJCXJhZGVvbl9zYV9ib19uZXh0X2hvbGUoc2FfbWFuYWdlcik7 CiAJCX0KLQkJb2Zmc2V0ICs9IHdhc3RlZDsKLQl9Ci0JLyogcm9vbSBhdCB0aGUgZW5kID8gKi8K LQloZWFkID0gc2FfbWFuYWdlci0+c2FfYm8ucHJldjsKLQl0bXAgPSBsaXN0X2VudHJ5KGhlYWQs IHN0cnVjdCByYWRlb25fc2FfYm8sIGxpc3QpOwotCW9mZnNldCA9IHRtcC0+ZW9mZnNldDsKLQl3 YXN0ZWQgPSBvZmZzZXQgJSBhbGlnbjsKLQlpZiAod2FzdGVkKSB7Ci0JCXdhc3RlZCA9IGFsaWdu IC0gd2FzdGVkOwotCX0KLQlvZmZzZXQgKz0gd2FzdGVkOwotCWlmICgoc2FfbWFuYWdlci0+c2l6 ZSAtIG9mZnNldCkgPCBzaXplKSB7Ci0JCS8qIGZhaWxlZCB0byBmaW5kIHNvbWV0aGluZ3MgYmln IGVub3VnaCAqLwotCQlzcGluX3VubG9jaygmc2FfbWFuYWdlci0+bG9jayk7Ci0JCWlmIChibG9j ayAmJiBmZW5jZSkgewotCQkJciA9IHJhZGVvbl9mZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7Ci0J CQlpZiAocikKLQkJCQlyZXR1cm4gcjsKLQotCQkJZ290byByZXRyeTsKKworCQlpZiAoYmxvY2sp IHsKKwkJCXIgPSByYWRlb25fc2FfYm9fYmxvY2socmRldiwgc2FfbWFuYWdlcik7CisJCQlpZiAo cikgeworCQkJCWdvdG8gb3V0X2VycjsKKwkJCX0KIAkJfQotCQlrZnJlZSgqc2FfYm8pOwotCQkq c2FfYm8gPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJfSB3aGlsZSAoYmxvY2spOwog Ci1vdXQ6Ci0JKCpzYV9ibyktPm1hbmFnZXIgPSBzYV9tYW5hZ2VyOwotCSgqc2FfYm8pLT5zb2Zm c2V0ID0gb2Zmc2V0OwotCSgqc2FfYm8pLT5lb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZTsKLQlsaXN0 X2FkZCgmKCpzYV9ibyktPmxpc3QsIGhlYWQpOworb3V0X2VycjoKIAlzcGluX3VubG9jaygmc2Ff bWFuYWdlci0+bG9jayk7Ci0JcmV0dXJuIDA7CisJa2ZyZWUoKnNhX2JvKTsKKwkqc2FfYm8gPSBO VUxMOworCXJldHVybiByOwogfQogCiB2b2lkIHJhZGVvbl9zYV9ib19mcmVlKHN0cnVjdCByYWRl b25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvICoqc2FfYm8sCkBAIC0yMjYsMTMg KzM0NiwxNiBAQCB2b2lkIHJhZGVvbl9zYV9ib19mcmVlKHN0cnVjdCByYWRlb25fZGV2aWNlICpy ZGV2LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvICoqc2FfYm8sCiB7CiAJc3RydWN0IHJhZGVvbl9zYV9t YW5hZ2VyICpzYV9tYW5hZ2VyOwogCi0JaWYgKCFzYV9ibyB8fCAhKnNhX2JvKQorCWlmIChzYV9i byA9PSBOVUxMIHx8ICpzYV9ibyA9PSBOVUxMKSB7CiAJCXJldHVybjsKKwl9CiAKIAlzYV9tYW5h Z2VyID0gKCpzYV9ibyktPm1hbmFnZXI7CiAJc3Bpbl9sb2NrKCZzYV9tYW5hZ2VyLT5sb2NrKTsK IAlpZiAoZmVuY2UgJiYgZmVuY2UtPnNlcSAmJiBmZW5jZS0+c2VxIDwgUkFERU9OX0ZFTkNFX05P VEVNSVRFRF9TRVEpIHsKIAkJKCpzYV9ibyktPmZlbmNlID0gcmFkZW9uX2ZlbmNlX3JlZihmZW5j ZSk7CisJCWxpc3RfYWRkX3RhaWwoJigqc2FfYm8pLT5mbGlzdCwKKwkJCSAgICAgICZzYV9tYW5h Z2VyLT5mbGlzdFtmZW5jZS0+cmluZ10pOwogCX0gZWxzZSB7CiAJCXJhZGVvbl9zYV9ib19yZW1v dmVfbG9ja2VkKCpzYV9ibyk7CiAJfQpAQCAtMjQ3LDE1ICszNzAsMTggQEAgdm9pZCByYWRlb25f c2FfYm9fZHVtcF9kZWJ1Z19pbmZvKHN0cnVjdCByYWRlb25fc2FfbWFuYWdlciAqc2FfbWFuYWdl ciwKIAlzdHJ1Y3QgcmFkZW9uX3NhX2JvICppOwogCiAJc3Bpbl9sb2NrKCZzYV9tYW5hZ2VyLT5s b2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGksICZzYV9tYW5hZ2VyLT5zYV9ibywgbGlzdCkg ewotCQlzZXFfcHJpbnRmKG0sICJbJTA4eCAlMDh4XSBzaXplICU0ZCAoJXApIiwKLQkJCSAgIGkt PnNvZmZzZXQsIGktPmVvZmZzZXQsIGktPmVvZmZzZXQgLSBpLT5zb2Zmc2V0LCBpKTsKLQkJaWYg KGktPmZlbmNlKSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIgcHJvdGVjdGVkIGJ5ICVMZCAoJXApXG4i LAotCQkJCSAgIGktPmZlbmNlLT5zZXEsIGktPmZlbmNlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGksICZzYV9tYW5hZ2VyLT5vbGlzdCwgb2xpc3QpIHsKKwkJaWYgKGkgPT0gc2FfbWFuYWdlci0+ bGFzdCkgeworCQkJc2VxX3ByaW50ZihtLCAiPiIpOwogCQl9IGVsc2UgewotCQkJc2VxX3ByaW50 ZihtLCAiXG4iKTsKKwkJCXNlcV9wcmludGYobSwgIiAiKTsKKwkJfQorCQlzZXFfcHJpbnRmKG0s ICJbMHglMDh4IDB4JTA4eF0gc2l6ZSAlOGQiLAorCQkJICAgaS0+c29mZnNldCwgaS0+ZW9mZnNl dCwgaS0+ZW9mZnNldCAtIGktPnNvZmZzZXQpOworCQlpZiAoaS0+ZmVuY2UpIHsKKwkJCXNlcV9w cmludGYobSwgIiBwcm90ZWN0ZWQgYnkgMHglMDE2bGx4IiwgaS0+ZmVuY2UtPnNlcSk7CiAJCX0K KwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2soJnNhX21hbmFnZXItPmxv Y2spOwogfQotLSAKMS43LjcuNgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK