From mboxrd@z Thu Jan 1 00:00:00 1970 From: j.glisse@gmail.com Subject: [PATCH 08/24] drm/radeon: add biggest hole tracking and wakequeue to the sa v4 Date: Wed, 25 Apr 2012 15:03:13 -0400 Message-ID: <1335380609-5804-9-git-send-email-j.glisse@gmail.com> References: <1335380609-5804-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-qc0-f177.google.com (mail-qc0-f177.google.com [209.85.216.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 528079F306 for ; Wed, 25 Apr 2012 12:03:56 -0700 (PDT) Received: by mail-qc0-f177.google.com with SMTP id u28so327267qcs.36 for ; Wed, 25 Apr 2012 12:03:56 -0700 (PDT) In-Reply-To: <1335380609-5804-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?= List-Id: dri-devel@lists.freedesktop.org RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyA8ZGVhdGhzaW1wbGVAdm9kYWZvbmUuZGU+CgpXaXRoIHRo YXQgaW4gcGxhY2UgY2xpZW50cyBhcmUgYXV0b21hdGljYWxseSBibG9ja2luZwp1bnRpbCB0aGVp ciBtZW1vcnkgcmVxdWVzdCBjYW4gYmUgaGFuZGxlZC4KCnYyOiBibG9jayBvbmx5IGlmIHRoZSBt ZW1vcnkgcmVxdWVzdCBjYW4ndCBiZSBzYXRpc2ZpZWQKICAgIGluIHRoZSBmaXJzdCB0cnksIHRo ZSBmaXJzdCB2ZXJzaW9uIGFjdHVhbGx5IGxhY2tlZAogICAgYSBuaWdodCBvZiBzbGVlcC4KCnYz OiBtYWtlIGJsb2NraW5nIG9wdGlvbmFsLCB1cGRhdGUgY29tbWVudHMgYW5kIGZpeAogICAgYW5v dGhlciBidWcgd2l0aCBiaWdnZXN0IGhvbGUgdHJhY2tpbmcuCgp2NDogZHJvcCBkZWJ1Z2ZzIHBv cnRpb24KClNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGRlYXRoc2ltcGxlQHZvZGFm b25lLmRlPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggICAgICAgIHwgICAg NSArLQogZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jICAgfCAgICAyICstCiBk cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuaCB8ICAgIDIgKy0KIGRyaXZlcnMv Z3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYyAgIHwgICAyMCArKy0tCiBkcml2ZXJzL2dwdS9k cm0vcmFkZW9uL3JhZGVvbl9zYS5jICAgICB8ICAxNzggKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgMTM4IGluc2VydGlvbnMoKyksIDY5IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmggYi9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCmluZGV4IDFhZWZiZDkuLjQxNWE0OTYgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9yYWRlb24uaApAQCAtMzgxLDE3ICszODEsMTYgQEAgc3RydWN0IHJhZGVvbl9i b19saXN0IHsKICAqIGFsaWdubWVudCkuCiAgKi8KIHN0cnVjdCByYWRlb25fc2FfbWFuYWdlciB7 Ci0Jc3BpbmxvY2tfdAkJbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlxdWV1ZTsKIAlzdHJ1Y3Qg cmFkZW9uX2JvCSpibzsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNhX2JvOwogCXVuc2lnbmVkCQlzaXpl OworCXN0cnVjdCBsaXN0X2hlYWQJKmJpZ2dlc3RfaG9sZTsKIAl1aW50NjRfdAkJZ3B1X2FkZHI7 CiAJdm9pZAkJCSpjcHVfcHRyOwogCXVpbnQzMl90CQlkb21haW47CiB9OwogCi1zdHJ1Y3QgcmFk ZW9uX3NhX2JvOwotCiAvKiBzdWItYWxsb2NhdGlvbiBidWZmZXIgKi8KIHN0cnVjdCByYWRlb25f c2FfYm8gewogCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVv bl9nYXJ0LmMKaW5kZXggYzU4YTAzNi4uN2FmNGZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFk ZW9uX2dhcnQuYwpAQCAtMzk1LDcgKzM5NSw3IEBAIGludCByYWRlb25fdm1fYmluZChzdHJ1Y3Qg cmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl92bSAqdm0pCiByZXRyeToKIAlyID0g cmFkZW9uX3NhX2JvX25ldyhyZGV2LCAmcmRldi0+dm1fbWFuYWdlci5zYV9tYW5hZ2VyLCAmdm0t PnNhX2JvLAogCQkJICAgICBSQURFT05fR1BVX1BBR0VfQUxJR04odm0tPmxhc3RfcGZuICogOCks Ci0JCQkgICAgIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKKwkJCSAgICAgUkFERU9OX0dQVV9QQUdF X1NJWkUsIGZhbHNlKTsKIAlpZiAocikgewogCQlpZiAobGlzdF9lbXB0eSgmcmRldi0+dm1fbWFu YWdlci5scnVfdm0pKSB7CiAJCQlyZXR1cm4gcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25f b2JqZWN0LmgKaW5kZXggZjkxMDRiZS4uYTE4MWMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JhZGVvbi9yYWRlb25fb2JqZWN0LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9y YWRlb25fb2JqZWN0LmgKQEAgLTE1OCw3ICsxNTgsNyBAQCBleHRlcm4gaW50IHJhZGVvbl9zYV9i b19tYW5hZ2VyX3N1c3BlbmQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiBleHRlcm4gaW50 IHJhZGVvbl9zYV9ib19uZXcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiAJCQkgICAgc3Ry dWN0IHJhZGVvbl9zYV9tYW5hZ2VyICpzYV9tYW5hZ2VyLAogCQkJICAgIHN0cnVjdCByYWRlb25f c2FfYm8gKnNhX2JvLAotCQkJICAgIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGFsaWduKTsKKwkJ CSAgICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBhbGlnbiwgYm9vbCBibG9jayk7CiBleHRlcm4g dm9pZCByYWRlb25fc2FfYm9fZnJlZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJCSAg ICAgIHN0cnVjdCByYWRlb25fc2FfYm8gKnNhX2JvKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRl b25fcmluZy5jCmluZGV4IGUzOTQxMzEuLmIwNmUwNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3Jh ZGVvbl9yaW5nLmMKQEAgLTEyMSw3ICsxMjEsNyBAQCByZXRyeToKIAkJaWYgKHJkZXYtPmliX3Bv b2wuaWJzW2lkeF0uZmVuY2UgPT0gTlVMTCkgewogCQkJciA9IHJhZGVvbl9zYV9ib19uZXcocmRl diwgJnJkZXYtPmliX3Bvb2wuc2FfbWFuYWdlciwKIAkJCQkJICAgICAmcmRldi0+aWJfcG9vbC5p YnNbaWR4XS5zYV9ibywKLQkJCQkJICAgICBzaXplLCAyNTYpOworCQkJCQkgICAgIHNpemUsIDI1 NiwgZmFsc2UpOwogCQkJaWYgKCFyKSB7CiAJCQkJKmliID0gJnJkZXYtPmliX3Bvb2wuaWJzW2lk eF07CiAJCQkJKCppYiktPnB0ciA9IHJkZXYtPmliX3Bvb2wuc2FfbWFuYWdlci5jcHVfcHRyOwpA QCAtMjAyLDEwICsyMDIsMTYgQEAgaW50IHJhZGVvbl9pYl9zY2hlZHVsZShzdHJ1Y3QgcmFkZW9u X2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCiAKIGludCByYWRlb25faWJfcG9v bF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXN0cnVjdCByYWRlb25fc2Ff bWFuYWdlciB0bXA7CiAJaW50IGksIHI7CiAKLQlyID0gcmFkZW9uX3NhX2JvX21hbmFnZXJfaW5p dChyZGV2LCAmdG1wLAorCXJhZGVvbl9tdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsK KwlpZiAocmRldi0+aWJfcG9vbC5yZWFkeSkgeworCQlyZXR1cm4gMDsKKwl9CisJcmRldi0+aWJf cG9vbC5yZWFkeSA9IHRydWU7CisJcmFkZW9uX211dGV4X3VubG9jaygmcmRldi0+aWJfcG9vbC5t dXRleCk7CisKKwlyID0gcmFkZW9uX3NhX2JvX21hbmFnZXJfaW5pdChyZGV2LCAmcmRldi0+aWJf cG9vbC5zYV9tYW5hZ2VyLAogCQkJCSAgICAgIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCwK IAkJCQkgICAgICBSQURFT05fR0VNX0RPTUFJTl9HVFQpOwogCWlmIChyKSB7CkBAIC0yMTMsMTQg KzIxOSw2IEBAIGludCByYWRlb25faWJfcG9vbF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpy ZGV2KQogCX0KIAogCXJhZGVvbl9tdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKLQlp ZiAocmRldi0+aWJfcG9vbC5yZWFkeSkgewotCQlyYWRlb25fbXV0ZXhfdW5sb2NrKCZyZGV2LT5p Yl9wb29sLm11dGV4KTsKLQkJcmFkZW9uX3NhX2JvX21hbmFnZXJfZmluaShyZGV2LCAmdG1wKTsK LQkJcmV0dXJuIDA7Ci0JfQotCi0JcmRldi0+aWJfcG9vbC5zYV9tYW5hZ2VyID0gdG1wOwotCUlO SVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLnNhX21hbmFnZXIuc2FfYm8pOwogCWZvciAoaSA9 IDA7IGkgPCBSQURFT05fSUJfUE9PTF9TSVpFOyBpKyspIHsKIAkJcmRldi0+aWJfcG9vbC5pYnNb aV0uZmVuY2UgPSBOVUxMOwogCQlyZGV2LT5pYl9wb29sLmlic1tpXS5pZHggPSBpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9yYWRlb24vcmFkZW9uX3NhLmMKaW5kZXggNGNlNWM1MS4uMzIxMjI5MyAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc2EuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v cmFkZW9uL3JhZGVvbl9zYS5jCkBAIC0yNiw2ICsyNiw3IEBACiAvKgogICogQXV0aG9yczoKICAq ICAgIEplcm9tZSBHbGlzc2UgPGdsaXNzZUBmcmVlZGVza3RvcC5vcmc+CisgKiAgICBDaHJpc3Rp YW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+CiAgKi8KICNpbmNsdWRlICJkcm1Q LmgiCiAjaW5jbHVkZSAiZHJtLmgiCkBAIC0zNyw5ICszOCwxMCBAQCBpbnQgcmFkZW9uX3NhX2Jv X21hbmFnZXJfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIHsKIAlpbnQgcjsKIAot CXNwaW5fbG9ja19pbml0KCZzYV9tYW5hZ2VyLT5sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFk KCZzYV9tYW5hZ2VyLT5xdWV1ZSk7CiAJc2FfbWFuYWdlci0+Ym8gPSBOVUxMOwogCXNhX21hbmFn ZXItPnNpemUgPSBzaXplOworCXNhX21hbmFnZXItPmJpZ2dlc3RfaG9sZSA9ICZzYV9tYW5hZ2Vy LT5zYV9ibzsKIAlzYV9tYW5hZ2VyLT5kb21haW4gPSBkb21haW47CiAJSU5JVF9MSVNUX0hFQUQo JnNhX21hbmFnZXItPnNhX2JvKTsKIApAQCAtNTgsNiArNjAsNyBAQCB2b2lkIHJhZGVvbl9zYV9i b19tYW5hZ2VyX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCiB7CiAJc3RydWN0IHJh ZGVvbl9zYV9ibyAqc2FfYm8sICp0bXA7CiAKKwl3YWtlX3VwX2FsbCgmc2FfbWFuYWdlci0+cXVl dWUpOwogCWlmICghbGlzdF9lbXB0eSgmc2FfbWFuYWdlci0+c2FfYm8pKSB7CiAJCWRldl9lcnIo cmRldi0+ZGV2LCAic2FfbWFuYWdlciBpcyBub3QgZW1wdHksIGNsZWFyaW5nIGFueXdheVxuIik7 CiAJfQpAQCAtMTE0LDgxICsxMTcsMTUwIEBAIGludCByYWRlb25fc2FfYm9fbWFuYWdlcl9zdXNw ZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCXJldHVybiByOwogfQogCitzdGF0aWMg aW5saW5lIHVuc2lnbmVkIHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHN0cnVjdCByYWRlb25fc2Ff bWFuYWdlciAqbSwKKwkJCQkJICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCXN0 cnVjdCByYWRlb25fc2FfYm8gKnNhX2JvOworCisJaWYgKGVudHJ5ID09ICZtLT5zYV9ibykKKwkJ cmV0dXJuIDA7CisKKwlzYV9ibyA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCByYWRlb25fc2Ff Ym8sIGxpc3QpOworCXJldHVybiBzYV9iby0+b2Zmc2V0ICsgc2FfYm8tPnNpemU7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdW5zaWduZWQgcmFkZW9uX3NhX2JvX2hvbGVfZW5kKHN0cnVjdCByYWRlb25f c2FfbWFuYWdlciAqbSwKKwkJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKK3sKKwlp ZiAoZW50cnktPm5leHQgPT0gJm0tPnNhX2JvKQorCQlyZXR1cm4gbS0+c2l6ZTsKKworCXJldHVy biBsaXN0X2VudHJ5KGVudHJ5LT5uZXh0LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvLCBsaXN0KS0+b2Zm c2V0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHJhZGVvbl9zYV9ib19taW5fZnJlZShz dHJ1Y3QgcmFkZW9uX3NhX21hbmFnZXIgKm0sCisJCQkJCSAgICAgdW5zaWduZWQgYWxpZ24pCit7 CisJdW5zaWduZWQgc3RhcnQsIGVuZCwgd2FzdGVkOworCXN0YXJ0ID0gcmFkZW9uX3NhX2JvX2hv bGVfc3RhcnQobSwgbS0+YmlnZ2VzdF9ob2xlKTsKKwl3YXN0ZWQgPSBzdGFydCAlIGFsaWduOwor CWlmICh3YXN0ZWQpCisJCXN0YXJ0ICs9IGFsaWduIC0gd2FzdGVkOworCisJZW5kID0gcmFkZW9u X3NhX2JvX2hvbGVfZW5kKG0sIG0tPmJpZ2dlc3RfaG9sZSk7CisJcmV0dXJuIHN0YXJ0IDwgZW5k ID8gZW5kIC0gc3RhcnQgOiAwOworfQorCiAvKgogICogUHJpbmNpcGUgaXMgc2ltcGxlLCB3ZSBr ZWVwIGEgbGlzdCBvZiBzdWIgYWxsb2NhdGlvbiBpbiBvZmZzZXQKICAqIG9yZGVyIChmaXJzdCBl bnRyeSBoYXMgb2Zmc2V0ID09IDAsIGxhc3QgZW50cnkgaGFzIHRoZSBoaWdoZXN0CiAgKiBvZmZz ZXQpLgogICoKLSAqIFdoZW4gYWxsb2NhdGluZyBuZXcgb2JqZWN0IHdlIGZpcnN0IGNoZWNrIGlm IHRoZXJlIGlzIHJvb20gYXQKLSAqIHRoZSBlbmQgdG90YWxfc2l6ZSAtIChsYXN0X29iamVjdF9v ZmZzZXQgKyBsYXN0X29iamVjdF9zaXplKSA+PQotICogYWxsb2Nfc2l6ZS4gSWYgc28gd2UgYWxs b2NhdGUgbmV3IG9iamVjdCB0aGVyZS4KLSAqCi0gKiBXaGVuIHRoZXJlIGlzIG5vdCBlbm91Z2gg cm9vbSBhdCB0aGUgZW5kLCB3ZSBzdGFydCB3YWl0aW5nIGZvcgotICogZWFjaCBzdWIgb2JqZWN0 IHVudGlsIHdlIHJlYWNoIG9iamVjdF9vZmZzZXQrb2JqZWN0X3NpemUgPj0KLSAqIGFsbG9jX3Np emUsIHRoaXMgb2JqZWN0IHRoZW4gYmVjb21lIHRoZSBzdWIgb2JqZWN0IHdlIHJldHVybi4KKyAq IFdoZW4gYWxsb2NhdGluZyBuZXcgb2JqZWN0cyB3ZSBzdGFydCBjaGVja2luZyBhdCB3aGF0J3Mg Y3VycmVudGx5CisgKiBhc3N1bWVkIHRvIGJlIHRoZSBiaWdnZXN0IGhvbGUsIGlmIHRoYXQncyBu b3QgYmlnIGVub3VnaCB3ZSBjb250aW51ZQorICogc2VhcmNoaW5nIHRoZSBsaXN0IHVudGlsIHdl IGZpbmQgc29tZXRoaW5nIGJpZyBlbm91Z2ggb3IgcmVhY2ggdGhlCisgKiBiaWdnZXN0IGhvbGUg YWdhaW4uIElmIHRoZSBsYXRlciBoYXBwZW4gd2Ugb3B0aW9uYWxseSBibG9jayBmb3IgdGhlCisg KiBiaWdnZXN0IGhvbGUgdG8gaW5jcmVhc2UgaW4gc2l6ZS4KICAqCi0gKiBBbGlnbm1lbnQgY2Fu J3QgYmUgYmlnZ2VyIHRoYW4gcGFnZSBzaXplCiAgKi8KIGludCByYWRlb25fc2FfYm9fbmV3KHN0 cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkgICAgIHN0cnVjdCByYWRlb25fc2FfbWFuYWdl ciAqc2FfbWFuYWdlciwKIAkJICAgICBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibywKLQkJICAg ICB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBhbGlnbikKKwkJICAgICB1bnNpZ25lZCBzaXplLCB1 bnNpZ25lZCBhbGlnbiwgYm9vbCBibG9jaykKIHsKLQlzdHJ1Y3QgcmFkZW9uX3NhX2JvICp0bXA7 Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQl1bnNpZ25lZCBvZmZzZXQgPSAwLCB3YXN0ZWQg PSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgKmN1 cnIsICpob2xlOworCXVuc2lnbmVkIHN0YXJ0LCBjdXJyc2l6ZSwgd2FzdGVkLCBob2xlc2l6ZTsK KwlpbnQgcjsKIAogCUJVR19PTihhbGlnbiA+IFJBREVPTl9HUFVfUEFHRV9TSVpFKTsKIAlCVUdf T04oc2l6ZSA+IHNhX21hbmFnZXItPnNpemUpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzYV9tYW5h Z2VyLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBubyBvbmUgPyAqLwotCWlmIChsaXN0X2VtcHR5KCZz YV9tYW5hZ2VyLT5zYV9ibykpIHsKLQkJaGVhZCA9ICZzYV9tYW5hZ2VyLT5zYV9ibzsKLQkJZ290 byBvdXQ7Ci0JfQorCXNwaW5fbG9ja19pcnEoJnNhX21hbmFnZXItPnF1ZXVlLmxvY2spOworCisJ ZG8geworCQljdXJyID0gaGVhZCA9IGhvbGUgPSBzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGU7CisJ CWhvbGVzaXplID0gcmFkZW9uX3NhX2JvX21pbl9mcmVlKHNhX21hbmFnZXIsIDEpOworCQlkbyB7 CisJCQlzdGFydCA9IHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHNhX21hbmFnZXIsIGN1cnIpOwor CQkJY3VycnNpemUgPSByYWRlb25fc2FfYm9faG9sZV9lbmQoc2FfbWFuYWdlciwgY3VycikgLSBz dGFydDsKKworCQkJd2FzdGVkID0gc3RhcnQgJSBhbGlnbjsKKwkJCWlmICh3YXN0ZWQpIHsKKwkJ CQl3YXN0ZWQgPSBhbGlnbiAtIHdhc3RlZDsKKwkJCX0KKworCQkJLyogcm9vbSBhZnRlciBjdXJy ZW50IGJpZyBlbm91Z2ggPyAqLworCQkJaWYgKGN1cnJzaXplID49IChzaXplICsgd2FzdGVkKSkg eworCQkJCXNhX2JvLT5tYW5hZ2VyID0gc2FfbWFuYWdlcjsKKwkJCQlzYV9iby0+b2Zmc2V0ID0g c3RhcnQgKyB3YXN0ZWQ7CisJCQkJc2FfYm8tPnNpemUgPSBzaXplOworCQkJCWxpc3RfYWRkKCZz YV9iby0+bGlzdCwgY3Vycik7CisKKwkJCQkvKiBjb25zaWRlciB0aGUgc3BhY2UgbGVmdCBhZnRl ciB0aGUgbmV3bHkKKwkJCQkgICBhZGRlZCBzYV9ibyBhcyB0aGUgYmlnZ2VzdCBob2xlICovCisJ CQkJY3VycnNpemUgLT0gKHNpemUgKyB3YXN0ZWQpOworCQkJCWlmIChob2xlID09IHNhX2JvLT5s aXN0LnByZXYgfHwgaG9sZXNpemUgPCBjdXJyc2l6ZSkgeworCQkJCQlob2xlID0gJnNhX2JvLT5s aXN0OworCQkJCX0KKworCQkJCWlmIChzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgIT0gaG9sZSkg eworCQkJCQlzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgPSBob2xlOworCQkJCQl3YWtlX3VwX2xv Y2tlZCgmc2FfbWFuYWdlci0+cXVldWUpOworCQkJCX0KKwkJCQlzcGluX3VubG9ja19pcnEoJnNh X21hbmFnZXItPnF1ZXVlLmxvY2spOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlpZiAoaG9s ZXNpemUgPCBjdXJyc2l6ZSkgeworCQkJCWhvbGUgPSBjdXJyOworCQkJCWhvbGVzaXplID0gY3Vy cnNpemU7CisJCQl9CisKKwkJCWN1cnIgPSBjdXJyLT5uZXh0OworCQl9IHdoaWxlIChjdXJyICE9 IGhlYWQpOwogCi0JLyogbG9vayBmb3IgYSBob2xlIGJpZyBlbm91Z2ggKi8KLQlsaXN0X2Zvcl9l YWNoX2VudHJ5KHRtcCwgJnNhX21hbmFnZXItPnNhX2JvLCBsaXN0KSB7Ci0JCS8qIHJvb20gYmVm b3JlIHRoaXMgb2JqZWN0ID8gKi8KLQkJaWYgKG9mZnNldCA8IHRtcC0+b2Zmc2V0ICYmICh0bXAt Pm9mZnNldCAtIG9mZnNldCkgPj0gc2l6ZSkgewotCQkJaGVhZCA9IHRtcC0+bGlzdC5wcmV2Owot CQkJZ290byBvdXQ7CisJCWlmIChzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgIT0gaG9sZSkgewor CQkJc2FfbWFuYWdlci0+YmlnZ2VzdF9ob2xlID0gaG9sZTsKIAkJfQotCQlvZmZzZXQgPSB0bXAt Pm9mZnNldCArIHRtcC0+c2l6ZTsKLQkJd2FzdGVkID0gb2Zmc2V0ICUgYWxpZ247Ci0JCWlmICh3 YXN0ZWQpIHsKLQkJCW9mZnNldCArPSBhbGlnbiAtIHdhc3RlZDsKKworCQlpZiAoYmxvY2spIHsK KwkJCS8qIGZhaWxlZCB0byBmaW5kIHNvbWV0aGluZyBiaWcgZW5vdWdoLCB3YWl0CisJCQkgICBm b3IgdGhlIGJpZ2dlc3QgaG9sZSB0byBpbmNyZWFzZSBpbiBzaXplICovCisJCQlyID0gd2FpdF9l dmVudF9pbnRlcnJ1cHRpYmxlX2xvY2tlZF9pcnEoc2FfbWFuYWdlci0+cXVldWUsCisJCQkJcmFk ZW9uX3NhX2JvX21pbl9mcmVlKHNhX21hbmFnZXIsIGFsaWduKSA+PSBzaXplCisJCQkpOworCQkJ aWYgKHIpIHsKKwkJCQlzcGluX3VubG9ja19pcnEoJnNhX21hbmFnZXItPnF1ZXVlLmxvY2spOwor CQkJCXJldHVybiByOworCQkJfQogCQl9Ci0JfQotCS8qIHJvb20gYXQgdGhlIGVuZCA/ICovCi0J aGVhZCA9IHNhX21hbmFnZXItPnNhX2JvLnByZXY7Ci0JdG1wID0gbGlzdF9lbnRyeShoZWFkLCBz dHJ1Y3QgcmFkZW9uX3NhX2JvLCBsaXN0KTsKLQlvZmZzZXQgPSB0bXAtPm9mZnNldCArIHRtcC0+ c2l6ZTsKLQl3YXN0ZWQgPSBvZmZzZXQgJSBhbGlnbjsKLQlpZiAod2FzdGVkKSB7Ci0JCW9mZnNl dCArPSB3YXN0ZWQgPSBhbGlnbiAtIHdhc3RlZDsKLQl9Ci0JaWYgKChzYV9tYW5hZ2VyLT5zaXpl IC0gb2Zmc2V0KSA8IHNpemUpIHsKLQkJLyogZmFpbGVkIHRvIGZpbmQgc29tZXRoaW5ncyBiaWcg ZW5vdWdoICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhX21hbmFnZXItPmxvY2ssIGZs YWdzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCX0gd2hpbGUgKGJsb2NrKTsKKwlzcGluX3Vu bG9ja19pcnEoJnNhX21hbmFnZXItPnF1ZXVlLmxvY2spOwogCi1vdXQ6Ci0Jc2FfYm8tPm1hbmFn ZXIgPSBzYV9tYW5hZ2VyOwotCXNhX2JvLT5vZmZzZXQgPSBvZmZzZXQ7Ci0Jc2FfYm8tPnNpemUg PSBzaXplOwotCWxpc3RfYWRkKCZzYV9iby0+bGlzdCwgaGVhZCk7Ci0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc2FfbWFuYWdlci0+bG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiAt RU5PTUVNOwogfQogCiB2b2lkIHJhZGVvbl9zYV9ib19mcmVlKHN0cnVjdCByYWRlb25fZGV2aWNl ICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX3NhX2JvICpzYV9ibykKIHsKKwlzdHJ1Y3QgcmFkZW9uX3Nh X21hbmFnZXIgKnNhX21hbmFnZXIgPSBzYV9iby0+bWFuYWdlcjsKKwl1bnNpZ25lZCBic2l6ZSwg ZnNpemU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc2FfYm8t Pm1hbmFnZXItPmxvY2ssIGZsYWdzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzYV9tYW5hZ2Vy LT5xdWV1ZS5sb2NrLCBmbGFncyk7CisJaWYgKCZzYV9iby0+bGlzdCA9PSBzYV9tYW5hZ2VyLT5i aWdnZXN0X2hvbGUgfHwKKwkgICAgc2FfYm8tPmxpc3QucHJldiA9PSBzYV9tYW5hZ2VyLT5iaWdn ZXN0X2hvbGUpIHsKKworCQlzYV9tYW5hZ2VyLT5iaWdnZXN0X2hvbGUgPSBzYV9iby0+bGlzdC5w cmV2OworCQl3YWtlX3VwX2xvY2tlZCgmc2FfbWFuYWdlci0+cXVldWUpOworCX0gZWxzZSB7CisJ CWJzaXplID0gcmFkZW9uX3NhX2JvX21pbl9mcmVlKHNhX21hbmFnZXIsIDEpOworCQlmc2l6ZSA9 IHJhZGVvbl9zYV9ib19ob2xlX3N0YXJ0KHNhX21hbmFnZXIsIHNhX2JvLT5saXN0LnByZXYpOwor CQlmc2l6ZSA9IHJhZGVvbl9zYV9ib19ob2xlX2VuZChzYV9tYW5hZ2VyLCAmc2FfYm8tPmxpc3Qp IC0gZnNpemU7CisJCWlmIChmc2l6ZSA+IGJzaXplKSB7CisJCQlzYV9tYW5hZ2VyLT5iaWdnZXN0 X2hvbGUgPSBzYV9iby0+bGlzdC5wcmV2OworCQkJd2FrZV91cF9sb2NrZWQoJnNhX21hbmFnZXIt PnF1ZXVlKTsKKwkJfQorCX0KIAlsaXN0X2RlbF9pbml0KCZzYV9iby0+bGlzdCk7Ci0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmc2FfYm8tPm1hbmFnZXItPmxvY2ssIGZsYWdzKTsKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZzYV9tYW5hZ2VyLT5xdWV1ZS5sb2NrLCBmbGFncyk7CiB9Ci0tIAox LjcuNy42CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=