From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 09/26] drm/radeon: add biggest hole tracking and wakequeue to the sa v3 Date: Wed, 25 Apr 2012 14:46:26 +0200 Message-ID: <1335358003-2987-10-git-send-email-deathsimple@vodafone.de> References: <1335358003-2987-1-git-send-email-deathsimple@vodafone.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from outgoing.email.vodafone.de (outgoing.email.vodafone.de [139.7.28.128]) by gabe.freedesktop.org (Postfix) with ESMTP id 497CBA0CE4 for ; Wed, 25 Apr 2012 05:46:52 -0700 (PDT) In-Reply-To: <1335358003-2987-1-git-send-email-deathsimple@vodafone.de> 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?= List-Id: dri-devel@lists.freedesktop.org V2l0aCB0aGF0IGluIHBsYWNlIGNsaWVudHMgYXJlIGF1dG9tYXRpY2FsbHkgYmxvY2tpbmcKdW50 aWwgdGhlaXIgbWVtb3J5IHJlcXVlc3QgY2FuIGJlIGhhbmRsZWQuCgp2MjogYmxvY2sgb25seSBp ZiB0aGUgbWVtb3J5IHJlcXVlc3QgY2FuJ3QgYmUgc2F0aXNmaWVkCiAgICBpbiB0aGUgZmlyc3Qg dHJ5LCB0aGUgZmlyc3QgdmVyc2lvbiBhY3R1YWxseSBsYWNrZWQKICAgIGEgbmlnaHQgb2Ygc2xl ZXAuCgp2MzogbWFrZSBibG9ja2luZyBvcHRpb25hbCwgdXBkYXRlIGNvbW1lbnRzIGFuZCBmaXgK ICAgIGFub3RoZXIgYnVnIHdpdGggYmlnZ2VzdCBob2xlIHRyYWNraW5nLgoKU2lnbmVkLW9mZi1i eTogQ2hyaXN0aWFuIEvDtm5pZyA8ZGVhdGhzaW1wbGVAdm9kYWZvbmUuZGU+Ci0tLQogZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCAgICAgICAgfCAgICA1ICstCiBkcml2ZXJzL2dwdS9k cm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9yYWRl b24vcmFkZW9uX29iamVjdC5oIHwgICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRl b25fcmluZy5jICAgfCAgIDIwICsrLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Nh LmMgICAgIHwgIDIxMSArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogNSBmaWxlcyBj aGFuZ2VkLCAxNjUgaW5zZXJ0aW9ucygrKSwgNzUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24v cmFkZW9uLmgKaW5kZXggOTliMTg4YS4uZTcxZGM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5o CkBAIC0zODEsMTcgKzM4MSwxNiBAQCBzdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgewogICogYWxpZ25t ZW50KS4KICAqLwogc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyIHsKLQlzcGlubG9ja190CQlsb2Nr OworCXdhaXRfcXVldWVfaGVhZF90CXF1ZXVlOwogCXN0cnVjdCByYWRlb25fYm8JKmJvOwogCXN0 cnVjdCBsaXN0X2hlYWQJc2FfYm87CiAJdW5zaWduZWQJCXNpemU7CisJc3RydWN0IGxpc3RfaGVh ZAkqYmlnZ2VzdF9ob2xlOwogCXVpbnQ2NF90CQlncHVfYWRkcjsKIAl2b2lkCQkJKmNwdV9wdHI7 CiAJdWludDMyX3QJCWRvbWFpbjsKIH07CiAKLXN0cnVjdCByYWRlb25fc2FfYm87Ci0KIC8qIHN1 Yi1hbGxvY2F0aW9uIGJ1ZmZlciAqLwogc3RydWN0IHJhZGVvbl9zYV9ibyB7CiAJc3RydWN0IGxp c3RfaGVhZAkJbGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9u X2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCBjNThh MDM2Li43YWY0ZmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9n YXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC0zOTUs NyArMzk1LDcgQEAgaW50IHJhZGVvbl92bV9iaW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2 LCBzdHJ1Y3QgcmFkZW9uX3ZtICp2bSkKIHJldHJ5OgogCXIgPSByYWRlb25fc2FfYm9fbmV3KHJk ZXYsICZyZGV2LT52bV9tYW5hZ2VyLnNhX21hbmFnZXIsICZ2bS0+c2FfYm8sCiAJCQkgICAgIFJB REVPTl9HUFVfUEFHRV9BTElHTih2bS0+bGFzdF9wZm4gKiA4KSwKLQkJCSAgICAgUkFERU9OX0dQ VV9QQUdFX1NJWkUpOworCQkJICAgICBSQURFT05fR1BVX1BBR0VfU0laRSwgZmFsc2UpOwogCWlm IChyKSB7CiAJCWlmIChsaXN0X2VtcHR5KCZyZGV2LT52bV9tYW5hZ2VyLmxydV92bSkpIHsKIAkJ CXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fb2Jq ZWN0LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaAppbmRleCBkOWI5 MzMzLi44NWYzM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9v YmplY3QuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaApAQCAt MTU4LDcgKzE1OCw3IEBAIGV4dGVybiBpbnQgcmFkZW9uX3NhX2JvX21hbmFnZXJfc3VzcGVuZChz dHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIGV4dGVybiBpbnQgcmFkZW9uX3NhX2JvX25ldyhz dHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAgICBzdHJ1Y3QgcmFkZW9uX3NhX21hbmFn ZXIgKnNhX21hbmFnZXIsCiAJCQkgICAgc3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm8sCi0JCQkg ICAgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgYWxpZ24pOworCQkJICAgIHVuc2lnbmVkIHNpemUs IHVuc2lnbmVkIGFsaWduLCBib29sIGJsb2NrKTsKIGV4dGVybiB2b2lkIHJhZGVvbl9zYV9ib19m cmVlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJICAgICAgc3RydWN0IHJhZGVvbl9z YV9ibyAqc2FfYm8pOwogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jIGIvZHJpdmVycy9ncHUvZHJtL3Jh ZGVvbi9yYWRlb25fcmluZy5jCmluZGV4IDFkOWJjZTkuLmNjZWU3NGYgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v cmFkZW9uL3JhZGVvbl9yaW5nLmMKQEAgLTEyNCw3ICsxMjQsNyBAQCByZXRyeToKIAkJaWYgKHJk ZXYtPmliX3Bvb2wuaWJzW2lkeF0uZmVuY2UgPT0gTlVMTCkgewogCQkJciA9IHJhZGVvbl9zYV9i b19uZXcocmRldiwgJnJkZXYtPmliX3Bvb2wuc2FfbWFuYWdlciwKIAkJCQkJICAgICAmcmRldi0+ aWJfcG9vbC5pYnNbaWR4XS5zYV9ibywKLQkJCQkJICAgICBzaXplLCAyNTYpOworCQkJCQkgICAg IHNpemUsIDI1NiwgZmFsc2UpOwogCQkJaWYgKCFyKSB7CiAJCQkJKmliID0gJnJkZXYtPmliX3Bv b2wuaWJzW2lkeF07CiAJCQkJKCppYiktPnB0ciA9IHJkZXYtPmliX3Bvb2wuc2FfbWFuYWdlci5j cHVfcHRyOwpAQCAtMjA1LDEwICsyMDUsMTYgQEAgaW50IHJhZGVvbl9pYl9zY2hlZHVsZShzdHJ1 Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCiAKIGludCByYWRl b25faWJfcG9vbF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXN0cnVjdCBy YWRlb25fc2FfbWFuYWdlciB0bXA7CiAJaW50IGksIHI7CiAKLQlyID0gcmFkZW9uX3NhX2JvX21h bmFnZXJfaW5pdChyZGV2LCAmdG1wLAorCXJhZGVvbl9tdXRleF9sb2NrKCZyZGV2LT5pYl9wb29s Lm11dGV4KTsKKwlpZiAocmRldi0+aWJfcG9vbC5yZWFkeSkgeworCQlyZXR1cm4gMDsKKwl9CisJ cmRldi0+aWJfcG9vbC5yZWFkeSA9IHRydWU7CisJcmFkZW9uX211dGV4X3VubG9jaygmcmRldi0+ aWJfcG9vbC5tdXRleCk7CisKKwlyID0gcmFkZW9uX3NhX2JvX21hbmFnZXJfaW5pdChyZGV2LCAm cmRldi0+aWJfcG9vbC5zYV9tYW5hZ2VyLAogCQkJCSAgICAgIFJBREVPTl9JQl9QT09MX1NJWkUq NjQqMTAyNCwKIAkJCQkgICAgICBSQURFT05fR0VNX0RPTUFJTl9HVFQpOwogCWlmIChyKSB7CkBA IC0yMTYsMTQgKzIyMiw2IEBAIGludCByYWRlb25faWJfcG9vbF9pbml0KHN0cnVjdCByYWRlb25f ZGV2aWNlICpyZGV2KQogCX0KIAogCXJhZGVvbl9tdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11 dGV4KTsKLQlpZiAocmRldi0+aWJfcG9vbC5yZWFkeSkgewotCQlyYWRlb25fbXV0ZXhfdW5sb2Nr KCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQkJcmFkZW9uX3NhX2JvX21hbmFnZXJfZmluaShyZGV2 LCAmdG1wKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmRldi0+aWJfcG9vbC5zYV9tYW5hZ2VyID0g dG1wOwotCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLnNhX21hbmFnZXIuc2FfYm8pOwog CWZvciAoaSA9IDA7IGkgPCBSQURFT05fSUJfUE9PTF9TSVpFOyBpKyspIHsKIAkJcmRldi0+aWJf cG9vbC5pYnNbaV0uZmVuY2UgPSBOVUxMOwogCQlyZGV2LT5pYl9wb29sLmlic1tpXS5pZHggPSBp OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYyBiL2RyaXZl cnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3NhLmMKaW5kZXggMDEzYTc4Ny4uOTJhYjdiNCAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zYS5jCkBAIC0yNiw2ICsyNiw3IEBACiAvKgogICogQXV0 aG9yczoKICAqICAgIEplcm9tZSBHbGlzc2UgPGdsaXNzZUBmcmVlZGVza3RvcC5vcmc+CisgKiAg ICBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CiAgKi8KICNpbmNs dWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCkBAIC0zNyw5ICszOCwxMCBAQCBpbnQgcmFk ZW9uX3NhX2JvX21hbmFnZXJfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIHsKIAlp bnQgcjsKIAotCXNwaW5fbG9ja19pbml0KCZzYV9tYW5hZ2VyLT5sb2NrKTsKKwlpbml0X3dhaXRx dWV1ZV9oZWFkKCZzYV9tYW5hZ2VyLT5xdWV1ZSk7CiAJc2FfbWFuYWdlci0+Ym8gPSBOVUxMOwog CXNhX21hbmFnZXItPnNpemUgPSBzaXplOworCXNhX21hbmFnZXItPmJpZ2dlc3RfaG9sZSA9ICZz YV9tYW5hZ2VyLT5zYV9ibzsKIAlzYV9tYW5hZ2VyLT5kb21haW4gPSBkb21haW47CiAJSU5JVF9M SVNUX0hFQUQoJnNhX21hbmFnZXItPnNhX2JvKTsKIApAQCAtNTgsNiArNjAsNyBAQCB2b2lkIHJh ZGVvbl9zYV9ib19tYW5hZ2VyX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiB7CiAJ c3RydWN0IHJhZGVvbl9zYV9ibyAqc2FfYm8sICp0bXA7CiAKKwl3YWtlX3VwX2FsbCgmc2FfbWFu YWdlci0+cXVldWUpOwogCWlmICghbGlzdF9lbXB0eSgmc2FfbWFuYWdlci0+c2FfYm8pKSB7CiAJ CWRldl9lcnIocmRldi0+ZGV2LCAic2FfbWFuYWdlciBpcyBub3QgZW1wdHksIGNsZWFyaW5nIGFu eXdheVxuIik7CiAJfQpAQCAtMTE0LDk2ICsxMTcsMTg2IEBAIGludCByYWRlb25fc2FfYm9fbWFu YWdlcl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCXJldHVybiByOwogfQog CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHN0cnVjdCBy YWRlb25fc2FfbWFuYWdlciAqbSwKKwkJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5 KQoreworCXN0cnVjdCByYWRlb25fc2FfYm8gKnNhX2JvOworCisJaWYgKGVudHJ5ID09ICZtLT5z YV9ibykKKwkJcmV0dXJuIDA7CisKKwlzYV9ibyA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCBy YWRlb25fc2FfYm8sIGxpc3QpOworCXJldHVybiBzYV9iby0+b2Zmc2V0ICsgc2FfYm8tPnNpemU7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmFkZW9uX3NhX2JvX2hvbGVfZW5kKHN0cnVj dCByYWRlb25fc2FfbWFuYWdlciAqbSwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRy eSkKK3sKKwlpZiAoZW50cnktPm5leHQgPT0gJm0tPnNhX2JvKQorCQlyZXR1cm4gbS0+c2l6ZTsK KworCXJldHVybiBsaXN0X2VudHJ5KGVudHJ5LT5uZXh0LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvLCBs aXN0KS0+b2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJhZGVvbl9zYV9ib19t aW5fZnJlZShzdHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKm0sCisJCQkJCSAgICAgdW5zaWduZWQg YWxpZ24pCit7CisJdW5zaWduZWQgc3RhcnQsIGVuZCwgd2FzdGVkOworCXN0YXJ0ID0gcmFkZW9u X3NhX2JvX2hvbGVfc3RhcnQobSwgbS0+YmlnZ2VzdF9ob2xlKTsKKwl3YXN0ZWQgPSBzdGFydCAl IGFsaWduOworCWlmICh3YXN0ZWQpCisJCXN0YXJ0ICs9IGFsaWduIC0gd2FzdGVkOworCisJZW5k ID0gcmFkZW9uX3NhX2JvX2hvbGVfZW5kKG0sIG0tPmJpZ2dlc3RfaG9sZSk7CisJcmV0dXJuIHN0 YXJ0IDwgZW5kID8gZW5kIC0gc3RhcnQgOiAwOworfQorCiAvKgogICogUHJpbmNpcGUgaXMgc2lt cGxlLCB3ZSBrZWVwIGEgbGlzdCBvZiBzdWIgYWxsb2NhdGlvbiBpbiBvZmZzZXQKICAqIG9yZGVy IChmaXJzdCBlbnRyeSBoYXMgb2Zmc2V0ID09IDAsIGxhc3QgZW50cnkgaGFzIHRoZSBoaWdoZXN0 CiAgKiBvZmZzZXQpLgogICoKLSAqIFdoZW4gYWxsb2NhdGluZyBuZXcgb2JqZWN0IHdlIGZpcnN0 IGNoZWNrIGlmIHRoZXJlIGlzIHJvb20gYXQKLSAqIHRoZSBlbmQgdG90YWxfc2l6ZSAtIChsYXN0 X29iamVjdF9vZmZzZXQgKyBsYXN0X29iamVjdF9zaXplKSA+PQotICogYWxsb2Nfc2l6ZS4gSWYg c28gd2UgYWxsb2NhdGUgbmV3IG9iamVjdCB0aGVyZS4KKyAqIFdoZW4gYWxsb2NhdGluZyBuZXcg b2JqZWN0cyB3ZSBzdGFydCBjaGVja2luZyBhdCB3aGF0J3MgY3VycmVudGx5CisgKiBhc3N1bWVk IHRvIGJlIHRoZSBiaWdnZXN0IGhvbGUsIGlmIHRoYXQncyBub3QgYmlnIGVub3VnaCB3ZSBjb250 aW51ZQorICogc2VhcmNoaW5nIHRoZSBsaXN0IHVudGlsIHdlIGZpbmQgc29tZXRoaW5nIGJpZyBl bm91Z2ggb3IgcmVhY2ggdGhlCisgKiBiaWdnZXN0IGhvbGUgYWdhaW4uIElmIHRoZSBsYXRlciBo YXBwZW4gd2Ugb3B0aW9uYWxseSBibG9jayBmb3IgdGhlCisgKiBiaWdnZXN0IGhvbGUgdG8gaW5j cmVhc2UgaW4gc2l6ZS4KICAqCi0gKiBXaGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBhdCB0 aGUgZW5kLCB3ZSBzdGFydCB3YWl0aW5nIGZvcgotICogZWFjaCBzdWIgb2JqZWN0IHVudGlsIHdl IHJlYWNoIG9iamVjdF9vZmZzZXQrb2JqZWN0X3NpemUgPj0KLSAqIGFsbG9jX3NpemUsIHRoaXMg b2JqZWN0IHRoZW4gYmVjb21lIHRoZSBzdWIgb2JqZWN0IHdlIHJldHVybi4KLSAqCi0gKiBBbGln bm1lbnQgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gcGFnZSBzaXplCiAgKi8KIGludCByYWRlb25fc2Ff Ym9fbmV3KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICAgIHN0cnVjdCByYWRlb25f c2FfbWFuYWdlciAqc2FfbWFuYWdlciwKIAkJICAgICBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9i bywKLQkJICAgICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBhbGlnbikKKwkJICAgICB1bnNpZ25l ZCBzaXplLCB1bnNpZ25lZCBhbGlnbiwgYm9vbCBibG9jaykKIHsKLQlzdHJ1Y3QgcmFkZW9uX3Nh X2JvICp0bXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQl1bnNpZ25lZCBvZmZzZXQgPSAw LCB3YXN0ZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAq aGVhZCwgKmN1cnIsICpob2xlOworCXVuc2lnbmVkIHN0YXJ0LCBjdXJyc2l6ZSwgd2FzdGVkLCBo b2xlc2l6ZTsKKwlpbnQgcjsKIAogCUJVR19PTihhbGlnbiA+IFJBREVPTl9HUFVfUEFHRV9TSVpF KTsKIAlCVUdfT04oc2l6ZSA+IHNhX21hbmFnZXItPnNpemUpOwotCXNwaW5fbG9ja19pcnFzYXZl KCZzYV9tYW5hZ2VyLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBubyBvbmUgPyAqLwotCWlmIChsaXN0 X2VtcHR5KCZzYV9tYW5hZ2VyLT5zYV9ibykpIHsKLQkJaGVhZCA9ICZzYV9tYW5hZ2VyLT5zYV9i bzsKLQkJZ290byBvdXQ7Ci0JfQorCXNwaW5fbG9ja19pcnEoJnNhX21hbmFnZXItPnF1ZXVlLmxv Y2spOworCisJZG8geworCQljdXJyID0gaGVhZCA9IGhvbGUgPSBzYV9tYW5hZ2VyLT5iaWdnZXN0 X2hvbGU7CisJCWhvbGVzaXplID0gcmFkZW9uX3NhX2JvX21pbl9mcmVlKHNhX21hbmFnZXIsIDEp OworCQlkbyB7CisJCQlzdGFydCA9IHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHNhX21hbmFnZXIs IGN1cnIpOworCQkJY3VycnNpemUgPSByYWRlb25fc2FfYm9faG9sZV9lbmQoc2FfbWFuYWdlciwg Y3VycikgLSBzdGFydDsKKworCQkJd2FzdGVkID0gc3RhcnQgJSBhbGlnbjsKKwkJCWlmICh3YXN0 ZWQpIHsKKwkJCQl3YXN0ZWQgPSBhbGlnbiAtIHdhc3RlZDsKKwkJCX0KIAotCS8qIGxvb2sgZm9y IGEgaG9sZSBiaWcgZW5vdWdoICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZzYV9tYW5h Z2VyLT5zYV9ibywgbGlzdCkgewotCQkvKiByb29tIGJlZm9yZSB0aGlzIG9iamVjdCA/ICovCi0J CWlmIChvZmZzZXQgPCB0bXAtPm9mZnNldCAmJiAodG1wLT5vZmZzZXQgLSBvZmZzZXQpID49IHNp emUpIHsKLQkJCWhlYWQgPSB0bXAtPmxpc3QucHJldjsKLQkJCWdvdG8gb3V0OworCQkJLyogcm9v bSBhZnRlciBjdXJyZW50IGJpZyBlbm91Z2ggPyAqLworCQkJaWYgKGN1cnJzaXplID49IChzaXpl ICsgd2FzdGVkKSkgeworCQkJCXNhX2JvLT5tYW5hZ2VyID0gc2FfbWFuYWdlcjsKKwkJCQlzYV9i by0+b2Zmc2V0ID0gc3RhcnQgKyB3YXN0ZWQ7CisJCQkJc2FfYm8tPnNpemUgPSBzaXplOworCQkJ CWxpc3RfYWRkKCZzYV9iby0+bGlzdCwgY3Vycik7CisJCQkKKwkJCQkvKiBjb25zaWRlciB0aGUg c3BhY2UgbGVmdCBhZnRlciB0aGUgbmV3bHkKKwkJCQkgICBhZGRlZCBzYV9ibyBhcyB0aGUgYmln Z2VzdCBob2xlICovCisJCQkJY3VycnNpemUgLT0gKHNpemUgKyB3YXN0ZWQpOworCQkJCWlmICho b2xlID09IHNhX2JvLT5saXN0LnByZXYgfHwgaG9sZXNpemUgPCBjdXJyc2l6ZSkgeworCQkJCQlo b2xlID0gJnNhX2JvLT5saXN0OworCQkJCX0KKworCQkJCWlmIChzYV9tYW5hZ2VyLT5iaWdnZXN0 X2hvbGUgIT0gaG9sZSkgeworCQkJCQlzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgPSBob2xlOwor CQkJCQl3YWtlX3VwX2xvY2tlZCgmc2FfbWFuYWdlci0+cXVldWUpOworCQkJCX0KKwkJCQlzcGlu X3VubG9ja19pcnEoJnNhX21hbmFnZXItPnF1ZXVlLmxvY2spOworCQkJCXJldHVybiAwOworCQkJ fQorCisJCQlpZiAoaG9sZXNpemUgPCBjdXJyc2l6ZSkgeworCQkJCWhvbGUgPSBjdXJyOworCQkJ CWhvbGVzaXplID0gY3VycnNpemU7CisJCQl9CisKKwkJCWN1cnIgPSBjdXJyLT5uZXh0OworCQl9 IHdoaWxlIChjdXJyICE9IGhlYWQpOworCisJCWlmIChzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUg IT0gaG9sZSkgeworCQkJc2FfbWFuYWdlci0+YmlnZ2VzdF9ob2xlID0gaG9sZTsKIAkJfQotCQlv ZmZzZXQgPSB0bXAtPm9mZnNldCArIHRtcC0+c2l6ZTsKLQkJd2FzdGVkID0gb2Zmc2V0ICUgYWxp Z247Ci0JCWlmICh3YXN0ZWQpIHsKLQkJCW9mZnNldCArPSBhbGlnbiAtIHdhc3RlZDsKKworCQlp ZiAoYmxvY2spIHsKKwkJCS8qIGZhaWxlZCB0byBmaW5kIHNvbWV0aGluZyBiaWcgZW5vdWdoLCB3 YWl0CisJCQkgICBmb3IgdGhlIGJpZ2dlc3QgaG9sZSB0byBpbmNyZWFzZSBpbiBzaXplICovCisJ CQlyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZF9pcnEoc2FfbWFuYWdlci0+cXVl dWUsCisJCQkJcmFkZW9uX3NhX2JvX21pbl9mcmVlKHNhX21hbmFnZXIsIGFsaWduKSA+PSBzaXpl CisJCQkpOworCQkJaWYgKHIpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnNhX21hbmFnZXItPnF1 ZXVlLmxvY2spOworCQkJCXJldHVybiByOworCQkJfQogCQl9Ci0JfQotCS8qIHJvb20gYXQgdGhl IGVuZCA/ICovCi0JaGVhZCA9IHNhX21hbmFnZXItPnNhX2JvLnByZXY7Ci0JdG1wID0gbGlzdF9l bnRyeShoZWFkLCBzdHJ1Y3QgcmFkZW9uX3NhX2JvLCBsaXN0KTsKLQlvZmZzZXQgPSB0bXAtPm9m ZnNldCArIHRtcC0+c2l6ZTsKLQl3YXN0ZWQgPSBvZmZzZXQgJSBhbGlnbjsKLQlpZiAod2FzdGVk KSB7Ci0JCW9mZnNldCArPSB3YXN0ZWQgPSBhbGlnbiAtIHdhc3RlZDsKLQl9Ci0JaWYgKChzYV9t YW5hZ2VyLT5zaXplIC0gb2Zmc2V0KSA8IHNpemUpIHsKLQkJLyogZmFpbGVkIHRvIGZpbmQgc29t ZXRoaW5ncyBiaWcgZW5vdWdoICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhX21hbmFn ZXItPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCX0gd2hpbGUgKGJsb2Nr KTsKKwlzcGluX3VubG9ja19pcnEoJnNhX21hbmFnZXItPnF1ZXVlLmxvY2spOwogCi1vdXQ6Ci0J c2FfYm8tPm1hbmFnZXIgPSBzYV9tYW5hZ2VyOwotCXNhX2JvLT5vZmZzZXQgPSBvZmZzZXQ7Ci0J c2FfYm8tPnNpemUgPSBzaXplOwotCWxpc3RfYWRkKCZzYV9iby0+bGlzdCwgaGVhZCk7Ci0Jc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmc2FfbWFuYWdlci0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAw OworCXJldHVybiAtRU5PTUVNOwogfQogCiB2b2lkIHJhZGVvbl9zYV9ib19mcmVlKHN0cnVjdCBy YWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibykKIHsKKwlzdHJ1 Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21hbmFnZXIgPSBzYV9iby0+bWFuYWdlcjsKKwl1bnNp Z25lZCBic2l6ZSwgZnNpemU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJx c2F2ZSgmc2FfYm8tPm1hbmFnZXItPmxvY2ssIGZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZl KCZzYV9tYW5hZ2VyLT5xdWV1ZS5sb2NrLCBmbGFncyk7CisJaWYgKCZzYV9iby0+bGlzdCA9PSBz YV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgfHwKKwkgICAgc2FfYm8tPmxpc3QucHJldiA9PSBzYV9t YW5hZ2VyLT5iaWdnZXN0X2hvbGUpIHsKKworCQlzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgPSBz YV9iby0+bGlzdC5wcmV2OworCQl3YWtlX3VwX2xvY2tlZCgmc2FfbWFuYWdlci0+cXVldWUpOwor CX0gZWxzZSB7CisJCWJzaXplID0gcmFkZW9uX3NhX2JvX21pbl9mcmVlKHNhX21hbmFnZXIsIDEp OworCQlmc2l6ZSA9IHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHNhX21hbmFnZXIsIHNhX2JvLT5s aXN0LnByZXYpOworCQlmc2l6ZSA9IHJhZGVvbl9zYV9ib19ob2xlX2VuZChzYV9tYW5hZ2VyLCAm c2FfYm8tPmxpc3QpIC0gZnNpemU7CisJCWlmIChmc2l6ZSA+IGJzaXplKSB7CisJCQlzYV9tYW5h Z2VyLT5iaWdnZXN0X2hvbGUgPSBzYV9iby0+bGlzdC5wcmV2OworCQkJd2FrZV91cF9sb2NrZWQo JnNhX21hbmFnZXItPnF1ZXVlKTsKKwkJfQorCX0KIAlsaXN0X2RlbF9pbml0KCZzYV9iby0+bGlz dCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FfYm8tPm1hbmFnZXItPmxvY2ssIGZsYWdz KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYV9tYW5hZ2VyLT5xdWV1ZS5sb2NrLCBmbGFn cyk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHZvaWQgcmFkZW9uX3NhX2Jv X2R1bXBfZGVidWdfaW5mbyhzdHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21hbmFnZXIsCiAJ CQkJICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7Ci0Jc3RydWN0IHJhZGVvbl9zYV9ibyAqaTsKKwlz dHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqY3VycjsKKwlzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9i bzsKKwl1bnNpZ25lZCBzdGFydCwgZW5kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGlu X2xvY2tfaXJxc2F2ZSgmc2FfbWFuYWdlci0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hf ZW50cnkoaSwgJnNhX21hbmFnZXItPnNhX2JvLCBsaXN0KSB7Ci0JCXNlcV9wcmludGYobSwgIm9m ZnNldCAlMDhkOiBzaXplICU0ZFxuIiwgaS0+b2Zmc2V0LCBpLT5zaXplKTsKLQl9Ci0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmc2FfbWFuYWdlci0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19p cnFzYXZlKCZzYV9tYW5hZ2VyLT5xdWV1ZS5sb2NrLCBmbGFncyk7CisJY3VyciA9IGhlYWQgPSAm c2FfbWFuYWdlci0+c2FfYm87CisJZG8geworCQlpZiAoY3VyciAhPSAmc2FfbWFuYWdlci0+c2Ff Ym8pIHsKKwkJCXNhX2JvID0gbGlzdF9lbnRyeShjdXJyLCBzdHJ1Y3QgcmFkZW9uX3NhX2JvLCBs aXN0KTsKKwkJCXNlcV9wcmludGYobSwgInJlc2VydmF0aW9uICAlcCAlMDhkOiBzaXplICU3ZFxu IiwKKwkJCQkgICBjdXJyLCBzYV9iby0+b2Zmc2V0LCBzYV9iby0+c2l6ZSk7CisJCX0KKworCQlz dGFydCA9IHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHNhX21hbmFnZXIsIGN1cnIpOworCQllbmQg PSByYWRlb25fc2FfYm9faG9sZV9lbmQoc2FfbWFuYWdlciwgY3Vycik7CisJCWlmIChzdGFydCA8 IGVuZCkgeworCQkJc2VxX3ByaW50ZihtLCAiaG9sZSAgICAgICAgICVwICUwOGQ6IHNpemUgJTdk XG4iLAorCQkJCSAgIGN1cnIsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisJCX0KKwkJY3VyciA9IGN1 cnItPm5leHQ7CisJfSB3aGlsZSAoY3VyciAhPSBoZWFkKTsKKworCXN0YXJ0ID0gcmFkZW9uX3Nh X2JvX2hvbGVfc3RhcnQoc2FfbWFuYWdlciwgc2FfbWFuYWdlci0+YmlnZ2VzdF9ob2xlKTsKKwll bmQgPSByYWRlb25fc2FfYm9faG9sZV9lbmQoc2FfbWFuYWdlciwgc2FfbWFuYWdlci0+YmlnZ2Vz dF9ob2xlKTsKKwlzZXFfcHJpbnRmKG0sICJcbmJpZ2dlc3QgaG9sZSAlcCAlMDhkOiBzaXplICU3 ZFxuIiwKKwkJICAgc2FfbWFuYWdlci0+YmlnZ2VzdF9ob2xlLCBzdGFydCwgZW5kIC0gc3RhcnQp OworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FfbWFuYWdlci0+cXVldWUubG9jaywgZmxh Z3MpOwogfQogI2VuZGlmCi0tIAoxLjcuNS40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=