From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: [RFC v3 3/8] drm/i915: update cursors asynchronously through atomic Date: Fri, 12 May 2017 16:10:49 -0300 Message-ID: <20170512191054.10074-4-gustavo@padovan.org> References: <20170512191054.10074-1-gustavo@padovan.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by gabe.freedesktop.org (Postfix) with ESMTPS id A36A06E70A for ; Fri, 12 May 2017 19:11:06 +0000 (UTC) Received: by mail-qt0-f193.google.com with SMTP id l39so7938931qtb.1 for ; Fri, 12 May 2017 12:11:06 -0700 (PDT) In-Reply-To: <20170512191054.10074-1-gustavo@padovan.org> 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 Cc: Gustavo Padovan , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org RnJvbTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNvbT4KCkFk ZCBzdXBwb3J0IHRvIGFzeW5jIHVwZGF0ZXMgb2YgY3Vyc29ycyBieSB1c2luZyB0aGUgbmV3IGF0 b21pYwppbnRlcmZhY2UgZm9yIHRoYXQuIEJhc2ljYWxseSB3aGF0IHRoaXMgY29tbWl0IGRvZXMg aXMgZG8gd2hhdAppbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZSgpIGRpZCBidXQgdGhyb3VnaCBh dG9taWMuCgp2MzoKCS0gc2V0IGNvcnJlY3Qgdm1hIHRvIG5ldyBzdGF0ZSBmb3IgY2xlYW51cAoJ LSBtb3ZlIHNpemUgY2hlY2tzIGJhY2sgdG8gZHJpdmVycyAoVmlsbGUgU3lyasOkbMOkKQoKdjI6 CgktIG1vdmUgZmIgc2V0dGluZyB0byBjb3JlIGFuZCB1c2UgbmV3IHN0YXRlIChFcmljIEFuaG9s dCkKCkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNvbT4KU2lnbmVkLW9m Zi1ieTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNvbT4KLS0t CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyB8ICA3MyArKysrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyAgICAgIHwgMTQ5 ICsrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA5NyBpbnNl cnRpb25zKCspLCAxMjUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfYXRvbWljX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9h dG9taWNfcGxhbmUuYwppbmRleCBjZmI0NzI5Li45NzRjOTFmIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwpAQCAtMjQ2LDExICsyNDYsODQgQEAgc3RhdGljIHZv aWQgaW50ZWxfcGxhbmVfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAl9 CiB9CiAKK3N0YXRpYyBpbnQgaW50ZWxfcGxhbmVfYXRvbWljX2FzeW5jX2NoZWNrKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAorCQkJCQkgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQor eworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9IHBsYW5lLT5zdGF0ZS0+Y3J0YzsKKwlzdHJ1Y3Qg ZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBjcnRjLT5zdGF0ZTsKKworCWlmIChwbGFuZS0+ dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoK KwkgKiBXaGVuIGNydGMgaXMgaW5hY3RpdmUgb3IgdGhlcmUgaXMgYSBtb2Rlc2V0IHBlbmRpbmcs CisJICogd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dwYXRoCisJICovCisJaWYg KCFjcnRjX3N0YXRlLT5hY3RpdmUgfHwgdG9faW50ZWxfY3J0Y19zdGF0ZShjcnRjX3N0YXRlKS0+ dXBkYXRlX3BpcGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBJZiBhbnkgcGFyYW1l dGVycyBjaGFuZ2UgdGhhdCBtYXkgYWZmZWN0IHdhdGVybWFya3MsCisJICogdGFrZSB0aGUgc2xv d3BhdGguIE9ubHkgY2hhbmdpbmcgZmIgb3IgcG9zaXRpb24gc2hvdWxkIGJlCisJICogaW4gdGhl IGZhc3RwYXRoLgorCSAqLworCWlmIChwbGFuZS0+c3RhdGUtPmNydGMgIT0gc3RhdGUtPmNydGMg fHwKKwkgICAgcGxhbmUtPnN0YXRlLT5zcmNfdyAhPSBzdGF0ZS0+c3JjX3cgfHwKKwkgICAgcGxh bmUtPnN0YXRlLT5zcmNfaCAhPSBzdGF0ZS0+c3JjX2ggfHwKKwkgICAgcGxhbmUtPnN0YXRlLT5j cnRjX3cgIT0gc3RhdGUtPmNydGNfdyB8fAorCSAgICBwbGFuZS0+c3RhdGUtPmNydGNfaCAhPSBz dGF0ZS0+Y3J0Y19oIHx8CisJICAgICFwbGFuZS0+c3RhdGUtPmZiICE9ICFzdGF0ZS0+ZmIpCisJ CXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsX3Bs YW5lX2F0b21pY19hc3luY191cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJCSAg ICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpuZXdfc3RhdGUpCit7CisJc3RydWN0IGludGVsX3Bs YW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5lKHBsYW5lKTsKKwlzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMgPSBwbGFuZS0+c3RhdGUtPmNydGM7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAq b2xkX2ZiOworCXN0cnVjdCBpOTE1X3ZtYSAqb2xkX3ZtYTsKKworCW9sZF92bWEgPSB0b19pbnRl bF9wbGFuZV9zdGF0ZShwbGFuZS0+c3RhdGUpLT52bWE7CisJb2xkX2ZiID0gcGxhbmUtPnN0YXRl LT5mYjsKKworCWk5MTVfZ2VtX3RyYWNrX2ZiKGludGVsX2ZiX29iaihvbGRfZmIpLCBpbnRlbF9m Yl9vYmoobmV3X3N0YXRlLT5mYiksCisJCQkgIGludGVsX3BsYW5lLT5mcm9udGJ1ZmZlcl9iaXQp OworCisJcGxhbmUtPnN0YXRlLT5zcmNfeCA9IG5ld19zdGF0ZS0+c3JjX3g7CisJcGxhbmUtPnN0 YXRlLT5zcmNfeSA9IG5ld19zdGF0ZS0+c3JjX3k7CisJcGxhbmUtPnN0YXRlLT5jcnRjX3ggPSBu ZXdfc3RhdGUtPmNydGNfeDsKKwlwbGFuZS0+c3RhdGUtPmNydGNfeSA9IG5ld19zdGF0ZS0+Y3J0 Y195OworCXBsYW5lLT5zdGF0ZS0+ZmIgPSBuZXdfc3RhdGUtPmZiOworCSp0b19pbnRlbF9wbGFu ZV9zdGF0ZShwbGFuZS0+c3RhdGUpID0gKnRvX2ludGVsX3BsYW5lX3N0YXRlKG5ld19zdGF0ZSk7 CisKKwl0b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdfc3RhdGUpLT52bWEgPSBvbGRfdm1hOworCW5l d19zdGF0ZS0+ZmIgPSBvbGRfZmI7CisKKwlpZiAocGxhbmUtPnN0YXRlLT52aXNpYmxlKSB7CisJ CXRyYWNlX2ludGVsX3VwZGF0ZV9wbGFuZShwbGFuZSwgdG9faW50ZWxfY3J0YyhjcnRjKSk7CisJ CWludGVsX3BsYW5lLT51cGRhdGVfcGxhbmUocGxhbmUsCisJCQkJCSAgdG9faW50ZWxfY3J0Y19z dGF0ZShjcnRjLT5zdGF0ZSksCisJCQkJCSAgdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmUtPnN0 YXRlKSk7CisJfSBlbHNlIHsKKwkJdHJhY2VfaW50ZWxfZGlzYWJsZV9wbGFuZShwbGFuZSwgdG9f aW50ZWxfY3J0YyhjcnRjKSk7CisJCWludGVsX3BsYW5lLT5kaXNhYmxlX3BsYW5lKHBsYW5lLCBj cnRjKTsKKwl9CisKKwltdXRleF9sb2NrKCZwbGFuZS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlu dGVsX2NsZWFudXBfcGxhbmVfZmIocGxhbmUsIG5ld19zdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZw bGFuZS0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworfQorCiBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hl bHBlcl9mdW5jcyBpbnRlbF9wbGFuZV9oZWxwZXJfZnVuY3MgPSB7CiAJLnByZXBhcmVfZmIgPSBp bnRlbF9wcmVwYXJlX3BsYW5lX2ZiLAogCS5jbGVhbnVwX2ZiID0gaW50ZWxfY2xlYW51cF9wbGFu ZV9mYiwKIAkuYXRvbWljX2NoZWNrID0gaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrLAogCS5hdG9t aWNfdXBkYXRlID0gaW50ZWxfcGxhbmVfYXRvbWljX3VwZGF0ZSwKKwkuYXRvbWljX2FzeW5jX2No ZWNrID0gaW50ZWxfcGxhbmVfYXRvbWljX2FzeW5jX2NoZWNrLAorCS5hdG9taWNfYXN5bmNfdXBk YXRlID0gaW50ZWxfcGxhbmVfYXRvbWljX2FzeW5jX3VwZGF0ZSwKIH07CiAKIC8qKgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDIwN2YxNDQuLjdmNGM4ZDMgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTEzMDEwLDYgKzEzMDEwLDI2IEBAIHN0YXRp YyBpbnQgaW50ZWxfYXRvbWljX2NvbW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKIAlpbnQgcmV0ID0g MDsKIAorCS8qCisJICogVGhlIGF0b21pYyBhc3luYyB1cGRhdGUgZmFzdCBwYXRoIHRha2VzIGNh cmUKKwkgKiBvZiBhdm9pZGluZyB0aGUgdmJsYW5rIHdhaXRzIGZvciBzaW1wbGUgY3Vyc29yCisJ ICogbW92ZW1lbnQgYW5kIGZsaXBzLiBGb3IgY3Vyc29yIG9uL29mZiBhbmQgc2l6ZSBjaGFuZ2Vz LAorCSAqIHdlIHdhbnQgdG8gcGVyZm9ybSB0aGUgdmJsYW5rIHdhaXRzIHNvIHRoYXQgd2F0ZXJt YXJrCisJICogdXBkYXRlcyBoYXBwZW4gZHVyaW5nIHRoZSBjb3JyZWN0IGZyYW1lcy4gR2VuOSsg aGF2ZQorCSAqIGRvdWJsZSBidWZmZXJlZCB3YXRlcm1hcmtzIGFuZCBzbyBzaG91bGRuJ3QgbmVl ZCB0aGlzLgorCSAqLworCWlmIChzdGF0ZS0+YXN5bmNfdXBkYXRlKSB7CisJCXJldCA9IG11dGV4 X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKworCQlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9wcmVwYXJlX3BsYW5lcyhk ZXYsIHN0YXRlKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwkJZHJt X2F0b21pY19oZWxwZXJfYXN5bmNfY29tbWl0KGRldiwgc3RhdGUpOworCQlyZXR1cm4gMDsKKwl9 CisKIAlyZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9zZXR1cF9jb21taXQoc3RhdGUsIG5vbmJsb2Nr KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTMxNjgsNiArMTMxODgsOSBAQCBpbnRl bF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQl9CiAJfQogCisJ aWYgKG5ld19zdGF0ZS0+c3RhdGUtPmFzeW5jX3VwZGF0ZSkKKwkJcmV0dXJuIDA7CisKIAlpZiAo IW9iaiAmJiAhb2xkX29iaikKIAkJcmV0dXJuIDA7CiAKQEAgLTEzMzk1LDEzMiArMTM0MTgsOCBA QCBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIGludGVsX3BsYW5lX2Z1bmNzID0gewogCS5h dG9taWNfZGVzdHJveV9zdGF0ZSA9IGludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCiB9OwogCi1z dGF0aWMgaW50Ci1pbnRlbF9sZWdhY3lfY3Vyc29yX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpw bGFuZSwKLQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCSAgIHN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiLAotCQkJICAgaW50IGNydGNfeCwgaW50IGNydGNfeSwKLQkJCSAgIHVuc2ln bmVkIGludCBjcnRjX3csIHVuc2lnbmVkIGludCBjcnRjX2gsCi0JCQkgICB1aW50MzJfdCBzcmNf eCwgdWludDMyX3Qgc3JjX3ksCi0JCQkgICB1aW50MzJfdCBzcmNfdywgdWludDMyX3Qgc3JjX2gs Ci0JCQkgICBzdHJ1Y3QgZHJtX21vZGVzZXRfYWNxdWlyZV9jdHggKmN0eCkKLXsKLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmRldik7Ci0JaW50IHJl dDsKLQlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfcGxhbmVfc3RhdGUsICpuZXdfcGxhbmVf c3RhdGU7Ci0Jc3RydWN0IGludGVsX3BsYW5lICppbnRlbF9wbGFuZSA9IHRvX2ludGVsX3BsYW5l KHBsYW5lKTsKLQlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmI7Ci0Jc3RydWN0IGRybV9j cnRjX3N0YXRlICpjcnRjX3N0YXRlID0gY3J0Yy0+c3RhdGU7Ci0Jc3RydWN0IGk5MTVfdm1hICpv bGRfdm1hOwotCi0JLyoKLQkgKiBXaGVuIGNydGMgaXMgaW5hY3RpdmUgb3IgdGhlcmUgaXMgYSBt b2Rlc2V0IHBlbmRpbmcsCi0JICogd2FpdCBmb3IgaXQgdG8gY29tcGxldGUgaW4gdGhlIHNsb3dw YXRoCi0JICovCi0JaWYgKCFjcnRjX3N0YXRlLT5hY3RpdmUgfHwgbmVlZHNfbW9kZXNldChjcnRj X3N0YXRlKSB8fAotCSAgICB0b19pbnRlbF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpLT51cGRhdGVf cGlwZSkKLQkJZ290byBzbG93OwotCi0Jb2xkX3BsYW5lX3N0YXRlID0gcGxhbmUtPnN0YXRlOwot Ci0JLyoKLQkgKiBJZiBhbnkgcGFyYW1ldGVycyBjaGFuZ2UgdGhhdCBtYXkgYWZmZWN0IHdhdGVy bWFya3MsCi0JICogdGFrZSB0aGUgc2xvd3BhdGguIE9ubHkgY2hhbmdpbmcgZmIgb3IgcG9zaXRp b24gc2hvdWxkIGJlCi0JICogaW4gdGhlIGZhc3RwYXRoLgotCSAqLwotCWlmIChvbGRfcGxhbmVf c3RhdGUtPmNydGMgIT0gY3J0YyB8fAotCSAgICBvbGRfcGxhbmVfc3RhdGUtPnNyY193ICE9IHNy Y193IHx8Ci0JICAgIG9sZF9wbGFuZV9zdGF0ZS0+c3JjX2ggIT0gc3JjX2ggfHwKLQkgICAgb2xk X3BsYW5lX3N0YXRlLT5jcnRjX3cgIT0gY3J0Y193IHx8Ci0JICAgIG9sZF9wbGFuZV9zdGF0ZS0+ Y3J0Y19oICE9IGNydGNfaCB8fAotCSAgICAhb2xkX3BsYW5lX3N0YXRlLT5mYiAhPSAhZmIpCi0J CWdvdG8gc2xvdzsKLQotCW5ld19wbGFuZV9zdGF0ZSA9IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9z dGF0ZShwbGFuZSk7Ci0JaWYgKCFuZXdfcGxhbmVfc3RhdGUpCi0JCXJldHVybiAtRU5PTUVNOwot Ci0JZHJtX2F0b21pY19zZXRfZmJfZm9yX3BsYW5lKG5ld19wbGFuZV9zdGF0ZSwgZmIpOwotCi0J bmV3X3BsYW5lX3N0YXRlLT5zcmNfeCA9IHNyY194OwotCW5ld19wbGFuZV9zdGF0ZS0+c3JjX3kg PSBzcmNfeTsKLQluZXdfcGxhbmVfc3RhdGUtPnNyY193ID0gc3JjX3c7Ci0JbmV3X3BsYW5lX3N0 YXRlLT5zcmNfaCA9IHNyY19oOwotCW5ld19wbGFuZV9zdGF0ZS0+Y3J0Y194ID0gY3J0Y194Owot CW5ld19wbGFuZV9zdGF0ZS0+Y3J0Y195ID0gY3J0Y195OwotCW5ld19wbGFuZV9zdGF0ZS0+Y3J0 Y193ID0gY3J0Y193OwotCW5ld19wbGFuZV9zdGF0ZS0+Y3J0Y19oID0gY3J0Y19oOwotCi0JcmV0 ID0gaW50ZWxfcGxhbmVfYXRvbWljX2NoZWNrX3dpdGhfc3RhdGUodG9faW50ZWxfY3J0Y19zdGF0 ZShjcnRjLT5zdGF0ZSksCi0JCQkJCQkgIHRvX2ludGVsX3BsYW5lX3N0YXRlKG5ld19wbGFuZV9z dGF0ZSkpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0KLQlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKLQlpZiAocmV0KQot CQlnb3RvIG91dF9mcmVlOwotCi0JaWYgKElOVEVMX0lORk8oZGV2X3ByaXYpLT5jdXJzb3JfbmVl ZHNfcGh5c2ljYWwpIHsKLQkJaW50IGFsaWduID0gSVNfSTgzMChkZXZfcHJpdikgPyAxNiAqIDEw MjQgOiAyNTY7Ci0KLQkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKGludGVsX2Zi X29iaihmYiksIGFsaWduKTsKLQkJaWYgKHJldCkgewotCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVk IHRvIGF0dGFjaCBwaHlzIG9iamVjdFxuIik7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQl9 IGVsc2UgewotCQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQotCQl2bWEgPSBpbnRlbF9waW5fYW5k X2ZlbmNlX2ZiX29iaihmYiwgbmV3X3BsYW5lX3N0YXRlLT5yb3RhdGlvbik7Ci0JCWlmIChJU19F UlIodm1hKSkgewotCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIHBpbiBvYmplY3RcbiIpOwot Ci0JCQlyZXQgPSBQVFJfRVJSKHZtYSk7Ci0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQl0 b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdfcGxhbmVfc3RhdGUpLT52bWEgPSB2bWE7Ci0JfQotCi0J b2xkX2ZiID0gb2xkX3BsYW5lX3N0YXRlLT5mYjsKLQlvbGRfdm1hID0gdG9faW50ZWxfcGxhbmVf c3RhdGUob2xkX3BsYW5lX3N0YXRlKS0+dm1hOwotCi0JaTkxNV9nZW1fdHJhY2tfZmIoaW50ZWxf ZmJfb2JqKG9sZF9mYiksIGludGVsX2ZiX29iaihmYiksCi0JCQkgIGludGVsX3BsYW5lLT5mcm9u dGJ1ZmZlcl9iaXQpOwotCi0JLyogU3dhcCBwbGFuZSBzdGF0ZSAqLwotCW5ld19wbGFuZV9zdGF0 ZS0+ZmVuY2UgPSBvbGRfcGxhbmVfc3RhdGUtPmZlbmNlOwotCSp0b19pbnRlbF9wbGFuZV9zdGF0 ZShvbGRfcGxhbmVfc3RhdGUpID0gKnRvX2ludGVsX3BsYW5lX3N0YXRlKG5ld19wbGFuZV9zdGF0 ZSk7Ci0JbmV3X3BsYW5lX3N0YXRlLT5mZW5jZSA9IE5VTEw7Ci0JbmV3X3BsYW5lX3N0YXRlLT5m YiA9IG9sZF9mYjsKLQl0b19pbnRlbF9wbGFuZV9zdGF0ZShuZXdfcGxhbmVfc3RhdGUpLT52bWEg PSBvbGRfdm1hOwotCi0JaWYgKHBsYW5lLT5zdGF0ZS0+dmlzaWJsZSkgewotCQl0cmFjZV9pbnRl bF91cGRhdGVfcGxhbmUocGxhbmUsIHRvX2ludGVsX2NydGMoY3J0YykpOwotCQlpbnRlbF9wbGFu ZS0+dXBkYXRlX3BsYW5lKHBsYW5lLAotCQkJCQkgIHRvX2ludGVsX2NydGNfc3RhdGUoY3J0Yy0+ c3RhdGUpLAotCQkJCQkgIHRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSkpOwotCX0g ZWxzZSB7Ci0JCXRyYWNlX2ludGVsX2Rpc2FibGVfcGxhbmUocGxhbmUsIHRvX2ludGVsX2NydGMo Y3J0YykpOwotCQlpbnRlbF9wbGFuZS0+ZGlzYWJsZV9wbGFuZShwbGFuZSwgY3J0Yyk7Ci0JfQot Ci0JaW50ZWxfY2xlYW51cF9wbGFuZV9mYihwbGFuZSwgbmV3X3BsYW5lX3N0YXRlKTsKLQotb3V0 X3VubG9jazoKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKLW91 dF9mcmVlOgotCWludGVsX3BsYW5lX2Rlc3Ryb3lfc3RhdGUocGxhbmUsIG5ld19wbGFuZV9zdGF0 ZSk7Ci0JcmV0dXJuIHJldDsKLQotc2xvdzoKLQlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBk YXRlX3BsYW5lKHBsYW5lLCBjcnRjLCBmYiwKLQkJCQkJICAgICAgY3J0Y194LCBjcnRjX3ksIGNy dGNfdywgY3J0Y19oLAotCQkJCQkgICAgICBzcmNfeCwgc3JjX3ksIHNyY193LCBzcmNfaCwgY3R4 KTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgaW50ZWxfY3Vyc29y X3BsYW5lX2Z1bmNzID0gewotCS51cGRhdGVfcGxhbmUgPSBpbnRlbF9sZWdhY3lfY3Vyc29yX3Vw ZGF0ZSwKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lLAog CS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKIAkuZGVz dHJveSA9IGludGVsX3BsYW5lX2Rlc3Ryb3ksCiAJLnNldF9wcm9wZXJ0eSA9IGRybV9hdG9taWNf aGVscGVyX3BsYW5lX3NldF9wcm9wZXJ0eSwKLS0gCjIuOS4zCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1k ZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK