From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 09/28] drm/vmwgfx: Refactor vmw_gb_surface_define_ioctl() Date: Wed, 12 Aug 2015 22:42:58 -0700 Message-ID: <1439444597-4664-10-git-send-email-thellstrom@vmware.com> References: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.bahnhof.se (mx1.bahnhof.se [213.80.101.11]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5C2F86EBFD for ; Wed, 12 Aug 2015 23:03:47 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx1-reinject (Postfix) with ESMTP id F4110440A2 for ; Thu, 13 Aug 2015 08:03:45 +0200 (CEST) Received: from mf3.bahnhof.se ([127.0.0.1]) by localhost (mf3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AjxGsFUCLG+w for ; Thu, 13 Aug 2015 08:03:37 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf3.bahnhof.se (Postfix) with ESMTP id 887453E8D2A for ; Thu, 13 Aug 2015 08:03:05 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 0EC2C3DC005 for ; Thu, 13 Aug 2015 07:43:24 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id DD3D43F4002 for ; Thu, 13 Aug 2015 07:43:23 +0200 (CEST) In-Reply-To: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogU2luY2xhaXIgWWVoIDxzeWVoQHZtd2FyZS5jb20+CgpSZWZhY3RvcmVkIHZtd19nYl9z dXJmYWNlX2RlZmluZV9pb2N0bCgpIGFuZCBtYWRlIHRoZSBzdXJmYWNlCmRlZmluaXRpb24gcGFy dCBhIHNlcGFyYXRlIGZ1bmN0aW9uLiAgVGhpcyB3YXkgb3RoZXIgcGFydHMgb2Ygdm13Z2Z4CmNh biB1c2UgaXQgdG8gYWxsb2NhdGUga2VybmVsLXZpc2libGUgR0Igc3VyZmFjZXMuCgpTaWduZWQt b2ZmLWJ5OiBTaW5jbGFpciBZZWggPHN5ZWhAdm13YXJlLmNvbT4KU2lnbmVkLW9mZi1ieTogVGhv bWFzIEhlbGxzdHJvbSA8dGhlbGxzdHJvbUB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS92bXdnZngvdm13Z2Z4X2Rydi5oICAgICB8ICAgOSArKwogZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfc3VyZmFjZS5jIHwgMTk1ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0t CiAyIGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA2MSBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCmluZGV4IDMzOGRjZTMuLmMzMDBhMGEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCisrKyBiL2RyaXZlcnMv Z3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5oCkBAIC0xMDQzLDYgKzEwNDMsMTUgQEAgZXh0ZXJu IGludCB2bXdfc3VyZmFjZV9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJ ICAgICB1aW50MzJfdCBoYW5kbGUsIGludCAqaWQpOwogZXh0ZXJuIGludCB2bXdfc3VyZmFjZV92 YWxpZGF0ZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkJCXN0cnVjdCB2bXdfc3Vy ZmFjZSAqc3JmKTsKK2ludCB2bXdfc3VyZmFjZV9nYl9wcml2X2RlZmluZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCQkJICAgICAgIHVpbnQzMl90IHVzZXJfYWNjb3VudGluZ19zaXplLAorCQkJ ICAgICAgIHVpbnQzMl90IHN2Z2EzZF9mbGFncywKKwkJCSAgICAgICBTVkdBM2RTdXJmYWNlRm9y bWF0IGZvcm1hdCwKKwkJCSAgICAgICBib29sIGZvcl9zY2Fub3V0LAorCQkJICAgICAgIHVpbnQz Ml90IG51bV9taXBfbGV2ZWxzLAorCQkJICAgICAgIHVpbnQzMl90IG11bHRpc2FtcGxlX2NvdW50 LAorCQkJICAgICAgIHN0cnVjdCBkcm1fdm13X3NpemUgc2l6ZSwKKwkJCSAgICAgICBzdHJ1Y3Qg dm13X3N1cmZhY2UgKipzcmZfb3V0KTsKIAogLyoKICAqIFNoYWRlciBtYW5hZ2VtZW50IC0gdm13 Z2Z4X3NoYWRlci5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9z dXJmYWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdXJmYWNlLmMKaW5kZXgg NGQwYzk4ZS4uZmI1NGNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn Znhfc3VyZmFjZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N1cmZhY2Uu YwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodCDC qSAyMDA5LTIwMTIgVk13YXJlLCBJbmMuLCBQYWxvIEFsdG8sIENBLiwgVVNBCisgKiBDb3B5cmln aHQgwqkgMjAwOS0yMDE0IFZNd2FyZSwgSW5jLiwgUGFsbyBBbHRvLCBDQS4sIFVTQQogICogQWxs IFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQpAQCAtMzYsNyArMzYsNyBA QAogICogQGJhc2U6ICAgICAgICAgICBUaGUgVFRNIGJhc2Ugb2JqZWN0IGhhbmRsaW5nIHVzZXIt c3BhY2UgdmlzaWJpbGl0eS4KICAqIEBzcmY6ICAgICAgICAgICAgVGhlIHN1cmZhY2UgbWV0YWRh dGEuCiAgKiBAc2l6ZTogICAgICAgICAgIFRUTSBhY2NvdW50aW5nIHNpemUgZm9yIHRoZSBzdXJm YWNlLgotICogQG1hc3RlcjogICAgICAgICBtYXN0ZXIgb2YgdGhlIGNyZWF0aW5nIGNsaWVudC4g VXNlZCBmb3Igc2VjdXJpdHkgY2hlY2suCisgKiBAbWFzdGVyOiBtYXN0ZXIgb2YgdGhlIGNyZWF0 aW5nIGNsaWVudC4gVXNlZCBmb3Igc2VjdXJpdHkgY2hlY2suCiAgKi8KIHN0cnVjdCB2bXdfdXNl cl9zdXJmYWNlIHsKIAlzdHJ1Y3QgdHRtX3ByaW1lX29iamVjdCBwcmltZTsKQEAgLTEyMTgsNiAr MTIxOCw3IEBAIHN0YXRpYyBpbnQgdm13X2diX3N1cmZhY2VfZGVzdHJveShzdHJ1Y3Qgdm13X3Jl c291cmNlICpyZXMpCiAJcmV0dXJuIDA7CiB9CiAKKwogLyoqCiAgKiB2bXdfZ2Jfc3VyZmFjZV9k ZWZpbmVfaW9jdGwgLSBJb2N0bCBmdW5jdGlvbiBpbXBsZW1lbnRpbmcKICAqICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRoZSB1c2VyIHN1cmZhY2UgZGVmaW5lIGZ1bmN0aW9uYWxpdHku CkBAIC0xMjQxLDc3ICsxMjQyLDQzIEBAIGludCB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAlzdHJ1Y3QgdHRtX29iamVjdF9m aWxlICp0ZmlsZSA9IHZtd19mcHJpdihmaWxlX3ByaXYpLT50ZmlsZTsKIAlpbnQgcmV0OwogCXVp bnQzMl90IHNpemU7Ci0JY29uc3Qgc3RydWN0IHN2Z2EzZF9zdXJmYWNlX2Rlc2MgKmRlc2M7CiAJ dWludDMyX3QgYmFja3VwX2hhbmRsZTsKIAorCiAJaWYgKHVubGlrZWx5KHZtd191c2VyX3N1cmZh Y2Vfc2l6ZSA9PSAwKSkKIAkJdm13X3VzZXJfc3VyZmFjZV9zaXplID0gdHRtX3JvdW5kX3BvdChz aXplb2YoKnVzZXJfc3JmKSkgKwogCQkJMTI4OwogCiAJc2l6ZSA9IHZtd191c2VyX3N1cmZhY2Vf c2l6ZSArIDEyODsKIAotCWRlc2MgPSBzdmdhM2RzdXJmYWNlX2dldF9kZXNjKHJlcS0+Zm9ybWF0 KTsKLQlpZiAodW5saWtlbHkoZGVzYy0+YmxvY2tfZGVzYyA9PSBTVkdBM0RCTE9DS0RFU0NfTk9O RSkpIHsKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHN1cmZhY2UgZm9ybWF0IGZvciBzdXJmYWNlIGNy ZWF0aW9uLlxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldCA9IHR0bV9yZWFkX2xv Y2soJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0sIHRydWUpOworCS8qIERlZmluZSBhIHN1cmZh Y2UgYmFzZWQgb24gdGhlIHBhcmFtZXRlcnMuICovCisJcmV0ID0gdm13X3N1cmZhY2VfZ2JfcHJp dl9kZWZpbmUoZGV2LAorCQkJc2l6ZSwKKwkJCXJlcS0+c3ZnYTNkX2ZsYWdzLAorCQkJcmVxLT5m b3JtYXQsCisJCQlyZXEtPmRybV9zdXJmYWNlX2ZsYWdzICYgZHJtX3Ztd19zdXJmYWNlX2ZsYWdf c2Nhbm91dCwKKwkJCXJlcS0+bWlwX2xldmVscywKKwkJCXJlcS0+bXVsdGlzYW1wbGVfY291bnQs CisJCQlyZXEtPmJhc2Vfc2l6ZSwKKwkJCSZzcmYpOwogCWlmICh1bmxpa2VseShyZXQgIT0gMCkp CiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSB0dG1fbWVtX2dsb2JhbF9hbGxvYyh2bXdfbWVtX2ds b2IoZGV2X3ByaXYpLAotCQkJCSAgIHNpemUsIGZhbHNlLCB0cnVlKTsKLQlpZiAodW5saWtlbHko cmV0ICE9IDApKSB7Ci0JCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQotCQkJRFJNX0VSUk9SKCJP dXQgb2YgZ3JhcGhpY3MgbWVtb3J5IGZvciBzdXJmYWNlIgotCQkJCSAgIiBjcmVhdGlvbi5cbiIp OwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JdXNlcl9zcmYgPSBremFsbG9jKHNpemVvZigq dXNlcl9zcmYpLCBHRlBfS0VSTkVMKTsKLQlpZiAodW5saWtlbHkodXNlcl9zcmYgPT0gTlVMTCkp IHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfbm9fdXNlcl9zcmY7Ci0JfQotCi0Jc3Jm ID0gJnVzZXJfc3JmLT5zcmY7Ci0JcmVzID0gJnNyZi0+cmVzOwotCi0Jc3JmLT5mbGFncyA9IHJl cS0+c3ZnYTNkX2ZsYWdzOwotCXNyZi0+Zm9ybWF0ID0gcmVxLT5mb3JtYXQ7Ci0Jc3JmLT5zY2Fu b3V0ID0gcmVxLT5kcm1fc3VyZmFjZV9mbGFncyAmIGRybV92bXdfc3VyZmFjZV9mbGFnX3NjYW5v dXQ7Ci0Jc3JmLT5taXBfbGV2ZWxzWzBdID0gcmVxLT5taXBfbGV2ZWxzOwotCXNyZi0+bnVtX3Np emVzID0gMTsKLQlzcmYtPnNpemVzID0gTlVMTDsKLQlzcmYtPm9mZnNldHMgPSBOVUxMOwotCXVz ZXJfc3JmLT5zaXplID0gc2l6ZTsKLQlzcmYtPmJhc2Vfc2l6ZSA9IHJlcS0+YmFzZV9zaXplOwot CXNyZi0+YXV0b2dlbl9maWx0ZXIgPSBTVkdBM0RfVEVYX0ZJTFRFUl9OT05FOwotCXNyZi0+bXVs dGlzYW1wbGVfY291bnQgPSByZXEtPm11bHRpc2FtcGxlX2NvdW50OwotCXJlcy0+YmFja3VwX3Np emUgPSBzdmdhM2RzdXJmYWNlX2dldF9zZXJpYWxpemVkX3NpemUKLQkgIChzcmYtPmZvcm1hdCwg c3JmLT5iYXNlX3NpemUsIHNyZi0+bWlwX2xldmVsc1swXSwKLQkgICBzcmYtPmZsYWdzICYgU1ZH QTNEX1NVUkZBQ0VfQ1VCRU1BUCk7Ci0KLQl1c2VyX3NyZi0+cHJpbWUuYmFzZS5zaGFyZWFibGUg PSBmYWxzZTsKLQl1c2VyX3NyZi0+cHJpbWUuYmFzZS50ZmlsZSA9IE5VTEw7CisJdXNlcl9zcmYg PSBjb250YWluZXJfb2Yoc3JmLCBzdHJ1Y3Qgdm13X3VzZXJfc3VyZmFjZSwgc3JmKTsKIAlpZiAo ZHJtX2lzX3ByaW1hcnlfY2xpZW50KGZpbGVfcHJpdikpCiAJCXVzZXJfc3JmLT5tYXN0ZXIgPSBk cm1fbWFzdGVyX2dldChmaWxlX3ByaXYtPm1hc3Rlcik7CiAKLQkvKioKLQkgKiBGcm9tIHRoaXMg cG9pbnQsIHRoZSBnZW5lcmljIHJlc291cmNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zCi0JICogZGVz dHJveSB0aGUgb2JqZWN0IG9uIGZhaWx1cmUuCi0JICovCi0KLQlyZXQgPSB2bXdfc3VyZmFjZV9p bml0KGRldl9wcml2LCBzcmYsIHZtd191c2VyX3N1cmZhY2VfZnJlZSk7CisJcmV0ID0gdHRtX3Jl YWRfbG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSwgdHJ1ZSk7CiAJaWYgKHVubGlrZWx5 KHJldCAhPSAwKSkKLQkJZ290byBvdXRfdW5sb2NrOworCQlyZXR1cm4gcmV0OworCisJcmVzID0g JnVzZXJfc3JmLT5zcmYucmVzOwogCi0JaWYgKHJlcS0+YnVmZmVyX2hhbmRsZSAhPSBTVkdBM0Rf SU5WQUxJRF9JRCkgeworCisJaWYgKHJlcS0+YnVmZmVyX2hhbmRsZSAhPSBTVkdBM0RfSU5WQUxJ RF9JRCkKIAkJcmV0ID0gdm13X3VzZXJfZG1hYnVmX2xvb2t1cCh0ZmlsZSwgcmVxLT5idWZmZXJf aGFuZGxlLAogCQkJCQkgICAgICZyZXMtPmJhY2t1cCk7Ci0JfSBlbHNlIGlmIChyZXEtPmRybV9z dXJmYWNlX2ZsYWdzICYKLQkJICAgZHJtX3Ztd19zdXJmYWNlX2ZsYWdfY3JlYXRlX2J1ZmZlcikK KwllbHNlIGlmIChyZXEtPmRybV9zdXJmYWNlX2ZsYWdzICYgZHJtX3Ztd19zdXJmYWNlX2ZsYWdf Y3JlYXRlX2J1ZmZlcikKIAkJcmV0ID0gdm13X3VzZXJfZG1hYnVmX2FsbG9jKGRldl9wcml2LCB0 ZmlsZSwKIAkJCQkJICAgIHJlcy0+YmFja3VwX3NpemUsCiAJCQkJCSAgICByZXEtPmRybV9zdXJm YWNlX2ZsYWdzICYKQEAgLTEzMjQsNyArMTI5MSw3IEBAIGludCB2bXdfZ2Jfc3VyZmFjZV9kZWZp bmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJZ290byBvdXRf dW5sb2NrOwogCX0KIAotCXRtcCA9IHZtd19yZXNvdXJjZV9yZWZlcmVuY2UoJnNyZi0+cmVzKTsK Kwl0bXAgPSB2bXdfcmVzb3VyY2VfcmVmZXJlbmNlKHJlcyk7CiAJcmV0ID0gdHRtX3ByaW1lX29i amVjdF9pbml0KHRmaWxlLCByZXMtPmJhY2t1cF9zaXplLCAmdXNlcl9zcmYtPnByaW1lLAogCQkJ CSAgICByZXEtPmRybV9zdXJmYWNlX2ZsYWdzICYKIAkJCQkgICAgZHJtX3Ztd19zdXJmYWNlX2Zs YWdfc2hhcmVhYmxlLApAQCAtMTMzNyw3ICsxMzA0LDcgQEAgaW50IHZtd19nYl9zdXJmYWNlX2Rl ZmluZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQlnb3RvIG91 dF91bmxvY2s7CiAJfQogCi0JcmVwLT5oYW5kbGUgPSB1c2VyX3NyZi0+cHJpbWUuYmFzZS5oYXNo LmtleTsKKwlyZXAtPmhhbmRsZSAgICAgID0gdXNlcl9zcmYtPnByaW1lLmJhc2UuaGFzaC5rZXk7 CiAJcmVwLT5iYWNrdXBfc2l6ZSA9IHJlcy0+YmFja3VwX3NpemU7CiAJaWYgKHJlcy0+YmFja3Vw KSB7CiAJCXJlcC0+YnVmZmVyX21hcF9oYW5kbGUgPQpAQCAtMTM1MiwxMCArMTMxOSw2IEBAIGlu dCB2bXdfZ2Jfc3VyZmFjZV9kZWZpbmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIAogCXZtd19yZXNvdXJjZV91bnJlZmVyZW5jZSgmcmVzKTsKIAotCXR0bV9yZWFk X3VubG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7Ci0JcmV0dXJuIDA7Ci1vdXRfbm9f dXNlcl9zcmY6Ci0JdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdfbWVtX2dsb2IoZGV2X3ByaXYpLCBz aXplKTsKIG91dF91bmxvY2s6CiAJdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRp b25fc2VtKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTQyOSwzICsxMzkyLDExMyBAQCBvdXRfYmFkX3Jl c291cmNlOgogCiAJcmV0dXJuIHJldDsKIH0KKworLyoqCisgKiB2bXdfc3VyZmFjZV9nYl9wcml2 X2RlZmluZSAtIERlZmluZSBhIHByaXZhdGUgR0Igc3VyZmFjZQorICoKKyAqIEBkZXY6ICBQb2lu dGVyIHRvIGEgc3RydWN0IGRybV9kZXZpY2UKKyAqIEB1c2VyX2FjY291bnRpbmdfc2l6ZTogIFVz ZWQgdG8gdHJhY2sgdXNlci1zcGFjZSBtZW1vcnkgdXNhZ2UsIHNldAorICogICAgICAgICAgICAg ICAgICAgICAgICAgdG8gMCBmb3Iga2VybmVsIG1vZGUgb25seSBtZW1vcnkKKyAqIEBzdmdhM2Rf ZmxhZ3M6IFNWR0EzZCBzdXJmYWNlIGZsYWdzIGZvciB0aGUgZGV2aWNlCisgKiBAZm9ybWF0OiBy ZXF1ZXN0ZWQgc3VyZmFjZSBmb3JtYXQKKyAqIEBmb3Jfc2Nhbm91dDogdHJ1ZSBpZiBpbnRlZGVk IHRvIGJlIHVzZWQgZm9yIHNjYW5vdXQgYnVmZmVyCisgKiBAbnVtX21pcF9sZXZlbHM6ICBudW1i ZXIgb2YgTUlQIGxldmVscworICogQG11bHRpc2FtcGxlX2NvdW50OgorICogQHNpemU6IHdpZHRo LCBoZWlnaCwgZGVwdGggb2YgdGhlIHN1cmZhY2UgcmVxdWVzdGVkCisgKiBAdXNlcl9zcmZfb3V0 OiBhbGxvY2F0ZWQgdXNlcl9zcmYuICBTZXQgdG8gTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqIEdC IHN1cmZhY2VzIGFsbG9jYXRlZCBieSB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGhhdmUgYSB1c2Vy IG1vZGUgaGFuZGxlLCBhbmQKKyAqIHRodXMgd2lsbCBvbmx5IGJlIHZpc2libGUgdG8gdm13Z2Z4 LiAgRm9yIG9wdGltaXphdGlvbiByZWFzb25zIHRoZQorICogc3VyZmFjZSBtYXkgbGF0ZXIgYmUg Z2l2ZW4gYSB1c2VyIG1vZGUgaGFuZGxlIGJ5IGFub3RoZXIgZnVuY3Rpb24gdG8gbWFrZQorICog aXQgYXZhaWxhYmxlIHRvIHVzZXIgbW9kZSBkcml2ZXJzLgorICovCitpbnQgdm13X3N1cmZhY2Vf Z2JfcHJpdl9kZWZpbmUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgICAgICB1aW50MzJf dCB1c2VyX2FjY291bnRpbmdfc2l6ZSwKKwkJCSAgICAgICB1aW50MzJfdCBzdmdhM2RfZmxhZ3Ms CisJCQkgICAgICAgU1ZHQTNkU3VyZmFjZUZvcm1hdCBmb3JtYXQsCisJCQkgICAgICAgYm9vbCBm b3Jfc2Nhbm91dCwKKwkJCSAgICAgICB1aW50MzJfdCBudW1fbWlwX2xldmVscywKKwkJCSAgICAg ICB1aW50MzJfdCBtdWx0aXNhbXBsZV9jb3VudCwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3Ztd19z aXplIHNpemUsCisJCQkgICAgICAgc3RydWN0IHZtd19zdXJmYWNlICoqc3JmX291dCkKK3sKKwlz dHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgdm13 X3VzZXJfc3VyZmFjZSAqdXNlcl9zcmY7CisJc3RydWN0IHZtd19zdXJmYWNlICpzcmY7CisJaW50 IHJldDsKKworCisJKnNyZl9vdXQgPSBOVUxMOworCisJaWYgKGZvcl9zY2Fub3V0KSB7CisJCWlm ICghc3ZnYTNkc3VyZmFjZV9pc19zY3JlZW5fdGFyZ2V0X2Zvcm1hdChmb3JtYXQpKSB7CisJCQlE Uk1fRVJST1IoIkludmFsaWQgU2NyZWVuIFRhcmdldCBzdXJmYWNlIGZvcm1hdC4iKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJY29uc3Qgc3RydWN0IHN2Z2EzZF9zdXJm YWNlX2Rlc2MgKmRlc2M7CisKKwkJZGVzYyA9IHN2Z2EzZHN1cmZhY2VfZ2V0X2Rlc2MoZm9ybWF0 KTsKKwkJaWYgKHVubGlrZWx5KGRlc2MtPmJsb2NrX2Rlc2MgPT0gU1ZHQTNEQkxPQ0tERVNDX05P TkUpKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgc3VyZmFjZSBmb3JtYXQuXG4iKTsKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0ID0gdHRtX3JlYWRfbG9jaygmZGV2X3ByaXYt PnJlc2VydmF0aW9uX3NlbSwgdHJ1ZSk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IHR0bV9tZW1fZ2xvYmFsX2FsbG9jKHZtd19tZW1fZ2xvYihkZXZf cHJpdiksCisJCQkJICAgdXNlcl9hY2NvdW50aW5nX3NpemUsIGZhbHNlLCB0cnVlKTsKKwlpZiAo dW5saWtlbHkocmV0ICE9IDApKSB7CisJCWlmIChyZXQgIT0gLUVSRVNUQVJUU1lTKQorCQkJRFJN X0VSUk9SKCJPdXQgb2YgZ3JhcGhpY3MgbWVtb3J5IGZvciBzdXJmYWNlIgorCQkJCSAgIiBjcmVh dGlvbi5cbiIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJdXNlcl9zcmYgPSBremFsbG9j KHNpemVvZigqdXNlcl9zcmYpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkodXNlcl9zcmYg PT0gTlVMTCkpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfbm9fdXNlcl9zcmY7CisJ fQorCisJKnNyZl9vdXQgID0gJnVzZXJfc3JmLT5zcmY7CisJdXNlcl9zcmYtPnNpemUgPSB1c2Vy X2FjY291bnRpbmdfc2l6ZTsKKwl1c2VyX3NyZi0+cHJpbWUuYmFzZS5zaGFyZWFibGUgPSBmYWxz ZTsKKwl1c2VyX3NyZi0+cHJpbWUuYmFzZS50ZmlsZSAgICAgPSBOVUxMOworCisJc3JmID0gJnVz ZXJfc3JmLT5zcmY7CisJc3JmLT5mbGFncyAgICAgICAgICAgICA9IHN2Z2EzZF9mbGFnczsKKwlz cmYtPmZvcm1hdCAgICAgICAgICAgID0gZm9ybWF0OworCXNyZi0+c2Nhbm91dCAgICAgICAgICAg PSBmb3Jfc2Nhbm91dDsKKwlzcmYtPm1pcF9sZXZlbHNbMF0gICAgID0gbnVtX21pcF9sZXZlbHM7 CisJc3JmLT5udW1fc2l6ZXMgICAgICAgICA9IDE7CisJc3JmLT5zaXplcyAgICAgICAgICAgICA9 IE5VTEw7CisJc3JmLT5vZmZzZXRzICAgICAgICAgICA9IE5VTEw7CisJc3JmLT5iYXNlX3NpemUg ICAgICAgICA9IHNpemU7CisJc3JmLT5hdXRvZ2VuX2ZpbHRlciAgICA9IFNWR0EzRF9URVhfRklM VEVSX05PTkU7CisJc3JmLT5tdWx0aXNhbXBsZV9jb3VudCA9IG11bHRpc2FtcGxlX2NvdW50Owor CisJc3JmLT5yZXMuYmFja3VwX3NpemUgICA9IHN2Z2EzZHN1cmZhY2VfZ2V0X3NlcmlhbGl6ZWRf c2l6ZShzcmYtPmZvcm1hdCwKKwkJCQkJc3JmLT5iYXNlX3NpemUsCisJCQkJCXNyZi0+bWlwX2xl dmVsc1swXSwKKwkJCQkJc3JmLT5mbGFncyAmIFNWR0EzRF9TVVJGQUNFX0NVQkVNQVApOworCisJ LyoKKwkgKiBGcm9tIHRoaXMgcG9pbnQsIHRoZSBnZW5lcmljIHJlc291cmNlIG1hbmFnZW1lbnQg ZnVuY3Rpb25zCisJICogZGVzdHJveSB0aGUgb2JqZWN0IG9uIGZhaWx1cmUuCisJICovCisJcmV0 ID0gdm13X3N1cmZhY2VfaW5pdChkZXZfcHJpdiwgc3JmLCB2bXdfdXNlcl9zdXJmYWNlX2ZyZWUp OworCisJdHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKKwlyZXR1 cm4gcmV0OworCitvdXRfbm9fdXNlcl9zcmY6CisJdHRtX21lbV9nbG9iYWxfZnJlZSh2bXdfbWVt X2dsb2IoZGV2X3ByaXYpLCB1c2VyX2FjY291bnRpbmdfc2l6ZSk7CisKK291dF91bmxvY2s6CisJ dHRtX3JlYWRfdW5sb2NrKCZkZXZfcHJpdi0+cmVzZXJ2YXRpb25fc2VtKTsKKwlyZXR1cm4gcmV0 OworfQotLSAKMi4xLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1k ZXZlbAo=