From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Subject: [PATCH 08/13] drm/radeon: add biggest hole tracking and wakequeue to the sa Date: Fri, 20 Apr 2012 00:39:15 +0200 Message-ID: <1334875160-5454-9-git-send-email-deathsimple@vodafone.de> References: <1334875160-5454-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 41F7D9EF44 for ; Thu, 19 Apr 2012 15:39:27 -0700 (PDT) In-Reply-To: <1334875160-5454-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 aWwgdGhlaXIgbWVtb3J5IHJlcXVlc3QgY2FuIGJlIGhhbmRsZWQuCgpTaWduZWQtb2ZmLWJ5OiBD aHJpc3RpYW4gS8O2bmlnIDxkZWF0aHNpbXBsZUB2b2RhZm9uZS5kZT4KLS0tCiBkcml2ZXJzL2dw dS9kcm0vcmFkZW9uL3JhZGVvbi5oICAgICAgfCAgICA1ICstCiBkcml2ZXJzL2dwdS9kcm0vcmFk ZW9uL3JhZGVvbl9yaW5nLmMgfCAgIDE4ICsrLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFk ZW9uX3NhLmMgICB8ICAxOTIgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogMyBm aWxlcyBjaGFuZ2VkLCAxNTMgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9y YWRlb24vcmFkZW9uLmgKaW5kZXggMWFlZmJkOS4uNDE1YTQ5NiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Jh ZGVvbi5oCkBAIC0zODEsMTcgKzM4MSwxNiBAQCBzdHJ1Y3QgcmFkZW9uX2JvX2xpc3QgewogICog YWxpZ25tZW50KS4KICAqLwogc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyIHsKLQlzcGlubG9ja190 CQlsb2NrOworCXdhaXRfcXVldWVfaGVhZF90CXF1ZXVlOwogCXN0cnVjdCByYWRlb25fYm8JKmJv OwogCXN0cnVjdCBsaXN0X2hlYWQJc2FfYm87CiAJdW5zaWduZWQJCXNpemU7CisJc3RydWN0IGxp c3RfaGVhZAkqYmlnZ2VzdF9ob2xlOwogCXVpbnQ2NF90CQlncHVfYWRkcjsKIAl2b2lkCQkJKmNw dV9wdHI7CiAJdWludDMyX3QJCWRvbWFpbjsKIH07CiAKLXN0cnVjdCByYWRlb25fc2FfYm87Ci0K IC8qIHN1Yi1hbGxvY2F0aW9uIGJ1ZmZlciAqLwogc3RydWN0IHJhZGVvbl9zYV9ibyB7CiAJc3Ry dWN0IGxpc3RfaGVhZAkJbGlzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24v cmFkZW9uX3JpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwppbmRl eCAxZDliY2U5Li41OTQyNzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Jh ZGVvbl9yaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCkBA IC0yMDUsMTAgKzIwNSwxNiBAQCBpbnQgcmFkZW9uX2liX3NjaGVkdWxlKHN0cnVjdCByYWRlb25f ZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX2liICppYikKIAogaW50IHJhZGVvbl9pYl9wb29s X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0Jc3RydWN0IHJhZGVvbl9zYV9t YW5hZ2VyIHRtcDsKIAlpbnQgaSwgcjsKIAotCXIgPSByYWRlb25fc2FfYm9fbWFuYWdlcl9pbml0 KHJkZXYsICZ0bXAsCisJcmFkZW9uX211dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwor CWlmIChyZGV2LT5pYl9wb29sLnJlYWR5KSB7CisJCXJldHVybiAwOworCX0KKwlyZGV2LT5pYl9w b29sLnJlYWR5ID0gdHJ1ZTsKKwlyYWRlb25fbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11 dGV4KTsKKworCXIgPSByYWRlb25fc2FfYm9fbWFuYWdlcl9pbml0KHJkZXYsICZyZGV2LT5pYl9w b29sLnNhX21hbmFnZXIsCiAJCQkJICAgICAgUkFERU9OX0lCX1BPT0xfU0laRSo2NCoxMDI0LAog CQkJCSAgICAgIFJBREVPTl9HRU1fRE9NQUlOX0dUVCk7CiAJaWYgKHIpIHsKQEAgLTIxNiwxNCAr MjIyLDYgQEAgaW50IHJhZGVvbl9pYl9wb29sX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJk ZXYpCiAJfQogCiAJcmFkZW9uX211dGV4X2xvY2soJnJkZXYtPmliX3Bvb2wubXV0ZXgpOwotCWlm IChyZGV2LT5pYl9wb29sLnJlYWR5KSB7Ci0JCXJhZGVvbl9tdXRleF91bmxvY2soJnJkZXYtPmli X3Bvb2wubXV0ZXgpOwotCQlyYWRlb25fc2FfYm9fbWFuYWdlcl9maW5pKHJkZXYsICZ0bXApOwot CQlyZXR1cm4gMDsKLQl9Ci0KLQlyZGV2LT5pYl9wb29sLnNhX21hbmFnZXIgPSB0bXA7Ci0JSU5J VF9MSVNUX0hFQUQoJnJkZXYtPmliX3Bvb2wuc2FfbWFuYWdlci5zYV9ibyk7CiAJZm9yIChpID0g MDsgaSA8IFJBREVPTl9JQl9QT09MX1NJWkU7IGkrKykgewogCQlyZGV2LT5pYl9wb29sLmlic1tp XS5mZW5jZSA9IE5VTEw7CiAJCXJkZXYtPmliX3Bvb2wuaWJzW2ldLmlkeCA9IGk7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zYS5jIGIvZHJpdmVycy9ncHUvZHJt L3JhZGVvbi9yYWRlb25fc2EuYwppbmRleCAwMTNhNzg3Li43MmViYjc3IDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9y YWRlb24vcmFkZW9uX3NhLmMKQEAgLTI2LDYgKzI2LDcgQEAKIC8qCiAgKiBBdXRob3JzOgogICog ICAgSmVyb21lIEdsaXNzZSA8Z2xpc3NlQGZyZWVkZXNrdG9wLm9yZz4KKyAqICAgIENocmlzdGlh biBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KICAqLwogI2luY2x1ZGUgImRybVAu aCIKICNpbmNsdWRlICJkcm0uaCIKQEAgLTM3LDkgKzM4LDEwIEBAIGludCByYWRlb25fc2FfYm9f bWFuYWdlcl9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogewogCWludCByOwogCi0J c3Bpbl9sb2NrX2luaXQoJnNhX21hbmFnZXItPmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQo JnNhX21hbmFnZXItPnF1ZXVlKTsKIAlzYV9tYW5hZ2VyLT5ibyA9IE5VTEw7CiAJc2FfbWFuYWdl ci0+c2l6ZSA9IHNpemU7CisJc2FfbWFuYWdlci0+YmlnZ2VzdF9ob2xlID0gJnNhX21hbmFnZXIt PnNhX2JvOwogCXNhX21hbmFnZXItPmRvbWFpbiA9IGRvbWFpbjsKIAlJTklUX0xJU1RfSEVBRCgm c2FfbWFuYWdlci0+c2FfYm8pOwogCkBAIC01OCw2ICs2MCw3IEBAIHZvaWQgcmFkZW9uX3NhX2Jv X21hbmFnZXJfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIHsKIAlzdHJ1Y3QgcmFk ZW9uX3NhX2JvICpzYV9ibywgKnRtcDsKIAorCXdha2VfdXBfYWxsKCZzYV9tYW5hZ2VyLT5xdWV1 ZSk7CiAJaWYgKCFsaXN0X2VtcHR5KCZzYV9tYW5hZ2VyLT5zYV9ibykpIHsKIAkJZGV2X2Vycihy ZGV2LT5kZXYsICJzYV9tYW5hZ2VyIGlzIG5vdCBlbXB0eSwgY2xlYXJpbmcgYW55d2F5XG4iKTsK IAl9CkBAIC0xMjksODEgKzEzMiwxNzIgQEAgaW50IHJhZGVvbl9zYV9ib19tYW5hZ2VyX3N1c3Bl bmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAgKgogICogQWxpZ25tZW50IGNhbid0IGJl IGJpZ2dlciB0aGFuIHBhZ2Ugc2l6ZQogICovCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgcmFk ZW9uX3NhX2JvX2hvbGVfc3RhcnQoc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyICptLAorCQkJCQkg ICAgICAgc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJc3RydWN0IHJhZGVvbl9zYV9ibyAq c2FfYm87CisKKwlpZiAoZW50cnkgPT0gJm0tPnNhX2JvKQorCQlyZXR1cm4gMDsKKworCXNhX2Jv ID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHJhZGVvbl9zYV9ibywgbGlzdCk7CisJcmV0dXJu IHNhX2JvLT5vZmZzZXQgKyBzYV9iby0+c2l6ZTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25l ZCByYWRlb25fc2FfYm9faG9sZV9lbmQoc3RydWN0IHJhZGVvbl9zYV9tYW5hZ2VyICptLAorCQkJ CQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCWlmIChlbnRyeS0+bmV4dCA9PSAm bS0+c2FfYm8pCisJCXJldHVybiBtLT5zaXplOworCisJcmV0dXJuIGxpc3RfZW50cnkoZW50cnkt Pm5leHQsIHN0cnVjdCByYWRlb25fc2FfYm8sIGxpc3QpLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBp bmxpbmUgdW5zaWduZWQgcmFkZW9uX3NhX2JvX2hvbGVfc2l6ZShzdHJ1Y3QgcmFkZW9uX3NhX21h bmFnZXIgKm0sCisJCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LAorCQkJCQkgICAg ICB1bnNpZ25lZCBhbGlnbikKK3sKKwl1bnNpZ25lZCBzdGFydCwgZW5kLCB3YXN0ZWQ7CisJc3Rh cnQgPSByYWRlb25fc2FfYm9faG9sZV9zdGFydChtLCBtLT5iaWdnZXN0X2hvbGUpOworCXdhc3Rl ZCA9IHN0YXJ0ICUgYWxpZ247CisJaWYgKHdhc3RlZCkKKwkJc3RhcnQgKz0gYWxpZ24gLSB3YXN0 ZWQ7CisKKwllbmQgPSByYWRlb25fc2FfYm9faG9sZV9lbmQobSwgbS0+YmlnZ2VzdF9ob2xlKTsK KwlyZXR1cm4gc3RhcnQgPCBlbmQgPyBlbmQgLSBzdGFydCA6IDA7Cit9CisKIGludCByYWRlb25f c2FfYm9fbmV3KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICAgIHN0cnVjdCByYWRl b25fc2FfbWFuYWdlciAqc2FfbWFuYWdlciwKIAkJICAgICBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpz YV9ibywKIAkJICAgICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBhbGlnbikKIHsKLQlzdHJ1Y3Qg cmFkZW9uX3NhX2JvICp0bXA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQl1bnNpZ25lZCBv ZmZzZXQgPSAwLCB3YXN0ZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxp c3RfaGVhZCAqaGVhZCwgKmN1cnIsICpob2xlOworCXVuc2lnbmVkIHN0YXJ0LCBjdXJyc2l6ZSwg d2FzdGVkLCBob2xlc2l6ZSA9IDA7CisJaW50IHI7CiAKIAlCVUdfT04oYWxpZ24gPiBSQURFT05f R1BVX1BBR0VfU0laRSk7CiAJQlVHX09OKHNpemUgPiBzYV9tYW5hZ2VyLT5zaXplKTsKLQlzcGlu X2xvY2tfaXJxc2F2ZSgmc2FfbWFuYWdlci0+bG9jaywgZmxhZ3MpOwogCi0JLyogbm8gb25lID8g Ki8KLQlpZiAobGlzdF9lbXB0eSgmc2FfbWFuYWdlci0+c2FfYm8pKSB7Ci0JCWhlYWQgPSAmc2Ff bWFuYWdlci0+c2FfYm87Ci0JCWdvdG8gb3V0OworCXNwaW5fbG9ja19pcnEoJnNhX21hbmFnZXIt PnF1ZXVlLmxvY2spOworCisJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV9sb2NrZWRfaXJx KHNhX21hbmFnZXItPnF1ZXVlLAorCQlyYWRlb25fc2FfYm9faG9sZV9zaXplKHNhX21hbmFnZXIs IHNhX21hbmFnZXItPmJpZ2dlc3RfaG9sZSwgYWxpZ24pID49IHNpemUKKwkpOworCWlmIChyKSB7 CisJCXNwaW5fdW5sb2NrKCZzYV9tYW5hZ2VyLT5xdWV1ZS5sb2NrKTsKKwkJcmV0dXJuIHI7CiAJ fQogCi0JLyogbG9vayBmb3IgYSBob2xlIGJpZyBlbm91Z2ggKi8KLQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHRtcCwgJnNhX21hbmFnZXItPnNhX2JvLCBsaXN0KSB7Ci0JCS8qIHJvb20gYmVmb3JlIHRo aXMgb2JqZWN0ID8gKi8KLQkJaWYgKG9mZnNldCA8IHRtcC0+b2Zmc2V0ICYmICh0bXAtPm9mZnNl dCAtIG9mZnNldCkgPj0gc2l6ZSkgewotCQkJaGVhZCA9IHRtcC0+bGlzdC5wcmV2OwotCQkJZ290 byBvdXQ7Ci0JCX0KLQkJb2Zmc2V0ID0gdG1wLT5vZmZzZXQgKyB0bXAtPnNpemU7Ci0JCXdhc3Rl ZCA9IG9mZnNldCAlIGFsaWduOworCWN1cnIgPSBoZWFkID0gaG9sZSA9ICZzYV9tYW5hZ2VyLT5z YV9ibzsKKwlkbyB7CisJCXN0YXJ0ID0gcmFkZW9uX3NhX2JvX2hvbGVfc3RhcnQoc2FfbWFuYWdl ciwgY3Vycik7CisJCWN1cnJzaXplID0gcmFkZW9uX3NhX2JvX2hvbGVfZW5kKHNhX21hbmFnZXIs IGN1cnIpIC0gc3RhcnQ7CisKKwkJd2FzdGVkID0gc3RhcnQgJSBhbGlnbjsKIAkJaWYgKHdhc3Rl ZCkgewotCQkJb2Zmc2V0ICs9IGFsaWduIC0gd2FzdGVkOworCQkJd2FzdGVkID0gYWxpZ24gLSB3 YXN0ZWQ7CisJCQlzdGFydCArPSB3YXN0ZWQ7CisJCX0KKworCQkvKiByb29tIGFmdGVyIGN1cnJl bnQgYmlnIGVub3VnaCA/ICovCisJCWlmIChjdXJyc2l6ZSA+PSAoc2l6ZSArIHdhc3RlZCkpIHsK KwkJCXNhX2JvLT5tYW5hZ2VyID0gc2FfbWFuYWdlcjsKKwkJCXNhX2JvLT5vZmZzZXQgPSBzdGFy dDsKKwkJCXNhX2JvLT5zaXplID0gc2l6ZTsKKwkJCWxpc3RfYWRkKCZzYV9iby0+bGlzdCwgY3Vy cik7CisJCQkKKwkJCS8qIGRpZCB3ZSBib3Jyb3dlZCBmcm9tIHRoZSBiaWdnZXN0IGhvbGUgPyAq LworCQkJaWYgKGN1cnIgPT0gc2FfbWFuYWdlci0+YmlnZ2VzdF9ob2xlKSB7CisKKwkJCQkvKiBj b25zaWRlciB0aGUgc3BhY2UgbGVmdCBhZnRlciB0aGUgbmV3bHkgYWRkZWQgc2FfYm8gKi8KKwkJ CQljdXJyID0gY3Vyci0+bmV4dDsKKwkJCQljdXJyc2l6ZSAtPSBzaXplOworCQkJCWlmIChob2xl c2l6ZSA8IGN1cnJzaXplKSB7CisJCQkJCWhvbGUgPSBjdXJyOworCQkJCQlob2xlc2l6ZSA9IGN1 cnJzaXplOworCQkJCX0KKwkJCQljdXJyID0gY3Vyci0+bmV4dDsKKworCQkJCXdoaWxlIChjdXJy ICE9IGhlYWQpIHsKKwkJCQkJY3VycnNpemUgPSByYWRlb25fc2FfYm9faG9sZV9lbmQoc2FfbWFu YWdlciwgY3Vycik7CisJCQkJCWN1cnJzaXplIC09IHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHNh X21hbmFnZXIsIGN1cnIpOworCQkJCQlpZiAoaG9sZXNpemUgPCBjdXJyc2l6ZSkgeworCQkJCQkJ aG9sZSA9IGN1cnI7CisJCQkJCQlob2xlc2l6ZSA9IGN1cnJzaXplOworCQkJCQl9CisJCQkJCWN1 cnIgPSBjdXJyLT5uZXh0OworCQkJCX0KKwkJCQlzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgPSBo b2xlOworCQkJCXdha2VfdXBfbG9ja2VkKCZzYV9tYW5hZ2VyLT5xdWV1ZSk7CisJCQl9CisKKwkJ CXNwaW5fdW5sb2NrX2lycSgmc2FfbWFuYWdlci0+cXVldWUubG9jayk7CisJCQlyZXR1cm4gMDsK KwkJfQorCisJCWlmIChob2xlc2l6ZSA8IGN1cnJzaXplKSB7CisJCQlob2xlID0gY3VycjsKKwkJ CWhvbGVzaXplID0gY3VycnNpemU7CiAJCX0KLQl9Ci0JLyogcm9vbSBhdCB0aGUgZW5kID8gKi8K LQloZWFkID0gc2FfbWFuYWdlci0+c2FfYm8ucHJldjsKLQl0bXAgPSBsaXN0X2VudHJ5KGhlYWQs IHN0cnVjdCByYWRlb25fc2FfYm8sIGxpc3QpOwotCW9mZnNldCA9IHRtcC0+b2Zmc2V0ICsgdG1w LT5zaXplOwotCXdhc3RlZCA9IG9mZnNldCAlIGFsaWduOwotCWlmICh3YXN0ZWQpIHsKLQkJb2Zm c2V0ICs9IHdhc3RlZCA9IGFsaWduIC0gd2FzdGVkOwotCX0KLQlpZiAoKHNhX21hbmFnZXItPnNp emUgLSBvZmZzZXQpIDwgc2l6ZSkgewotCQkvKiBmYWlsZWQgdG8gZmluZCBzb21ldGhpbmdzIGJp ZyBlbm91Z2ggKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FfbWFuYWdlci0+bG9jaywg ZmxhZ3MpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLW91dDoKLQlzYV9iby0+bWFuYWdlciA9 IHNhX21hbmFnZXI7Ci0Jc2FfYm8tPm9mZnNldCA9IG9mZnNldDsKLQlzYV9iby0+c2l6ZSA9IHNp emU7Ci0JbGlzdF9hZGQoJnNhX2JvLT5saXN0LCBoZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZzYV9tYW5hZ2VyLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CisJCWN1cnIgPSBjdXJy LT5uZXh0OworCX0gd2hpbGUgKGN1cnIgIT0gaGVhZCk7CisKKwkvKiBmYWlsZWQgdG8gZmluZCBz b21ldGhpbmdzIGJpZyBlbm91Z2ggKi8KKwlzcGluX3VubG9ja19pcnEoJnNhX21hbmFnZXItPnF1 ZXVlLmxvY2spOworCXJldHVybiAtRU5PTUVNOwogfQogCiB2b2lkIHJhZGVvbl9zYV9ib19mcmVl KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibykK IHsKKwlzdHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKnNhX21hbmFnZXIgPSBzYV9iby0+bWFuYWdl cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzYV9iby0+bWFu YWdlci0+bG9jaywgZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhX21hbmFnZXItPnF1 ZXVlLmxvY2ssIGZsYWdzKTsKKwlpZiAoJnNhX2JvLT5saXN0ID09IHNhX21hbmFnZXItPmJpZ2dl c3RfaG9sZSB8fAorCSAgICBzYV9iby0+bGlzdC5wcmV2ID09IHNhX21hbmFnZXItPmJpZ2dlc3Rf aG9sZSkgeworCisJCXNhX21hbmFnZXItPmJpZ2dlc3RfaG9sZSA9IHNhX2JvLT5saXN0LnByZXY7 CisJCXdha2VfdXBfbG9ja2VkKCZzYV9tYW5hZ2VyLT5xdWV1ZSk7CisJfQogCWxpc3RfZGVsX2lu aXQoJnNhX2JvLT5saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYV9iby0+bWFuYWdl ci0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhX21hbmFnZXItPnF1 ZXVlLmxvY2ssIGZsYWdzKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQogdm9p ZCByYWRlb25fc2FfYm9fZHVtcF9kZWJ1Z19pbmZvKHN0cnVjdCByYWRlb25fc2FfbWFuYWdlciAq c2FfbWFuYWdlciwKIAkJCQkgIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzdHJ1Y3QgcmFkZW9u X3NhX2JvICppOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsICpjdXJyOworCXN0cnVjdCByYWRl b25fc2FfYm8gKnNhX2JvOworCXVuc2lnbmVkIHN0YXJ0LCBlbmQ7CiAJdW5zaWduZWQgbG9uZyBm bGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzYV9tYW5hZ2VyLT5sb2NrLCBmbGFncyk7Ci0J bGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmc2FfbWFuYWdlci0+c2FfYm8sIGxpc3QpIHsKLQkJc2Vx X3ByaW50ZihtLCAib2Zmc2V0ICUwOGQ6IHNpemUgJTRkXG4iLCBpLT5vZmZzZXQsIGktPnNpemUp OwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYV9tYW5hZ2VyLT5sb2NrLCBmbGFncyk7 CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNhX21hbmFnZXItPnF1ZXVlLmxvY2ssIGZsYWdzKTsKKwlj dXJyID0gaGVhZCA9ICZzYV9tYW5hZ2VyLT5zYV9ibzsKKwlkbyB7CisJCWlmIChjdXJyICE9ICZz YV9tYW5hZ2VyLT5zYV9ibykgeworCQkJc2FfYm8gPSBsaXN0X2VudHJ5KGN1cnIsIHN0cnVjdCBy YWRlb25fc2FfYm8sIGxpc3QpOworCQkJc2VxX3ByaW50ZihtLCAicmVzZXJ2YXRpb24gICVwICUw OGQ6IHNpemUgJTdkXG4iLAorCQkJCSAgIGN1cnIsIHNhX2JvLT5vZmZzZXQsIHNhX2JvLT5zaXpl KTsKKwkJfQorCisJCXN0YXJ0ID0gcmFkZW9uX3NhX2JvX2hvbGVfc3RhcnQoc2FfbWFuYWdlciwg Y3Vycik7CisJCWVuZCA9IHJhZGVvbl9zYV9ib19ob2xlX2VuZChzYV9tYW5hZ2VyLCBjdXJyKTsK KwkJaWYgKHN0YXJ0IDwgZW5kKSB7CisJCQlzZXFfcHJpbnRmKG0sICJob2xlICAgICAgICAgJXAg JTA4ZDogc2l6ZSAlN2RcbiIsCisJCQkJICAgY3Vyciwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwkJ fQorCQljdXJyID0gY3Vyci0+bmV4dDsKKwl9IHdoaWxlIChjdXJyICE9IGhlYWQpOworCisJc3Rh cnQgPSByYWRlb25fc2FfYm9faG9sZV9zdGFydChzYV9tYW5hZ2VyLCBzYV9tYW5hZ2VyLT5iaWdn ZXN0X2hvbGUpOworCWVuZCA9IHJhZGVvbl9zYV9ib19ob2xlX2VuZChzYV9tYW5hZ2VyLCBzYV9t YW5hZ2VyLT5iaWdnZXN0X2hvbGUpOworCXNlcV9wcmludGYobSwgIlxuYmlnZ2VzdCBob2xlICVw ICUwOGQ6IHNpemUgJTdkXG4iLAorCQkgICBzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUsIHN0YXJ0 LCBlbmQgLSBzdGFydCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYV9tYW5hZ2VyLT5x dWV1ZS5sb2NrLCBmbGFncyk7CiB9CiAjZW5kaWYKLS0gCjEuNy41LjQKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==