From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30B5BC10F29 for ; Wed, 11 Mar 2020 12:45:32 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E2A7B208E4 for ; Wed, 11 Mar 2020 12:45:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="PfEMMyVI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E2A7B208E4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:51205 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC0jq-0005Ww-3o for qemu-devel@archiver.kernel.org; Wed, 11 Mar 2020 08:45:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47035) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jC0fz-0007ED-J6 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 08:41:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jC0fw-0000KV-QJ for qemu-devel@nongnu.org; Wed, 11 Mar 2020 08:41:31 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:42750 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jC0fw-0000KN-L5 for qemu-devel@nongnu.org; Wed, 11 Mar 2020 08:41:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1583930488; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZqSw75N9uxdR0L3t48kV/I6fpFhsCTrcP8cU52szmr8=; b=PfEMMyVII0ywZxNC5hPybvvHtaUEHjqg8Xai7NJruXIMRCO8srp1kEide+ZqlLSdgT7rQ9 vZrHFRs1cwx6LvJYxZIog3yaaTaZVaZzKpMVCfrUVoVPPixFfYPQLJwoLBOHz3f6QSokhT 9LId3JnmcGQJvCxWGZ7Q6K9kJYCiMeA= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-166-5TjmVCLtN-SvWtUmLHWIhg-1; Wed, 11 Mar 2020 08:41:22 -0400 X-MC-Unique: 5TjmVCLtN-SvWtUmLHWIhg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E1A7E8017CC; Wed, 11 Mar 2020 12:41:20 +0000 (UTC) Received: from localhost (unknown [10.36.118.127]) by smtp.corp.redhat.com (Postfix) with ESMTP id 90A885C1D4; Wed, 11 Mar 2020 12:41:17 +0000 (UTC) From: Stefan Hajnoczi To: qemu-devel@nongnu.org Subject: [PULL 7/9] aio-posix: add io_uring fd monitoring implementation Date: Wed, 11 Mar 2020 12:40:43 +0000 Message-Id: <20200311124045.277969-8-stefanha@redhat.com> In-Reply-To: <20200311124045.277969-1-stefanha@redhat.com> References: <20200311124045.277969-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 205.139.110.61 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Fam Zheng , Peter Maydell , qemu-block@nongnu.org, Max Reitz , Stefan Hajnoczi , Paolo Bonzini , Kevin Wolf Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" VGhlIHJlY2VudCBMaW51eCBpb191cmluZyBBUEkgaGFzIHNldmVyYWwgYWR2YW50YWdlcyBvdmVy IHBwb2xsKDIpIGFuZAplcG9sbCgyKS4gIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZSBzb3VyY2Ug Y29kZS4KCkFkZCBhbiBpb191cmluZyBpbXBsZW1lbnRhdGlvbiBhbmQgbWFrZSBpdCB0aGUgZGVm YXVsdCBvbiBMaW51eC4KUGVyZm9ybWFuY2UgaXMgdGhlIHNhbWUgYXMgd2l0aCBlcG9sbCg3KSBi dXQgbGF0ZXIgcGF0Y2hlcyBhZGQKb3B0aW1pemF0aW9ucyB0aGF0IHRha2UgYWR2YW50YWdlIG9m IGlvX3VyaW5nLgoKSXQgaXMgbmVjZXNzYXJ5IHRvIGNoYW5nZSBob3cgYWlvX3NldF9mZF9oYW5k bGVyKCkgZGVhbHMgd2l0aCBkZWxldGluZwpBaW9IYW5kbGVycyBzaW5jZSByZW1vdmluZyBtb25p dG9yZWQgZmlsZSBkZXNjcmlwdG9ycyBpcyBhc3luY2hyb25vdXMgaW4KaW9fdXJpbmcuICBmZG1v bl9pb191cmluZ19yZW1vdmUoKSBtYXJrcyB0aGUgQWlvSGFuZGxlciBkZWxldGVkIGFuZAphaW9f c2V0X2ZkX2hhbmRsZXIoKSB3aWxsIGxldCBpdCBoYW5kbGUgZGVsZXRpb24gaW4gdGhhdCBjYXNl LgoKU2lnbmVkLW9mZi1ieTogU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUByZWRoYXQuY29tPgpM aW5rOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9yLzIwMjAwMzA1MTcwODA2LjEzMTMyNDUtNi1z dGVmYW5oYUByZWRoYXQuY29tCk1lc3NhZ2UtSWQ6IDwyMDIwMDMwNTE3MDgwNi4xMzEzMjQ1LTYt c3RlZmFuaGFAcmVkaGF0LmNvbT4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAgfCAgIDUgKwog aW5jbHVkZS9ibG9jay9haW8uaCAgIHwgICA5ICsrCiB1dGlsL01ha2VmaWxlLm9ianMgICAgfCAg IDEgKwogdXRpbC9haW8tcG9zaXguYyAgICAgIHwgIDIwICsrLQogdXRpbC9haW8tcG9zaXguaCAg ICAgIHwgIDIwICsrLQogdXRpbC9mZG1vbi1pb191cmluZy5jIHwgMzI2ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAzNzYgaW5zZXJ0 aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB1dGlsL2ZkbW9uLWlv X3VyaW5nLmMKCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggY2JmODY0 YmZmMS4uM2M3NDcwMDk2ZiAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpA QCAtNDA5Myw2ICs0MDkzLDExIEBAIGlmIHRlc3QgIiRsaW51eF9pb191cmluZyIgIT0gIm5vIiA7 IHRoZW4KICAgICBsaW51eF9pb191cmluZ19jZmxhZ3M9JCgkcGtnX2NvbmZpZyAtLWNmbGFncyBs aWJ1cmluZykKICAgICBsaW51eF9pb191cmluZ19saWJzPSQoJHBrZ19jb25maWcgLS1saWJzIGxp YnVyaW5nKQogICAgIGxpbnV4X2lvX3VyaW5nPXllcworCisgICAgIyBpb191cmluZyBpcyB1c2Vk IGluIGxpYnFlbXV1dGlsLmEgd2hlcmUgcGVyLWZpbGUgLWxpYnMgdmFyaWFibGVzIGFyZSBub3QK KyAgICAjIHNlZW4gYnkgcHJvZ3JhbXMgbGlua2luZyB0aGUgYXJjaGl2ZS4gIEl0J3Mgbm90IGlk ZWFsLCBidXQganVzdCBhZGQgdGhlCisgICAgIyBsaWJyYXJ5IGRlcGVuZGVuY3kgZ2xvYmFsbHku CisgICAgTElCUz0iJGxpbnV4X2lvX3VyaW5nX2xpYnMgJExJQlMiCiAgIGVsc2UKICAgICBpZiB0 ZXN0ICIkbGludXhfaW9fdXJpbmciID0gInllcyIgOyB0aGVuCiAgICAgICBmZWF0dXJlX25vdF9m b3VuZCAibGludXggaW9fdXJpbmciICJJbnN0YWxsIGxpYnVyaW5nIGRldmVsIgpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9ibG9jay9haW8uaCBiL2luY2x1ZGUvYmxvY2svYWlvLmgKaW5kZXggYmQ3NmIw OGYxYS4uODNmYzliODQ0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9ibG9jay9haW8uaAorKysgYi9p bmNsdWRlL2Jsb2NrL2Fpby5oCkBAIC0xNCw2ICsxNCw5IEBACiAjaWZuZGVmIFFFTVVfQUlPX0gK ICNkZWZpbmUgUUVNVV9BSU9fSAogCisjaWZkZWYgQ09ORklHX0xJTlVYX0lPX1VSSU5HCisjaW5j bHVkZSA8bGlidXJpbmcuaD4KKyNlbmRpZgogI2luY2x1ZGUgInFlbXUvcXVldWUuaCIKICNpbmNs dWRlICJxZW11L2V2ZW50X25vdGlmaWVyLmgiCiAjaW5jbHVkZSAicWVtdS90aHJlYWQuaCIKQEAg LTk2LDYgKzk5LDggQEAgc3RydWN0IEJITGlzdFNsaWNlIHsKICAgICBRU0lNUExFUV9FTlRSWShC SExpc3RTbGljZSkgbmV4dDsKIH07CiAKK3R5cGVkZWYgUVNMSVNUX0hFQUQoLCBBaW9IYW5kbGVy KSBBaW9IYW5kbGVyU0xpc3Q7CisKIHN0cnVjdCBBaW9Db250ZXh0IHsKICAgICBHU291cmNlIHNv dXJjZTsKIApAQCAtMTgxLDYgKzE4NiwxMCBAQCBzdHJ1Y3QgQWlvQ29udGV4dCB7CiAgICAgICog bG9ja2luZy4KICAgICAgKi8KICAgICBzdHJ1Y3QgTHVyaW5nU3RhdGUgKmxpbnV4X2lvX3VyaW5n OworCisgICAgLyogU3RhdGUgZm9yIGZpbGUgZGVzY3JpcHRvciBtb25pdG9yaW5nIHVzaW5nIExp bnV4IGlvX3VyaW5nICovCisgICAgc3RydWN0IGlvX3VyaW5nIGZkbW9uX2lvX3VyaW5nOworICAg IEFpb0hhbmRsZXJTTGlzdCBzdWJtaXRfbGlzdDsKICNlbmRpZgogCiAgICAgLyogVGltZXJMaXN0 cyBmb3IgY2FsbGluZyB0aW1lcnMgLSBvbmUgcGVyIGNsb2NrIHR5cGUuICBIYXMgaXRzIG93bgpk aWZmIC0tZ2l0IGEvdXRpbC9NYWtlZmlsZS5vYmpzIGIvdXRpbC9NYWtlZmlsZS5vYmpzCmluZGV4 IDY0MzkwNzdhNjguLjY3MThhMzhiNjEgMTAwNjQ0Ci0tLSBhL3V0aWwvTWFrZWZpbGUub2Jqcwor KysgYi91dGlsL01ha2VmaWxlLm9ianMKQEAgLTcsNiArNyw3IEBAIHV0aWwtb2JqLSQoY2FsbCBs bm90LCQoQ09ORklHX0FUT01JQzY0KSkgKz0gYXRvbWljNjQubwogdXRpbC1vYmotJChDT05GSUdf UE9TSVgpICs9IGFpby1wb3NpeC5vCiB1dGlsLW9iai0kKENPTkZJR19QT1NJWCkgKz0gZmRtb24t cG9sbC5vCiB1dGlsLW9iai0kKENPTkZJR19FUE9MTF9DUkVBVEUxKSArPSBmZG1vbi1lcG9sbC5v Cit1dGlsLW9iai0kKENPTkZJR19MSU5VWF9JT19VUklORykgKz0gZmRtb24taW9fdXJpbmcubwog dXRpbC1vYmotJChDT05GSUdfUE9TSVgpICs9IGNvbXBhdGZkLm8KIHV0aWwtb2JqLSQoQ09ORklH X1BPU0lYKSArPSBldmVudF9ub3RpZmllci1wb3NpeC5vCiB1dGlsLW9iai0kKENPTkZJR19QT1NJ WCkgKz0gbW1hcC1hbGxvYy5vCmRpZmYgLS1naXQgYS91dGlsL2Fpby1wb3NpeC5jIGIvdXRpbC9h aW8tcG9zaXguYwppbmRleCAwMjhiMmFiZGVkLi5mZmQ5Y2MzODFiIDEwMDY0NAotLS0gYS91dGls L2Fpby1wb3NpeC5jCisrKyBiL3V0aWwvYWlvLXBvc2l4LmMKQEAgLTU3LDEwICs1NywxNiBAQCBz dGF0aWMgYm9vbCBhaW9fcmVtb3ZlX2ZkX2hhbmRsZXIoQWlvQ29udGV4dCAqY3R4LCBBaW9IYW5k bGVyICpub2RlKQogICAgICAgICBnX3NvdXJjZV9yZW1vdmVfcG9sbCgmY3R4LT5zb3VyY2UsICZu b2RlLT5wZmQpOwogICAgIH0KIAorICAgIG5vZGUtPnBmZC5yZXZlbnRzID0gMDsKKworICAgIC8q IElmIHRoZSBmZCBtb25pdG9yIGhhcyBhbHJlYWR5IG1hcmtlZCBpdCBkZWxldGVkLCBsZWF2ZSBp dCBhbG9uZSAqLworICAgIGlmIChRTElTVF9JU19JTlNFUlRFRChub2RlLCBub2RlX2RlbGV0ZWQp KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvKiBJZiBhIHJlYWQgaXMg aW4gcHJvZ3Jlc3MsIGp1c3QgbWFyayB0aGUgbm9kZSBhcyBkZWxldGVkICovCiAgICAgaWYgKHFl bXVfbG9ja2NudF9jb3VudCgmY3R4LT5saXN0X2xvY2spKSB7CiAgICAgICAgIFFMSVNUX0lOU0VS VF9IRUFEX1JDVSgmY3R4LT5kZWxldGVkX2Fpb19oYW5kbGVycywgbm9kZSwgbm9kZV9kZWxldGVk KTsKLSAgICAgICAgbm9kZS0+cGZkLnJldmVudHMgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgfQogICAgIC8qIE90aGVyd2lzZSwgZGVsZXRlIGl0IGZvciByZWFsLiAgV2UgY2FuJ3Qg anVzdCBtYXJrIGl0IGFzCkBAIC0xMjYsOSArMTMyLDYgQEAgdm9pZCBhaW9fc2V0X2ZkX2hhbmRs ZXIoQWlvQ29udGV4dCAqY3R4LAogCiAgICAgICAgIFFMSVNUX0lOU0VSVF9IRUFEX1JDVSgmY3R4 LT5haW9faGFuZGxlcnMsIG5ld19ub2RlLCBub2RlKTsKICAgICB9Ci0gICAgaWYgKG5vZGUpIHsK LSAgICAgICAgZGVsZXRlZCA9IGFpb19yZW1vdmVfZmRfaGFuZGxlcihjdHgsIG5vZGUpOwotICAg IH0KIAogICAgIC8qIE5vIG5lZWQgdG8gb3JkZXIgcG9sbF9kaXNhYmxlX2NudCB3cml0ZXMgYWdh aW5zdCBvdGhlciB1cGRhdGVzOwogICAgICAqIHRoZSBjb3VudGVyIGlzIG9ubHkgdXNlZCB0byBh dm9pZCB3YXN0aW5nIHRpbWUgYW5kIGxhdGVuY3kgb24KQEAgLTE0MCw2ICsxNDMsOSBAQCB2b2lk IGFpb19zZXRfZmRfaGFuZGxlcihBaW9Db250ZXh0ICpjdHgsCiAgICAgICAgICAgICAgICBhdG9t aWNfcmVhZCgmY3R4LT5wb2xsX2Rpc2FibGVfY250KSArIHBvbGxfZGlzYWJsZV9jaGFuZ2UpOwog CiAgICAgY3R4LT5mZG1vbl9vcHMtPnVwZGF0ZShjdHgsIG5vZGUsIG5ld19ub2RlKTsKKyAgICBp ZiAobm9kZSkgeworICAgICAgICBkZWxldGVkID0gYWlvX3JlbW92ZV9mZF9oYW5kbGVyKGN0eCwg bm9kZSk7CisgICAgfQogICAgIHFlbXVfbG9ja2NudF91bmxvY2soJmN0eC0+bGlzdF9sb2NrKTsK ICAgICBhaW9fbm90aWZ5KGN0eCk7CiAKQEAgLTU2NSwxMSArNTcxLDE3IEBAIHZvaWQgYWlvX2Nv bnRleHRfc2V0dXAoQWlvQ29udGV4dCAqY3R4KQogICAgIGN0eC0+ZmRtb25fb3BzID0gJmZkbW9u X3BvbGxfb3BzOwogICAgIGN0eC0+ZXBvbGxmZCA9IC0xOwogCisgICAgLyogVXNlIHRoZSBmYXN0 ZXN0IGZkIG1vbml0b3JpbmcgaW1wbGVtZW50YXRpb24gaWYgYXZhaWxhYmxlICovCisgICAgaWYg KGZkbW9uX2lvX3VyaW5nX3NldHVwKGN0eCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog ICAgIGZkbW9uX2Vwb2xsX3NldHVwKGN0eCk7CiB9CiAKIHZvaWQgYWlvX2NvbnRleHRfZGVzdHJv eShBaW9Db250ZXh0ICpjdHgpCiB7CisgICAgZmRtb25faW9fdXJpbmdfZGVzdHJveShjdHgpOwog ICAgIGZkbW9uX2Vwb2xsX2Rpc2FibGUoY3R4KTsKIH0KIApkaWZmIC0tZ2l0IGEvdXRpbC9haW8t cG9zaXguaCBiL3V0aWwvYWlvLXBvc2l4LmgKaW5kZXggOTc4OTlkMGZiYy4uNTVmYzc3MTMyNyAx MDA2NDQKLS0tIGEvdXRpbC9haW8tcG9zaXguaAorKysgYi91dGlsL2Fpby1wb3NpeC5oCkBAIC0y NywxMCArMjcsMTQgQEAgc3RydWN0IEFpb0hhbmRsZXIgewogICAgIElPSGFuZGxlciAqaW9fcG9s bF9iZWdpbjsKICAgICBJT0hhbmRsZXIgKmlvX3BvbGxfZW5kOwogICAgIHZvaWQgKm9wYXF1ZTsK LSAgICBib29sIGlzX2V4dGVybmFsOwogICAgIFFMSVNUX0VOVFJZKEFpb0hhbmRsZXIpIG5vZGU7 CiAgICAgUUxJU1RfRU5UUlkoQWlvSGFuZGxlcikgbm9kZV9yZWFkeTsgLyogb25seSB1c2VkIGR1 cmluZyBhaW9fcG9sbCgpICovCiAgICAgUUxJU1RfRU5UUlkoQWlvSGFuZGxlcikgbm9kZV9kZWxl dGVkOworI2lmZGVmIENPTkZJR19MSU5VWF9JT19VUklORworICAgIFFTTElTVF9FTlRSWShBaW9I YW5kbGVyKSBub2RlX3N1Ym1pdHRlZDsKKyAgICB1bnNpZ25lZCBmbGFnczsgLyogc2VlIGZkbW9u LWlvX3VyaW5nLmMgKi8KKyNlbmRpZgorICAgIGJvb2wgaXNfZXh0ZXJuYWw7CiB9OwogCiAvKiBB ZGQgYSBoYW5kbGVyIHRvIGEgcmVhZHkgbGlzdCAqLwpAQCAtNTgsNCArNjIsMTggQEAgc3RhdGlj IGlubGluZSB2b2lkIGZkbW9uX2Vwb2xsX2Rpc2FibGUoQWlvQ29udGV4dCAqY3R4KQogfQogI2Vu ZGlmIC8qICFDT05GSUdfRVBPTExfQ1JFQVRFMSAqLwogCisjaWZkZWYgQ09ORklHX0xJTlVYX0lP X1VSSU5HCitib29sIGZkbW9uX2lvX3VyaW5nX3NldHVwKEFpb0NvbnRleHQgKmN0eCk7Cit2b2lk IGZkbW9uX2lvX3VyaW5nX2Rlc3Ryb3koQWlvQ29udGV4dCAqY3R4KTsKKyNlbHNlCitzdGF0aWMg aW5saW5lIGJvb2wgZmRtb25faW9fdXJpbmdfc2V0dXAoQWlvQ29udGV4dCAqY3R4KQoreworICAg IHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZkbW9uX2lvX3VyaW5nX2Rl c3Ryb3koQWlvQ29udGV4dCAqY3R4KQoreworfQorI2VuZGlmIC8qICFDT05GSUdfTElOVVhfSU9f VVJJTkcgKi8KKwogI2VuZGlmIC8qIEFJT19QT1NJWF9IICovCmRpZmYgLS1naXQgYS91dGlsL2Zk bW9uLWlvX3VyaW5nLmMgYi91dGlsL2ZkbW9uLWlvX3VyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uZmI5OWI0YjYxZQotLS0gL2Rldi9udWxsCisrKyBiL3V0aWwv ZmRtb24taW9fdXJpbmcuYwpAQCAtMCwwICsxLDMyNiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KKy8qCisgKiBMaW51eCBpb191cmluZyBmaWxlIGRl c2NyaXB0b3IgbW9uaXRvcmluZworICoKKyAqIFRoZSBMaW51eCBpb191cmluZyBBUEkgc3VwcG9y dHMgZmlsZSBkZXNjcmlwdG9yIG1vbml0b3Jpbmcgd2l0aCBhIGZldworICogYWR2YW50YWdlcyBv dmVyIGV4aXN0aW5nIEFQSXMgbGlrZSBwb2xsKDIpIGFuZCBlcG9sbCg3KToKKyAqCisgKiAxLiBV c2Vyc3BhY2UgcG9sbGluZyBvZiBldmVudHMgaXMgcG9zc2libGUgYmVjYXVzZSB0aGUgY29tcGxl dGlvbiBxdWV1ZSAoY3EKKyAqICAgIHJpbmcpIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBrZXJuZWwg YW5kIHVzZXJzcGFjZS4gIFRoaXMgYWxsb3dzCisgKiAgICBhcHBsaWNhdGlvbnMgdGhhdCByZWx5 IG9uIHVzZXJzcGFjZSBwb2xsaW5nIHRvIGFsc28gbW9uaXRvciBmaWxlCisgKiAgICBkZXNjcmlw dG9ycyBpbiB0aGUgc2FtZSB1c2Vyc3BhY2UgcG9sbGluZyBsb29wLgorICoKKyAqIDIuIFN1Ym1p c3Npb24gYW5kIGNvbXBsZXRpb24gaXMgYmF0Y2hlZCBhbmQgZG9uZSB0b2dldGhlciBpbiBhIHNp bmdsZSBzeXN0ZW0KKyAqICAgIGNhbGwuICBUaGlzIG1pbmltaXplcyB0aGUgbnVtYmVyIG9mIHN5 c3RlbSBjYWxscy4KKyAqCisgKiAzLiBGaWxlIGRlc2NyaXB0b3IgbW9uaXRvcmluZyBpcyBPKDEp IGxpa2UgZXBvbGwoNykgc28gaXQgc2NhbGVzIGJldHRlciB0aGFuCisgKiAgICBwb2xsKDIpLgor ICoKKyAqIDQuIE5hbm9zZWNvbmQgdGltZW91dHMgYXJlIHN1cHBvcnRlZCBzbyBpdCByZXF1aXJl cyBmZXdlciBzeXNjYWxscyB0aGFuCisgKiAgICBlcG9sbCg3KS4KKyAqCisgKiBUaGlzIGNvZGUg b25seSBtb25pdG9ycyBmaWxlIGRlc2NyaXB0b3JzIGFuZCBkb2VzIG5vdCBkbyBhc3luY2hyb25v dXMgZGlzaworICogSS9PLiAgSW1wbGVtZW50aW5nIGRpc2sgSS9PIGVmZmljaWVudGx5IGhhcyBv dGhlciByZXF1aXJlbWVudHMgYW5kIHNob3VsZAorICogdXNlIGEgc2VwYXJhdGUgaW9fdXJpbmcg c28gaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1bmlmeSB0aGUgY29kZS4KKyAqCisgKiBGaWxl IGRlc2NyaXB0b3IgbW9uaXRvcmluZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgZm9sbG93aW5n IG9wZXJhdGlvbnM6CisgKgorICogMS4gSU9SSU5HX09QX1BPTExfQUREIC0gYWRkcyBhIGZpbGUg ZGVzY3JpcHRvciB0byBiZSBtb25pdG9yZWQuCisgKiAyLiBJT1JJTkdfT1BfUE9MTF9SRU1PVkUg LSByZW1vdmVzIGEgZmlsZSBkZXNjcmlwdG9yIGJlaW5nIG1vbml0b3JlZC4gIFdoZW4KKyAqICAg IHRoZSBwb2xsIG1hc2sgY2hhbmdlcyBmb3IgYSBmaWxlIGRlc2NyaXB0b3IgaXQgaXMgZmlyc3Qg cmVtb3ZlZCBhbmQgdGhlbgorICogICAgcmUtYWRkZWQgd2l0aCB0aGUgbmV3IHBvbGwgbWFzaywg c28gdGhpcyBvcGVyYXRpb24gaXMgYWxzbyB1c2VkIGFzIHBhcnQKKyAqICAgIG9mIG1vZGlmeWlu ZyBhbiBleGlzdGluZyBtb25pdG9yZWQgZmlsZSBkZXNjcmlwdG9yLgorICogMy4gSU9SSU5HX09Q X1RJTUVPVVQgLSBhZGRlZCBldmVyeSB0aW1lIGEgYmxvY2tpbmcgc3lzY2FsbCBpcyBtYWRlIHRv IHdhaXQKKyAqICAgIGZvciBldmVudHMuICBUaGlzIG9wZXJhdGlvbiBzZWxmLWNhbmNlbHMgaWYg YW5vdGhlciBldmVudCBjb21wbGV0ZXMKKyAqICAgIGJlZm9yZSB0aGUgdGltZW91dC4KKyAqCisg KiBpb191cmluZyBjYWxscyB0aGUgc3VibWlzc2lvbiBxdWV1ZSB0aGUgInNxIHJpbmciIGFuZCB0 aGUgY29tcGxldGlvbiBxdWV1ZQorICogdGhlICJjcSByaW5nIi4gIFJpbmcgZW50cmllcyBhcmUg Y2FsbGVkICJzcWUiIGFuZCAiY3FlIiwgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFRoZSBjb2RlIGlz IHN0cnVjdHVyZWQgc28gdGhhdCBzcS9jcSByaW5ncyBhcmUgb25seSBtb2RpZmllZCB3aXRoaW4K KyAqIGZkbW9uX2lvX3VyaW5nX3dhaXQoKS4gIENoYW5nZXMgdG8gQWlvSGFuZGxlcnMgYXJlIG1h ZGUgYnkgZW5xdWV1aW5nIHRoZW0gb24KKyAqIGN0eC0+c3VibWl0X2xpc3Qgc28gdGhhdCBmZG1v bl9pb191cmluZ193YWl0KCkgY2FuIHN1Ym1pdCBJT1JJTkdfT1BfUE9MTF9BREQKKyAqIGFuZC9v ciBJT1JJTkdfT1BfUE9MTF9SRU1PVkUgc3FlcyBmb3IgdGhlbS4KKyAqLworCisjaW5jbHVkZSAi cWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlICJxZW11L3JjdV9xdWV1 ZS5oIgorI2luY2x1ZGUgImFpby1wb3NpeC5oIgorCitlbnVtIHsKKyAgICBGRE1PTl9JT19VUklO R19FTlRSSUVTICA9IDEyOCwgLyogc3EvY3EgcmluZyBzaXplICovCisKKyAgICAvKiBBaW9IYW5k bGVyOjpmbGFncyAqLworICAgIEZETU9OX0lPX1VSSU5HX1BFTkRJTkcgID0gKDEgPDwgMCksCisg ICAgRkRNT05fSU9fVVJJTkdfQUREICAgICAgPSAoMSA8PCAxKSwKKyAgICBGRE1PTl9JT19VUklO R19SRU1PVkUgICA9ICgxIDw8IDIpLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgcG9sbF9ldmVu dHNfZnJvbV9wZmQoaW50IHBmZF9ldmVudHMpCit7CisgICAgcmV0dXJuIChwZmRfZXZlbnRzICYg R19JT19JTiA/IFBPTExJTiA6IDApIHwKKyAgICAgICAgICAgKHBmZF9ldmVudHMgJiBHX0lPX09V VCA/IFBPTExPVVQgOiAwKSB8CisgICAgICAgICAgIChwZmRfZXZlbnRzICYgR19JT19IVVAgPyBQ T0xMSFVQIDogMCkgfAorICAgICAgICAgICAocGZkX2V2ZW50cyAmIEdfSU9fRVJSID8gUE9MTEVS UiA6IDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBwZmRfZXZlbnRzX2Zyb21fcG9sbChpbnQg cG9sbF9ldmVudHMpCit7CisgICAgcmV0dXJuIChwb2xsX2V2ZW50cyAmIFBPTExJTiA/IEdfSU9f SU4gOiAwKSB8CisgICAgICAgICAgIChwb2xsX2V2ZW50cyAmIFBPTExPVVQgPyBHX0lPX09VVCA6 IDApIHwKKyAgICAgICAgICAgKHBvbGxfZXZlbnRzICYgUE9MTEhVUCA/IEdfSU9fSFVQIDogMCkg fAorICAgICAgICAgICAocG9sbF9ldmVudHMgJiBQT0xMRVJSID8gR19JT19FUlIgOiAwKTsKK30K KworLyoKKyAqIFJldHVybnMgYW4gc3FlIGZvciBzdWJtaXR0aW5nIGEgcmVxdWVzdC4gIE9ubHkg YmUgY2FsbGVkIHdpdGhpbgorICogZmRtb25faW9fdXJpbmdfd2FpdCgpLgorICovCitzdGF0aWMg c3RydWN0IGlvX3VyaW5nX3NxZSAqZ2V0X3NxZShBaW9Db250ZXh0ICpjdHgpCit7CisgICAgc3Ry dWN0IGlvX3VyaW5nICpyaW5nID0gJmN0eC0+ZmRtb25faW9fdXJpbmc7CisgICAgc3RydWN0IGlv X3VyaW5nX3NxZSAqc3FlID0gaW9fdXJpbmdfZ2V0X3NxZShyaW5nKTsKKyAgICBpbnQgcmV0Owor CisgICAgaWYgKGxpa2VseShzcWUpKSB7CisgICAgICAgIHJldHVybiBzcWU7CisgICAgfQorCisg ICAgLyogTm8gZnJlZSBzcWVzIGxlZnQsIHN1Ym1pdCBwZW5kaW5nIHNxZXMgZmlyc3QgKi8KKyAg ICByZXQgPSBpb191cmluZ19zdWJtaXQocmluZyk7CisgICAgYXNzZXJ0KHJldCA+IDEpOworICAg IHNxZSA9IGlvX3VyaW5nX2dldF9zcWUocmluZyk7CisgICAgYXNzZXJ0KHNxZSk7CisgICAgcmV0 dXJuIHNxZTsKK30KKworLyogQXRvbWljYWxseSBlbnF1ZXVlIGFuIEFpb0hhbmRsZXIgZm9yIHNx IHJpbmcgc3VibWlzc2lvbiAqLworc3RhdGljIHZvaWQgZW5xdWV1ZShBaW9IYW5kbGVyU0xpc3Qg KmhlYWQsIEFpb0hhbmRsZXIgKm5vZGUsIHVuc2lnbmVkIGZsYWdzKQoreworICAgIHVuc2lnbmVk IG9sZF9mbGFnczsKKworICAgIG9sZF9mbGFncyA9IGF0b21pY19mZXRjaF9vcigmbm9kZS0+Zmxh Z3MsIEZETU9OX0lPX1VSSU5HX1BFTkRJTkcgfCBmbGFncyk7CisgICAgaWYgKCEob2xkX2ZsYWdz ICYgRkRNT05fSU9fVVJJTkdfUEVORElORykpIHsKKyAgICAgICAgUVNMSVNUX0lOU0VSVF9IRUFE X0FUT01JQyhoZWFkLCBub2RlLCBub2RlX3N1Ym1pdHRlZCk7CisgICAgfQorfQorCisvKiBEZXF1 ZXVlIGFuIEFpb0hhbmRsZXIgZm9yIHNxIHJpbmcgc3VibWlzc2lvbi4gIENhbGxlZCBieSBmaWxs X3NxX3JpbmcoKS4gKi8KK3N0YXRpYyBBaW9IYW5kbGVyICpkZXF1ZXVlKEFpb0hhbmRsZXJTTGlz dCAqaGVhZCwgdW5zaWduZWQgKmZsYWdzKQoreworICAgIEFpb0hhbmRsZXIgKm5vZGUgPSBRU0xJ U1RfRklSU1QoaGVhZCk7CisKKyAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisgICAgfQorCisgICAgLyogRG9lc24ndCBuZWVkIHRvIGJlIGF0b21pYyBzaW5jZSBmaWxsX3Nx X3JpbmcoKSBtb3ZlcyB0aGUgbGlzdCAqLworICAgIFFTTElTVF9SRU1PVkVfSEVBRChoZWFkLCBu b2RlX3N1Ym1pdHRlZCk7CisKKyAgICAvKgorICAgICAqIERvbid0IGNsZWFyIEZETU9OX0lPX1VS SU5HX1JFTU9WRS4gIEl0J3Mgc3RpY2t5IHNvIGl0IGNhbiBzZXJ2ZSB0d28KKyAgICAgKiBwdXJw b3NlczogdGVsbGluZyBmaWxsX3NxX3JpbmcoKSB0byBzdWJtaXQgSU9SSU5HX09QX1BPTExfUkVN T1ZFIGFuZAorICAgICAqIHRlbGxpbmcgcHJvY2Vzc19jcWUoKSB0byBkZWxldGUgdGhlIEFpb0hh bmRsZXIgd2hlbiBpdHMKKyAgICAgKiBJT1JJTkdfT1BfUE9MTF9BREQgY29tcGxldGVzLgorICAg ICAqLworICAgICpmbGFncyA9IGF0b21pY19mZXRjaF9hbmQoJm5vZGUtPmZsYWdzLCB+KEZETU9O X0lPX1VSSU5HX1BFTkRJTkcgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZETU9OX0lPX1VSSU5HX0FERCkpOworICAgIHJldHVybiBub2RlOworfQorCitz dGF0aWMgdm9pZCBmZG1vbl9pb191cmluZ191cGRhdGUoQWlvQ29udGV4dCAqY3R4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpb0hhbmRsZXIgKm9sZF9ub2RlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFpb0hhbmRsZXIgKm5ld19ub2RlKQoreworICAg IGlmIChuZXdfbm9kZSkgeworICAgICAgICBlbnF1ZXVlKCZjdHgtPnN1Ym1pdF9saXN0LCBuZXdf bm9kZSwgRkRNT05fSU9fVVJJTkdfQUREKTsKKyAgICB9CisKKyAgICBpZiAob2xkX25vZGUpIHsK KyAgICAgICAgLyoKKyAgICAgICAgICogRGVsZXRpb24gaXMgdHJpY2t5IGJlY2F1c2UgSU9SSU5H X09QX1BPTExfQUREIGFuZAorICAgICAgICAgKiBJT1JJTkdfT1BfUE9MTF9SRU1PVkUgYXJlIGFz eW5jLiAgV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgb3JpZ2luYWwKKyAgICAgICAgICogSU9SSU5H X09QX1BPTExfQUREIHRvIGNvbXBsZXRlIGJlZm9yZSB0aGlzIGhhbmRsZXIgY2FuIGJlIGZyZWVk CisgICAgICAgICAqIHNhZmVseS4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQncyBwb3NzaWJs ZSB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgYmVjb21lcyByZWFkeSBhbmQgdGhlCisgICAgICAg ICAqIElPUklOR19PUF9QT0xMX0FERCBjcWUgaXMgZW5xdWV1ZWQgYmVmb3JlIElPUklOR19PUF9Q T0xMX1JFTU9WRSBpcworICAgICAgICAgKiBzdWJtaXR0ZWQsIHRvby4KKyAgICAgICAgICoKKyAg ICAgICAgICogTWFyayB0aGlzIGhhbmRsZXIgZGVsZXRlZCByaWdodCBub3cgYnV0IGRvbid0IHBs YWNlIGl0IG9uCisgICAgICAgICAqIGN0eC0+ZGVsZXRlZF9haW9faGFuZGxlcnMgeWV0LiAgSW5z dGVhZCwgbWFudWFsbHkgZnVkZ2UgdGhlIGxpc3QKKyAgICAgICAgICogZW50cnkgdG8gbWFrZSBR TElTVF9JU19JTlNFUlRFRCgpIHRoaW5rIHRoaXMgaGFuZGxlciBoYXMgYmVlbgorICAgICAgICAg KiBpbnNlcnRlZCBhbmQgb3RoZXIgY29kZSByZWNvZ25pemVzIHRoaXMgQWlvSGFuZGxlciBhcyBk ZWxldGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBPbmNlIHRoZSBvcmlnaW5hbCBJT1JJTkdf T1BfUE9MTF9BREQgY29tcGxldGVzIHdlIGVucXVldWUgdGhlCisgICAgICAgICAqIGhhbmRsZXIg b24gdGhlIHJlYWwgY3R4LT5kZWxldGVkX2Fpb19oYW5kbGVycyBsaXN0IHRvIGJlIGZyZWVkLgor ICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KCFRTElTVF9JU19JTlNFUlRFRChvbGRfbm9kZSwg bm9kZV9kZWxldGVkKSk7CisgICAgICAgIG9sZF9ub2RlLT5ub2RlX2RlbGV0ZWQubGVfcHJldiA9 ICZvbGRfbm9kZS0+bm9kZV9kZWxldGVkLmxlX25leHQ7CisKKyAgICAgICAgZW5xdWV1ZSgmY3R4 LT5zdWJtaXRfbGlzdCwgb2xkX25vZGUsIEZETU9OX0lPX1VSSU5HX1JFTU9WRSk7CisgICAgfQor fQorCitzdGF0aWMgdm9pZCBhZGRfcG9sbF9hZGRfc3FlKEFpb0NvbnRleHQgKmN0eCwgQWlvSGFu ZGxlciAqbm9kZSkKK3sKKyAgICBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUgPSBnZXRfc3FlKGN0 eCk7CisgICAgaW50IGV2ZW50cyA9IHBvbGxfZXZlbnRzX2Zyb21fcGZkKG5vZGUtPnBmZC5ldmVu dHMpOworCisgICAgaW9fdXJpbmdfcHJlcF9wb2xsX2FkZChzcWUsIG5vZGUtPnBmZC5mZCwgZXZl bnRzKTsKKyAgICBpb191cmluZ19zcWVfc2V0X2RhdGEoc3FlLCBub2RlKTsKK30KKworc3RhdGlj IHZvaWQgYWRkX3BvbGxfcmVtb3ZlX3NxZShBaW9Db250ZXh0ICpjdHgsIEFpb0hhbmRsZXIgKm5v ZGUpCit7CisgICAgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlID0gZ2V0X3NxZShjdHgpOworCisg ICAgaW9fdXJpbmdfcHJlcF9wb2xsX3JlbW92ZShzcWUsIG5vZGUpOworfQorCisvKiBBZGQgYSB0 aW1lb3V0IHRoYXQgc2VsZi1jYW5jZWxzIHdoZW4gYW5vdGhlciBjcWUgYmVjb21lcyByZWFkeSAq Lworc3RhdGljIHZvaWQgYWRkX3RpbWVvdXRfc3FlKEFpb0NvbnRleHQgKmN0eCwgaW50NjRfdCBu cykKK3sKKyAgICBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWU7CisgICAgc3RydWN0IF9fa2VybmVs X3RpbWVzcGVjIHRzID0geworICAgICAgICAudHZfc2VjID0gbnMgLyBOQU5PU0VDT05EU19QRVJf U0VDT05ELAorICAgICAgICAudHZfbnNlYyA9IG5zICUgTkFOT1NFQ09ORFNfUEVSX1NFQ09ORCwK KyAgICB9OworCisgICAgc3FlID0gZ2V0X3NxZShjdHgpOworICAgIGlvX3VyaW5nX3ByZXBfdGlt ZW91dChzcWUsICZ0cywgMSwgMCk7Cit9CisKKy8qIEFkZCBzcWVzIGZyb20gY3R4LT5zdWJtaXRf bGlzdCBmb3Igc3VibWlzc2lvbiAqLworc3RhdGljIHZvaWQgZmlsbF9zcV9yaW5nKEFpb0NvbnRl eHQgKmN0eCkKK3sKKyAgICBBaW9IYW5kbGVyU0xpc3Qgc3VibWl0X2xpc3Q7CisgICAgQWlvSGFu ZGxlciAqbm9kZTsKKyAgICB1bnNpZ25lZCBmbGFnczsKKworICAgIFFTTElTVF9NT1ZFX0FUT01J Qygmc3VibWl0X2xpc3QsICZjdHgtPnN1Ym1pdF9saXN0KTsKKworICAgIHdoaWxlICgobm9kZSA9 IGRlcXVldWUoJnN1Ym1pdF9saXN0LCAmZmxhZ3MpKSkgeworICAgICAgICAvKiBPcmRlciBtYXR0 ZXJzLCBqdXN0IGluIGNhc2UgYm90aCBmbGFncyB3ZXJlIHNldCAqLworICAgICAgICBpZiAoZmxh Z3MgJiBGRE1PTl9JT19VUklOR19BREQpIHsKKyAgICAgICAgICAgIGFkZF9wb2xsX2FkZF9zcWUo Y3R4LCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmxhZ3MgJiBGRE1PTl9JT19VUklO R19SRU1PVkUpIHsKKyAgICAgICAgICAgIGFkZF9wb2xsX3JlbW92ZV9zcWUoY3R4LCBub2RlKTsK KyAgICAgICAgfQorICAgIH0KK30KKworLyogUmV0dXJucyB0cnVlIGlmIGEgaGFuZGxlciBiZWNh bWUgcmVhZHkgKi8KK3N0YXRpYyBib29sIHByb2Nlc3NfY3FlKEFpb0NvbnRleHQgKmN0eCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIEFpb0hhbmRsZXJMaXN0ICpyZWFkeV9saXN0LAorICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlKQoreworICAgIEFpb0hh bmRsZXIgKm5vZGUgPSBpb191cmluZ19jcWVfZ2V0X2RhdGEoY3FlKTsKKyAgICB1bnNpZ25lZCBm bGFnczsKKworICAgIC8qIHBvbGxfdGltZW91dCBhbmQgcG9sbF9yZW1vdmUgaGF2ZSBhIHplcm8g dXNlcl9kYXRhIGZpZWxkICovCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERlbGV0aW9uIGNhbiBvbmx5IGhhcHBlbiB3aGVu IElPUklOR19PUF9QT0xMX0FERCBjb21wbGV0ZXMuICBJZiB3ZSByYWNlCisgICAgICogd2l0aCBl bnF1ZXVlKCkgaGVyZSB0aGVuIHdlIGNhbiBzYWZlbHkgY2xlYXIgdGhlIEZETU9OX0lPX1VSSU5H X1JFTU9WRQorICAgICAqIGJpdCBiZWZvcmUgSU9SSU5HX09QX1BPTExfUkVNT1ZFIGlzIHN1Ym1p dHRlZC4KKyAgICAgKi8KKyAgICBmbGFncyA9IGF0b21pY19mZXRjaF9hbmQoJm5vZGUtPmZsYWdz LCB+RkRNT05fSU9fVVJJTkdfUkVNT1ZFKTsKKyAgICBpZiAoZmxhZ3MgJiBGRE1PTl9JT19VUklO R19SRU1PVkUpIHsKKyAgICAgICAgUUxJU1RfSU5TRVJUX0hFQURfUkNVKCZjdHgtPmRlbGV0ZWRf YWlvX2hhbmRsZXJzLCBub2RlLCBub2RlX2RlbGV0ZWQpOworICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfQorCisgICAgYWlvX2FkZF9yZWFkeV9oYW5kbGVyKHJlYWR5X2xpc3QsIG5vZGUsIHBm ZF9ldmVudHNfZnJvbV9wb2xsKGNxZS0+cmVzKSk7CisKKyAgICAvKiBJT1JJTkdfT1BfUE9MTF9B REQgaXMgb25lLXNob3Qgc28gd2UgbXVzdCByZS1hcm0gaXQgKi8KKyAgICBhZGRfcG9sbF9hZGRf c3FlKGN0eCwgbm9kZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vz c19jcV9yaW5nKEFpb0NvbnRleHQgKmN0eCwgQWlvSGFuZGxlckxpc3QgKnJlYWR5X2xpc3QpCit7 CisgICAgc3RydWN0IGlvX3VyaW5nICpyaW5nID0gJmN0eC0+ZmRtb25faW9fdXJpbmc7CisgICAg c3RydWN0IGlvX3VyaW5nX2NxZSAqY3FlOworICAgIHVuc2lnbmVkIG51bV9jcWVzID0gMDsKKyAg ICB1bnNpZ25lZCBudW1fcmVhZHkgPSAwOworICAgIHVuc2lnbmVkIGhlYWQ7CisKKyAgICBpb191 cmluZ19mb3JfZWFjaF9jcWUocmluZywgaGVhZCwgY3FlKSB7CisgICAgICAgIGlmIChwcm9jZXNz X2NxZShjdHgsIHJlYWR5X2xpc3QsIGNxZSkpIHsKKyAgICAgICAgICAgIG51bV9yZWFkeSsrOwor ICAgICAgICB9CisKKyAgICAgICAgbnVtX2NxZXMrKzsKKyAgICB9CisKKyAgICBpb191cmluZ19j cV9hZHZhbmNlKHJpbmcsIG51bV9jcWVzKTsKKyAgICByZXR1cm4gbnVtX3JlYWR5OworfQorCitz dGF0aWMgaW50IGZkbW9uX2lvX3VyaW5nX3dhaXQoQWlvQ29udGV4dCAqY3R4LCBBaW9IYW5kbGVy TGlzdCAqcmVhZHlfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90 IHRpbWVvdXQpCit7CisgICAgdW5zaWduZWQgd2FpdF9uciA9IDE7IC8qIGJsb2NrIHVudGlsIGF0 IGxlYXN0IG9uZSBjcWUgaXMgcmVhZHkgKi8KKyAgICBpbnQgcmV0OworCisgICAgLyogRmFsbCBi YWNrIHdoaWxlIGV4dGVybmFsIGNsaWVudHMgYXJlIGRpc2FibGVkICovCisgICAgaWYgKGF0b21p Y19yZWFkKCZjdHgtPmV4dGVybmFsX2Rpc2FibGVfY250KSkgeworICAgICAgICByZXR1cm4gZmRt b25fcG9sbF9vcHMud2FpdChjdHgsIHJlYWR5X2xpc3QsIHRpbWVvdXQpOworICAgIH0KKworICAg IGlmICh0aW1lb3V0ID09IDApIHsKKyAgICAgICAgd2FpdF9uciA9IDA7IC8qIG5vbi1ibG9ja2lu ZyAqLworICAgIH0gZWxzZSBpZiAodGltZW91dCA+IDApIHsKKyAgICAgICAgYWRkX3RpbWVvdXRf c3FlKGN0eCwgdGltZW91dCk7CisgICAgfQorCisgICAgZmlsbF9zcV9yaW5nKGN0eCk7CisKKyAg ICByZXQgPSBpb191cmluZ19zdWJtaXRfYW5kX3dhaXQoJmN0eC0+ZmRtb25faW9fdXJpbmcsIHdh aXRfbnIpOworICAgIGFzc2VydChyZXQgPj0gMCk7CisKKyAgICByZXR1cm4gcHJvY2Vzc19jcV9y aW5nKGN0eCwgcmVhZHlfbGlzdCk7Cit9CisKK3N0YXRpYyBjb25zdCBGRE1vbk9wcyBmZG1vbl9p b191cmluZ19vcHMgPSB7CisgICAgLnVwZGF0ZSA9IGZkbW9uX2lvX3VyaW5nX3VwZGF0ZSwKKyAg ICAud2FpdCA9IGZkbW9uX2lvX3VyaW5nX3dhaXQsCit9OworCitib29sIGZkbW9uX2lvX3VyaW5n X3NldHVwKEFpb0NvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gaW9f dXJpbmdfcXVldWVfaW5pdChGRE1PTl9JT19VUklOR19FTlRSSUVTLCAmY3R4LT5mZG1vbl9pb191 cmluZywgMCk7CisgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg ICB9CisKKyAgICBRU0xJU1RfSU5JVCgmY3R4LT5zdWJtaXRfbGlzdCk7CisgICAgY3R4LT5mZG1v bl9vcHMgPSAmZmRtb25faW9fdXJpbmdfb3BzOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk IGZkbW9uX2lvX3VyaW5nX2Rlc3Ryb3koQWlvQ29udGV4dCAqY3R4KQoreworICAgIGlmIChjdHgt PmZkbW9uX29wcyA9PSAmZmRtb25faW9fdXJpbmdfb3BzKSB7CisgICAgICAgIEFpb0hhbmRsZXIg Km5vZGU7CisKKyAgICAgICAgaW9fdXJpbmdfcXVldWVfZXhpdCgmY3R4LT5mZG1vbl9pb191cmlu Zyk7CisKKyAgICAgICAgLyogTm8gbmVlZCB0byBzdWJtaXQgdGhlc2UgYW55bW9yZSwganVzdCBm cmVlIHRoZW0uICovCisgICAgICAgIHdoaWxlICgobm9kZSA9IFFTTElTVF9GSVJTVF9SQ1UoJmN0 eC0+c3VibWl0X2xpc3QpKSkgeworICAgICAgICAgICAgUVNMSVNUX1JFTU9WRV9IRUFEX1JDVSgm Y3R4LT5zdWJtaXRfbGlzdCwgbm9kZV9zdWJtaXR0ZWQpOworICAgICAgICAgICAgUUxJU1RfUkVN T1ZFKG5vZGUsIG5vZGUpOworICAgICAgICAgICAgZ19mcmVlKG5vZGUpOworICAgICAgICB9CisK KyAgICAgICAgY3R4LT5mZG1vbl9vcHMgPSAmZmRtb25fcG9sbF9vcHM7CisgICAgfQorfQotLSAK Mi4yNC4xCgo=