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 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 33D8ACD37B2 for ; Sun, 10 May 2026 22:12:53 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 8D26010E444; Sun, 10 May 2026 22:12:52 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.b="lln6Hm5W"; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id E0F2E10E444 for ; Sun, 10 May 2026 22:12:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Cc:To:In-Reply-To:References:Message-Id: Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From:Sender: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=rtO4Eg7479Hq7x2y65MCTNs7XIxCP87nA1XDzmv1Fg8=; b=lln6Hm5Wd1xqR8tO89/M1XHapR aVzWFPxHX9RJiVb7Rh2qXU8R4Fv/qxRxKIO+lQodmbkF3/3bW6Dni4oE+LsBXiBIabP8uT455RGJa mhpDttuU/wMs+UiBRSvRig6ZEAXFGl6XQYXlkj7TRR5Emm5k0lEGdvxet9V0jnPH1ic3MBTl7gSBp q6+sWQRWs1FUOpt/3gQWfpDC1Vr7Py1NMH+NFVmdw/FtEWCjyY7IdsiBB+Ie85BqAXzK1U9Nn44jI GAE7LePZ0jisQpkmasTWxb9CrG1R2jWOqnbp004WMpVffKD+Vu+4gC9r1UkI1byrwwZPnZNK6q1qr wpSnvPHQ==; Received: from [189.7.87.67] (helo=[10.0.0.1]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1wMCOE-008k1J-P8; Mon, 11 May 2026 00:12:46 +0200 From: =?utf-8?q?Ma=C3=ADra_Canal?= Date: Sun, 10 May 2026 19:12:05 -0300 Subject: [PATCH v2 08/14] drm/v3d: Introduce struct v3d_submit and convert CL/TFU/CSD ioctls MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-Id: <20260510-v3d-sched-misc-fixes-v2-8-ca4aba343ef6@igalia.com> References: <20260510-v3d-sched-misc-fixes-v2-0-ca4aba343ef6@igalia.com> In-Reply-To: <20260510-v3d-sched-misc-fixes-v2-0-ca4aba343ef6@igalia.com> To: Melissa Wen , Iago Toral , Tvrtko Ursulin , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , =?utf-8?q?Christian_K=C3=B6nig?= Cc: kernel-dev@igalia.com, dri-devel@lists.freedesktop.org, =?utf-8?q?Ma=C3=ADra_Canal?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=16048; i=mcanal@igalia.com; h=from:subject:message-id; bh=AnZ0tHkUeNcP9ds2INgcRnmiRRgY0tR2YGFkLVyI54g=; b=owEBbQGS/pANAwAKAT/zDop2iPqqAcsmYgBqAQK0e8xhoNDPU7SKQEWf5NKElK2fOc0f/RG5c HaWVtI6FKCJATMEAAEKAB0WIQT45F19ARZ3Bymmd9E/8w6Kdoj6qgUCagECtAAKCRA/8w6Kdoj6 qhIECACPxNazE3elSb7pYSJW4mq30F6zKE8qnjaWDqx/KfPBLg9RmFa4lRdzMl6r5oBfVMLkCkR 9PME5HNVzgtFfC6ffyHrhW4Xuxf85NORRa53Jnv65jzkfrpU/Bsu2OIYJn1r3Qgs1yXV1I2G689 dp6UcbVHjJQN5vTW4m+e2yn2aDgnhvnzB1A4avnWFQZ4a2UxoUKqKdu4Pt2h76ErXkZF3ojXMSP jMQ4HL4zzS+oSYUFqHo9q6FzEgEPjRZWApiynOMorl4gKH544xLpRAKVI1Wuyt+243fAAKnK8mH 46enJJMAVqC71BM+vZuZ6pnAIj+VlT8DsT319xzT77HlMizo X-Developer-Key: i=mcanal@igalia.com; a=openpgp; fpr=F8E45D7D0116770729A677D13FF30E8A7688FAAA X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" QXMgdGhlIFYzRCBkcml2ZXIgZ3JldyB3aXRoIHRpbWUsIGRpZmZlcmVudCB0eXBlcyBvZiBzdWJt aXNzaW9uIHdlcmUgYWRkZWQKYW5kIHRoZSBzdWJtaXNzaW9uIGNvZGUgZ3JldyBtb3JlIGNvbXBs ZXgsIGJ1dCB0aGUgZHJpdmVyIHN0dWNrIHdpdGggdGhlCnNhbWUgYWJzdHJhY3Rpb25zLgoKTm93 YWRheXMsIHRoZSBzdWJtaXNzaW9uIGlvY3RscyBkb24ndCBzdWJtaXQgYSBzaW5nbGUgam9iLCBi dXQgYQpjaGFpbiBvZiBqb2JzOgoKMS4gdjNkX3N1Ym1pdF9jbF9pb2N0bCgpIHN1Ym1pdHMgYSBC SU4gam9iIChvcHRpb25hbCksIFJFTkRFUiBqb2IKICAgKG1hbmRhdG9yeSksIGFuZCBhIENMRUFO X0NBQ0hFIGpvYiAob3B0aW9uYWwpLgoyLiB2M2Rfc3VibWl0X2NzZF9pb2N0bCgpIHN1Ym1pdHMg YSBDU0QsIGFuZCBhIENMRUFOX0NBQ0hFIGpvYi4KMy4gdjNkX3N1Ym1pdF90ZnVfaW9jdGwoKSBz dWJtaXRzIGEgVEZVIGpvYi4KClRoZXJlZm9yZSwgZWFjaCBpb2N0bCBzdWJtaXRzIGEgY2hhaW4g b2Ygam9icyBpbiB3aGljaCBlYWNoIGpvYiBkZXBlbmRzIG9uCnRoZSBwcmV2aW91cyBvbmUuIEhv d2V2ZXIsIHRoaXMgY29uY2VwdCBpcyBub3Qgd2VsbCByZXByZXNlbnRlZCBpbiBzb2Z0d2FyZQph dCB0aGUgbW9tZW50LgoKVG8gYWRkcmVzcyB0aGlzLCBpbnRyb2R1Y2UgYSBuZXcgY29uY2VwdDog dGhlIHN0cnVjdCB2M2Rfc3VibWl0LCB3aGljaApncm91cHMgdGhlIHN1Ym1pc3Npb24gc3RhdGUg YW5kIHJlcHJlc2VudHMgdGhlIHN1Ym1pc3Npb24gY2hhaW4gZm9ybWVkIGJ5CmFuIG9yZGVyZWQg YXJyYXkgb2Ygam9icy4KCkFkZCBuZXcgaGVscGVycyB0byBhbGxvY2F0ZSwgYWRkIGpvYnMgdG8g dGhlIGNoYWluIGFuZCBzdWJtaXQgam9icyB0bwp0aGUgc2NoZWR1bGVyLCBhbGwgYmFzZWQgb24g dGhlIG5ldyBzdHJ1Y3QuIENvbnZlcnQgdjNkX3N1Ym1pdF9jbF9pb2N0bCgpLAp2M2Rfc3VibWl0 X3RmdV9pb2N0bCgpIGFuZCB2M2Rfc3VibWl0X2NzZF9pb2N0bCgpIHRvIHRoZSBuZXcgcGF0dGVy bi4gRWFjaAppb2N0bCBub3cgZm9sbG93cyB0aGUgc2FtZSBmbG93OiBhZGQgam9icyAtPiBsb29r dXAgQk9zIC0+IGxvY2sKcmVzZXJ2YXRpb25zIC0+IGF0dGFjaCBwZXJmbW9uIC0+IHN1Ym1pdCBj aGFpbiAtPiBhdHRhY2ggZmVuY2VzIC0+IHB1dApqb2JzLgoKVGhlIENQVSBpb2N0bCBpcyBsZWZ0 IG9uIHRoZSBvbGQgaGVscGVycyBmb3Igbm93OyBpdHMgaW5kaXJlY3QgQ1NEIHBhdGgKcmVxdWly ZXMgc29tZSByZXN0cnVjdHVyaW5nIHRoYXQgd2lsbCBiZSBhZGRyZXNzZWQgaW4gdGhlIG5leHQg ZmV3CmNvbW1pdHMuCgpTaWduZWQtb2ZmLWJ5OiBNYcOtcmEgQ2FuYWwgPG1jYW5hbEBpZ2FsaWEu Y29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX2Rydi5oICAgIHwgIDIxICsrKwogZHJp dmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMgfCAzNTUgKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDIxOCBpbnNlcnRpb25zKCspLCAx NTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vdjNkL3YzZF9kcnYuaAppbmRleCA3ODhhNDVjNjAyOTAuLmZj MTJlNTIxNWZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmgKKysr IGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2RfZHJ2LmgKQEAgLTI4OCw2ICsyODgsMjcgQEAgdG9f djNkX2ZlbmNlKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQogI2RlZmluZSBWM0RfQ09SRV9SRUFE KGNvcmUsIG9mZnNldCkgcmVhZGwodjNkLT5jb3JlX3JlZ3NbY29yZV0gKyBvZmZzZXQpCiAjZGVm aW5lIFYzRF9DT1JFX1dSSVRFKGNvcmUsIG9mZnNldCwgdmFsKSB3cml0ZWwodmFsLCB2M2QtPmNv cmVfcmVnc1tjb3JlXSArIG9mZnNldCkKIAorI2RlZmluZSBWM0RfTUFYX0pPQlNfUEVSX1NVQk1J U1NJT04gMworCisvKiBQZXItaW9jdGwgc3VibWlzc2lvbiBjb250ZXh0ICovCitzdHJ1Y3QgdjNk X3N1Ym1pdCB7CisJc3RydWN0IHYzZF9kZXYgKnYzZDsKKworCXN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2OworCisJLyogRFJNIGV4ZWMgY29udGV4dCBmb3IgdGhpcyBzdWJtaXNzaW9uLiAqLwor CXN0cnVjdCBkcm1fZXhlYyBleGVjOworCisJLyogT3JkZXJlZCBhcnJheSBvZiBqb2JzIGZvcm1p bmcgdGhlIHN1Ym1pc3Npb24gY2hhaW4uIEpvYnMgYXJlCisJICogYXBwZW5kZWQgdmlhIHYzZF9z dWJtaXRfYWRkX2pvYigpLCB0aGVuIGNoYWluZWQgYW5kIHB1c2hlZCB0bworCSAqIHRoZSBzY2hl ZHVsZXIgYnkgdjNkX3N1Ym1pdF9qb2JzKCkuCisJICovCisJc3RydWN0IHYzZF9qb2IgKmpvYnNb VjNEX01BWF9KT0JTX1BFUl9TVUJNSVNTSU9OXTsKKworCS8qIE51bWJlciBvZiBqb2JzIGN1cnJl bnRseSBpbiBAam9icy4gKi8KKwl1MzIgam9iX2NvdW50OworfTsKKwogc3RydWN0IHYzZF9qb2Ig ewogCXN0cnVjdCBkcm1fc2NoZWRfam9iIGJhc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX3N1Ym1pdC5jIGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc3VibWl0LmMK aW5kZXggMGFjODhlNTc2M2I1Li5jNTE0NzQ0MDNkMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS92M2QvdjNkX3N1Ym1pdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3N1Ym1p dC5jCkBAIC0yNDIsNiArMjQyLDgwIEBAIHYzZF9qb2JfaW5pdChzdHJ1Y3QgdjNkX2RldiAqdjNk LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMg aW50Cit2M2Rfc3VibWl0X2FkZF9qb2Ioc3RydWN0IHYzZF9zdWJtaXQgKnN1Ym1pdCwgdm9pZCAq KmNvbnRhaW5lciwgc2l6ZV90IHNpemUsCisJCSAgIHZvaWQgKCpmcmVlKShzdHJ1Y3Qga3JlZiAq cmVmKSwgZW51bSB2M2RfcXVldWUgcXVldWUpCit7CisJc3RydWN0IHYzZF9maWxlX3ByaXYgKnYz ZF9wcml2ID0gc3VibWl0LT5maWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCB2M2RfZGV2 ICp2M2QgPSBzdWJtaXQtPnYzZDsKKwlzdHJ1Y3QgdjNkX2pvYiAqam9iOworCWludCByZXQ7CisK KwkqY29udGFpbmVyID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoISpjb250YWlu ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJam9iID0gKmNvbnRhaW5lcjsKKwlqb2ItPnYzZCA9 IHYzZDsKKwlqb2ItPmZyZWUgPSBmcmVlOworCWpvYi0+ZmlsZV9wcml2ID0gdjNkX3ByaXY7CisK KwlyZXQgPSBkcm1fc2NoZWRfam9iX2luaXQoJmpvYi0+YmFzZSwgJnYzZF9wcml2LT5zY2hlZF9l bnRpdHlbcXVldWVdLAorCQkJCSAxLCB2M2RfcHJpdiwgc3VibWl0LT5maWxlX3ByaXYtPmNsaWVu dF9pZCk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2ZyZWU7CisKKwkvKiBDUFUgam9icyBkb24n dCByZXF1aXJlIGhhcmR3YXJlIHJlc291cmNlcyAqLworCWlmIChxdWV1ZSAhPSBWM0RfQ1BVKSB7 CisJCXJldCA9IHYzZF9wbV9ydW50aW1lX2dldCh2M2QpOworCQlpZiAocmV0KQorCQkJZ290byBm YWlsX3NjaGVkX2pvYjsKKwkJam9iLT5oYXNfcG1fcmVmID0gdHJ1ZTsKKwl9CisKKwlrcmVmX2lu aXQoJmpvYi0+cmVmY291bnQpOworCisJam9iLT5jbGllbnRfc3RhdHMgPSB2M2Rfc3RhdHNfZ2V0 KHYzZF9wcml2LT5zdGF0c1txdWV1ZV0pOworCWpvYi0+Z2xvYmFsX3N0YXRzID0gdjNkX3N0YXRz X2dldCh2M2QtPnF1ZXVlW3F1ZXVlXS5zdGF0cyk7CisKKwlzdWJtaXQtPmpvYnNbc3VibWl0LT5q b2JfY291bnQrK10gPSBqb2I7CisKKwlyZXR1cm4gMDsKKworZmFpbF9zY2hlZF9qb2I6CisJZHJt X3NjaGVkX2pvYl9jbGVhbnVwKCZqb2ItPmJhc2UpOworZmFpbF9mcmVlOgorCWtmcmVlKCpjb250 YWluZXIpOworCSpjb250YWluZXIgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQKK3YzZF9hdHRhY2hfcGVyZm1vbl90b19qb2JzKHN0cnVjdCB2M2Rfc3VibWl0ICpzdWJtaXQs IHUzMiBwZXJmbW9uX2lkKQoreworCXN0cnVjdCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdiA9IHN1 Ym1pdC0+ZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKKwlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gc3Vi bWl0LT52M2Q7CisJc3RydWN0IHYzZF9wZXJmbW9uICpwZXJmbW9uOworCisJaWYgKCFwZXJmbW9u X2lkKQorCQlyZXR1cm4gMDsKKworCWlmICh2M2QtPmdsb2JhbF9wZXJmbW9uKQorCQlyZXR1cm4g LUVBR0FJTjsKKworCXBlcmZtb24gPSB2M2RfcGVyZm1vbl9maW5kKHYzZF9wcml2LCBwZXJmbW9u X2lkKTsKKwlpZiAoIXBlcmZtb24pCisJCXJldHVybiAtRU5PRU5UOworCisJZm9yIChpbnQgaSA9 IDA7IGkgPCBzdWJtaXQtPmpvYl9jb3VudDsgaSsrKSB7CisJCXN1Ym1pdC0+am9ic1tpXS0+cGVy Zm1vbiA9IHBlcmZtb247CisJCWlmIChpICE9IDApCisJCQl2M2RfcGVyZm1vbl9nZXQocGVyZm1v bik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkCiB2M2RfcHVzaF9qb2Ioc3Ry dWN0IHYzZF9qb2IgKmpvYikKIHsKQEAgLTI1NSw2ICszMjksNDYgQEAgdjNkX3B1c2hfam9iKHN0 cnVjdCB2M2Rfam9iICpqb2IpCiAJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmam9iLT5iYXNl KTsKIH0KIAorc3RhdGljIGludAordjNkX3N1Ym1pdF9qb2JzKHN0cnVjdCB2M2Rfc3VibWl0ICpz dWJtaXQpCit7CisJc3RydWN0IHYzZF9kZXYgKnYzZCA9IHN1Ym1pdC0+djNkOworCWludCByZXQg PSAwOworCisJbXV0ZXhfbG9jaygmdjNkLT5zY2hlZF9sb2NrKTsKKworCWZvciAoaW50IGkgPSAw OyBpIDwgc3VibWl0LT5qb2JfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdjNkX2pvYiAqam9iID0g c3VibWl0LT5qb2JzW2ldOworCisJCXYzZF9wdXNoX2pvYihqb2IpOworCisJCWlmIChpICsgMSA8 IHN1Ym1pdC0+am9iX2NvdW50KSB7CisJCQlyZXQgPSBkcm1fc2NoZWRfam9iX2FkZF9kZXBlbmRl bmN5KCZzdWJtaXQtPmpvYnNbaSArIDFdLT5iYXNlLAorCQkJCQkJCSAgIGRtYV9mZW5jZV9nZXQo am9iLT5kb25lX2ZlbmNlKSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisJfQor CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZ2M2QtPnNjaGVkX2xvY2spOworCXJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyB2b2lkCit2M2Rfc3VibWl0X3B1dF9qb2JzKHN0cnVjdCB2M2Rfc3VibWl0ICpz dWJtaXQpCit7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBzdWJtaXQtPmpvYl9jb3VudDsgaSsrKQor CQl2M2Rfam9iX3B1dChzdWJtaXQtPmpvYnNbaV0pOworfQorCitzdGF0aWMgdm9pZAordjNkX3N1 Ym1pdF9jbGVhbnVwX2pvYnMoc3RydWN0IHYzZF9zdWJtaXQgKnN1Ym1pdCkKK3sKKwlmb3IgKGlu dCBpID0gMDsgaSA8IHN1Ym1pdC0+am9iX2NvdW50OyBpKyspCisJCXYzZF9qb2JfY2xlYW51cChz dWJtaXQtPmpvYnNbaV0pOworfQorCiBzdGF0aWMgdm9pZAogdjNkX2F0dGFjaF9mZW5jZXNfYW5k X3VubG9ja19yZXNlcnZhdGlvbihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCQkJIHN0 cnVjdCB2M2Rfam9iICpqb2IsCkBAIC05MDIsMTggKzEwMTYsMTUgQEAgaW50CiB2M2Rfc3VibWl0 X2NsX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlzdHJ1Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNk X2RldihkZXYpOwotCXN0cnVjdCB2M2RfZmlsZV9wcml2ICp2M2RfcHJpdiA9IGZpbGVfcHJpdi0+ ZHJpdmVyX3ByaXY7CisJc3RydWN0IHYzZF9zdWJtaXQgc3VibWl0ID0geyAudjNkID0gdG9fdjNk X2RldihkZXYpLCAuZmlsZV9wcml2ID0gZmlsZV9wcml2IH07CiAJc3RydWN0IGRybV92M2Rfc3Vi bWl0X2NsICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgdjNkX3N1Ym1pdF9leHQgc2UgPSB7MH07CiAJ c3RydWN0IHYzZF9iaW5fam9iICpiaW4gPSBOVUxMOwogCXN0cnVjdCB2M2RfcmVuZGVyX2pvYiAq cmVuZGVyID0gTlVMTDsKIAlzdHJ1Y3QgdjNkX2pvYiAqY2xlYW5fam9iID0gTlVMTDsKLQlzdHJ1 Y3QgdjNkX2pvYiAqbGFzdF9qb2I7Ci0Jc3RydWN0IGRybV9leGVjIGV4ZWM7Ci0JaW50IHJldCA9 IDA7CisJaW50IHJldDsKIAotCXRyYWNlX3YzZF9zdWJtaXRfY2xfaW9jdGwoJnYzZC0+ZHJtLCBh cmdzLT5yY2xfc3RhcnQsIGFyZ3MtPnJjbF9lbmQpOworCXRyYWNlX3YzZF9zdWJtaXRfY2xfaW9j dGwoZGV2LCBhcmdzLT5yY2xfc3RhcnQsIGFyZ3MtPnJjbF9lbmQpOwogCiAJaWYgKGFyZ3MtPnBh ZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MzMsMTMxICsxMDQ0LDgyIEBAIHYzZF9zdWJtaXRf Y2xfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJfQogCX0KIAot CXJldCA9IHYzZF9qb2JfYWxsb2NhdGUodjNkLCAodm9pZCAqKSZyZW5kZXIsIHNpemVvZigqcmVu ZGVyKSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHYzZF9qb2JfaW5pdCh2 M2QsIGZpbGVfcHJpdiwgJnJlbmRlci0+YmFzZSwKLQkJCSAgIHYzZF9yZW5kZXJfam9iX2ZyZWUs IGFyZ3MtPmluX3N5bmNfcmNsLCAmc2UsIFYzRF9SRU5ERVIpOwotCWlmIChyZXQpIHsKLQkJdjNk X2pvYl9kZWFsbG9jYXRlKCh2b2lkICopJnJlbmRlcik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQly ZW5kZXItPnN0YXJ0ID0gYXJncy0+cmNsX3N0YXJ0OwotCXJlbmRlci0+ZW5kID0gYXJncy0+cmNs X2VuZDsKLQlJTklUX0xJU1RfSEVBRCgmcmVuZGVyLT51bnJlZl9saXN0KTsKLQogCWlmIChhcmdz LT5iY2xfc3RhcnQgIT0gYXJncy0+YmNsX2VuZCkgewotCQlyZXQgPSB2M2Rfam9iX2FsbG9jYXRl KHYzZCwgKHZvaWQgKikmYmluLCBzaXplb2YoKmJpbikpOworCQlyZXQgPSB2M2Rfc3VibWl0X2Fk ZF9qb2IoJnN1Ym1pdCwgKHZvaWQgKiopJmJpbiwgc2l6ZW9mKCpiaW4pLAorCQkJCQkgdjNkX2pv Yl9mcmVlLCBWM0RfQklOKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbDsKIAotCQlyZXQgPSB2 M2Rfam9iX2luaXQodjNkLCBmaWxlX3ByaXYsICZiaW4tPmJhc2UsCi0JCQkJICAgdjNkX2pvYl9m cmVlLCBhcmdzLT5pbl9zeW5jX2JjbCwgJnNlLCBWM0RfQklOKTsKLQkJaWYgKHJldCkgewotCQkJ djNkX2pvYl9kZWFsbG9jYXRlKCh2b2lkICopJmJpbik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQog CQliaW4tPnN0YXJ0ID0gYXJncy0+YmNsX3N0YXJ0OwogCQliaW4tPmVuZCA9IGFyZ3MtPmJjbF9l bmQ7CiAJCWJpbi0+cW1hID0gYXJncy0+cW1hOwogCQliaW4tPnFtcyA9IGFyZ3MtPnFtczsKIAkJ YmluLT5xdHMgPSBhcmdzLT5xdHM7Ci0JCWJpbi0+cmVuZGVyID0gcmVuZGVyOwotCX0KIAotCWlm IChhcmdzLT5mbGFncyAmIERSTV9WM0RfU1VCTUlUX0NMX0ZMVVNIX0NBQ0hFKSB7Ci0JCXJldCA9 IHYzZF9qb2JfYWxsb2NhdGUodjNkLCAodm9pZCAqKSZjbGVhbl9qb2IsIHNpemVvZigqY2xlYW5f am9iKSk7CisJCXJldCA9IHYzZF9qb2JfYWRkX3N5bmNvYmpzKCZiaW4tPmJhc2UsIGZpbGVfcHJp diwKKwkJCQkJICAgYXJncy0+aW5fc3luY19iY2wsICZzZSwgVjNEX0JJTik7CiAJCWlmIChyZXQp CiAJCQlnb3RvIGZhaWw7Ci0KLQkJcmV0ID0gdjNkX2pvYl9pbml0KHYzZCwgZmlsZV9wcml2LCBj bGVhbl9qb2IsCi0JCQkJICAgdjNkX2pvYl9mcmVlLCAwLCBOVUxMLCBWM0RfQ0FDSEVfQ0xFQU4p OwotCQlpZiAocmV0KSB7Ci0JCQl2M2Rfam9iX2RlYWxsb2NhdGUoKHZvaWQgKikmY2xlYW5fam9i KTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCi0JCWxhc3Rfam9iID0gY2xlYW5fam9iOwotCX0gZWxz ZSB7Ci0JCWxhc3Rfam9iID0gJnJlbmRlci0+YmFzZTsKIAl9CiAKLQlyZXQgPSB2M2RfbG9va3Vw X2JvcyhkZXYsIGZpbGVfcHJpdiwgbGFzdF9qb2IsCisJcmV0ID0gdjNkX3N1Ym1pdF9hZGRfam9i KCZzdWJtaXQsICh2b2lkICoqKSZyZW5kZXIsIHNpemVvZigqcmVuZGVyKSwKKwkJCQkgdjNkX3Jl bmRlcl9qb2JfZnJlZSwgVjNEX1JFTkRFUik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJ SU5JVF9MSVNUX0hFQUQoJnJlbmRlci0+dW5yZWZfbGlzdCk7CisJcmVuZGVyLT5zdGFydCA9IGFy Z3MtPnJjbF9zdGFydDsKKwlyZW5kZXItPmVuZCA9IGFyZ3MtPnJjbF9lbmQ7CisKKwlpZiAoYmlu KQorCQliaW4tPnJlbmRlciA9IHJlbmRlcjsKKworCXJldCA9IHYzZF9qb2JfYWRkX3N5bmNvYmpz KCZyZW5kZXItPmJhc2UsIGZpbGVfcHJpdiwgYXJncy0+aW5fc3luY19yY2wsCisJCQkJICAgJnNl LCBWM0RfUkVOREVSKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlpZiAoYXJncy0+Zmxh Z3MgJiBEUk1fVjNEX1NVQk1JVF9DTF9GTFVTSF9DQUNIRSkgeworCQlyZXQgPSB2M2Rfc3VibWl0 X2FkZF9qb2IoJnN1Ym1pdCwgKHZvaWQgKiopJmNsZWFuX2pvYiwKKwkJCQkJIHNpemVvZigqY2xl YW5fam9iKSwgdjNkX2pvYl9mcmVlLAorCQkJCQkgVjNEX0NBQ0hFX0NMRUFOKTsKKwkJaWYgKHJl dCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXQgPSB2M2RfbG9va3VwX2JvcyhkZXYsIGZpbGVf cHJpdiwKKwkJCSAgICAgc3VibWl0LmpvYnNbc3VibWl0LmpvYl9jb3VudCAtIDFdLAogCQkJICAg ICBhcmdzLT5ib19oYW5kbGVzLCBhcmdzLT5ib19oYW5kbGVfY291bnQpOwogCWlmIChyZXQpCiAJ CWdvdG8gZmFpbDsKIAotCXJldCA9IHYzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhsYXN0X2pvYiwg JmV4ZWMpOworCXJldCA9IHYzZF9sb2NrX2JvX3Jlc2VydmF0aW9ucyhzdWJtaXQuam9ic1tzdWJt aXQuam9iX2NvdW50IC0gMV0sCisJCQkJICAgICAgICZzdWJtaXQuZXhlYyk7CiAJaWYgKHJldCkK IAkJZ290byBmYWlsOwogCi0JaWYgKGFyZ3MtPnBlcmZtb25faWQpIHsKLQkJaWYgKHYzZC0+Z2xv YmFsX3BlcmZtb24pIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlnb3RvIGZhaWxfcGVyZm1vbjsK LQkJfQorCXJldCA9IHYzZF9hdHRhY2hfcGVyZm1vbl90b19qb2JzKCZzdWJtaXQsIGFyZ3MtPnBl cmZtb25faWQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF91bnJlc2VydmU7CiAKLQkJcmVuZGVy LT5iYXNlLnBlcmZtb24gPSB2M2RfcGVyZm1vbl9maW5kKHYzZF9wcml2LAotCQkJCQkJCWFyZ3Mt PnBlcmZtb25faWQpOwotCi0JCWlmICghcmVuZGVyLT5iYXNlLnBlcmZtb24pIHsKLQkJCXJldCA9 IC1FTk9FTlQ7Ci0JCQlnb3RvIGZhaWxfcGVyZm1vbjsKLQkJfQotCX0KLQotCW11dGV4X2xvY2so JnYzZC0+c2NoZWRfbG9jayk7Ci0JaWYgKGJpbikgewotCQliaW4tPmJhc2UucGVyZm1vbiA9IHJl bmRlci0+YmFzZS5wZXJmbW9uOwotCQl2M2RfcGVyZm1vbl9nZXQoYmluLT5iYXNlLnBlcmZtb24p OwotCQl2M2RfcHVzaF9qb2IoJmJpbi0+YmFzZSk7Ci0KLQkJcmV0ID0gZHJtX3NjaGVkX2pvYl9h ZGRfZGVwZW5kZW5jeSgmcmVuZGVyLT5iYXNlLmJhc2UsCi0JCQkJCQkgICBkbWFfZmVuY2VfZ2V0 KGJpbi0+YmFzZS5kb25lX2ZlbmNlKSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZhaWxfdW5yZXNl cnZlOwotCX0KLQotCXYzZF9wdXNoX2pvYigmcmVuZGVyLT5iYXNlKTsKLQotCWlmIChjbGVhbl9q b2IpIHsKLQkJc3RydWN0IGRtYV9mZW5jZSAqcmVuZGVyX2ZlbmNlID0KLQkJCWRtYV9mZW5jZV9n ZXQocmVuZGVyLT5iYXNlLmRvbmVfZmVuY2UpOwotCQlyZXQgPSBkcm1fc2NoZWRfam9iX2FkZF9k ZXBlbmRlbmN5KCZjbGVhbl9qb2ItPmJhc2UsCi0JCQkJCQkgICByZW5kZXJfZmVuY2UpOwotCQlp ZiAocmV0KQotCQkJZ290byBmYWlsX3VucmVzZXJ2ZTsKLQkJY2xlYW5fam9iLT5wZXJmbW9uID0g cmVuZGVyLT5iYXNlLnBlcmZtb247Ci0JCXYzZF9wZXJmbW9uX2dldChjbGVhbl9qb2ItPnBlcmZt b24pOwotCQl2M2RfcHVzaF9qb2IoY2xlYW5fam9iKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnYz ZC0+c2NoZWRfbG9jayk7CisJcmV0ID0gdjNkX3N1Ym1pdF9qb2JzKCZzdWJtaXQpOworCWlmIChy ZXQpCisJCWdvdG8gZmFpbF91bnJlc2VydmU7CiAKIAl2M2RfYXR0YWNoX2ZlbmNlc19hbmRfdW5s b2NrX3Jlc2VydmF0aW9uKGZpbGVfcHJpdiwKLQkJCQkJCSBsYXN0X2pvYiwKLQkJCQkJCSAmZXhl YywKLQkJCQkJCSBhcmdzLT5vdXRfc3luYywKLQkJCQkJCSAmc2UsCi0JCQkJCQkgbGFzdF9qb2It PmRvbmVfZmVuY2UpOworCQkJCQkJIHN1Ym1pdC5qb2JzW3N1Ym1pdC5qb2JfY291bnQgLSAxXSwK KwkJCQkJCSAmc3VibWl0LmV4ZWMsCisJCQkJCQkgYXJncy0+b3V0X3N5bmMsICZzZSwKKwkJCQkJ CSBzdWJtaXQuam9ic1tzdWJtaXQuam9iX2NvdW50IC0gMV0tPmRvbmVfZmVuY2UpOwogCi0JdjNk X2pvYl9wdXQoJmJpbi0+YmFzZSk7Ci0JdjNkX2pvYl9wdXQoJnJlbmRlci0+YmFzZSk7Ci0JdjNk X2pvYl9wdXQoY2xlYW5fam9iKTsKKwl2M2Rfc3VibWl0X3B1dF9qb2JzKCZzdWJtaXQpOwogCiAJ cmV0dXJuIDA7CiAKIGZhaWxfdW5yZXNlcnZlOgotCW11dGV4X3VubG9jaygmdjNkLT5zY2hlZF9s b2NrKTsKLWZhaWxfcGVyZm1vbjoKLQlkcm1fZXhlY19maW5pKCZleGVjKTsKKwlkcm1fZXhlY19m aW5pKCZzdWJtaXQuZXhlYyk7CiBmYWlsOgotCXYzZF9qb2JfY2xlYW51cCgodm9pZCAqKWJpbik7 Ci0JdjNkX2pvYl9jbGVhbnVwKCh2b2lkICopcmVuZGVyKTsKLQl2M2Rfam9iX2NsZWFudXAoY2xl YW5fam9iKTsKKwl2M2Rfc3VibWl0X2NsZWFudXBfam9icygmc3VibWl0KTsKIAl2M2RfcHV0X211 bHRpc3luY19wb3N0X2RlcHMoJnNlKTsKIAogCXJldHVybiByZXQ7CkBAIC0xMDc2LDE0ICsxMTM4 LDEzIEBAIGludAogdjNkX3N1Ym1pdF90ZnVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKIAkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKLQlzdHJ1 Y3QgdjNkX2RldiAqdjNkID0gdG9fdjNkX2RldihkZXYpOworCXN0cnVjdCB2M2Rfc3VibWl0IHN1 Ym1pdCA9IHsgLnYzZCA9IHRvX3YzZF9kZXYoZGV2KSwgLmZpbGVfcHJpdiA9IGZpbGVfcHJpdiB9 OwogCXN0cnVjdCBkcm1fdjNkX3N1Ym1pdF90ZnUgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCB2M2Rf c3VibWl0X2V4dCBzZSA9IHswfTsKIAlzdHJ1Y3QgdjNkX3RmdV9qb2IgKmpvYiA9IE5VTEw7Ci0J c3RydWN0IGRybV9leGVjIGV4ZWM7CiAJaW50IHJldCA9IDA7CiAKLQl0cmFjZV92M2Rfc3VibWl0 X3RmdV9pb2N0bCgmdjNkLT5kcm0sIGFyZ3MtPmlpYSk7CisJdHJhY2VfdjNkX3N1Ym1pdF90ZnVf aW9jdGwoZGV2LCBhcmdzLT5paWEpOwogCiAJaWYgKGFyZ3MtPmZsYWdzICYmICEoYXJncy0+Zmxh Z3MgJiBEUk1fVjNEX1NVQk1JVF9FWFRFTlNJT04pKSB7CiAJCWRybV9kYmcoZGV2LCAiaW52YWxp ZCBmbGFnczogJWRcbiIsIGFyZ3MtPmZsYWdzKTsKQEAgLTEwOTgsMTYgKzExNTksMTQgQEAgdjNk X3N1Ym1pdF90ZnVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJ fQogCX0KIAotCXJldCA9IHYzZF9qb2JfYWxsb2NhdGUodjNkLCAodm9pZCAqKSZqb2IsIHNpemVv Zigqam9iKSk7CisJcmV0ID0gdjNkX3N1Ym1pdF9hZGRfam9iKCZzdWJtaXQsICh2b2lkICoqKSZq b2IsIHNpemVvZigqam9iKSwKKwkJCQkgdjNkX2pvYl9mcmVlLCBWM0RfVEZVKTsKKwlpZiAocmV0 KQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSB2M2Rfam9iX2FkZF9zeW5jb2Jqcygmam9iLT5iYXNl LCBmaWxlX3ByaXYsIGFyZ3MtPmluX3N5bmMsICZzZSwgVjNEX1RGVSk7CiAJaWYgKHJldCkKLQkJ cmV0dXJuIHJldDsKLQotCXJldCA9IHYzZF9qb2JfaW5pdCh2M2QsIGZpbGVfcHJpdiwgJmpvYi0+ YmFzZSwKLQkJCSAgIHYzZF9qb2JfZnJlZSwgYXJncy0+aW5fc3luYywgJnNlLCBWM0RfVEZVKTsK LQlpZiAocmV0KSB7Ci0JCXYzZF9qb2JfZGVhbGxvY2F0ZSgodm9pZCAqKSZqb2IpOwogCQlnb3Rv IGZhaWw7Ci0JfQogCiAJam9iLT5iYXNlLmJvID0ga3phbGxvY19vYmpzKCpqb2ItPmJhc2UuYm8s IEFSUkFZX1NJWkUoYXJncy0+Ym9faGFuZGxlcykpOwogCWlmICgham9iLT5iYXNlLmJvKSB7CkBA IC0xMTM2LDI2ICsxMTk1LDI3IEBAIHYzZF9zdWJtaXRfdGZ1X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCWpvYi0+YmFzZS5ib1tqb2ItPmJhc2UuYm9fY291bnRd ID0gYm87CiAJfQogCi0JcmV0ID0gdjNkX2xvY2tfYm9fcmVzZXJ2YXRpb25zKCZqb2ItPmJhc2Us ICZleGVjKTsKKwlyZXQgPSB2M2RfbG9ja19ib19yZXNlcnZhdGlvbnMoJmpvYi0+YmFzZSwgJnN1 Ym1pdC5leGVjKTsKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQltdXRleF9sb2NrKCZ2M2Qt PnNjaGVkX2xvY2spOwotCXYzZF9wdXNoX2pvYigmam9iLT5iYXNlKTsKLQltdXRleF91bmxvY2so JnYzZC0+c2NoZWRfbG9jayk7CisJcmV0ID0gdjNkX3N1Ym1pdF9qb2JzKCZzdWJtaXQpOworCWlm IChyZXQpCisJCWdvdG8gZmFpbF91bnJlc2VydmU7CiAKIAl2M2RfYXR0YWNoX2ZlbmNlc19hbmRf dW5sb2NrX3Jlc2VydmF0aW9uKGZpbGVfcHJpdiwKLQkJCQkJCSAmam9iLT5iYXNlLCAmZXhlYywK LQkJCQkJCSBhcmdzLT5vdXRfc3luYywKLQkJCQkJCSAmc2UsCisJCQkJCQkgJmpvYi0+YmFzZSwg JnN1Ym1pdC5leGVjLAorCQkJCQkJIGFyZ3MtPm91dF9zeW5jLCAmc2UsCiAJCQkJCQkgam9iLT5i YXNlLmRvbmVfZmVuY2UpOwogCi0JdjNkX2pvYl9wdXQoJmpvYi0+YmFzZSk7CisJdjNkX3N1Ym1p dF9wdXRfam9icygmc3VibWl0KTsKIAogCXJldHVybiAwOwogCitmYWlsX3VucmVzZXJ2ZToKKwlk cm1fZXhlY19maW5pKCZzdWJtaXQuZXhlYyk7CiBmYWlsOgotCXYzZF9qb2JfY2xlYW51cCgodm9p ZCAqKWpvYik7CisJdjNkX3N1Ym1pdF9jbGVhbnVwX2pvYnMoJnN1Ym1pdCk7CiAJdjNkX3B1dF9t dWx0aXN5bmNfcG9zdF9kZXBzKCZzZSk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTE3NCwyMSArMTIz NCwxOSBAQCBpbnQKIHYzZF9zdWJtaXRfY3NkX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEsCiAJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0Jc3Ry dWN0IHYzZF9kZXYgKnYzZCA9IHRvX3YzZF9kZXYoZGV2KTsKLQlzdHJ1Y3QgdjNkX2ZpbGVfcHJp diAqdjNkX3ByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXN0cnVjdCB2M2Rfc3VibWl0 IHN1Ym1pdCA9IHsgLnYzZCA9IHRvX3YzZF9kZXYoZGV2KSwgLmZpbGVfcHJpdiA9IGZpbGVfcHJp diB9OwogCXN0cnVjdCBkcm1fdjNkX3N1Ym1pdF9jc2QgKmFyZ3MgPSBkYXRhOwogCXN0cnVjdCB2 M2Rfc3VibWl0X2V4dCBzZSA9IHswfTsKIAlzdHJ1Y3QgdjNkX2NzZF9qb2IgKmpvYiA9IE5VTEw7 CiAJc3RydWN0IHYzZF9qb2IgKmNsZWFuX2pvYiA9IE5VTEw7Ci0Jc3RydWN0IGRybV9leGVjIGV4 ZWM7CiAJaW50IHJldDsKIAotCXRyYWNlX3YzZF9zdWJtaXRfY3NkX2lvY3RsKCZ2M2QtPmRybSwg YXJncy0+Y2ZnWzVdLCBhcmdzLT5jZmdbNl0pOworCXRyYWNlX3YzZF9zdWJtaXRfY3NkX2lvY3Rs KGRldiwgYXJncy0+Y2ZnWzVdLCBhcmdzLT5jZmdbNl0pOwogCiAJaWYgKGFyZ3MtPnBhZCkKIAkJ cmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoIXYzZF9oYXNfY3NkKHYzZCkpIHsKKwlpZiAoIXYzZF9o YXNfY3NkKHN1Ym1pdC52M2QpKSB7CiAJCWRybV93YXJuKGRldiwgIkF0dGVtcHRpbmcgQ1NEIHN1 Ym1pdCBvbiBub24tQ1NEIGhhcmR3YXJlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAt MTIwNiw1NSArMTI2NCwzNiBAQCB2M2Rfc3VibWl0X2NzZF9pb2N0bChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB2b2lkICpkYXRhLAogCQl9CiAJfQogCi0JcmV0ID0gdjNkX3NldHVwX2NzZF9qb2Jz X2FuZF9ib3MoZmlsZV9wcml2LCB2M2QsIGFyZ3MsCi0JCQkJCSAmam9iLCAmY2xlYW5fam9iLCAm c2UsICZleGVjKTsKKwlyZXQgPSB2M2Rfc2V0dXBfY3NkX2pvYnNfYW5kX2JvcyhmaWxlX3ByaXYs IHN1Ym1pdC52M2QsIGFyZ3MsCisJCQkJCSAmam9iLCAmY2xlYW5fam9iLCAmc2UsICZzdWJtaXQu ZXhlYyk7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCi0JaWYgKGFyZ3MtPnBlcmZtb25faWQp IHsKLQkJaWYgKHYzZC0+Z2xvYmFsX3BlcmZtb24pIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQln b3RvIGZhaWxfcGVyZm1vbjsKLQkJfQorCXN1Ym1pdC5qb2JzW3N1Ym1pdC5qb2JfY291bnQrK10g PSAmam9iLT5iYXNlOworCXN1Ym1pdC5qb2JzW3N1Ym1pdC5qb2JfY291bnQrK10gPSBjbGVhbl9q b2I7CiAKLQkJam9iLT5iYXNlLnBlcmZtb24gPSB2M2RfcGVyZm1vbl9maW5kKHYzZF9wcml2LAot CQkJCQkJICAgICBhcmdzLT5wZXJmbW9uX2lkKTsKLQkJaWYgKCFqb2ItPmJhc2UucGVyZm1vbikg ewotCQkJcmV0ID0gLUVOT0VOVDsKLQkJCWdvdG8gZmFpbF9wZXJmbW9uOwotCQl9Ci0JfQotCi0J bXV0ZXhfbG9jaygmdjNkLT5zY2hlZF9sb2NrKTsKLQl2M2RfcHVzaF9qb2IoJmpvYi0+YmFzZSk7 Ci0KLQlyZXQgPSBkcm1fc2NoZWRfam9iX2FkZF9kZXBlbmRlbmN5KCZjbGVhbl9qb2ItPmJhc2Us Ci0JCQkJCSAgIGRtYV9mZW5jZV9nZXQoam9iLT5iYXNlLmRvbmVfZmVuY2UpKTsKKwlyZXQgPSB2 M2RfYXR0YWNoX3BlcmZtb25fdG9fam9icygmc3VibWl0LCBhcmdzLT5wZXJmbW9uX2lkKTsKIAlp ZiAocmV0KQogCQlnb3RvIGZhaWxfdW5yZXNlcnZlOwogCi0JdjNkX3B1c2hfam9iKGNsZWFuX2pv Yik7Ci0JbXV0ZXhfdW5sb2NrKCZ2M2QtPnNjaGVkX2xvY2spOworCXJldCA9IHYzZF9zdWJtaXRf am9icygmc3VibWl0KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfdW5yZXNlcnZlOwogCiAJdjNk X2F0dGFjaF9mZW5jZXNfYW5kX3VubG9ja19yZXNlcnZhdGlvbihmaWxlX3ByaXYsCiAJCQkJCQkg Y2xlYW5fam9iLAotCQkJCQkJICZleGVjLAotCQkJCQkJIGFyZ3MtPm91dF9zeW5jLAotCQkJCQkJ ICZzZSwKKwkJCQkJCSAmc3VibWl0LmV4ZWMsCisJCQkJCQkgYXJncy0+b3V0X3N5bmMsICZzZSwK IAkJCQkJCSBjbGVhbl9qb2ItPmRvbmVfZmVuY2UpOwogCi0JdjNkX2pvYl9wdXQoJmpvYi0+YmFz ZSk7Ci0JdjNkX2pvYl9wdXQoY2xlYW5fam9iKTsKKwl2M2Rfc3VibWl0X3B1dF9qb2JzKCZzdWJt aXQpOwogCiAJcmV0dXJuIDA7CiAKIGZhaWxfdW5yZXNlcnZlOgotCW11dGV4X3VubG9jaygmdjNk LT5zY2hlZF9sb2NrKTsKLWZhaWxfcGVyZm1vbjoKLQlkcm1fZXhlY19maW5pKCZleGVjKTsKKwlk cm1fZXhlY19maW5pKCZzdWJtaXQuZXhlYyk7CiBmYWlsOgotCXYzZF9qb2JfY2xlYW51cCgodm9p ZCAqKWpvYik7Ci0JdjNkX2pvYl9jbGVhbnVwKGNsZWFuX2pvYik7CisJdjNkX3N1Ym1pdF9jbGVh bnVwX2pvYnMoJnN1Ym1pdCk7CiAJdjNkX3B1dF9tdWx0aXN5bmNfcG9zdF9kZXBzKCZzZSk7CiAK IAlyZXR1cm4gcmV0OwoKLS0gCjIuNTQuMAoK