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 CDD72CD37B6 for ; Wed, 13 May 2026 09:58:01 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 07DDF10ED9C; Wed, 13 May 2026 09:57:59 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="oWxJ/mzI"; dkim-atps=neutral Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010007.outbound.protection.outlook.com [52.101.201.7]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C57510EDB3; Wed, 13 May 2026 09:57:57 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OeBIz8d9bltA74DDR4AEkyAeDRqkgbe3pYCIPo9HUq+aOH/t3YzOe6YZ66/YCXGM2ct6LONsFCFEha+Aot1FNV1Tljs58obf0Y3vDRSoN4kgn3uaUenk5HWzOttKzD+eNMW8KLp6rHBQgXcXM/3zKUaKRVyQT0cYeCGZbFN2+wljjUFdzn3t1shR9mqTmqSOnmie9tvGakma2anKBivPbW1WKpqHTq/fWFiXScO9riQogTCNedufoCozAfAd6rykxhN7YrJY/isUqgpd9Clh4g3Ou+hIhZDzLhwpxZ/8Q1E9erilQFiKjVVzxyhi6Zv1wBNg6JoLqCg1MifH4ue5RQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Gy0Nr9iEE6rLSLdwlHxtLJNGifHvYLKtKvUy6IGPO2s=; b=of3yBrc8H3Pkn6XF718aj6hmaZDpS9zUjXpfHrYOVm4qGF+6OL+unhj8L3IWMobionul3jbs8cWzGF261x73z4D3JnQv8WDUAn3/8d/OzHr/LUoBWYHj7Qf9BC7Gnc+gYbQnXWjOf8yXV6NISGN8UwxFBJGg/f3fi853ko42hhIhFnTpGijluT5LjMbc6aU+6JA9+Th/qnvdl5g4zsAFHacqKIOnuZ8sUY2lJ4aWqaZ9unWzPo84bdk2VBNY3WpsWXQCDYwyOKUloJT9xw5m08d/J21OxyUOznTsVsqhao06g0fDhQRVNJoGa8ruSCDcptyJceZCuBAjEirV9oEP5w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=ffwll.ch smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Gy0Nr9iEE6rLSLdwlHxtLJNGifHvYLKtKvUy6IGPO2s=; b=oWxJ/mzIuCVd2yG6l+R2KJ8//75KJXtN1EPITv6FE01NrCVZm4/xtmbPqN5rHXwuJcp/yUroxm92oG70PujHchJxMiBZo76Esp2ph4Lxighyfn+zhoD+fZV6ArjMLG58omSSslQ4N6ISRBw+AkHAb8CVdHlcvcMOd5zsz7/CVYI= Received: from SA1PR04CA0021.namprd04.prod.outlook.com (2603:10b6:806:2ce::24) by SN7PR12MB8602.namprd12.prod.outlook.com (2603:10b6:806:26d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9913.11; Wed, 13 May 2026 09:57:51 +0000 Received: from SN1PEPF00036F3E.namprd05.prod.outlook.com (2603:10b6:806:2ce:cafe::60) by SA1PR04CA0021.outlook.office365.com (2603:10b6:806:2ce::24) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9913.12 via Frontend Transport; Wed, 13 May 2026 09:57:51 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=satlexmb08.amd.com; pr=C Received: from satlexmb08.amd.com (165.204.84.17) by SN1PEPF00036F3E.mail.protection.outlook.com (10.167.248.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.25.13 via Frontend Transport; Wed, 13 May 2026 09:57:51 +0000 Received: from Satlexmb09.amd.com (10.181.42.218) by satlexmb08.amd.com (10.181.42.217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 13 May 2026 04:57:45 -0500 Received: from satlexmb07.amd.com (10.181.42.216) by satlexmb09.amd.com (10.181.42.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.41; Wed, 13 May 2026 02:57:44 -0700 Received: from junhua-PC.amd.com (10.180.168.240) by satlexmb07.amd.com (10.181.42.216) with Microsoft SMTP Server id 15.2.2562.41 via Frontend Transport; Wed, 13 May 2026 04:57:41 -0500 From: Junhua Shen To: , , , , , , , , , , CC: , , Subject: [PATCH v4 2/6] drm/amdgpu: implement drm_pagemap SDMA migration callbacks Date: Wed, 13 May 2026 17:57:30 +0800 Message-ID: <20260513095734.69598-3-Junhua.Shen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260513095734.69598-1-Junhua.Shen@amd.com> References: <20260513095734.69598-1-Junhua.Shen@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF00036F3E:EE_|SN7PR12MB8602:EE_ X-MS-Office365-Filtering-Correlation-Id: aa01f72c-66e3-4604-8c1b-08deb0d6187a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|82310400026|36860700016|376014|921020|56012099003|11063799003|18002099003|22082099003|3023799003; X-Microsoft-Antispam-Message-Info: CCrXqKmZg+lcXoH8z6Id4S90J11rq3NUB6wcFJE6iS2bqCKaUlDofU4GRjHYg/eG+uhy4jk4iBSpXJQTYkSsvl+nvnovuBj48IDkQHu1keNvN9aeXTaN+ApMNaZqL91zQCeEFHr0//jGAy4ronBMzTPm2jeZS86oC+3Ydc9E/wZ+iSW3t6vUYq++NePMhv/hjBkDCUlJr/MDTMMJMQcX+tQx1eIgWtY/qjRj5si9l/3YRYZXjj1e1llkiZc7hn8Iw7CZb6OUR84KDbrW23e2DzFOm220QGuCEr7k5GDC5PM2sf3ndeKp/oWCs10NAxRzMfIoF01KfGszsFYynFzCVJUED15xTMJa6R/n2+U6ZgZ+t0P6nMPEroQfaB11meyjzB7H6QRpUhW23kcf2v1z2JnVXzWBwou+6QD7byzHGpJCp4epLygAYodY2fF1nuv4qDMxe0OqCrnvqx0BkujBcKiCmtGoVUYaaY4oem7xlKkRqr2CnkRNX6D/OZ1rOKvPGmsSIwdVToxECe9JrZwkN6gw/WucbRHtl3N76zRYuas+sOtBv1xOtLO64xbeQA2f+IzMrFM7DN7nKWL9DiMaQSqdVa0ZYx0iNkPWVgMAnJTCu2lgEQu4e3YvWRdZ8zHukMABXXdyjgJNigaNsYthPD06YBc9RcqFk8Vr5B4swX5BFaGIajmalUjTV3dRf2VXbYrWzzJ6ZUFSb+yvXgw1u9qAXFiOJcP7odhcev2fXtba6+EDV8MZtp+kF/ap2SiZ+pQVFxG+7w+qSND+Kir+kw== X-Forefront-Antispam-Report: CIP:165.204.84.17; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:satlexmb08.amd.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(82310400026)(36860700016)(376014)(921020)(56012099003)(11063799003)(18002099003)(22082099003)(3023799003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: vQZnasxvEuKrtP8zTpTkgAqJUBXbnuDlISpRMPXJfmArWHEwPtYiTOwwMpD6ZNluu1dHP1q1d3acjhkmNztW6IkKkY7biZux1QXC5U1fSsPG+f5gnS1gZZQjuAxeeqqpZ9mJ4kkExq8Dn0E3vHtHfMcl9+iWiW9vCYKan9yp0Lgti9a1kT2SP/VC3O5Ivx8V+DOYRFJfAc14otL5Pr1WUzft1+gEI16wf7cFW5f9dXtV6F2P1ENvHLTGgy5iCBJd85XWnHSIeOJ9j0/0h7UH0/ZjYmxkx/v5E+Ye+yP2oH4TPk13/ezmnmbWjQXh81kZ9wNvXuF//k8VTmmGn+Klps0Sni7O86AZ33Hb9tgkpVFAv3JBagurl0TO5UjPi6bg4ZuN/HQmERzJ8DySsOm1ku7kgN9k4M38ACglAcURnojaAHl7IiMS7y5oBoL67Zc9 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 May 2026 09:57:51.3015 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: aa01f72c-66e3-4604-8c1b-08deb0d6187a X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d; Ip=[165.204.84.17]; Helo=[satlexmb08.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF00036F3E.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8602 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" SW1wbGVtZW50IHRoZSBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIGFuZCBkcm1fcGFnZW1hcF9vcHMg Y2FsbGJhY2tzCnRoYXQgdGhlIERSTSBHUFVTVk0gbWlncmF0aW9uIGZyYW1ld29yayByZXF1aXJl cy4KCkludHJvZHVjZSBzdHJ1Y3QgYW1kZ3B1X2JvX3N2bSBhcyBhIEJPIHN1YnR5cGUgKGZvbGxv d2luZyB0aGUKYW1kZ3B1X2JvX3VzZXIvYW1kZ3B1X2JvX3ZtIHBhdHRlcm4pIHRoYXQgZW1iZWRz IHN0cnVjdCBhbWRncHVfYm8KYW5kIGNhcnJpZXMgYSBkcm1fcGFnZW1hcF9kZXZtZW0gYWxsb2Nh dGlvbi4KCmRybV9wYWdlbWFwX29wcyAodG9wLWxldmVsIGVudHJ5IHBvaW50cyk6CiAgLSBkZXZp Y2VfbWFwOiAgIGNvbnZlcnQgWk9ORV9ERVZJQ0UgcGFnZSB0byBHUFUgUFRFIGFkZHJlc3MKICAt IHBvcHVsYXRlX21tOiAgYWxsb2NhdGUgYW1kZ3B1X2JvX3N2bSBhbmQgdHJpZ2dlciBtaWdyYXRp b24KCmRybV9wYWdlbWFwX2Rldm1lbV9vcHMgKHBlci1CTyBtaWdyYXRpb24gbWVjaGFuaWNzKToK ICAtIHBvcHVsYXRlX2Rldm1lbV9wZm46IHdhbGsgQk8gYnVkZHkgYmxvY2tzIHRvIGJ1aWxkIFBG TiBhcnJheQogIC0gY29weV90b19kZXZtZW06ICAgICAgU0RNQSBjb3B5IHN5c3RlbSBSQU0gLT4g VlJBTSB2aWEgR0FSVCB3aW5kb3cKICAtIGNvcHlfdG9fcmFtOiAgICAgICAgIFNETUEgY29weSBW UkFNIC0+IHN5c3RlbSBSQU0gdmlhIEdBUlQgd2luZG93CiAgLSBkZXZtZW1fcmVsZWFzZTogICAg ICBkcm9wIEJPIHJlZiAodHJpZ2dlcnMgZGVzdHJveSB0byBmcmVlIGFtZGdwdV9ib19zdm0pCgpT aWduZWQtb2ZmLWJ5OiBKdW5odWEgU2hlbiA8SnVuaHVhLlNoZW5AYW1kLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbWlncmF0ZS5jIHwgNjI4ICsrKysrKysrKysr KysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgNjI2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21pZ3Jh dGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9taWdyYXRlLmMKaW5kZXgg YThiMDY3ODMxYjk5Li41NDI1M2Q0ZGNjOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9taWdyYXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X21pZ3JhdGUuYwpAQCAtNjQsOSArNjQsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9t ZW1yZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KIAotI2luY2x1ZGUgImFtZGdw dV9hbWRrZmQuaCIKICNpbmNsdWRlICJhbWRncHVfbWlncmF0ZS5oIgogI2luY2x1ZGUgImFtZGdw dS5oIgorI2luY2x1ZGUgImFtZGdwdV90dG0uaCIKKyNpbmNsdWRlICJhbWRncHVfcmVzX2N1cnNv ci5oIgorCisjZGVmaW5lIEFNREdQVV9NSUdSQVRFX1RSQUNFKGZtdCwgLi4uKSBcCisJcHJfZGVi dWcoIiVzOiAiIGZtdCwgX19mdW5jX18sICMjX19WQV9BUkdTX18pCisKKy8qIFNETUEgY29weSBk aXJlY3Rpb24gKi8KKyNkZWZpbmUgRlJPTV9SQU1fVE9fVlJBTQkwCisjZGVmaW5lIEZST01fVlJB TV9UT19SQU0JMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMg YW1kZ3B1X3BhZ2VtYXBfb3BzOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbWRncHVfcGFnZW1h cCAqCiBkcGFnZW1hcF90b19hcGFnZW1hcChzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwKQpA QCAtOTQsOCArMTA0LDYyMiBAQCBhbWRncHVfc3ZtX3BhZ2VfdG9fYXBhZ2VtYXAoc3RydWN0IHBh Z2UgKnBhZ2UpCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihwZ21hcCwgc3RydWN0IGFtZGdwdV9wYWdl bWFwLCBwZ21hcCk7CiB9CiAKKy8qIGRybV9wYWdlbWFwX2Rldm1lbV9vcHMg4oCUIHBlci1CTyBt aWdyYXRpb24gbWVjaGFuaWNzICovCisKKy8qKgorICogc3RydWN0IGFtZGdwdV9ib19zdm0gLSBT Vk0gQk8gc3VidHlwZSB3aXRoIGRybV9wYWdlbWFwIGRldm1lbSBhbGxvY2F0aW9uCisgKgorICog QGJvOiBFbWJlZGRlZCBiYXNlIGFtZGdwdV9ibworICogQGRldm1lbTogZHJtX3BhZ2VtYXAgZGV2 aWNlIG1lbW9yeSBhbGxvY2F0aW9uIChwYXNzZWQgdG8gZnJhbWV3b3JrKQorICoKKyAqIExpZmVj eWNsZSBpcyBtYW5hZ2VkIGJ5IHRoZSBkcm1fcGFnZW1hcCBmcmFtZXdvcmsncyBpbnRlcm5hbCB6 ZGQgcmVmY291bnQ6CisgKiAgIC0gemRkLT5kZXZtZW1fYWxsb2NhdGlvbiBwb2ludHMgdG8gJnN2 bV9iby0+ZGV2bWVtCisgKiAgIC0gV2hlbiB6ZGQgcmVmY291bnQgZHJvcHMgdG8gemVybywgZnJh bWV3b3JrIGNhbGxzIGRldm1lbV9yZWxlYXNlKCkKKyAqICAgLSBkZXZtZW1fcmVsZWFzZSgpIGRy b3BzIHRoZSBCTyByZWZlcmVuY2UgKHRyaWdnZXJpbmcgZGVzdHJveSBjYWxsYmFjaykKKyAqLwor c3RydWN0IGFtZGdwdV9ib19zdm0geworCXN0cnVjdCBhbWRncHVfYm8gYm87CisJc3RydWN0IGRy bV9wYWdlbWFwX2Rldm1lbSBkZXZtZW07Cit9OworCisjZGVmaW5lIHRvX2FtZGdwdV9ib19zdm0o YWJvKSBjb250YWluZXJfb2YoKGFibyksIHN0cnVjdCBhbWRncHVfYm9fc3ZtLCBibykKKworc3Rh dGljIGlubGluZSBzdHJ1Y3QgYW1kZ3B1X2JvX3N2bSAqCitkZXZtZW1fdG9fYW1kZ3B1X2JvX3N2 bShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbikKK3sKKwlyZXR1 cm4gY29udGFpbmVyX29mKGRldm1lbV9hbGxvY2F0aW9uLCBzdHJ1Y3QgYW1kZ3B1X2JvX3N2bSwg ZGV2bWVtKTsKK30KKworLyoqCisgKiBhbWRncHVfYm9fc3ZtX2Rlc3Ryb3kgLSBUVE0gZGVzdHJv eSBjYWxsYmFjayBmb3IgU1ZNIEJPCisgKgorICogQ2FsbGVkIHdoZW4gdGhlIGxhc3QgcmVmZXJl bmNlIHRvIHRoZSBCTyBpcyBkcm9wcGVkLgorICogRm9sbG93cyBhbWRncHVfYm9fdXNlcl9kZXN0 cm95IHBhdHRlcm46IGRlbGVnYXRlcyB0byBhbWRncHVfYm9fYmFzZV9kZXN0cm95LgorICovCitz dGF0aWMgdm9pZCBhbWRncHVfYm9fc3ZtX2Rlc3Ryb3koc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 ICp0Ym8pCit7CisJc3RydWN0IGFtZGdwdV9ibyAqYm8gPSB0dG1fdG9fYW1kZ3B1X2JvKHRibyk7 CisJc3RydWN0IGFtZGdwdV9ib19zdm0gKnN2bV9ibyA9IHRvX2FtZGdwdV9ib19zdm0oYm8pOwor CisJYW1kZ3B1X2JvX2t1bm1hcChibyk7CisJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmYm8tPnRi by5iYXNlKTsKKwlhbWRncHVfYm9fdW5yZWYoJmJvLT5wYXJlbnQpOworCWt2ZnJlZShzdm1fYm8p OworfQorCisvKioKKyAqIGFtZGdwdV9ib19zdm1fYWxsb2MgLSBBbGxvY2F0ZSBhbiBhbWRncHVf Ym9fc3ZtIHdpdGggVlJBTSBiYWNraW5nCisgKiBAYWRldjogQU1ER1BVIGRldmljZQorICogQGRw YWdlbWFwOiBUaGUgZHJtX3BhZ2VtYXAgZm9yIHRoaXMgZGV2aWNlCisgKiBAbW06IG1tX3N0cnVj dCBvZiB0aGUgb3duaW5nIHByb2Nlc3MKKyAqIEBzaXplOiBBbGxvY2F0aW9uIHNpemUgaW4gYnl0 ZXMKKyAqCisgKiBVc2VzIGJwLT5ib19wdHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYW1kZ3B1X2Jv X3N2bSkgc28gdGhhdAorICogYW1kZ3B1X2JvX2NyZWF0ZSgpIGFsbG9jYXRlcyB0aGUgZnVsbCBh bWRncHVfYm9fc3ZtIHN0cnVjdHVyZSwKKyAqIHdpdGggdGhlIGVtYmVkZGVkIGFtZGdwdV9ibyBh cyB0aGUgYmFzZS4KKyAqCisgKiBSZXR1cm46IFBvaW50ZXIgdG8gYWxsb2NhdGVkIGFtZGdwdV9i b19zdm0gb24gc3VjY2VzcywgRVJSX1BUUiBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3Qg YW1kZ3B1X2JvX3N2bSAqCithbWRncHVfYm9fc3ZtX2FsbG9jKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LAorCQkgICAgIHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsCisJCSAgICAgc3Ry dWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1 X2JvX3BhcmFtIGJwID0ge307CisJc3RydWN0IGFtZGdwdV9ib19zdm0gKnN2bV9ibzsKKwlzdHJ1 Y3QgYW1kZ3B1X2JvICpibzsKKwlpbnQgcmV0OworCisJYnAuc2l6ZSA9IHNpemU7CisJYnAuYm9f cHRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGFtZGdwdV9ib19zdm0pOworCWJwLmRlc3Ryb3kgPSAm YW1kZ3B1X2JvX3N2bV9kZXN0cm95OworCWJwLmRvbWFpbiA9IEFNREdQVV9HRU1fRE9NQUlOX1ZS QU07CisJYnAudHlwZSA9IHR0bV9ib190eXBlX2RldmljZTsKKwlicC5mbGFncyA9IEFNREdQVV9H RU1fQ1JFQVRFX05PX0NQVV9BQ0NFU1MgfAorCQkgICBBTURHUFVfR0VNX0NSRUFURV9WUkFNX0NP TlRJR1VPVVMgfAorCQkgICBBTURHUFVfR0VNX0NSRUFURV9WUkFNX0NMRUFSRUQ7CisKKwlyZXQg PSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsICZicCwgJmJvKTsKKwlpZiAocmV0KSB7CisJCUFNREdQ VV9NSUdSQVRFX1RSQUNFKCJGYWlsZWQgdG8gY3JlYXRlIFNWTSBCT1xuIik7CisJCXJldHVybiBF UlJfUFRSKHJldCk7CisJfQorCisJc3ZtX2JvID0gdG9fYW1kZ3B1X2JvX3N2bShibyk7CisKKwlk cm1fcGFnZW1hcF9kZXZtZW1faW5pdCgmc3ZtX2JvLT5kZXZtZW0sCisJCQkJYWRldi0+ZGV2LCBt bSwKKwkJCQkmYW1kZ3B1X3BhZ2VtYXBfb3BzLAorCQkJCWRwYWdlbWFwLCBzaXplLCBOVUxMKTsK KworCXJldHVybiBzdm1fYm87Cit9CisKKy8qKgorICogYW1kZ3B1X3N2bV9kZXZtZW1fcmVsZWFz ZSAtIFJlbGVhc2UgQk8gd2hlbiBhbGwgZGV2aWNlIHBhZ2VzIG1pZ3JhdGUgYmFjaworICoKKyAq IENhbGxlZCBieSB0aGUgZHJtX3BhZ2VtYXAgZnJhbWV3b3JrICh2aWEgZHJtX3BhZ2VtYXBfemRk X2Rlc3Ryb3kpIHdoZW4gdGhlCisgKiBsYXN0IGRldmljZS1wcml2YXRlIHBhZ2UgYmFja2VkIGJ5 IHRoaXMgYWxsb2NhdGlvbiBoYXMgYmVlbiBtaWdyYXRlZCBiYWNrCisgKiB0byBzeXN0ZW0gbWVt b3J5IChvciB0aGUgb3duaW5nIHByb2Nlc3MgZXhpdHMpLgorICoKKyAqIERyb3BzIHRoZSBCTyBy ZWZlcmVuY2UsIHdoaWNoIHRyaWdnZXJzIHRoZSBkZXN0cm95IGNhbGxiYWNrIHRvIGZyZWUKKyAq IHRoZSBhbWRncHVfYm9fc3ZtIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHZvaWQKK2FtZGdwdV9z dm1fZGV2bWVtX3JlbGVhc2Uoc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9j YXRpb24pCit7CisJc3RydWN0IGFtZGdwdV9ib19zdm0gKnN2bV9ibyA9IGRldm1lbV90b19hbWRn cHVfYm9fc3ZtKGRldm1lbV9hbGxvY2F0aW9uKTsKKwlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9ICZz dm1fYm8tPmJvOworCisJQU1ER1BVX01JR1JBVEVfVFJBQ0UoIlJlbGVhc2Ugc3ZtX2JvPSVweCBi bz0lcHhcbiIsIHN2bV9ibywgYm8pOworCWFtZGdwdV9ib191bnJlZigmYm8pOworfQorCisvKioK KyAqIGFtZGdwdV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbiAtIENvbnZlcnQgQk8gVlJBTSBhbGxv Y2F0aW9uIHRvIFBGTiBhcnJheQorICogQGRldm1lbV9hbGxvY2F0aW9uOiBUaGUgZGV2bWVtIGFs bG9jYXRpb24gaW4gdGhlIGFtZGdwdV9ib19zdm0gd3JhcHBlcgorICogQG5wYWdlczogTnVtYmVy IG9mIFBGTiBlbnRyaWVzIHRvIGZpbGwKKyAqIEBwZm46IE91dHB1dCBQRk4gYXJyYXkKKyAqCisg KiBJdGVyYXRlcyBvdmVyIHRoZSBCTydzIFRUTSB2cmFtX21nciBidWRkeSBibG9ja3MgYW5kIGNv bnZlcnRzIGVhY2gKKyAqIGJsb2NrJ3MgVlJBTSBvZmZzZXQgdG8gWk9ORV9ERVZJQ0UgUEZOczoK KyAqCisgKiAgIFBGTiA9IFBIWVNfUEZOKGJsb2NrX29mZnNldCArIGFwYWdlbWFwLmhwYV9iYXNl KSArIHBhZ2VfaW5kZXgKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBieSBkcm1fcGFnZW1hcF9taWdy YXRlX3RvX2Rldm1lbSgpIHRvIGJ1aWxkIHRoZQorICogZGVzdGluYXRpb24gUEZOIGFycmF5IGZv ciBtaWdyYXRlX3ZtYV9wYWdlcygpLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzCisgKi8K K3N0YXRpYyBpbnQKK2FtZGdwdV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbihzdHJ1Y3QgZHJtX3Bh Z2VtYXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbiwKKwkJCQl1bnNpZ25lZCBsb25nIG5wYWdl cywgdW5zaWduZWQgbG9uZyAqcGZuKQoreworCXN0cnVjdCBhbWRncHVfcGFnZW1hcCAqc3ZtX2Rt ID0gZHBhZ2VtYXBfdG9fYXBhZ2VtYXAoZGV2bWVtX2FsbG9jYXRpb24tPmRwYWdlbWFwKTsKKwlz dHJ1Y3QgYW1kZ3B1X2JvX3N2bSAqc3ZtX2JvID0gZGV2bWVtX3RvX2FtZGdwdV9ib19zdm0oZGV2 bWVtX2FsbG9jYXRpb24pOworCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gJnN2bV9iby0+Ym87CisJ c3RydWN0IGFtZGdwdV9yZXNfY3Vyc29yIGN1cnNvcjsKKwl1bnNpZ25lZCBsb25nIGkgPSAwOwor CisJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYm8tPnRiby5iYXNlLnJlc3YpOworCisJYW1kZ3B1X3Jl c19maXJzdChiby0+dGJvLnJlc291cmNlLCAwLCBucGFnZXMgPDwgUEFHRV9TSElGVCwgJmN1cnNv cik7CisJd2hpbGUgKGN1cnNvci5yZW1haW5pbmcgJiYgaSA8IG5wYWdlcykgeworCQl1NjQgcGZu X2Jhc2UgPSBQSFlTX1BGTihjdXJzb3Iuc3RhcnQgKyBzdm1fZG0tPmhwYV9iYXNlKTsKKwkJdTY0 IHBhZ2VzID0gY3Vyc29yLnNpemUgPj4gUEFHRV9TSElGVDsKKwkJdW5zaWduZWQgbG9uZyBqOwor CisJCWZvciAoaiA9IDA7IGogPCBwYWdlcyAmJiBpIDwgbnBhZ2VzOyBqKyssIGkrKykKKwkJCXBm bltpXSA9IHBmbl9iYXNlICsgajsKKworCQlhbWRncHVfcmVzX25leHQoJmN1cnNvciwgY3Vyc29y LnNpemUpOworCX0KKworCUFNREdQVV9NSUdSQVRFX1RSQUNFKCJwb3B1bGF0ZV9kZXZtZW1fcGZu OiBucGFnZXM9JWx1IGZpcnN0X3Bmbj0weCVseFxuIiwKKwkJCSAgbnBhZ2VzLCBucGFnZXMgPiAw ID8gcGZuWzBdIDogMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU0RNQSBjb3B5IGhlbHBlcnMg 4oCUIEdBUlQgd2luZG93IGJhc2VkIGRhdGEgdHJhbnNmZXIgKi8KKworLyoqCisgKiBhbWRncHVf c3ZtX2RpcmVjdF9tYXBwaW5nX2FkZHIgLSBDb252ZXJ0IFZSQU0gb2Zmc2V0IHRvIE1DIGFkZHJl c3MKKyAqIEBhZGV2OiBBTURHUFUgZGV2aWNlCisgKiBAdnJhbV9vZmZzZXQ6IEJ5dGUgb2Zmc2V0 IHdpdGhpbiBWUkFNCisgKgorICogUmV0dXJuOiBNQyBhZGRyZXNzIHN1aXRhYmxlIGZvciBTRE1B IHNyYy9kc3QKKyAqLworc3RhdGljIHU2NAorYW1kZ3B1X3N2bV9kaXJlY3RfbWFwcGluZ19hZGRy KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LCB1NjQgdnJhbV9vZmZzZXQpCit7CisJcmV0dXJu IHZyYW1fb2Zmc2V0ICsgYW1kZ3B1X3R0bV9kb21haW5fc3RhcnQoYWRldiwgVFRNX1BMX1ZSQU0p OworfQorCisvKioKKyAqIGFtZGdwdV9zdm1fZ2FydF9tYXAgLSBNYXAgc3lzdGVtIERNQSBhZGRy ZXNzZXMgaW50byBHQVJUIHdpbmRvdworICogQHJpbmc6IFNETUEgcmluZyBmb3IgdGhlIEdBUlQg dXBkYXRlIGpvYgorICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIHRvIG1hcAorICogQGFkZHI6 IEFycmF5IG9mIHN5c3RlbSBtZW1vcnkgRE1BIGFkZHJlc3NlcworICogQGdhcnRfYWRkcjogT3V0 cHV0IOKAlCBHQVJUIGJhc2UgYWRkcmVzcyB0byB1c2UgaW4gU0RNQSBjb3B5CisgKiBAZmxhZ3M6 IFBURSBmbGFncyAoZS5nLiB3cml0ZWFibGUgZm9yIFJBTS10by1WUkFNIHNyYykKKyAqCisgKiBC dWlsZHMgR0FSVCBQVEVzIHBvaW50aW5nIGF0IHRoZSBnaXZlbiBETUEgYWRkcmVzc2VzLCBzdWJt aXRzIGFuCisgKiBTRE1BIGpvYiB0byB1cGRhdGUgdGhlIEdBUlQgZW50cmllcywgYW5kIHJldHVy bnMgdGhlIEdBUlQgYWRkcmVzcworICogdGhhdCBjYW4gYmUgdXNlZCBhcyBzcmMgb3IgZHN0IGlu IGEgc3Vic2VxdWVudCBhbWRncHVfY29weV9idWZmZXIoKS4KKyAqCisgKiBVc2VzIEdBUlQgd2lu ZG93IDAsIHByb3RlY3RlZCBieSBndHRfd2luZG93X2xvY2suCisgKgorICogUmV0dXJuOiAwIG9u IHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50 CithbWRncHVfc3ZtX2dhcnRfbWFwKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKKwkJICAgICBz dHJ1Y3QgYW1kZ3B1X3R0bV9idWZmZXJfZW50aXR5ICplbnRpdHksCisJCSAgICAgdTY0IG5wYWdl cywKKwkJICAgICBkbWFfYWRkcl90ICphZGRyLCB1NjQgKmdhcnRfYWRkciwgdTY0IGZsYWdzKQor eworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gcmluZy0+YWRldjsKKwlzdHJ1Y3QgYW1k Z3B1X2pvYiAqam9iOworCXVuc2lnbmVkIGludCBudW1fZHcsIG51bV9ieXRlczsKKwlzdHJ1Y3Qg ZG1hX2ZlbmNlICpmZW5jZTsKKwl1NjQgc3JjX2FkZHIsIGRzdF9hZGRyOworCXU2NCBwdGVfZmxh Z3M7CisJdm9pZCAqY3B1X2FkZHI7CisJaW50IHI7CisKKwkvKiBVc2UgZW50aXR5J3MgR0FSVCB3 aW5kb3cgMCAqLworCSpnYXJ0X2FkZHIgPSBhbWRncHVfY29tcHV0ZV9nYXJ0X2FkZHJlc3MoJmFk ZXYtPmdtYywgZW50aXR5LCAwKTsKKworCW51bV9kdyA9IEFMSUdOKGFkZXYtPm1tYW4uYnVmZmVy X2Z1bmNzLT5jb3B5X251bV9kdywgOCk7CisJbnVtX2J5dGVzID0gbnBhZ2VzICogOCAqIEFNREdQ VV9HUFVfUEFHRVNfSU5fQ1BVX1BBR0U7CisKKwlyID0gYW1kZ3B1X2pvYl9hbGxvY193aXRoX2li KGFkZXYsICZlbnRpdHktPmJhc2UsCisJCQkJICAgICBBTURHUFVfRkVOQ0VfT1dORVJfVU5ERUZJ TkVELAorCQkJCSAgICAgbnVtX2R3ICogNCArIG51bV9ieXRlcywKKwkJCQkgICAgIEFNREdQVV9J Ql9QT09MX0RFTEFZRUQsCisJCQkJICAgICAmam9iLAorCQkJCSAgICAgQU1ER1BVX0tFUk5FTF9K T0JfSURfS0ZEX0dBUlRfTUFQKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlzcmNfYWRkciA9 IG51bV9kdyAqIDQ7CisJc3JjX2FkZHIgKz0gam9iLT5pYnNbMF0uZ3B1X2FkZHI7CisKKwlkc3Rf YWRkciA9IGFtZGdwdV9ib19ncHVfb2Zmc2V0KGFkZXYtPmdhcnQuYm8pOworCWRzdF9hZGRyICs9 IChlbnRpdHktPmdhcnRfd2luZG93X29mZnNbMF0gPj4gQU1ER1BVX0dQVV9QQUdFX1NISUZUKSAq IDg7CisJYW1kZ3B1X2VtaXRfY29weV9idWZmZXIoYWRldiwgJmpvYi0+aWJzWzBdLCBzcmNfYWRk ciwKKwkJCQlkc3RfYWRkciwgbnVtX2J5dGVzLCAwKTsKKworCWFtZGdwdV9yaW5nX3BhZF9pYihy aW5nLCAmam9iLT5pYnNbMF0pOworCVdBUk5fT04oam9iLT5pYnNbMF0ubGVuZ3RoX2R3ID4gbnVt X2R3KTsKKworCXB0ZV9mbGFncyA9IEFNREdQVV9QVEVfVkFMSUQgfCBBTURHUFVfUFRFX1JFQURB QkxFOworCXB0ZV9mbGFncyB8PSBBTURHUFVfUFRFX1NZU1RFTSB8IEFNREdQVV9QVEVfU05PT1BF RDsKKwlpZiAoZmxhZ3MgJiBBTURHUFVfUFRFX1dSSVRFQUJMRSkKKwkJcHRlX2ZsYWdzIHw9IEFN REdQVV9QVEVfV1JJVEVBQkxFOworCXB0ZV9mbGFncyB8PSBhZGV2LT5nYXJ0LmdhcnRfcHRlX2Zs YWdzOworCisJY3B1X2FkZHIgPSAmam9iLT5pYnNbMF0ucHRyW251bV9kd107CisKKwlhbWRncHVf Z2FydF9tYXAoYWRldiwgMCwgbnBhZ2VzLCBhZGRyLCBwdGVfZmxhZ3MsIGNwdV9hZGRyKTsKKwlm ZW5jZSA9IGFtZGdwdV9qb2Jfc3VibWl0KGpvYik7CisJZG1hX2ZlbmNlX3B1dChmZW5jZSk7CisK KwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbWRncHVfc3ZtX2NvcHlfbWVtb3J5X2dhcnQgLSBT RE1BIGNvcHkgYmV0d2VlbiBzeXN0ZW0gUkFNIGFuZCBWUkFNCisgKiBAYWRldjogQU1ER1BVIGRl dmljZQorICogQHN5czogQXJyYXkgb2YgRE1BIGFkZHJlc3NlcyBmb3Igc3lzdGVtIG1lbW9yeSBw YWdlcworICogQHZyYW06IEFycmF5IG9mIFZSQU0gYnl0ZSBvZmZzZXRzIChyZWxhdGl2ZSB0byBz dGFydCBvZiBWUkFNKQorICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkKKyAqIEBk aXJlY3Rpb246IEZST01fUkFNX1RPX1ZSQU0gb3IgRlJPTV9WUkFNX1RPX1JBTQorICogQG1mZW5j ZTogSW4vb3V0IOKAlCBjYXJyaWVzIHRoZSBsYXN0IFNETUEgZmVuY2UgZm9yIHNlcmlhbGl6YXRp b24KKyAqCisgKiBNYXBzIHN5c3RlbSBtZW1vcnkgcGFnZXMgaW50byB0aGUgR0FSVCB3aW5kb3cg YW5kIHVzZXMgU0RNQSB0byBjb3B5CisgKiBkYXRhIHRvL2Zyb20gVlJBTS4gSGFuZGxlcyBzcGxp dHRpbmcgaW50byBBTURHUFVfR1RUX01BWF9UUkFOU0ZFUl9TSVpFCisgKiBjaHVua3MuIEFjcXVp cmVzIGVudGl0eS0+bG9jayBpbnRlcm5hbGx5IHRvIHByb3RlY3QgdGhlIEdBUlQgd2luZG93LAor ICogbWF0Y2hpbmcgdGhlIEtGRCBzdm1fbWlncmF0ZV9jb3B5X21lbW9yeV9nYXJ0KCkgcGF0dGVy bi4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBm YWlsdXJlCisgKi8KK3N0YXRpYyBpbnQKK2FtZGdwdV9zdm1fY29weV9tZW1vcnlfZ2FydChzdHJ1 Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgZG1hX2FkZHJfdCAqc3lzLAorCQkJICAgIHU2NCAqdnJh bSwgdTY0IG5wYWdlcywgaW50IGRpcmVjdGlvbiwKKwkJCSAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoq bWZlbmNlKQoreworCWNvbnN0IHU2NCBtYXhfcGFnZXMgPSBBTURHUFVfR1RUX01BWF9UUkFOU0ZF Ul9TSVpFOworCXN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9IGFkZXYtPm1tYW4uYnVmZmVyX2Z1 bmNzX3Jpbmc7CisJc3RydWN0IGFtZGdwdV90dG1fYnVmZmVyX2VudGl0eSAqZW50aXR5ID0gJmFk ZXYtPm1tYW4ubW92ZV9lbnRpdHk7CisJdTY0IGdhcnRfcywgZ2FydF9kOworCXN0cnVjdCBkbWFf ZmVuY2UgKm5leHQ7CisJdTY0IHNpemU7CisJaW50IHI7CisKKwltdXRleF9sb2NrKCZlbnRpdHkt PmxvY2spOworCisJd2hpbGUgKG5wYWdlcykgeworCQlzaXplID0gbWluKG1heF9wYWdlcywgbnBh Z2VzKTsKKworCQlpZiAoZGlyZWN0aW9uID09IEZST01fVlJBTV9UT19SQU0pIHsKKwkJCWdhcnRf cyA9IGFtZGdwdV9zdm1fZGlyZWN0X21hcHBpbmdfYWRkcihhZGV2LCAqdnJhbSk7CisJCQlyID0g YW1kZ3B1X3N2bV9nYXJ0X21hcChyaW5nLCBlbnRpdHksIHNpemUsIHN5cywKKwkJCQkJCSZnYXJ0 X2QsIEFNREdQVV9QVEVfV1JJVEVBQkxFKTsKKwkJfSBlbHNlIHsKKwkJCXIgPSBhbWRncHVfc3Zt X2dhcnRfbWFwKHJpbmcsIGVudGl0eSwgc2l6ZSwgc3lzLAorCQkJCQkJJmdhcnRfcywgMCk7CisJ CQlnYXJ0X2QgPSBhbWRncHVfc3ZtX2RpcmVjdF9tYXBwaW5nX2FkZHIoYWRldiwgKnZyYW0pOwor CQl9CisJCWlmIChyKSB7CisJCQlkZXZfZXJyKGFkZXYtPmRldiwgImZhaWxlZCAlZCB0byBtYXAg R0FSVCBmb3IgU0RNQVxuIiwgcik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKworCQlBTURH UFVfTUlHUkFURV9UUkFDRSgiU0RNQV9DT1BZOiAlcyBucGFnZXM9JWxsdSB2cmFtX29mZj0weCVs bHhcbiIsCisJCQkJICBkaXJlY3Rpb24gPT0gRlJPTV9SQU1fVE9fVlJBTSA/ICJSQU0tPlZSQU0i IDogIlZSQU0tPlJBTSIsCisJCQkJICBzaXplLCAodTY0KSp2cmFtKTsKKworCQlyID0gYW1kZ3B1 X2NvcHlfYnVmZmVyKGFkZXYsIGVudGl0eSwgZ2FydF9zLCBnYXJ0X2QsCisJCQkJICAgICAgIHNp emUgKiBQQUdFX1NJWkUsCisJCQkJICAgICAgIE5VTEwsICZuZXh0LCB0cnVlLCAwKTsKKwkJaWYg KHIpIHsKKwkJCWRldl9lcnIoYWRldi0+ZGV2LCAiZmFpbGVkICVkIHRvIGNvcHkgYnVmZmVyXG4i LCByKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWRtYV9mZW5jZV9wdXQoKm1mZW5j ZSk7CisJCSptZmVuY2UgPSBuZXh0OworCQlucGFnZXMgLT0gc2l6ZTsKKwkJaWYgKG5wYWdlcykg eworCQkJc3lzICs9IHNpemU7CisJCQl2cmFtICs9IHNpemU7CisJCX0KKwl9CisKK291dF91bmxv Y2s6CisJbXV0ZXhfdW5sb2NrKCZlbnRpdHktPmxvY2spOworCisJcmV0dXJuIHI7Cit9CisKKy8q KgorICogYW1kZ3B1X3N2bV9jb3B5X3RvX2Rldm1lbSAtIFNETUEgY29weSBzeXN0ZW0gbWVtb3J5 IC0+IFZSQU0KKyAqIEBwYWdlczogQXJyYXkgb2YgZGVzdGluYXRpb24gWk9ORV9ERVZJQ0UgcGFn ZXMgKFZSQU0tYmFja2VkKQorICogQHBhZ2VtYXBfYWRkcjogQXJyYXkgb2Ygc291cmNlIERNQSBh ZGRyZXNzZXMgKHN5c3RlbSBtZW1vcnksIGFscmVhZHkgbWFwcGVkKQorICogQG5wYWdlczogTnVt YmVyIG9mIHBhZ2VzIHRvIGNvcHkKKyAqCisgKiBCdWlsZHMgcGFyYWxsZWwgc3lzW10gYW5kIHZy YW1bXSBhcnJheXMgZnJvbSB0aGUgZnJhbWV3b3JrLXByb3ZpZGVkCisgKiBwYWdlbWFwX2FkZHIg YW5kIGRldmljZSBwYWdlcywgdGhlbiBzdWJtaXRzIGJhdGNoZWQgU0RNQSBjb3BpZXMgdmlhCisg KiB0aGUgR0FSVCB3aW5kb3cuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZl IGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50CithbWRncHVfc3ZtX2NvcHlf dG9fZGV2bWVtKHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBf YWRkciAqcGFnZW1hcF9hZGRyLAorCQkJICAgdW5zaWduZWQgbG9uZyBucGFnZXMsCisJCQkgICBz dHJ1Y3QgZG1hX2ZlbmNlICpwcmVfbWlncmF0ZV9mZW5jZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldjsKKwlzdHJ1Y3QgYW1kZ3B1X3BhZ2VtYXAgKnN2bV9kbTsKKwlzdHJ1Y3QgZG1h X2ZlbmNlICptZmVuY2UgPSBOVUxMOworCWRtYV9hZGRyX3QgKnN5czsKKwl1NjQgKnZyYW07CisJ dW5zaWduZWQgbG9uZyBpLCBqOworCWludCByZXQgPSAwOworCisJaWYgKCFucGFnZXMpCisJCXJl dHVybiAwOworCisJLyoKKwkgKiBGaW5kIHRoZSBmaXJzdCBub24tTlVMTCBwYWdlIHRvIGRlcml2 ZSB0aGUgZGV2aWNlLgorCSAqIFRoZSBwYWdlcyBhcnJheSBtYXkgY29udGFpbiBOVUxMIGVudHJp ZXMgZm9yIHBvc2l0aW9ucyB3aGVyZQorCSAqIG5vIHZhbGlkIGRldmljZSBwYWdlIGV4aXN0cy4K KwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJaWYgKHBhZ2VzW2ldKQor CQkJYnJlYWs7CisJfQorCWlmIChpID09IG5wYWdlcykKKwkJcmV0dXJuIDA7CisKKwlzdm1fZG0g PSBhbWRncHVfc3ZtX3BhZ2VfdG9fYXBhZ2VtYXAocGFnZXNbaV0pOworCWFkZXYgPSBzdm1fZG0t PmFkZXY7CisKKwlzeXMgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqc3lzKSwgR0ZQX0tFUk5F TCk7CisJdnJhbSA9IGt2Y2FsbG9jKG5wYWdlcywgc2l6ZW9mKCp2cmFtKSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFzeXMgfHwgIXZyYW0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJl ZTsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCWlmICgh cGFnZW1hcF9hZGRyW2ldLmFkZHIpCisJCQlnb3RvIGZsdXNoOworCisJCXN5c1tqXSA9IHBhZ2Vt YXBfYWRkcltpXS5hZGRyOworCQl2cmFtW2pdID0gKCh1NjQpcGFnZV90b19wZm4ocGFnZXNbaV0p IDw8IFBBR0VfU0hJRlQpIC0KKwkJCSAgc3ZtX2RtLT5ocGFfYmFzZTsKKworCQkvKiBDaGVjayBp ZiBuZXh0IHZyYW0gcGFnZSBpcyBjb250aWd1b3VzIHdpdGggY3VycmVudCAqLworCQlpZiAoaiA+ IDAgJiYgdnJhbVtqXSAhPSB2cmFtW2ogLSAxXSArIFBBR0VfU0laRSkKKwkJCWdvdG8gZmx1c2g7 CisKKwkJaisrOworCQljb250aW51ZTsKK2ZsdXNoOgorCQlpZiAoaikgeworCQkJcmV0ID0gYW1k Z3B1X3N2bV9jb3B5X21lbW9yeV9nYXJ0KGFkZXYsIHN5cywgdnJhbSwgaiwKKwkJCQkJCQkgIEZS T01fUkFNX1RPX1ZSQU0sCisJCQkJCQkJICAmbWZlbmNlKTsKKwkJCWlmIChyZXQpCisJCQkJZ290 byBvdXRfZmVuY2U7CisJCQlqID0gMDsKKwkJfQorCQkvKiBSZS1wcm9jZXNzIGN1cnJlbnQgcGFn ZSBpZiBpdCB3YXMgdmFsaWQgYnV0IGJyb2tlIGNvbnRpZ3VpdHkgKi8KKwkJaWYgKHBhZ2VtYXBf YWRkcltpXS5hZGRyKSB7CisJCQlzeXNbMF0gPSBwYWdlbWFwX2FkZHJbaV0uYWRkcjsKKwkJCXZy YW1bMF0gPSAoKHU2NClwYWdlX3RvX3BmbihwYWdlc1tpXSkgPDwgUEFHRV9TSElGVCkgLQorCQkJ CSAgc3ZtX2RtLT5ocGFfYmFzZTsKKwkJCWogPSAxOworCQl9CisJfQorCisJLyogRmx1c2ggcmVt YWluaW5nIGJhdGNoICovCisJaWYgKGopCisJCXJldCA9IGFtZGdwdV9zdm1fY29weV9tZW1vcnlf Z2FydChhZGV2LCBzeXMsIHZyYW0sIGosCisJCQkJCQkgIEZST01fUkFNX1RPX1ZSQU0sICZtZmVu Y2UpOworCitvdXRfZmVuY2U6CisJaWYgKG1mZW5jZSkgeworCQlkbWFfZmVuY2Vfd2FpdChtZmVu Y2UsIGZhbHNlKTsKKwkJZG1hX2ZlbmNlX3B1dChtZmVuY2UpOworCX0KKworCUFNREdQVV9NSUdS QVRFX1RSQUNFKCJjb3B5X3RvX2Rldm1lbSBkb25lOiBucGFnZXM9JWxkIHJldD0lZFxuIiwKKwkJ CSAgbnBhZ2VzLCByZXQpOworCitvdXRfZnJlZToKKwlrdmZyZWUodnJhbSk7CisJa3ZmcmVlKHN5 cyk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBhbWRncHVfc3ZtX2NvcHlfdG9fcmFtIC0g U0RNQSBjb3B5IFZSQU0gLT4gc3lzdGVtIG1lbW9yeQorICogQHBhZ2VzOiBBcnJheSBvZiBzb3Vy Y2UgWk9ORV9ERVZJQ0UgcGFnZXMgKFZSQU0tYmFja2VkKQorICogQHBhZ2VtYXBfYWRkcjogQXJy YXkgb2YgZGVzdGluYXRpb24gRE1BIGFkZHJlc3NlcyAoc3lzdGVtIG1lbW9yeSwgYWxyZWFkeSBt YXBwZWQpCisgKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXMgdG8gY29weQorICoKKyAqIE1pcnJv ciBvZiBjb3B5X3RvX2Rldm1lbSB3aXRoIHNyYy9kc3Qgc3dhcHBlZC4KKyAqCisgKiBSZXR1cm46 IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRp YyBpbnQKK2FtZGdwdV9zdm1fY29weV90b19yYW0oc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCXN0 cnVjdCBkcm1fcGFnZW1hcF9hZGRyICpwYWdlbWFwX2FkZHIsCisJCQl1bnNpZ25lZCBsb25nIG5w YWdlcywKKwkJCXN0cnVjdCBkbWFfZmVuY2UgKnByZV9taWdyYXRlX2ZlbmNlKQoreworCXN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2OworCXN0cnVjdCBhbWRncHVfcGFnZW1hcCAqc3ZtX2RtOwor CXN0cnVjdCBkbWFfZmVuY2UgKm1mZW5jZSA9IE5VTEw7CisJZG1hX2FkZHJfdCAqc3lzOworCXU2 NCAqdnJhbTsKKwl1bnNpZ25lZCBsb25nIGksIGo7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW5w YWdlcykKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJ aWYgKHBhZ2VzW2ldKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IG5wYWdlcykKKwkJcmV0dXJu IDA7CisKKwlzdm1fZG0gPSBhbWRncHVfc3ZtX3BhZ2VfdG9fYXBhZ2VtYXAocGFnZXNbaV0pOwor CWFkZXYgPSBzdm1fZG0tPmFkZXY7CisKKwlzeXMgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigq c3lzKSwgR0ZQX0tFUk5FTCk7CisJdnJhbSA9IGt2Y2FsbG9jKG5wYWdlcywgc2l6ZW9mKCp2cmFt KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzeXMgfHwgIXZyYW0pIHsKKwkJcmV0ID0gLUVOT01FTTsK KwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IG5wYWdlczsg aSsrKSB7CisJCWlmICghcGFnZW1hcF9hZGRyW2ldLmFkZHIgfHwgIXBhZ2VzW2ldKQorCQkJZ290 byBmbHVzaDsKKworCQl2cmFtW2pdID0gKCh1NjQpcGFnZV90b19wZm4ocGFnZXNbaV0pIDw8IFBB R0VfU0hJRlQpIC0KKwkJCSAgc3ZtX2RtLT5ocGFfYmFzZTsKKwkJc3lzW2pdID0gcGFnZW1hcF9h ZGRyW2ldLmFkZHI7CisKKwkJLyogQ2hlY2sgaWYgbmV4dCB2cmFtIHBhZ2UgaXMgY29udGlndW91 cyB3aXRoIGN1cnJlbnQgKi8KKwkJaWYgKGogPiAwICYmIHZyYW1bal0gIT0gdnJhbVtqIC0gMV0g KyBQQUdFX1NJWkUpCisJCQlnb3RvIGZsdXNoOworCisJCWorKzsKKwkJY29udGludWU7CitmbHVz aDoKKwkJaWYgKGopIHsKKwkJCXJldCA9IGFtZGdwdV9zdm1fY29weV9tZW1vcnlfZ2FydChhZGV2 LCBzeXMsIHZyYW0sIGosCisJCQkJCQkJICBGUk9NX1ZSQU1fVE9fUkFNLAorCQkJCQkJCSAgJm1m ZW5jZSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X2ZlbmNlOworCQkJaiA9IDA7CisJCX0K KwkJLyogUmUtcHJvY2VzcyBjdXJyZW50IHBhZ2UgaWYgaXQgd2FzIHZhbGlkIGJ1dCBicm9rZSBj b250aWd1aXR5ICovCisJCWlmIChwYWdlbWFwX2FkZHJbaV0uYWRkciAmJiBwYWdlc1tpXSkgewor CQkJdnJhbVswXSA9ICgodTY0KXBhZ2VfdG9fcGZuKHBhZ2VzW2ldKSA8PCBQQUdFX1NISUZUKSAt CisJCQkJICBzdm1fZG0tPmhwYV9iYXNlOworCQkJc3lzWzBdID0gcGFnZW1hcF9hZGRyW2ldLmFk ZHI7CisJCQlqID0gMTsKKwkJfQorCX0KKworCS8qIEZsdXNoIHJlbWFpbmluZyBiYXRjaCAqLwor CWlmIChqKQorCQlyZXQgPSBhbWRncHVfc3ZtX2NvcHlfbWVtb3J5X2dhcnQoYWRldiwgc3lzLCB2 cmFtLCBqLAorCQkJCQkJICBGUk9NX1ZSQU1fVE9fUkFNLCAmbWZlbmNlKTsKKworb3V0X2ZlbmNl OgorCWlmIChtZmVuY2UpIHsKKwkJZG1hX2ZlbmNlX3dhaXQobWZlbmNlLCBmYWxzZSk7CisJCWRt YV9mZW5jZV9wdXQobWZlbmNlKTsKKwl9CisKKwlBTURHUFVfTUlHUkFURV9UUkFDRSgiY29weV90 b19yYW0gZG9uZTogbnBhZ2VzPSVsZCByZXQ9JWRcbiIsIG5wYWdlcywgcmV0KTsKKworb3V0X2Zy ZWU6CisJa3ZmcmVlKHZyYW0pOworCWt2ZnJlZShzeXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyBhbWRncHVfcGFnZW1hcF9v cHMgPSB7CisJLmRldm1lbV9yZWxlYXNlICAgICAgPSBhbWRncHVfc3ZtX2Rldm1lbV9yZWxlYXNl LAorCS5wb3B1bGF0ZV9kZXZtZW1fcGZuID0gYW1kZ3B1X3N2bV9wb3B1bGF0ZV9kZXZtZW1fcGZu LAorCS5jb3B5X3RvX2Rldm1lbSAgICAgID0gYW1kZ3B1X3N2bV9jb3B5X3RvX2Rldm1lbSwKKwku Y29weV90b19yYW0gICAgICAgICA9IGFtZGdwdV9zdm1fY29weV90b19yYW0sCit9OworCisvKiBk cm1fcGFnZW1hcF9vcHMg4oCUIHRvcC1sZXZlbCBtaWdyYXRpb24gZW50cnkgcG9pbnRzICovCisK Ky8qKgorICogYW1kZ3B1X3N2bV9kZXZpY2VfbWFwIC0gQ29udmVydCBaT05FX0RFVklDRSBwYWdl IHRvIEdQVSBQVEUgYWRkcmVzcworICogQGRwYWdlbWFwOiBUaGUgZHJtX3BhZ2VtYXAgZm9yIHRo aXMgZGV2aWNlCisgKiBAZGV2OiBSZXF1ZXN0aW5nIGRldmljZSAoZm9yIFAyUCBjaGVjaykKKyAq IEBwYWdlOiBaT05FX0RFVklDRSBwYWdlIGJhY2tlZCBieSBWUkFNCisgKiBAb3JkZXI6IFBhZ2Ug b3JkZXIgKDAgPSA0SywgOSA9IDJNLCBldGMuKQorICogQGRpcjogRE1BIGRpcmVjdGlvbiAodW51 c2VkIGZvciBsb2NhbCBWUkFNKQorICoKKyAqIEFkZHJlc3MgY29udmVyc2lvbiBjaGFpbjoKKyAq ICAgcGFnZSAtPiBQRk4gLT4gSFBBIC0+IFZSQU0gb2Zmc2V0IC0+IFBURSBhZGRyZXNzCisgKgor ICogICBIUEEgPSBwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUCisgKiAgIFZSQU0gb2Zm c2V0ID0gSFBBIC0gYXBhZ2VtYXAuaHBhX2Jhc2UKKyAqICAgUFRFIGFkZHJlc3MgPSBWUkFNIG9m ZnNldCArIGFkZXYtPnZtX21hbmFnZXIudnJhbV9iYXNlX29mZnNldAorICoKKyAqIFJldHVybjog ZHJtX3BhZ2VtYXBfYWRkciB3aXRoIFBURSBhZGRyZXNzIGFuZCBBTURHUFVfSU5URVJDT05ORUNU X1ZSQU0gcHJvdG9jb2wKKyAqLworc3RhdGljIHN0cnVjdCBkcm1fcGFnZW1hcF9hZGRyCithbWRn cHVfc3ZtX2RldmljZV9tYXAoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCwKKwkJICAgICAg IHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAg ICAgdW5zaWduZWQgaW50IG9yZGVyLAorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24g ZGlyKQoreworCXN0cnVjdCBhbWRncHVfcGFnZW1hcCAqc3ZtX2RtID0gZHBhZ2VtYXBfdG9fYXBh Z2VtYXAoZHBhZ2VtYXApOworCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2ID0gZHBhZ2VtYXBf dG9fYWRldihkcGFnZW1hcCk7CisJZG1hX2FkZHJfdCBhZGRyOworCisJaWYgKGRwYWdlbWFwLT5k cm0tPmRldiA9PSBkZXYpIHsKKwkJLyogU2FtZSBkZXZpY2U6IHJldHVybiBWUkFNIFBURSBhZGRy ZXNzICovCisJCXU2NCBocGEgPSAodTY0KXBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQ7 CisJCXU2NCB2cmFtX29mZnNldCA9IGhwYSAtIHN2bV9kbS0+aHBhX2Jhc2U7CisKKwkJYWRkciA9 IHZyYW1fb2Zmc2V0ICsgYWRldi0+dm1fbWFuYWdlci52cmFtX2Jhc2Vfb2Zmc2V0OworCX0gZWxz ZSB7CisJCS8qIENyb3NzLWRldmljZSBQMlA6IG5vdCB5ZXQgc3VwcG9ydGVkICovCisJCWFkZHIg PSBETUFfTUFQUElOR19FUlJPUjsKKwl9CisKKwlyZXR1cm4gZHJtX3BhZ2VtYXBfYWRkcl9lbmNv ZGUoYWRkciwKKwkJCQlBTURHUFVfSU5URVJDT05ORUNUX1ZSQU0sIG9yZGVyLCBkaXIpOworfQor CisvKioKKyAqIGFtZGdwdV9zdm1fcG9wdWxhdGVfbW0gLSBBbGxvY2F0ZSBWUkFNIEJPIGFuZCBt aWdyYXRlIHBhZ2VzCisgKiBAZHBhZ2VtYXA6IFRoZSBkcm1fcGFnZW1hcCBmb3IgdGhpcyBkZXZp Y2UKKyAqIEBzdGFydDogU3RhcnQgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSByYW5nZSB0byBtaWdy YXRlCisgKiBAZW5kOiBFbmQgdmlydHVhbCBhZGRyZXNzIChleGNsdXNpdmUpCisgKiBAbW06IG1t X3N0cnVjdCBvZiB0aGUgb3duaW5nIHByb2Nlc3MKKyAqIEB0aW1lc2xpY2VfbXM6IE1heGltdW0g dGltZSB0byBzcGVuZCBtaWdyYXRpbmcgKGZvciBmYWlybmVzcykKKyAqCisgKiBDb3JlIG1pZ3Jh dGlvbiBlbnRyeSBwb2ludCBjYWxsZWQgYnkgZHJtX3BhZ2VtYXBfcG9wdWxhdGVfbW0oKS4KKyAq IEFsbG9jYXRlcyBhbiBhbWRncHVfYm9fc3ZtIHZpYSBhbWRncHVfYm9fc3ZtX2FsbG9jKCksIHRo ZW4gY2FsbHMKKyAqIGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKCkgdG8gZXhlY3V0ZSB0 aGUgYWN0dWFsIG1pZ3JhdGlvbi4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRp dmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQKK2FtZGdwdV9zdm1fcG9w dWxhdGVfbW0oc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCwKKwkJCXVuc2lnbmVkIGxvbmcg c3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQl1 bnNpZ25lZCBsb25nIHRpbWVzbGljZV9tcykKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRl diA9IGRwYWdlbWFwX3RvX2FkZXYoZHBhZ2VtYXApOworCXN0cnVjdCBkcm1fcGFnZW1hcF9taWdy YXRlX2RldGFpbHMgbWRldGFpbHMgPSB7CisJCS50aW1lc2xpY2VfbXMgPSB0aW1lc2xpY2VfbXMs CisJfTsKKwlzdHJ1Y3QgYW1kZ3B1X2JvX3N2bSAqc3ZtX2JvOworCWludCByZXQ7CisKKwlzdm1f Ym8gPSBhbWRncHVfYm9fc3ZtX2FsbG9jKGFkZXYsIGRwYWdlbWFwLCBtbSwgZW5kIC0gc3RhcnQp OworCWlmIChJU19FUlIoc3ZtX2JvKSkKKwkJcmV0dXJuIFBUUl9FUlIoc3ZtX2JvKTsKKworCUFN REdQVV9NSUdSQVRFX1RSQUNFKCJwb3B1bGF0ZV9tbTogWzB4JWx4LTB4JWx4XSBzaXplPSVsdVxu IiwKKwkJCSAgc3RhcnQsIGVuZCwgZW5kIC0gc3RhcnQpOworCisJcmV0ID0gZHJtX3BhZ2VtYXBf bWlncmF0ZV90b19kZXZtZW0oJnN2bV9iby0+ZGV2bWVtLAorCQkJCQkgICAgIG1tLCBzdGFydCwg ZW5kLAorCQkJCQkgICAgICZtZGV0YWlscyk7CisKKwlhbWRncHVfYm9fdW5yZXNlcnZlKCZzdm1f Ym8tPmJvKTsKKworCXJldHVybiByZXQ7Cit9CiAKLWNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9v cHMgYW1kZ3B1X3N2bV9kcm1fcGFnZW1hcF9vcHMgPSB7IH07Citjb25zdCBzdHJ1Y3QgZHJtX3Bh Z2VtYXBfb3BzIGFtZGdwdV9zdm1fZHJtX3BhZ2VtYXBfb3BzID0geworCS5kZXZpY2VfbWFwID0g YW1kZ3B1X3N2bV9kZXZpY2VfbWFwLAorCS5wb3B1bGF0ZV9tbSA9IGFtZGdwdV9zdm1fcG9wdWxh dGVfbW0sCit9OwogCiAvKioKICAqIGFtZGdwdV9zdm1fbWlncmF0aW9uX2luaXQgLSBSZWdpc3Rl ciBaT05FX0RFVklDRSBhbmQgaW5pdGlhbGl6ZSBkcm1fcGFnZW1hcAotLSAKMi4zNC4xCgo=