From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: [PATCH v2 01/11] dma-buf/sync_file: de-stage sync_file Date: Wed, 27 Jan 2016 11:30:29 -0200 Message-ID: <1453901439-19467-2-git-send-email-gustavo@padovan.org> References: <1453901439-19467-1-git-send-email-gustavo@padovan.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-yk0-f179.google.com (mail-yk0-f179.google.com [209.85.160.179]) by gabe.freedesktop.org (Postfix) with ESMTPS id 910D86E6E8 for ; Wed, 27 Jan 2016 05:30:51 -0800 (PST) Received: by mail-yk0-f179.google.com with SMTP id k129so9539657yke.0 for ; Wed, 27 Jan 2016 05:30:51 -0800 (PST) In-Reply-To: <1453901439-19467-1-git-send-email-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: Greg Kroah-Hartman Cc: devel@driverdev.osuosl.org, Daniel Stone , Daniel Vetter , Riley Andrews , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= , Gustavo Padovan , John Harrison List-Id: dri-devel@lists.freedesktop.org RnJvbTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNvLnVrPgoK c3luY19maWxlIGlzIHVzZWZ1bCB0byBjb25uZWN0IG9uZSBvciBtb3JlIGZlbmNlcyB0byB0aGUg ZmlsZS4gVGhlIGZpbGUgaXMKdXNlZCBieSB1c2Vyc3BhY2UgdG8gdHJhY2sgZmVuY2VzLgoKU2ln bmVkLW9mZi1ieTogR3VzdGF2byBQYWRvdmFuIDxndXN0YXZvLnBhZG92YW5AY29sbGFib3JhLmNv LnVrPgotLS0KIGRyaXZlcnMvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAyICsKIGRyaXZlcnMvZG1hLWJ1Zi9LY29uZmlnICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgIDExICsKIGRyaXZlcnMvZG1hLWJ1Zi9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZG1hLWJ1Zi9zeW5jX2ZpbGUuYyAgICAgICAgICAg ICAgICAgICAgICAgIHwgNDQwICsrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvc3luYy5jICAgICAgICAgICAgICAgICAgICAgfCA0MTkgLS0tLS0tLS0tLS0t LS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaCAgICAgICAgICAgICAgICAg ICAgIHwgMTA1ICstLS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMgICAg ICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgg ICAgICAgICAgICAgICB8ICA0NCAtLS0KIGluY2x1ZGUvbGludXgvc3luY19maWxlLmggICAgICAg ICAgICAgICAgICAgICAgICAgIHwgMTIzICsrKysrKwogaW5jbHVkZS90cmFjZS9ldmVudHMvc3lu Y19maWxlLmggICAgICAgICAgICAgICAgICAgfCAgNTcgKysrCiAuLi4vYW5kcm9pZC91YXBpID0+ IGluY2x1ZGUvdWFwaS9saW51eH0vc3luYy5oICAgICB8ICAxMiArLQogMTIgZmlsZXMgY2hhbmdl ZCwgNjQ0IGluc2VydGlvbnMoKyksIDU3MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2RtYS1idWYvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZG1h LWJ1Zi9zeW5jX2ZpbGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvc3luY19m aWxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5jX2ZpbGUu aAogcmVuYW1lIHtkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpID0+IGluY2x1ZGUvdWFwaS9s aW51eH0vc3luYy5oICg5MCUpCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVy cy9LY29uZmlnCmluZGV4IGQyYWMzMzkuLjQzMGY3NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2Nv bmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTExNCw2ICsxMTQsOCBAQCBzb3VyY2UgImRy aXZlcnMvcnRjL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9kbWEvS2NvbmZpZyIKIAorc291 cmNlICJkcml2ZXJzL2RtYS1idWYvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2RjYS9LY29u ZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvYXV4ZGlzcGxheS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9kbWEtYnVmL0tjb25maWcgYi9kcml2ZXJzL2RtYS1idWYvS2NvbmZpZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI0YmM0Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9kbWEtYnVmL0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorbWVudSAiRE1BQlVGIG9w dGlvbnMiCisKK2NvbmZpZyBTWU5DX0ZJTEUKKwlib29sICJzeW5jX2ZpbGUgc3VwcG9ydCBmb3Ig ZmVuY2VzIgorCWRlZmF1bHQgbgorCXNlbGVjdCBBTk9OX0lOT0RFUworCXNlbGVjdCBETUFfU0hB UkVEX0JVRkZFUgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZlbmNl IGZyYW1ld29yayBzeW5jaHJvbml6YXRpb24gdG8gZXhwb3J0CisJICBzeW5jX2ZpbGVzIHRvIHVz ZXJzcGFjZSB0aGF0IGNhbiByZXByZXNlbnQgb25lIG9yIG1vcmUgZmVuY2VzLgorZW5kbWVudQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL01ha2VmaWxlIGIvZHJpdmVycy9kbWEtYnVmL01h a2VmaWxlCmluZGV4IDU3YTY3NWYuLjRhNDI0ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hLWJ1 Zi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS1idWYvTWFrZWZpbGUKQEAgLTEgKzEsMiBAQAog b2JqLXkgOj0gZG1hLWJ1Zi5vIGZlbmNlLm8gcmVzZXJ2YXRpb24ubyBzZXFuby1mZW5jZS5vCitv YmotJChDT05GSUdfU1lOQ19GSUxFKQkJKz0gc3luY19maWxlLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZG1hLWJ1Zi9zeW5jX2ZpbGUuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9zeW5jX2ZpbGUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQ3NGRkCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9kbWEtYnVmL3N5bmNfZmlsZS5jCkBAIC0wLDAgKzEsNDQwIEBACisvKgorICog ZHJpdmVycy9kbWEtYnVmL3N5bmNfZmlsZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdv b2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUg Y29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQu aD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8 bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgv dWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CisjaW5jbHVkZSA8bGlu dXgvc3luY19maWxlLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC9zeW5jLmg+CisKKyNkZWZpbmUg Q1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9zeW5jX2ZpbGUuaD4K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19maWxlX2ZvcHM7CisK K3N0YXRpYyBzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGVfYWxsb2MoaW50IHNpemUsIGNvbnN0 IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOworCisJc3luY19m aWxlID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN5bmNfZmlsZSkKKwkJcmV0 dXJuIE5VTEw7CisKKwlzeW5jX2ZpbGUtPmZpbGUgPSBhbm9uX2lub2RlX2dldGZpbGUoInN5bmNf ZmlsZSIsICZzeW5jX2ZpbGVfZm9wcywKKwkJCQkJICAgICBzeW5jX2ZpbGUsIDApOworCWlmIChJ U19FUlIoc3luY19maWxlLT5maWxlKSkKKwkJZ290byBlcnI7CisKKwlrcmVmX2luaXQoJnN5bmNf ZmlsZS0+a3JlZik7CisJc3RybGNweShzeW5jX2ZpbGUtPm5hbWUsIG5hbWUsIHNpemVvZihzeW5j X2ZpbGUtPm5hbWUpKTsKKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN5bmNfZmlsZS0+d3EpOwor CisJcmV0dXJuIHN5bmNfZmlsZTsKKworZXJyOgorCWtmcmVlKHN5bmNfZmlsZSk7CisJcmV0dXJu IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZlbmNlX2NoZWNrX2NiX2Z1bmMoc3RydWN0IGZlbmNl ICpmLCBzdHJ1Y3QgZmVuY2VfY2IgKmNiKQoreworCXN0cnVjdCBzeW5jX2ZpbGVfY2IgKmNoZWNr OworCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZTsKKworCWNoZWNrID0gY29udGFpbmVyX29m KGNiLCBzdHJ1Y3Qgc3luY19maWxlX2NiLCBjYik7CisJc3luY19maWxlID0gY2hlY2stPnN5bmNf ZmlsZTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzeW5jX2ZpbGUtPnN0YXR1cykpCisJ CXdha2VfdXBfYWxsKCZzeW5jX2ZpbGUtPndxKTsKK30KKworLyogVE9ETzogaW1wbGVtZW50IGEg Y3JlYXRlIHdoaWNoIHRha2VzIG1vcmUgdGhhdCBvbmUgZmVuY2UgKi8KK3N0cnVjdCBzeW5jX2Zp bGUgKnN5bmNfZmlsZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGZlbmNlICpmZW5j ZSkKK3sKKwlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7CisKKwlzeW5jX2ZpbGUgPSBzeW5j X2ZpbGVfYWxsb2Mob2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmlsZSwgY2JzWzFdKSwKKwkJCQkgICAg bmFtZSk7CisJaWYgKCFzeW5jX2ZpbGUpCisJCXJldHVybiBOVUxMOworCisJc3luY19maWxlLT5u dW1fZmVuY2VzID0gMTsKKwlhdG9taWNfc2V0KCZzeW5jX2ZpbGUtPnN0YXR1cywgMSk7CisKKwlz eW5jX2ZpbGUtPmNic1swXS5mZW5jZSA9IGZlbmNlOworCXN5bmNfZmlsZS0+Y2JzWzBdLnN5bmNf ZmlsZSA9IHN5bmNfZmlsZTsKKwlpZiAoZmVuY2VfYWRkX2NhbGxiYWNrKGZlbmNlLCAmc3luY19m aWxlLT5jYnNbMF0uY2IsCisJCQkgICAgICAgZmVuY2VfY2hlY2tfY2JfZnVuYykpCisJCWF0b21p Y19kZWMoJnN5bmNfZmlsZS0+c3RhdHVzKTsKKworCXJldHVybiBzeW5jX2ZpbGU7Cit9CitFWFBP UlRfU1lNQk9MKHN5bmNfZmlsZV9jcmVhdGUpOworCitzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2Zp bGVfZmRnZXQoaW50IGZkKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gZmdldChmZCk7CisKKwlp ZiAoIWZpbGUpCisJCXJldHVybiBOVUxMOworCisJaWYgKGZpbGUtPmZfb3AgIT0gJnN5bmNfZmls ZV9mb3BzKQorCQlnb3RvIGVycjsKKworCXJldHVybiBmaWxlLT5wcml2YXRlX2RhdGE7CisKK2Vy cjoKKwlmcHV0KGZpbGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2Zp bGVfZmRnZXQpOworCit2b2lkIHN5bmNfZmlsZV9wdXQoc3RydWN0IHN5bmNfZmlsZSAqc3luY19m aWxlKQoreworCWZwdXQoc3luY19maWxlLT5maWxlKTsKK30KK0VYUE9SVF9TWU1CT0woc3luY19m aWxlX3B1dCk7CisKK3ZvaWQgc3luY19maWxlX2luc3RhbGwoc3RydWN0IHN5bmNfZmlsZSAqc3lu Y19maWxlLCBpbnQgZmQpCit7CisJZmRfaW5zdGFsbChmZCwgc3luY19maWxlLT5maWxlKTsKK30K K0VYUE9SVF9TWU1CT0woc3luY19maWxlX2luc3RhbGwpOworCitzdGF0aWMgdm9pZCBzeW5jX2Zp bGVfYWRkX2ZlbmNlKHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwgaW50ICppLAorCQkJCXN0 cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJc3luY19maWxlLT5jYnNbKmldLmZlbmNlID0gZmVuY2U7 CisJc3luY19maWxlLT5jYnNbKmldLnN5bmNfZmlsZSA9IHN5bmNfZmlsZTsKKworCWlmICghZmVu Y2VfYWRkX2NhbGxiYWNrKGZlbmNlLCAmc3luY19maWxlLT5jYnNbKmldLmNiLAorCQkJCWZlbmNl X2NoZWNrX2NiX2Z1bmMpKSB7CisJCWZlbmNlX2dldChmZW5jZSk7CisJCSgqaSkrKzsKKwl9Cit9 CisKK3N0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9tZXJnZShjb25zdCBjaGFyICpuYW1lLAor CQkJCSAgc3RydWN0IHN5bmNfZmlsZSAqYSwgc3RydWN0IHN5bmNfZmlsZSAqYikKK3sKKwlpbnQg bnVtX2ZlbmNlcyA9IGEtPm51bV9mZW5jZXMgKyBiLT5udW1fZmVuY2VzOworCXN0cnVjdCBzeW5j X2ZpbGUgKnN5bmNfZmlsZTsKKwlpbnQgaSwgaV9hLCBpX2I7CisJdW5zaWduZWQgbG9uZyBzaXpl ID0gb2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmlsZSwgY2JzW251bV9mZW5jZXNdKTsKKworCXN5bmNf ZmlsZSA9IHN5bmNfZmlsZV9hbGxvYyhzaXplLCBuYW1lKTsKKwlpZiAoIXN5bmNfZmlsZSkKKwkJ cmV0dXJuIE5VTEw7CisKKwlhdG9taWNfc2V0KCZzeW5jX2ZpbGUtPnN0YXR1cywgbnVtX2ZlbmNl cyk7CisKKwkvKgorCSAqIEFzc3VtZSBzeW5jX2ZpbGUgYSBhbmQgYiBhcmUgYm90aCBvcmRlcmVk IGFuZCBoYXZlIG5vCisJICogZHVwbGljYXRlcyB3aXRoIHRoZSBzYW1lIGNvbnRleHQuCisJICoK KwkgKiBJZiBhIHN5bmNfZmlsZSBjYW4gb25seSBiZSBjcmVhdGVkIHdpdGggc3luY19maWxlX21l cmdlCisJICogYW5kIHN5bmNfZmlsZV9jcmVhdGUsIHRoaXMgaXMgYSByZWFzb25hYmxlIGFzc3Vt cHRpb24uCisJICovCisJZm9yIChpID0gaV9hID0gaV9iID0gMDsgaV9hIDwgYS0+bnVtX2ZlbmNl cyAmJiBpX2IgPCBiLT5udW1fZmVuY2VzOyApIHsKKwkJc3RydWN0IGZlbmNlICpwdF9hID0gYS0+ Y2JzW2lfYV0uZmVuY2U7CisJCXN0cnVjdCBmZW5jZSAqcHRfYiA9IGItPmNic1tpX2JdLmZlbmNl OworCisJCWlmIChwdF9hLT5jb250ZXh0IDwgcHRfYi0+Y29udGV4dCkgeworCQkJc3luY19maWxl X2FkZF9mZW5jZShzeW5jX2ZpbGUsICZpLCBwdF9hKTsKKworCQkJaV9hKys7CisJCX0gZWxzZSBp ZiAocHRfYS0+Y29udGV4dCA+IHB0X2ItPmNvbnRleHQpIHsKKwkJCXN5bmNfZmlsZV9hZGRfZmVu Y2Uoc3luY19maWxlLCAmaSwgcHRfYik7CisKKwkJCWlfYisrOworCQl9IGVsc2UgeworCQkJaWYg KHB0X2EtPnNlcW5vIC0gcHRfYi0+c2Vxbm8gPD0gSU5UX01BWCkKKwkJCQlzeW5jX2ZpbGVfYWRk X2ZlbmNlKHN5bmNfZmlsZSwgJmksIHB0X2EpOworCQkJZWxzZQorCQkJCXN5bmNfZmlsZV9hZGRf ZmVuY2Uoc3luY19maWxlLCAmaSwgcHRfYik7CisKKwkJCWlfYSsrOworCQkJaV9iKys7CisJCX0K Kwl9CisKKwlmb3IgKDsgaV9hIDwgYS0+bnVtX2ZlbmNlczsgaV9hKyspCisJCXN5bmNfZmlsZV9h ZGRfZmVuY2Uoc3luY19maWxlLCAmaSwgYS0+Y2JzW2lfYV0uZmVuY2UpOworCisJZm9yICg7IGlf YiA8IGItPm51bV9mZW5jZXM7IGlfYisrKQorCQlzeW5jX2ZpbGVfYWRkX2ZlbmNlKHN5bmNfZmls ZSwgJmksIGItPmNic1tpX2JdLmZlbmNlKTsKKworCWlmIChudW1fZmVuY2VzID4gaSkKKwkJYXRv bWljX3N1YihudW1fZmVuY2VzIC0gaSwgJnN5bmNfZmlsZS0+c3RhdHVzKTsKKwlzeW5jX2ZpbGUt Pm51bV9mZW5jZXMgPSBpOworCisJcmV0dXJuIHN5bmNfZmlsZTsKK30KK0VYUE9SVF9TWU1CT0wo c3luY19maWxlX21lcmdlKTsKKworaW50IHN5bmNfZmlsZV93YWl0KHN0cnVjdCBzeW5jX2ZpbGUg KnN5bmNfZmlsZSwgbG9uZyB0aW1lb3V0KQoreworCWxvbmcgcmV0OworCWludCBpOworCisJaWYg KHRpbWVvdXQgPCAwKQorCQl0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7CisJZWxzZQor CQl0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKworCXRyYWNlX3N5bmNfd2Fp dChzeW5jX2ZpbGUsIDEpOworCWZvciAoaSA9IDA7IGkgPCBzeW5jX2ZpbGUtPm51bV9mZW5jZXM7 ICsraSkKKwkJdHJhY2VfZmVuY2Uoc3luY19maWxlLT5jYnNbaV0uZmVuY2UpOworCXJldCA9IHdh aXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHN5bmNfZmlsZS0+d3EsCisJCQkJCSAgICAg ICBhdG9taWNfcmVhZCgmc3luY19maWxlLT5zdGF0dXMpIDw9IDAsCisJCQkJCSAgICAgICB0aW1l b3V0KTsKKwl0cmFjZV9zeW5jX3dhaXQoc3luY19maWxlLCAwKTsKKworCWlmIChyZXQgPCAwKSB7 CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQlpZiAodGltZW91dCkK KwkJCXByX2luZm8oInN5bmNfZmlsZSB0aW1lb3V0IG9uIFslcF0gYWZ0ZXIgJWRtc1xuIiwKKwkJ CQlzeW5jX2ZpbGUsIGppZmZpZXNfdG9fbXNlY3ModGltZW91dCkpOworCQlyZXR1cm4gLUVUSU1F OworCX0KKworCXJldCA9IGF0b21pY19yZWFkKCZzeW5jX2ZpbGUtPnN0YXR1cyk7CisJaWYgKHJl dCkKKwkJcHJfaW5mbygic3luY19maWxlIGVycm9yICVsZCBvbiBbJXBdXG4iLCByZXQsIHN5bmNf ZmlsZSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZpbGVfd2FpdCk7 CisKK3N0YXRpYyB2b2lkIHN5bmNfZmlsZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0 cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc3lu Y19maWxlLAorCQkJCQkJICAgICBrcmVmKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBz eW5jX2ZpbGUtPm51bV9mZW5jZXM7ICsraSkgeworCQlmZW5jZV9yZW1vdmVfY2FsbGJhY2soc3lu Y19maWxlLT5jYnNbaV0uZmVuY2UsCisJCQkJICAgICAgJnN5bmNfZmlsZS0+Y2JzW2ldLmNiKTsK KwkJZmVuY2VfcHV0KHN5bmNfZmlsZS0+Y2JzW2ldLmZlbmNlKTsKKwl9CisKKwlrZnJlZShzeW5j X2ZpbGUpOworfQorCitzdGF0aWMgaW50IHN5bmNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmls ZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWtyZWZfcHV0KCZzeW5jX2ZpbGUtPmtyZWYsIHN5 bmNfZmlsZV9mcmVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzeW5j X2ZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1 Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHN0YXR1 czsKKworCXBvbGxfd2FpdChmaWxlLCAmc3luY19maWxlLT53cSwgd2FpdCk7CisKKwlzdGF0dXMg PSBhdG9taWNfcmVhZCgmc3luY19maWxlLT5zdGF0dXMpOworCisJaWYgKCFzdGF0dXMpCisJCXJl dHVybiBQT0xMSU47CisJZWxzZSBpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIFBPTExFUlI7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHN5bmNfZmlsZV9pb2N0bF93YWl0KHN0cnVjdCBz eW5jX2ZpbGUgKnN5bmNfZmlsZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJX19zMzIg dmFsdWU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnZhbHVlLCAodm9pZCBfX3VzZXIgKilhcmcs IHNpemVvZih2YWx1ZSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBzeW5jX2ZpbGVf d2FpdChzeW5jX2ZpbGUsIHZhbHVlKTsKK30KKworc3RhdGljIGxvbmcgc3luY19maWxlX2lvY3Rs X21lcmdlKHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcg YXJnKQoreworCWludCBmZCA9IGdldF91bnVzZWRfZmRfZmxhZ3MoT19DTE9FWEVDKTsKKwlpbnQg ZXJyOworCXN0cnVjdCBzeW5jX2ZpbGUgKmZlbmNlMiwgKmZlbmNlMzsKKwlzdHJ1Y3Qgc3luY19t ZXJnZV9kYXRhIGRhdGE7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmQ7CisKKwlpZiAoY29w eV9mcm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRhdGEpKSkgewor CQllcnIgPSAtRUZBVUxUOworCQlnb3RvIGVycl9wdXRfZmQ7CisJfQorCisJZmVuY2UyID0gc3lu Y19maWxlX2ZkZ2V0KGRhdGEuZmQyKTsKKwlpZiAoIWZlbmNlMikgeworCQllcnIgPSAtRU5PRU5U OworCQlnb3RvIGVycl9wdXRfZmQ7CisJfQorCisJZGF0YS5uYW1lW3NpemVvZihkYXRhLm5hbWUp IC0gMV0gPSAnXDAnOworCWZlbmNlMyA9IHN5bmNfZmlsZV9tZXJnZShkYXRhLm5hbWUsIHN5bmNf ZmlsZSwgZmVuY2UyKTsKKwlpZiAoIWZlbmNlMykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3Rv IGVycl9wdXRfZmVuY2UyOworCX0KKworCWRhdGEuZmVuY2UgPSBmZDsKKwlpZiAoY29weV90b191 c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRhdGEsIHNpemVvZihkYXRhKSkpIHsKKwkJZXJyID0g LUVGQVVMVDsKKwkJZ290byBlcnJfcHV0X2ZlbmNlMzsKKwl9CisKKwlzeW5jX2ZpbGVfaW5zdGFs bChmZW5jZTMsIGZkKTsKKwlzeW5jX2ZpbGVfcHV0KGZlbmNlMik7CisJcmV0dXJuIDA7CisKK2Vy cl9wdXRfZmVuY2UzOgorCXN5bmNfZmlsZV9wdXQoZmVuY2UzKTsKKworZXJyX3B1dF9mZW5jZTI6 CisJc3luY19maWxlX3B1dChmZW5jZTIpOworCitlcnJfcHV0X2ZkOgorCXB1dF91bnVzZWRfZmQo ZmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3luY19maWxsX3B0X2luZm8oc3Ry dWN0IGZlbmNlICpmZW5jZSwgdm9pZCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IGZlbmNl X2luZm8gKmluZm8gPSBkYXRhOworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1 Y3QgZmVuY2VfaW5mbykpCisJCXJldHVybiAtRU5PTUVNOworCisJaW5mby0+bGVuID0gc2l6ZW9m KHN0cnVjdCBmZW5jZV9pbmZvKTsKKworCWlmIChmZW5jZS0+b3BzLT5maWxsX2RyaXZlcl9kYXRh KSB7CisJCXJldCA9IGZlbmNlLT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEoZmVuY2UsIGluZm8tPmRy aXZlcl9kYXRhLAorCQkJCQkJICAgc2l6ZSAtIHNpemVvZigqaW5mbykpOworCQlpZiAocmV0IDwg MCkKKwkJCXJldHVybiByZXQ7CisKKwkJaW5mby0+bGVuICs9IHJldDsKKwl9CisKKwlzdHJsY3B5 KGluZm8tPm9ial9uYW1lLCBmZW5jZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShmZW5jZSksCisJ CXNpemVvZihpbmZvLT5vYmpfbmFtZSkpOworCXN0cmxjcHkoaW5mby0+ZHJpdmVyX25hbWUsIGZl bmNlLT5vcHMtPmdldF9kcml2ZXJfbmFtZShmZW5jZSksCisJCXNpemVvZihpbmZvLT5kcml2ZXJf bmFtZSkpOworCWlmIChmZW5jZV9pc19zaWduYWxlZChmZW5jZSkpCisJCWluZm8tPnN0YXR1cyA9 IGZlbmNlLT5zdGF0dXMgPj0gMCA/IDEgOiBmZW5jZS0+c3RhdHVzOworCWVsc2UKKwkJaW5mby0+ c3RhdHVzID0gMDsKKwlpbmZvLT50aW1lc3RhbXBfbnMgPSBrdGltZV90b19ucyhmZW5jZS0+dGlt ZXN0YW1wKTsKKworCXJldHVybiBpbmZvLT5sZW47Cit9CisKK3N0YXRpYyBsb25nIHN5bmNfZmls ZV9pb2N0bF9mZW5jZV9pbmZvKHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwKKwkJCQkgICAg ICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN5bmNfZmlsZV9pbmZvX2RhdGEgKmRh dGE7CisJX191MzIgc2l6ZTsKKwlfX3UzMiBsZW4gPSAwOworCWludCByZXQsIGk7CisKKwlpZiAo Y29weV9mcm9tX3VzZXIoJnNpemUsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKHNpemUpKSkK KwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc3luY19maWxl X2luZm9fZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNpemUgPiA0MDk2KQorCQlz aXplID0gNDA5NjsKKworCWRhdGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICgh ZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdHJsY3B5KGRhdGEtPm5hbWUsIHN5bmNfZmls ZS0+bmFtZSwgc2l6ZW9mKGRhdGEtPm5hbWUpKTsKKwlkYXRhLT5zdGF0dXMgPSBhdG9taWNfcmVh ZCgmc3luY19maWxlLT5zdGF0dXMpOworCWlmIChkYXRhLT5zdGF0dXMgPj0gMCkKKwkJZGF0YS0+ c3RhdHVzID0gIWRhdGEtPnN0YXR1czsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc3luY19maWxl X2luZm9fZGF0YSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3luY19maWxlLT5udW1fZmVuY2VzOyAr K2kpIHsKKwkJc3RydWN0IGZlbmNlICpmZW5jZSA9IHN5bmNfZmlsZS0+Y2JzW2ldLmZlbmNlOwor CisJCXJldCA9IHN5bmNfZmlsbF9wdF9pbmZvKGZlbmNlLCAodTggKilkYXRhICsgbGVuLCBzaXpl IC0gbGVuKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCWxlbiArPSByZXQ7 CisJfQorCisJZGF0YS0+bGVuID0gbGVuOworCisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3Vz ZXIgKilhcmcsIGRhdGEsIGxlbikpCisJCXJldCA9IC1FRkFVTFQ7CisJZWxzZQorCQlyZXQgPSAw OworCitvdXQ6CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9u ZyBzeW5jX2ZpbGVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJ CQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxl ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNZTkNfSU9D X1dBSVQ6CisJCXJldHVybiBzeW5jX2ZpbGVfaW9jdGxfd2FpdChzeW5jX2ZpbGUsIGFyZyk7CisK KwljYXNlIFNZTkNfSU9DX01FUkdFOgorCQlyZXR1cm4gc3luY19maWxlX2lvY3RsX21lcmdlKHN5 bmNfZmlsZSwgYXJnKTsKKworCWNhc2UgU1lOQ19JT0NfRkVOQ0VfSU5GTzoKKwkJcmV0dXJuIHN5 bmNfZmlsZV9pb2N0bF9mZW5jZV9pbmZvKHN5bmNfZmlsZSwgYXJnKTsKKworCWRlZmF1bHQ6CisJ CXJldHVybiAtRU5PVFRZOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJh dGlvbnMgc3luY19maWxlX2ZvcHMgPSB7CisJLnJlbGVhc2UgPSBzeW5jX2ZpbGVfcmVsZWFzZSwK KwkucG9sbCA9IHN5bmNfZmlsZV9wb2xsLAorCS51bmxvY2tlZF9pb2N0bCA9IHN5bmNfZmlsZV9p b2N0bCwKKwkuY29tcGF0X2lvY3RsID0gc3luY19maWxlX2lvY3RsLAorfTsKKwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL0tjb25maWcKaW5kZXggYmQ5MGQyMC4uMjc1Njk4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9z dGFnaW5nL2FuZHJvaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29u ZmlnCkBAIC01Miw2ICs1Miw3IEBAIGNvbmZpZyBTV19TWU5DCiAJYm9vbCAiU29mdHdhcmUgc3lu Y2hyb25pemF0aW9uIG9iamVjdHMiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBTWU5DCisJZGVw ZW5kcyBvbiBTWU5DX0ZJTEUKIAktLS1oZWxwLS0tCiAJICBBIHN5bmMgb2JqZWN0IGRyaXZlciB0 aGF0IHVzZXMgYSAzMmJpdCBjb3VudGVyIHRvIGNvb3JkaW5hdGUKIAkgIHN5bmNocm9uaXphdGlv bi4gIFVzZWZ1bCB3aGVuIHRoZXJlIGlzIG5vIGhhcmR3YXJlIHByaW1pdGl2ZSBiYWNraW5nCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMgYi9kcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC9zeW5jLmMKaW5kZXggNWZhNDc3OS4uMWUxYzAwOSAxMDA2NDQKLS0tIGEvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L3N5bmMuYwpAQCAtMTYsMTAgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4K ICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5j bHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxs aW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9z ZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTMyLDcgKzI5LDYgQEAKICNp bmNsdWRlICJ0cmFjZS9zeW5jLmgiCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGFu ZHJvaWRfZmVuY2Vfb3BzOwotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lu Y19maWxlX2ZvcHM7CiAKIHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lX2NyZWF0 ZShjb25zdCBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgKm9wcywKIAkJCQkJICAgaW50IHNpemUs IGNvbnN0IGNoYXIgKm5hbWUpCkBAIC0xMzYsMjA4ICsxMzIsNiBAQCBzdHJ1Y3QgZmVuY2UgKnN5 bmNfcHRfY3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmosIGludCBzaXplKQogfQogRVhQ T1JUX1NZTUJPTChzeW5jX3B0X2NyZWF0ZSk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3luY19maWxlICpz eW5jX2ZpbGVfYWxsb2MoaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHN5 bmNfZmlsZSAqc3luY19maWxlOwotCi0Jc3luY19maWxlID0ga3phbGxvYyhzaXplLCBHRlBfS0VS TkVMKTsKLQlpZiAoIXN5bmNfZmlsZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzeW5jX2ZpbGUtPmZp bGUgPSBhbm9uX2lub2RlX2dldGZpbGUoInN5bmNfZmlsZSIsICZzeW5jX2ZpbGVfZm9wcywKLQkJ CQkJICAgICBzeW5jX2ZpbGUsIDApOwotCWlmIChJU19FUlIoc3luY19maWxlLT5maWxlKSkKLQkJ Z290byBlcnI7Ci0KLQlrcmVmX2luaXQoJnN5bmNfZmlsZS0+a3JlZik7Ci0Jc3RybGNweShzeW5j X2ZpbGUtPm5hbWUsIG5hbWUsIHNpemVvZihzeW5jX2ZpbGUtPm5hbWUpKTsKLQotCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJnN5bmNfZmlsZS0+d3EpOwotCi0JcmV0dXJuIHN5bmNfZmlsZTsKLQotZXJy OgotCWtmcmVlKHN5bmNfZmlsZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGZl bmNlX2NoZWNrX2NiX2Z1bmMoc3RydWN0IGZlbmNlICpmLCBzdHJ1Y3QgZmVuY2VfY2IgKmNiKQot ewotCXN0cnVjdCBzeW5jX2ZpbGVfY2IgKmNoZWNrOwotCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNf ZmlsZTsKLQotCWNoZWNrID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3Qgc3luY19maWxlX2NiLCBj Yik7Ci0Jc3luY19maWxlID0gY2hlY2stPnN5bmNfZmlsZTsKLQotCWlmIChhdG9taWNfZGVjX2Fu ZF90ZXN0KCZzeW5jX2ZpbGUtPnN0YXR1cykpCi0JCXdha2VfdXBfYWxsKCZzeW5jX2ZpbGUtPndx KTsKLX0KLQotLyogVE9ETzogaW1wbGVtZW50IGEgY3JlYXRlIHdoaWNoIHRha2VzIG1vcmUgdGhh dCBvbmUgZmVuY2UgKi8KLXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZV9jcmVhdGUoY29uc3Qg Y2hhciAqbmFtZSwgc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY19maWxlICpz eW5jX2ZpbGU7Ci0KLQlzeW5jX2ZpbGUgPSBzeW5jX2ZpbGVfYWxsb2Mob2Zmc2V0b2Yoc3RydWN0 IHN5bmNfZmlsZSwgY2JzWzFdKSwKLQkJCQkgICAgbmFtZSk7Ci0JaWYgKCFzeW5jX2ZpbGUpCi0J CXJldHVybiBOVUxMOwotCi0Jc3luY19maWxlLT5udW1fZmVuY2VzID0gMTsKLQlhdG9taWNfc2V0 KCZzeW5jX2ZpbGUtPnN0YXR1cywgMSk7Ci0KLQlzeW5jX2ZpbGUtPmNic1swXS5mZW5jZSA9IGZl bmNlOwotCXN5bmNfZmlsZS0+Y2JzWzBdLnN5bmNfZmlsZSA9IHN5bmNfZmlsZTsKLQlpZiAoZmVu Y2VfYWRkX2NhbGxiYWNrKGZlbmNlLCAmc3luY19maWxlLT5jYnNbMF0uY2IsCi0JCQkgICAgICAg ZmVuY2VfY2hlY2tfY2JfZnVuYykpCi0JCWF0b21pY19kZWMoJnN5bmNfZmlsZS0+c3RhdHVzKTsK LQotCXN5bmNfZmlsZV9kZWJ1Z19hZGQoc3luY19maWxlKTsKLQotCXJldHVybiBzeW5jX2ZpbGU7 Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNfZmlsZV9jcmVhdGUpOwotCi1zdHJ1Y3Qgc3luY19maWxl ICpzeW5jX2ZpbGVfZmRnZXQoaW50IGZkKQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gZmdldChm ZCk7Ci0KLQlpZiAoIWZpbGUpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGZpbGUtPmZfb3AgIT0g JnN5bmNfZmlsZV9mb3BzKQotCQlnb3RvIGVycjsKLQotCXJldHVybiBmaWxlLT5wcml2YXRlX2Rh dGE7Ci0KLWVycjoKLQlmcHV0KGZpbGUpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJP TChzeW5jX2ZpbGVfZmRnZXQpOwotCi12b2lkIHN5bmNfZmlsZV9wdXQoc3RydWN0IHN5bmNfZmls ZSAqc3luY19maWxlKQotewotCWZwdXQoc3luY19maWxlLT5maWxlKTsKLX0KLUVYUE9SVF9TWU1C T0woc3luY19maWxlX3B1dCk7Ci0KLXZvaWQgc3luY19maWxlX2luc3RhbGwoc3RydWN0IHN5bmNf ZmlsZSAqc3luY19maWxlLCBpbnQgZmQpCi17Ci0JZmRfaW5zdGFsbChmZCwgc3luY19maWxlLT5m aWxlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19maWxlX2luc3RhbGwpOwotCi1zdGF0aWMgdm9p ZCBzeW5jX2ZpbGVfYWRkX3B0KHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwgaW50ICppLAot CQkJICAgICBzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN5bmNfZmlsZS0+Y2JzWyppXS5mZW5j ZSA9IGZlbmNlOwotCXN5bmNfZmlsZS0+Y2JzWyppXS5zeW5jX2ZpbGUgPSBzeW5jX2ZpbGU7Ci0K LQlpZiAoIWZlbmNlX2FkZF9jYWxsYmFjayhmZW5jZSwgJnN5bmNfZmlsZS0+Y2JzWyppXS5jYiwK LQkJCQlmZW5jZV9jaGVja19jYl9mdW5jKSkgewotCQlmZW5jZV9nZXQoZmVuY2UpOwotCQkoKmkp Kys7Ci0JfQotfQotCi1zdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGVfbWVyZ2UoY29uc3QgY2hh ciAqbmFtZSwKLQkJCQkgIHN0cnVjdCBzeW5jX2ZpbGUgKmEsIHN0cnVjdCBzeW5jX2ZpbGUgKmIp Ci17Ci0JaW50IG51bV9mZW5jZXMgPSBhLT5udW1fZmVuY2VzICsgYi0+bnVtX2ZlbmNlczsKLQlz dHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7Ci0JaW50IGksIGlfYSwgaV9iOwotCXVuc2lnbmVk IGxvbmcgc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBzeW5jX2ZpbGUsIGNic1tudW1fZmVuY2VzXSk7 Ci0KLQlzeW5jX2ZpbGUgPSBzeW5jX2ZpbGVfYWxsb2Moc2l6ZSwgbmFtZSk7Ci0JaWYgKCFzeW5j X2ZpbGUpCi0JCXJldHVybiBOVUxMOwotCi0JYXRvbWljX3NldCgmc3luY19maWxlLT5zdGF0dXMs IG51bV9mZW5jZXMpOwotCi0JLyoKLQkgKiBBc3N1bWUgc3luY19maWxlIGEgYW5kIGIgYXJlIGJv dGggb3JkZXJlZCBhbmQgaGF2ZSBubwotCSAqIGR1cGxpY2F0ZXMgd2l0aCB0aGUgc2FtZSBjb250 ZXh0LgotCSAqCi0JICogSWYgYSBzeW5jX2ZpbGUgY2FuIG9ubHkgYmUgY3JlYXRlZCB3aXRoIHN5 bmNfZmlsZV9tZXJnZQotCSAqIGFuZCBzeW5jX2ZpbGVfY3JlYXRlLCB0aGlzIGlzIGEgcmVhc29u YWJsZSBhc3N1bXB0aW9uLgotCSAqLwotCWZvciAoaSA9IGlfYSA9IGlfYiA9IDA7IGlfYSA8IGEt Pm51bV9mZW5jZXMgJiYgaV9iIDwgYi0+bnVtX2ZlbmNlczsgKSB7Ci0JCXN0cnVjdCBmZW5jZSAq cHRfYSA9IGEtPmNic1tpX2FdLmZlbmNlOwotCQlzdHJ1Y3QgZmVuY2UgKnB0X2IgPSBiLT5jYnNb aV9iXS5mZW5jZTsKLQotCQlpZiAocHRfYS0+Y29udGV4dCA8IHB0X2ItPmNvbnRleHQpIHsKLQkJ CXN5bmNfZmlsZV9hZGRfcHQoc3luY19maWxlLCAmaSwgcHRfYSk7Ci0KLQkJCWlfYSsrOwotCQl9 IGVsc2UgaWYgKHB0X2EtPmNvbnRleHQgPiBwdF9iLT5jb250ZXh0KSB7Ci0JCQlzeW5jX2ZpbGVf YWRkX3B0KHN5bmNfZmlsZSwgJmksIHB0X2IpOwotCi0JCQlpX2IrKzsKLQkJfSBlbHNlIHsKLQkJ CWlmIChwdF9hLT5zZXFubyAtIHB0X2ItPnNlcW5vIDw9IElOVF9NQVgpCi0JCQkJc3luY19maWxl X2FkZF9wdChzeW5jX2ZpbGUsICZpLCBwdF9hKTsKLQkJCWVsc2UKLQkJCQlzeW5jX2ZpbGVfYWRk X3B0KHN5bmNfZmlsZSwgJmksIHB0X2IpOwotCi0JCQlpX2ErKzsKLQkJCWlfYisrOwotCQl9Ci0J fQotCi0JZm9yICg7IGlfYSA8IGEtPm51bV9mZW5jZXM7IGlfYSsrKQotCQlzeW5jX2ZpbGVfYWRk X3B0KHN5bmNfZmlsZSwgJmksIGEtPmNic1tpX2FdLmZlbmNlKTsKLQotCWZvciAoOyBpX2IgPCBi LT5udW1fZmVuY2VzOyBpX2IrKykKLQkJc3luY19maWxlX2FkZF9wdChzeW5jX2ZpbGUsICZpLCBi LT5jYnNbaV9iXS5mZW5jZSk7Ci0KLQlpZiAobnVtX2ZlbmNlcyA+IGkpCi0JCWF0b21pY19zdWIo bnVtX2ZlbmNlcyAtIGksICZzeW5jX2ZpbGUtPnN0YXR1cyk7Ci0Jc3luY19maWxlLT5udW1fZmVu Y2VzID0gaTsKLQotCXN5bmNfZmlsZV9kZWJ1Z19hZGQoc3luY19maWxlKTsKLQlyZXR1cm4gc3lu Y19maWxlOwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2ZpbGVfbWVyZ2UpOwotCi1pbnQgc3luY19m aWxlX3dhaXQoc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBsb25nIHRpbWVvdXQpCi17Ci0J bG9uZyByZXQ7Ci0JaW50IGk7Ci0KLQlpZiAodGltZW91dCA8IDApCi0JCXRpbWVvdXQgPSBNQVhf U0NIRURVTEVfVElNRU9VVDsKLQllbHNlCi0JCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHRp bWVvdXQpOwotCi0JdHJhY2Vfc3luY193YWl0KHN5bmNfZmlsZSwgMSk7Ci0JZm9yIChpID0gMDsg aSA8IHN5bmNfZmlsZS0+bnVtX2ZlbmNlczsgKytpKQotCQl0cmFjZV9mZW5jZShzeW5jX2ZpbGUt PmNic1tpXS5mZW5jZSk7Ci0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQo c3luY19maWxlLT53cSwKLQkJCQkJICAgICAgIGF0b21pY19yZWFkKCZzeW5jX2ZpbGUtPnN0YXR1 cykgPD0gMCwKLQkJCQkJICAgICAgIHRpbWVvdXQpOwotCXRyYWNlX3N5bmNfd2FpdChzeW5jX2Zp bGUsIDApOwotCi0JaWYgKHJldCA8IDApIHsKLQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgaWYgKHJl dCA9PSAwKSB7Ci0JCWlmICh0aW1lb3V0KSB7Ci0JCQlwcl9pbmZvKCJzeW5jX2ZpbGUgdGltZW91 dCBvbiBbJXBdIGFmdGVyICVkbXNcbiIsCi0JCQkJc3luY19maWxlLCBqaWZmaWVzX3RvX21zZWNz KHRpbWVvdXQpKTsKLQkJCXN5bmNfZHVtcCgpOwotCQl9Ci0JCXJldHVybiAtRVRJTUU7Ci0JfQot Ci0JcmV0ID0gYXRvbWljX3JlYWQoJnN5bmNfZmlsZS0+c3RhdHVzKTsKLQlpZiAocmV0KSB7Ci0J CXByX2luZm8oInN5bmNfZmlsZSBlcnJvciAlbGQgb24gWyVwXVxuIiwgcmV0LCBzeW5jX2ZpbGUp OwotCQlzeW5jX2R1bXAoKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woc3lu Y19maWxlX3dhaXQpOwotCiBzdGF0aWMgY29uc3QgY2hhciAqYW5kcm9pZF9mZW5jZV9nZXRfZHJp dmVyX25hbWUoc3RydWN0IGZlbmNlICpmZW5jZSkKIHsKIAlzdHJ1Y3Qgc3luY190aW1lbGluZSAq cGFyZW50ID0gZmVuY2VfcGFyZW50KGZlbmNlKTsKQEAgLTQzNywyMTYgKzIzMSwzIEBAIHN0YXRp YyBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGFuZHJvaWRfZmVuY2Vfb3BzID0gewogCS50aW1lbGlu ZV92YWx1ZV9zdHIgPSBhbmRyb2lkX2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0ciwKIH07CiAKLXN0 YXRpYyB2b2lkIHN5bmNfZmlsZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQotewotCXN0cnVjdCBz eW5jX2ZpbGUgKnN5bmNfZmlsZSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc3luY19maWxl LAotCQkJCQkJICAgICBrcmVmKTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzeW5jX2Zp bGUtPm51bV9mZW5jZXM7ICsraSkgewotCQlmZW5jZV9yZW1vdmVfY2FsbGJhY2soc3luY19maWxl LT5jYnNbaV0uZmVuY2UsCi0JCQkJICAgICAgJnN5bmNfZmlsZS0+Y2JzW2ldLmNiKTsKLQkJZmVu Y2VfcHV0KHN5bmNfZmlsZS0+Y2JzW2ldLmZlbmNlKTsKLQl9Ci0KLQlrZnJlZShzeW5jX2ZpbGUp OwotfQotCi1zdGF0aWMgaW50IHN5bmNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUs IHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSA9IGZp bGUtPnByaXZhdGVfZGF0YTsKLQotCXN5bmNfZmlsZV9kZWJ1Z19yZW1vdmUoc3luY19maWxlKTsK LQotCWtyZWZfcHV0KCZzeW5jX2ZpbGUtPmtyZWYsIHN5bmNfZmlsZV9mcmVlKTsKLQlyZXR1cm4g MDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzeW5jX2ZpbGVfcG9sbChzdHJ1Y3QgZmlsZSAq ZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKLXsKLQlzdHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUg PSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHN0YXR1czsKLQotCXBvbGxfd2FpdChmaWxlLCAm c3luY19maWxlLT53cSwgd2FpdCk7Ci0KLQlzdGF0dXMgPSBhdG9taWNfcmVhZCgmc3luY19maWxl LT5zdGF0dXMpOwotCi0JaWYgKCFzdGF0dXMpCi0JCXJldHVybiBQT0xMSU47Ci0JZWxzZSBpZiAo c3RhdHVzIDwgMCkKLQkJcmV0dXJuIFBPTExFUlI7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBs b25nIHN5bmNfZmlsZV9pb2N0bF93YWl0KHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSwKLQkJ CQkgIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCV9fczMyIHZhbHVlOwotCi0JaWYgKGNvcHlfZnJv bV91c2VyKCZ2YWx1ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodmFsdWUpKSkKLQkJcmV0 dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc3luY19maWxlX3dhaXQoc3luY19maWxlLCB2YWx1ZSk7 Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmlsZV9pb2N0bF9tZXJnZShzdHJ1Y3Qgc3luY19maWxl ICpzeW5jX2ZpbGUsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IGZkID0gZ2V0 X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOwotCWludCBlcnI7Ci0Jc3RydWN0IHN5bmNfZmls ZSAqZmVuY2UyLCAqZmVuY2UzOwotCXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YTsKLQotCWlm IChmZCA8IDApCi0JCXJldHVybiBmZDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZv aWQgX191c2VyICopYXJnLCBzaXplb2YoZGF0YSkpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdv dG8gZXJyX3B1dF9mZDsKLQl9Ci0KLQlmZW5jZTIgPSBzeW5jX2ZpbGVfZmRnZXQoZGF0YS5mZDIp OwotCWlmICghZmVuY2UyKSB7Ci0JCWVyciA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyX3B1dF9mZDsK LQl9Ci0KLQlkYXRhLm5hbWVbc2l6ZW9mKGRhdGEubmFtZSkgLSAxXSA9ICdcMCc7Ci0JZmVuY2Uz ID0gc3luY19maWxlX21lcmdlKGRhdGEubmFtZSwgc3luY19maWxlLCBmZW5jZTIpOwotCWlmICgh ZmVuY2UzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3B1dF9mZW5jZTI7Ci0JfQot Ci0JZGF0YS5mZW5jZSA9IGZkOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJn LCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9w dXRfZmVuY2UzOwotCX0KLQotCXN5bmNfZmlsZV9pbnN0YWxsKGZlbmNlMywgZmQpOwotCXN5bmNf ZmlsZV9wdXQoZmVuY2UyKTsKLQlyZXR1cm4gMDsKLQotZXJyX3B1dF9mZW5jZTM6Ci0Jc3luY19m aWxlX3B1dChmZW5jZTMpOwotCi1lcnJfcHV0X2ZlbmNlMjoKLQlzeW5jX2ZpbGVfcHV0KGZlbmNl Mik7Ci0KLWVycl9wdXRfZmQ6Ci0JcHV0X3VudXNlZF9mZChmZCk7Ci0JcmV0dXJuIGVycjsKLX0K LQotc3RhdGljIGludCBzeW5jX2ZpbGxfcHRfaW5mbyhzdHJ1Y3QgZmVuY2UgKmZlbmNlLCB2b2lk ICpkYXRhLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3luY19wdF9pbmZvICppbmZvID0gZGF0YTsK LQlpbnQgcmV0OwotCi0JaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfcHRfaW5mbykpCi0J CXJldHVybiAtRU5PTUVNOwotCi0JaW5mby0+bGVuID0gc2l6ZW9mKHN0cnVjdCBzeW5jX3B0X2lu Zm8pOwotCi0JaWYgKGZlbmNlLT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEpIHsKLQkJcmV0ID0gZmVu Y2UtPm9wcy0+ZmlsbF9kcml2ZXJfZGF0YShmZW5jZSwgaW5mby0+ZHJpdmVyX2RhdGEsCi0JCQkJ CQkgICBzaXplIC0gc2l6ZW9mKCppbmZvKSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJl dDsKLQotCQlpbmZvLT5sZW4gKz0gcmV0OwotCX0KLQotCXN0cmxjcHkoaW5mby0+b2JqX25hbWUs IGZlbmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSwKLQkJc2l6ZW9mKGluZm8tPm9i al9uYW1lKSk7Ci0Jc3RybGNweShpbmZvLT5kcml2ZXJfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X2Ry aXZlcl9uYW1lKGZlbmNlKSwKLQkJc2l6ZW9mKGluZm8tPmRyaXZlcl9uYW1lKSk7Ci0JaWYgKGZl bmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKLQkJaW5mby0+c3RhdHVzID0gZmVuY2UtPnN0YXR1cyA+ PSAwID8gMSA6IGZlbmNlLT5zdGF0dXM7Ci0JZWxzZQotCQlpbmZvLT5zdGF0dXMgPSAwOwotCWlu Zm8tPnRpbWVzdGFtcF9ucyA9IGt0aW1lX3RvX25zKGZlbmNlLT50aW1lc3RhbXApOwotCi0JcmV0 dXJuIGluZm8tPmxlbjsKLX0KLQotc3RhdGljIGxvbmcgc3luY19maWxlX2lvY3RsX2ZlbmNlX2lu Zm8oc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLAotCQkJCQl1bnNpZ25lZCBsb25nIGFyZykK LXsKLQlzdHJ1Y3Qgc3luY19maWxlX2luZm9fZGF0YSAqZGF0YTsKLQlfX3UzMiBzaXplOwotCV9f dTMyIGxlbiA9IDA7Ci0JaW50IHJldCwgaTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmc2l6ZSwg KHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yoc2l6ZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQot CWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX2ZpbGVfaW5mb19kYXRhKSkKLQkJcmV0dXJu IC1FSU5WQUw7Ci0KLQlpZiAoc2l6ZSA+IDQwOTYpCi0JCXNpemUgPSA0MDk2OwotCi0JZGF0YSA9 IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01F TTsKLQotCXN0cmxjcHkoZGF0YS0+bmFtZSwgc3luY19maWxlLT5uYW1lLCBzaXplb2YoZGF0YS0+ bmFtZSkpOwotCWRhdGEtPnN0YXR1cyA9IGF0b21pY19yZWFkKCZzeW5jX2ZpbGUtPnN0YXR1cyk7 Ci0JaWYgKGRhdGEtPnN0YXR1cyA+PSAwKQotCQlkYXRhLT5zdGF0dXMgPSAhZGF0YS0+c3RhdHVz OwotCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzeW5jX2ZpbGVfaW5mb19kYXRhKTsKLQotCWZvciAo aSA9IDA7IGkgPCBzeW5jX2ZpbGUtPm51bV9mZW5jZXM7ICsraSkgewotCQlzdHJ1Y3QgZmVuY2Ug KmZlbmNlID0gc3luY19maWxlLT5jYnNbaV0uZmVuY2U7Ci0KLQkJcmV0ID0gc3luY19maWxsX3B0 X2luZm8oZmVuY2UsICh1OCAqKWRhdGEgKyBsZW4sIHNpemUgLSBsZW4pOwotCi0JCWlmIChyZXQg PCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJbGVuICs9IHJldDsKLQl9Ci0KLQlkYXRhLT5sZW4gPSBs ZW47Ci0KLQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgZGF0YSwgbGVuKSkK LQkJcmV0ID0gLUVGQVVMVDsKLQllbHNlCi0JCXJldCA9IDA7Ci0KLW91dDoKLQlrZnJlZShkYXRh KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmlsZV9pb2N0bChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBh cmcpCi17Ci0Jc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRh OwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNZTkNfSU9DX1dBSVQ6Ci0JCXJldHVybiBzeW5j X2ZpbGVfaW9jdGxfd2FpdChzeW5jX2ZpbGUsIGFyZyk7Ci0KLQljYXNlIFNZTkNfSU9DX01FUkdF OgotCQlyZXR1cm4gc3luY19maWxlX2lvY3RsX21lcmdlKHN5bmNfZmlsZSwgYXJnKTsKLQotCWNh c2UgU1lOQ19JT0NfRkVOQ0VfSU5GTzoKLQkJcmV0dXJuIHN5bmNfZmlsZV9pb2N0bF9mZW5jZV9p bmZvKHN5bmNfZmlsZSwgYXJnKTsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PVFRZOwotCX0K LX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3luY19maWxlX2ZvcHMg PSB7Ci0JLnJlbGVhc2UgPSBzeW5jX2ZpbGVfcmVsZWFzZSwKLQkucG9sbCA9IHN5bmNfZmlsZV9w b2xsLAotCS51bmxvY2tlZF9pb2N0bCA9IHN5bmNfZmlsZV9pb2N0bCwKLQkuY29tcGF0X2lvY3Rs ID0gc3luY19maWxlX2lvY3RsLAotfTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Fu ZHJvaWQvc3luYy5oIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luYy5oCmluZGV4IDg5ODBi NTUuLmZiMjA5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaAor KysgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmgKQEAgLTE4LDEzICsxOCwxMSBAQAog I2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1 ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUg PGxpbnV4L2ZlbmNlLmg+Ci0KLSNpbmNsdWRlICJ1YXBpL3N5bmMuaCIKKyNpbmNsdWRlIDxsaW51 eC9zeW5jX2ZpbGUuaD4KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L3N5bmMuaD4KIAogc3RydWN0IHN5 bmNfdGltZWxpbmU7Ci1zdHJ1Y3Qgc3luY19maWxlOwogCiAvKioKICAqIHN0cnVjdCBzeW5jX3Rp bWVsaW5lX29wcyAtIHN5bmMgb2JqZWN0IGltcGxlbWVudGF0aW9uIG9wcwpAQCAtOTQsMzggKzky LDYgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY190aW1lbGluZSAqZmVuY2VfcGFyZW50KHN0 cnVjdCBmZW5jZSAqZmVuY2UpCiAJCQkgICAgY2hpbGRfbGlzdF9sb2NrKTsKIH0KIAotc3RydWN0 IHN5bmNfZmlsZV9jYiB7Ci0Jc3RydWN0IGZlbmNlX2NiIGNiOwotCXN0cnVjdCBmZW5jZSAqZmVu Y2U7Ci0Jc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3Qg c3luY19maWxlIC0gc3luYyBmaWxlIHRvIGV4cG9ydCB0byB0aGUgdXNlcnNwYWNlCi0gKiBAZmls ZToJCWZpbGUgcmVwcmVzZW50aW5nIHRoaXMgZmVuY2UKLSAqIEBrcmVmOgkJcmVmZXJlbmNlIGNv dW50IG9uIGZlbmNlLgotICogQG5hbWU6CQluYW1lIG9mIHN5bmNfZmlsZS4gIFVzZWZ1bCBmb3Ig ZGVidWdnaW5nCi0gKiBAc3luY19maWxlX2xpc3Q6CW1lbWJlcnNoaXAgaW4gZ2xvYmFsIGZpbGUg bGlzdAotICogQG51bV9mZW5jZXMJCW51bWJlciBvZiBzeW5jX3B0cyBpbiB0aGUgZmVuY2UKLSAq IEB3cToJCQl3YWl0IHF1ZXVlIGZvciBmZW5jZSBzaWduYWxpbmcKLSAqIEBzdGF0dXM6CQkwOiBz aWduYWxlZCwgPjA6YWN0aXZlLCA8MDogZXJyb3IKLSAqIEBjYnM6CQlzeW5jX3B0cyBjYWxsYmFj ayBpbmZvcm1hdGlvbgotICovCi1zdHJ1Y3Qgc3luY19maWxlIHsKLQlzdHJ1Y3QgZmlsZQkJKmZp bGU7Ci0Jc3RydWN0IGtyZWYJCWtyZWY7Ci0JY2hhcgkJCW5hbWVbMzJdOwotI2lmZGVmIENPTkZJ R19ERUJVR19GUwotCXN0cnVjdCBsaXN0X2hlYWQJc3luY19maWxlX2xpc3Q7Ci0jZW5kaWYKLQlp bnQgbnVtX2ZlbmNlczsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdxOwotCWF0b21pY190CQlzdGF0 dXM7Ci0KLQlzdHJ1Y3Qgc3luY19maWxlX2NiCWNic1tdOwotfTsKLQogLyoKICAqIEFQSSBmb3Ig c3luY190aW1lbGluZSBpbXBsZW1lbnRlcnMKICAqLwpAQCAtMTc1LDczICsxNDEsNiBAQCB2b2lk IHN5bmNfdGltZWxpbmVfc2lnbmFsKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwogICovCiBz dHJ1Y3QgZmVuY2UgKnN5bmNfcHRfY3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQs IGludCBzaXplKTsKIAotLyoqCi0gKiBzeW5jX2ZlbmNlX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5 bmMgZmVuY2UKLSAqIEBuYW1lOgluYW1lIG9mIGZlbmNlIHRvIGNyZWF0ZQotICogQGZlbmNlOglm ZW5jZSB0byBhZGQgdG8gdGhlIHN5bmNfZmVuY2UKLSAqCi0gKiBDcmVhdGVzIGEgc3luY19maWxl IGNvbnRhaW5nIEBmZW5jZS4gT25jZSB0aGlzIGlzIGNhbGxlZCwgdGhlIHN5bmNfZmlsZQotICog dGFrZXMgb3duZXJzaGlwIG9mIEBmZW5jZS4KLSAqLwotc3RydWN0IHN5bmNfZmlsZSAqc3luY19m aWxlX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmVuY2UgKmZlbmNlKTsKLQotLyoK LSAqIEFQSSBmb3Igc3luY19maWxlIGNvbnN1bWVycwotICovCi0KLS8qKgotICogc3luY19maWxl X21lcmdlKCkgLSBtZXJnZSB0d28gc3luY19maWxlcwotICogQG5hbWU6CW5hbWUgb2YgbmV3IGZl bmNlCi0gKiBAYToJCXN5bmNfZmlsZSBhCi0gKiBAYjoJCXN5bmNfZmlsZSBiCi0gKgotICogQ3Jl YXRlcyBhIG5ldyBzeW5jX2ZpbGUgd2hpY2ggY29udGFpbnMgY29waWVzIG9mIGFsbCB0aGUgZmVu Y2VzIGluIGJvdGgKLSAqIEBhIGFuZCBAYi4gIEBhIGFuZCBAYiByZW1haW4gdmFsaWQsIGluZGVw ZW5kZW50IHN5bmNfZmlsZS4gUmV0dXJucyB0aGUKLSAqIG5ldyBtZXJnZWQgc3luY19maWxlIG9y IE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KLSAqLwotc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxl X21lcmdlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgIHN0cnVjdCBzeW5jX2ZpbGUgKmEsIHN0 cnVjdCBzeW5jX2ZpbGUgKmIpOwotCi0vKioKLSAqIHN5bmNfZmlsZV9mZGdldCgpIC0gZ2V0IGEg c3luY19maWxlIGZyb20gYW4gZmQKLSAqIEBmZDoJCWZkIHJlZmVyZW5jaW5nIGEgZmVuY2UKLSAq Ci0gKiBFbnN1cmVzIEBmZCByZWZlcmVuY2VzIGEgdmFsaWQgc3luY19maWxlLCBpbmNyZW1lbnRz IHRoZSByZWZjb3VudCBvZiB0aGUKLSAqIGJhY2tpbmcgZmlsZS4gUmV0dXJucyB0aGUgc3luY19m aWxlIG9yIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KLSAqLwotc3RydWN0IHN5bmNfZmlsZSAqc3lu Y19maWxlX2ZkZ2V0KGludCBmZCk7Ci0KLS8qKgotICogc3luY19maWxlX3B1dCgpIC0gcHV0cyBh IHJlZmVyZW5jZSBvZiBhIHN5bmNfZmlsZQotICogQHN5bmNfZmlsZToJc3luY19maWxlIHRvIHB1 dAotICoKLSAqIFB1dHMgYSByZWZlcmVuY2Ugb24gQHN5bmNfZmVuY2UuICBJZiB0aGlzIGlzIHRo ZSBsYXN0IHJlZmVyZW5jZSwgdGhlCi0gKiBzeW5jX2ZpbCBhbmQgYWxsIGl0J3Mgc3luY19wdHMg d2lsbCBiZSBmcmVlZAotICovCi12b2lkIHN5bmNfZmlsZV9wdXQoc3RydWN0IHN5bmNfZmlsZSAq c3luY19maWxlKTsKLQotLyoqCi0gKiBzeW5jX2ZpbGVfaW5zdGFsbCgpIC0gaW5zdGFsbHMgYSBz eW5jX2ZpbGUgaW50byBhIGZpbGUgZGVzY3JpcHRvcgotICogQHN5bmNfZmlsZToJc3luY19maWxl IHRvIGluc3RhbGwKLSAqIEBmZDoJCWZpbGUgZGVzY3JpcHRvciBpbiB3aGljaCB0byBpbnN0YWxs IHRoZSBmZW5jZQotICoKLSAqIEluc3RhbGxzIEBzeW5jX2ZpbGUgaW50byBAZmQuICBAZmQncyBz aG91bGQgYmUgYWNxdWlyZWQgdGhyb3VnaAotICogZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VY RUMpLgotICovCi12b2lkIHN5bmNfZmlsZV9pbnN0YWxsKHN0cnVjdCBzeW5jX2ZpbGUgKnN5bmNf ZmlsZSwgaW50IGZkKTsKLQotLyoqCi0gKiBzeW5jX2ZpbGVfd2FpdCgpIC0gd2FpdCBvbiBzeW5j IGZpbGUKLSAqIEBzeW5jX2ZpbGU6CWZpbGUgdG8gd2FpdCBvbgotICogQHRpZW1vdXQ6CXRpbWVv dXQgaW4gbXMKLSAqCi0gKiBXYWl0IGZvciBAc3luY19maWxlIHRvIGJlIHNpZ25hbGVkIG9yIGhh dmUgYW4gZXJyb3IuIFdhaXRzIGluZGVmaW5pdGVseQotICogaWYgQHRpbWVvdXQgPCAwLgotICoK LSAqIFJldHVybnMgMCBpZiBmZW5jZSBzaWduYWxlZCwgPiAwIGlmIGl0IGlzIHN0aWxsIGFjdGl2 ZSBhbmQgPDAgb24gZXJyb3IKLSAqLwotaW50IHN5bmNfZmlsZV93YWl0KHN0cnVjdCBzeW5jX2Zp bGUgKnN5bmNfZmlsZSwgbG9uZyB0aW1lb3V0KTsKLQogI2lmZGVmIENPTkZJR19ERUJVR19GUwog CiB2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmop OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jIGIvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jCmluZGV4IDdlNTNkYTcuLmIzNzQxMmQg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYworKysgYi9k cml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNp bmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4K ICNpbmNsdWRlIDxsaW51eC90aW1lNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5jX2ZpbGUuaD4K ICNpbmNsdWRlICJzd19zeW5jLmgiCiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNlL3N5bmMuaCBiL2RyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL3RyYWNlL3N5bmMuaAppbmRleCA4N2M2MGU5Li5hMGY4MGY0IDEwMDY0NAotLS0g YS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgKKysrIGIvZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oCkBAIC0zMiw1MCArMzIsNiBAQCBUUkFDRV9FVkVOVChz eW5jX3RpbWVsaW5lLAogCVRQX3ByaW50aygibmFtZT0lcyB2YWx1ZT0lcyIsIF9fZ2V0X3N0cihu YW1lKSwgX19lbnRyeS0+dmFsdWUpCiApOwogCi1UUkFDRV9FVkVOVChzeW5jX3dhaXQsCi0JVFBf UFJPVE8oc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBpbnQgYmVnaW4pLAotCi0JVFBfQVJH UyhzeW5jX2ZpbGUsIGJlZ2luKSwKLQotCVRQX1NUUlVDVF9fZW50cnkoCi0JCQlfX3N0cmluZyhu YW1lLCBzeW5jX2ZpbGUtPm5hbWUpCi0JCQlfX2ZpZWxkKHMzMiwgc3RhdHVzKQotCQkJX19maWVs ZCh1MzIsIGJlZ2luKQotCSksCi0KLQlUUF9mYXN0X2Fzc2lnbigKLQkJCV9fYXNzaWduX3N0cihu YW1lLCBzeW5jX2ZpbGUtPm5hbWUpOwotCQkJX19lbnRyeS0+c3RhdHVzID0gYXRvbWljX3JlYWQo JnN5bmNfZmlsZS0+c3RhdHVzKTsKLQkJCV9fZW50cnktPmJlZ2luID0gYmVnaW47Ci0JKSwKLQot CVRQX3ByaW50aygiJXMgbmFtZT0lcyBzdGF0ZT0lZCIsIF9fZW50cnktPmJlZ2luID8gImJlZ2lu IiA6ICJlbmQiLAotCQkJX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT5zdGF0dXMpCi0pOwotCi1U UkFDRV9FVkVOVChmZW5jZSwKLQlUUF9QUk9UTyhzdHJ1Y3QgZmVuY2UgKmZlbmNlKSwKLQotCVRQ X0FSR1MoZmVuY2UpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJX19zdHJpbmcodGltZWxpbmUs IGZlbmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSkKLQkJX19hcnJheShjaGFyLCB2 YWx1ZSwgMzIpCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWduKAotCQlfX2Fzc2lnbl9zdHIodGltZWxp bmUsIGZlbmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSk7Ci0JCWlmIChmZW5jZS0+ b3BzLT5mZW5jZV92YWx1ZV9zdHIpIHsKLQkJCWZlbmNlLT5vcHMtPmZlbmNlX3ZhbHVlX3N0cihm ZW5jZSwgX19lbnRyeS0+dmFsdWUsCi0JCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7Ci0J CX0gZWxzZSB7Ci0JCQlfX2VudHJ5LT52YWx1ZVswXSA9ICdcMCc7Ci0JCX0KLQkpLAotCi0JVFBf cHJpbnRrKCJuYW1lPSVzIHZhbHVlPSVzIiwgX19nZXRfc3RyKHRpbWVsaW5lKSwgX19lbnRyeS0+ dmFsdWUpCi0pOwotCiAjZW5kaWYgLyogaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVm aW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkgKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUg b3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5bmNfZmls ZS5oIGIvaW5jbHVkZS9saW51eC9zeW5jX2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5hYzJiNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9zeW5j X2ZpbGUuaApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvc3luY19maWxl LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfU1lOQ19GSUxFX0gKKyNkZWZp bmUgX0xJTlVYX1NZTkNfRklMRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1 ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxp bnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4 L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mZW5jZS5oPgorCitzdHJ1Y3Qgc3luY19maWxlX2Ni IHsKKwlzdHJ1Y3QgZmVuY2VfY2IgY2I7CisJc3RydWN0IGZlbmNlICpmZW5jZTsKKwlzdHJ1Y3Qg c3luY19maWxlICpzeW5jX2ZpbGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBzeW5jX2ZpbGUgLSBz eW5jIGZpbGUgdG8gZXhwb3J0IHRvIHRoZSB1c2Vyc3BhY2UKKyAqIEBmaWxlOgkJZmlsZSByZXBy ZXNlbnRpbmcgdGhpcyBmZW5jZQorICogQGtyZWY6CQlyZWZlcmVuY2UgY291bnQgb24gZmVuY2Uu CisgKiBAbmFtZToJCW5hbWUgb2Ygc3luY19maWxlLiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyAq IEBzeW5jX2ZpbGVfbGlzdDoJbWVtYmVyc2hpcCBpbiBnbG9iYWwgZmlsZSBsaXN0CisgKiBAbnVt X2ZlbmNlcwkJbnVtYmVyIG9mIHN5bmNfcHRzIGluIHRoZSBmZW5jZQorICogQHdxOgkJCXdhaXQg cXVldWUgZm9yIGZlbmNlIHNpZ25hbGluZworICogQHN0YXR1czoJCTA6IHNpZ25hbGVkLCA+MDph Y3RpdmUsIDwwOiBlcnJvcgorICogQGNiczoJCXN5bmNfcHRzIGNhbGxiYWNrIGluZm9ybWF0aW9u CisgKi8KK3N0cnVjdCBzeW5jX2ZpbGUgeworCXN0cnVjdCBmaWxlCQkqZmlsZTsKKwlzdHJ1Y3Qg a3JlZgkJa3JlZjsKKwljaGFyCQkJbmFtZVszMl07CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJ c3RydWN0IGxpc3RfaGVhZAlzeW5jX2ZpbGVfbGlzdDsKKyNlbmRpZgorCWludCBudW1fZmVuY2Vz OworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJYXRvbWljX3QJCXN0YXR1czsKKworCXN0cnVj dCBzeW5jX2ZpbGVfY2IJY2JzW107Cit9OworCisvKioKKyAqIHN5bmNfZmlsZV9jcmVhdGUoKSAt IGNyZWF0ZXMgYSBzeW5jIGZlbmNlCisgKiBAbmFtZToJbmFtZSBvZiBmZW5jZSB0byBjcmVhdGUK KyAqIEBmZW5jZToJZmVuY2UgdG8gYWRkIHRvIHRoZSBzeW5jX2ZlbmNlCisgKgorICogQ3JlYXRl cyBhIHN5bmNfZmlsZSBjb250YWluZyBAZmVuY2UuIE9uY2UgdGhpcyBpcyBjYWxsZWQsIHRoZSBz eW5jX2ZpbGUKKyAqIHRha2VzIG93bmVyc2hpcCBvZiBAZmVuY2UuCisgKi8KK3N0cnVjdCBzeW5j X2ZpbGUgKnN5bmNfZmlsZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGZlbmNlICpm ZW5jZSk7CisKKy8qCisgKiBBUEkgZm9yIHN5bmNfZmlsZSBjb25zdW1lcnMKKyAqLworCisvKioK KyAqIHN5bmNfZmlsZV9tZXJnZSgpIC0gbWVyZ2UgdHdvIHN5bmNfZmlsZXMKKyAqIEBuYW1lOglu YW1lIG9mIG5ldyBmZW5jZQorICogQGE6CQlzeW5jX2ZpbGUgYQorICogQGI6CQlzeW5jX2ZpbGUg YgorICoKKyAqIENyZWF0ZXMgYSBuZXcgc3luY19maWxlIHdoaWNoIGNvbnRhaW5zIGNvcGllcyBv ZiBhbGwgdGhlIGZlbmNlcyBpbiBib3RoCisgKiBAYSBhbmQgQGIuICBAYSBhbmQgQGIgcmVtYWlu IHZhbGlkLCBpbmRlcGVuZGVudCBzeW5jX2ZpbGUuIFJldHVybnMgdGhlCisgKiBuZXcgbWVyZ2Vk IHN5bmNfZmlsZSBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK3N0cnVjdCBzeW5jX2Zp bGUgKnN5bmNfZmlsZV9tZXJnZShjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzdHJ1Y3Qgc3lu Y19maWxlICphLCBzdHJ1Y3Qgc3luY19maWxlICpiKTsKKworLyoqCisgKiBzeW5jX2ZpbGVfZmRn ZXQoKSAtIGdldCBhIHN5bmNfZmlsZSBmcm9tIGFuIGZkCisgKiBAZmQ6CQlmZCByZWZlcmVuY2lu ZyBhIGZlbmNlCisgKgorICogRW5zdXJlcyBAZmQgcmVmZXJlbmNlcyBhIHZhbGlkIHN5bmNfZmls ZSwgaW5jcmVtZW50cyB0aGUgcmVmY291bnQgb2YgdGhlCisgKiBiYWNraW5nIGZpbGUuIFJldHVy bnMgdGhlIHN5bmNfZmlsZSBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK3N0cnVjdCBz eW5jX2ZpbGUgKnN5bmNfZmlsZV9mZGdldChpbnQgZmQpOworCisvKioKKyAqIHN5bmNfZmlsZV9w dXQoKSAtIHB1dHMgYSByZWZlcmVuY2Ugb2YgYSBzeW5jX2ZpbGUKKyAqIEBzeW5jX2ZpbGU6CXN5 bmNfZmlsZSB0byBwdXQKKyAqCisgKiBQdXRzIGEgcmVmZXJlbmNlIG9uIEBzeW5jX2ZlbmNlLiAg SWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZQorICogc3luY19maWwgYW5kIGFsbCBp dCdzIHN5bmNfcHRzIHdpbGwgYmUgZnJlZWQKKyAqLwordm9pZCBzeW5jX2ZpbGVfcHV0KHN0cnVj dCBzeW5jX2ZpbGUgKnN5bmNfZmlsZSk7CisKKy8qKgorICogc3luY19maWxlX2luc3RhbGwoKSAt IGluc3RhbGxzIGEgc3luY19maWxlIGludG8gYSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBzeW5jX2Zp bGU6CXN5bmNfZmlsZSB0byBpbnN0YWxsCisgKiBAZmQ6CQlmaWxlIGRlc2NyaXB0b3IgaW4gd2hp Y2ggdG8gaW5zdGFsbCB0aGUgZmVuY2UKKyAqCisgKiBJbnN0YWxscyBAc3luY19maWxlIGludG8g QGZkLiAgQGZkJ3Mgc2hvdWxkIGJlIGFjcXVpcmVkIHRocm91Z2gKKyAqIGdldF91bnVzZWRfZmRf ZmxhZ3MoT19DTE9FWEVDKS4KKyAqLwordm9pZCBzeW5jX2ZpbGVfaW5zdGFsbChzdHJ1Y3Qgc3lu Y19maWxlICpzeW5jX2ZpbGUsIGludCBmZCk7CisKKy8qKgorICogc3luY19maWxlX3dhaXQoKSAt IHdhaXQgb24gc3luYyBmaWxlCisgKiBAc3luY19maWxlOglmaWxlIHRvIHdhaXQgb24KKyAqIEB0 aWVtb3V0Ogl0aW1lb3V0IGluIG1zCisgKgorICogV2FpdCBmb3IgQHN5bmNfZmlsZSB0byBiZSBz aWduYWxlZCBvciBoYXZlIGFuIGVycm9yLiBXYWl0cyBpbmRlZmluaXRlbHkKKyAqIGlmIEB0aW1l b3V0IDwgMC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgZmVuY2Ugc2lnbmFsZWQsID4gMCBpZiBpdCBp cyBzdGlsbCBhY3RpdmUgYW5kIDwwIG9uIGVycm9yCisgKi8KK2ludCBzeW5jX2ZpbGVfd2FpdChz dHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGUsIGxvbmcgdGltZW91dCk7CisKKyNlbmRpZiAvKiBf TElOVVhfU1lOQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9zeW5jX2Zp bGUuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3N5bmNfZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjY1OWI1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3Ry YWNlL2V2ZW50cy9zeW5jX2ZpbGUuaApAQCAtMCwwICsxLDU3IEBACisjdW5kZWYgVFJBQ0VfU1lT VEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBzeW5jX2ZpbGUKKworI2lmICFkZWZpbmVkKF9UUkFD RV9TWU5DX0ZJTEVfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRCkKKyNkZWZp bmUgX1RSQUNFX1NZTkNfRklMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9zeW5jLmg+CisjaW5jbHVk ZSA8bGludXgvdHJhY2Vwb2ludC5oPgorCitUUkFDRV9FVkVOVChzeW5jX3dhaXQsCisJVFBfUFJP VE8oc3RydWN0IHN5bmNfZmlsZSAqc3luY19maWxlLCBpbnQgYmVnaW4pLAorCisJVFBfQVJHUyhz eW5jX2ZpbGUsIGJlZ2luKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCQlfX3N0cmluZyhuYW1l LCBzeW5jX2ZpbGUtPm5hbWUpCisJCQlfX2ZpZWxkKHMzMiwgc3RhdHVzKQorCQkJX19maWVsZCh1 MzIsIGJlZ2luKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJCV9fYXNzaWduX3N0cihuYW1l LCBzeW5jX2ZpbGUtPm5hbWUpOworCQkJX19lbnRyeS0+c3RhdHVzID0gYXRvbWljX3JlYWQoJnN5 bmNfZmlsZS0+c3RhdHVzKTsKKwkJCV9fZW50cnktPmJlZ2luID0gYmVnaW47CisJKSwKKworCVRQ X3ByaW50aygiJXMgbmFtZT0lcyBzdGF0ZT0lZCIsIF9fZW50cnktPmJlZ2luID8gImJlZ2luIiA6 ICJlbmQiLAorCQkJX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT5zdGF0dXMpCispOworCitUUkFD RV9FVkVOVChmZW5jZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgZmVuY2UgKmZlbmNlKSwKKworCVRQX0FS R1MoZmVuY2UpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcodGltZWxpbmUsIGZl bmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSkKKwkJX19hcnJheShjaGFyLCB2YWx1 ZSwgMzIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIodGltZWxpbmUs IGZlbmNlLT5vcHMtPmdldF90aW1lbGluZV9uYW1lKGZlbmNlKSk7CisJCWlmIChmZW5jZS0+b3Bz LT5mZW5jZV92YWx1ZV9zdHIpIHsKKwkJCWZlbmNlLT5vcHMtPmZlbmNlX3ZhbHVlX3N0cihmZW5j ZSwgX19lbnRyeS0+dmFsdWUsCisJCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7CisJCX0g ZWxzZSB7CisJCQlfX2VudHJ5LT52YWx1ZVswXSA9ICdcMCc7CisJCX0KKwkpLAorCisJVFBfcHJp bnRrKCJuYW1lPSVzIHZhbHVlPSVzIiwgX19nZXRfc3RyKHRpbWVsaW5lKSwgX19lbnRyeS0+dmFs dWUpCispOworCisjZW5kaWYgLyogaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfRklMRV9IKSB8fCBk ZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKSAqLworCisvKiBUaGlzIHBhcnQgbXVzdCBi ZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KKyNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3luYy5oIGIvaW5jbHVk ZS91YXBpL2xpbnV4L3N5bmMuaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBkcml2 ZXJzL3N0YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMuaApyZW5hbWUgdG8gaW5jbHVkZS91YXBpL2xp bnV4L3N5bmMuaAppbmRleCA3M2RlYjY5Li4yYThhYjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0 YWdpbmcvYW5kcm9pZC91YXBpL3N5bmMuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvc3luYy5o CkBAIC0yNywxNSArMjcsMTUgQEAgc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSB7CiB9OwogCiAvKioK LSAqIHN0cnVjdCBzeW5jX3B0X2luZm8gLSBkZXRhaWxlZCBzeW5jX3B0IGluZm9ybWF0aW9uCi0g KiBAbGVuOgkJbGVuZ3RoIG9mIHN5bmNfcHRfaW5mbyBpbmNsdWRpbmcgYW55IGRyaXZlcl9kYXRh CisgKiBzdHJ1Y3QgZmVuY2VfaW5mbyAtIGRldGFpbGVkIGZlbmNlIGluZm9ybWF0aW9uCisgKiBA bGVuOgkJbGVuZ3RoIG9mIGZlbmNlX2luZm8gaW5jbHVkaW5nIGFueSBkcml2ZXJfZGF0YQogICog QG9ial9uYW1lOgkJbmFtZSBvZiBwYXJlbnQgc3luY190aW1lbGluZQogICogQGRyaXZlcl9uYW1l OgluYW1lIG9mIGRyaXZlciBpbXBsZW1lbnRpbmcgdGhlIHBhcmVudAotICogQHN0YXR1czoJCXN0 YXR1cyBvZiB0aGUgc3luY19wdCAwOmFjdGl2ZSAxOnNpZ25hbGVkIDwwOmVycm9yCisgKiBAc3Rh dHVzOgkJc3RhdHVzIG9mIHRoZSBmZW5jZSAwOmFjdGl2ZSAxOnNpZ25hbGVkIDwwOmVycm9yCiAg KiBAdGltZXN0YW1wX25zOgl0aW1lc3RhbXAgb2Ygc3RhdHVzIGNoYW5nZSBpbiBuYW5vc2Vjb25k cwogICogQGRyaXZlcl9kYXRhOglhbnkgZHJpdmVyIGRlcGVuZGVudCBkYXRhCiAgKi8KLXN0cnVj dCBzeW5jX3B0X2luZm8geworc3RydWN0IGZlbmNlX2luZm8gewogCV9fdTMyCWxlbjsKIAljaGFy CW9ial9uYW1lWzMyXTsKIAljaGFyCWRyaXZlcl9uYW1lWzMyXTsKQEAgLTUyLDE0ICs1MiwxNCBA QCBzdHJ1Y3Qgc3luY19wdF9pbmZvIHsKICAqCQl1c2Vyc3BhY2UgaW5jbHVkaW5nIHB0X2luZm8u CiAgKiBAbmFtZToJbmFtZSBvZiBmZW5jZQogICogQHN0YXR1czoJc3RhdHVzIG9mIGZlbmNlLiAx OiBzaWduYWxlZCAwOmFjdGl2ZSA8MDplcnJvcgotICogQHB0X2luZm86CWEgc3luY19wdF9pbmZv IHN0cnVjdCBmb3IgZXZlcnkgc3luY19wdCBpbiB0aGUgZmVuY2UKKyAqIEBmZW5jZV9pbmZvOglh IGZlbmNlX2luZm8gc3RydWN0IGZvciBldmVyeSBmZW5jZSBpbiB0aGUgc3luY19maWxlCiAgKi8K IHN0cnVjdCBzeW5jX2ZpbGVfaW5mb19kYXRhIHsKIAlfX3UzMglsZW47CiAJY2hhcgluYW1lWzMy XTsKIAlfX3MzMglzdGF0dXM7CiAKLQlfX3U4CXB0X2luZm9bMF07CisJX191OAlmZW5jZV9pbmZv WzBdOwogfTsKIAogI2RlZmluZSBTWU5DX0lPQ19NQUdJQwkJJz4nCi0tIAoyLjUuMAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxp bmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK