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 EC34EFF8862 for ; Mon, 27 Apr 2026 10:06:06 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 44D3710E689; Mon, 27 Apr 2026 10:06:06 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="STUr9PH1"; dkim-atps=neutral Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012004.outbound.protection.outlook.com [40.107.209.4]) by gabe.freedesktop.org (Postfix) with ESMTPS id B9C2310E690; Mon, 27 Apr 2026 10:06:04 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BUjR+g46HpMHvNgc+gE3OcDS6RArxiLRDCAX8DcP4tK6X0lU/qGHnLAo+I+awFHA9V9Z6/afNFIRR13aNOl4k0S2hjssTszqdX0VIVnqinJRVw0+auYl8UXHklLCA7s07opgG0WaNwb42TOcNZDmQ/GWUeTSi+V7tjlQ8McFqtFJAF7bbzQl1SrzNqM9Kj4MFJZSzNJDSegLBuODIyl0XI5zFXmMzRR107CGiTTmUo/YUTO0sO11nTx6w6ShzsRHwm9TroKO+eVxxbA9okZDiVl+uVOr79AbcP+X7o4a3hrTCBjzGmkSS8V+TaygUjLAmePYzhKmhjuvFoBB0OQ+gA== 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=AjhknTxeRN89/7QX/XYa5NGVLUM7Hj0pazD2+B38Q+c=; b=wWmWuQmOztn6l307GWuRFNIArSko2+6VuCX2XAU4xkQqpArNJwXur21OqJwqKjzw7j0uETVSNV/a3SHTkU4YMe+w0gFywTGB/KQm0r8f7hmp5bXY/Fx8ZaY+MM4elqKWgVU9d20jyNfEqDBUF9hQbZ7OBg4Y+tIH4Z+64pyUQMNJInAErOFt5oAsiamsLxnQ8n2bsUGNpBBe6hO1f+p5yilmKjmsrbv46fIxQBWPlkwwQFQYfDdS3Z8xjXsJXEBkCua3tX7v3j4oY/8zB7X6aoTrJRmDWMLyMj0/FgTtQWqcAXZrvRj0VSm3iKvw+jMjPtbaonl0jV1VOplGMzwvtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=lists.freedesktop.org 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=AjhknTxeRN89/7QX/XYa5NGVLUM7Hj0pazD2+B38Q+c=; b=STUr9PH1lyTdC2TOQW4V/RSUAolD6kBJ9gZqPI8p8K70FBake9fmb1OVYibyQ1ApF54CaJ8KU2h29ffnOK6KUjuFvWotlgAK6Nvg0BHkEXpnjHJEJAS7xnbe2ZLR0Jwi7KwcvBeAodxBVN+HJYFGMiWCqwNF50FlJEsVUqn7B5o= Received: from SJ0PR03CA0085.namprd03.prod.outlook.com (2603:10b6:a03:331::30) by SN7PR12MB8770.namprd12.prod.outlook.com (2603:10b6:806:34b::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.15; Mon, 27 Apr 2026 10:05:46 +0000 Received: from MW1PEPF0001615E.namprd21.prod.outlook.com (2603:10b6:a03:331:cafe::25) by SJ0PR03CA0085.outlook.office365.com (2603:10b6:a03:331::30) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9846.26 via Frontend Transport; Mon, 27 Apr 2026 10:05:45 +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 MW1PEPF0001615E.mail.protection.outlook.com (10.167.249.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.0 via Frontend Transport; Mon, 27 Apr 2026 10:05:45 +0000 Received: from satlexmb07.amd.com (10.181.42.216) 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.17; Mon, 27 Apr 2026 05:05:37 -0500 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.17 via Frontend Transport; Mon, 27 Apr 2026 05:05:34 -0500 From: Junhua Shen To: , , , , , , , , , CC: , , "Junhua Shen" Subject: [PATCH v3 2/5] drm/amdgpu: implement drm_pagemap SDMA migration callbacks Date: Mon, 27 Apr 2026 18:05:19 +0800 Message-ID: <20260427100522.7014-3-Junhua.Shen@amd.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260427100522.7014-1-Junhua.Shen@amd.com> References: <20260427100522.7014-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: MW1PEPF0001615E:EE_|SN7PR12MB8770:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e614460-644d-48b5-e1ef-08dea4448cba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700016|376014|1800799024|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: cJOiCi59+yVgMjU4bVmIN3vghbWxXIA8ZAyE6TX4kzT6b1YFwZDNGlLrrUzLYnPvtuOqROQgUP9DNwAi7kIhlu7kj6RV/R2f8K465FwpDK44s3JXjHcjMDnnAUi26cCSF9Nn7RASdwMd925DOodpsiK7hcUrieNOE8N4r7tE9QyiNAB2ago3niHd6/zSBhbsE4QZGBLaEbzQ1TSQO0pQzsa+/Ekq26UckunhJDSVjSyTSyGZWCSDSjjYxpUZNZ7TYo7CfI+9NuXHFzNhYKIgvjRz0ySsnXbiRSCCmHMvyWNPJbb2oMprutfoY+Ll6Ox7Av7gElfftkx688Iv+0FNAsP5Irm+Ir7Lr/B7N/9f6apoUJ+ow4729slw9eFRZe4fwKdIN5LA9hUJ+I9U3m7CUhFaZBu/YEEhEohQQ6YOEk1XfMGeqJHZbe/mu1QHGN3bN3weXvOg4Nyw/t34sK7eHXIeDj4WU2d/V5wTZniV2L9gs62/d1YugmeE/nVOijLc8iV2n0ZFLiSmE+z5gWDc5q5oQ7tFvvY5m+Vkf42UxjUuSQ0g6OKsyiGmJYWwnwI7yrKr5bJH/JRz2Hx5mfLkRMmpAKCegyRcS5sHOeVPB+cjgzhDrzIrjsaNWx7glTr+UceuBAczqvtxb55tAg+MTlVhUrS2Xdcan56BheSzbIfAIWB3NWIGbtaoK1cbpdIfdBQ/pk38Iuluw/r85nw+Gp4UT0rvd0APrhO8snbYoXwcFoiHWpz9Wx+S0aVoZIZVCZbs+oxYZlv9flF6nFAS3gTvhcWS5GGqECarKB+c0Gg= 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)(82310400026)(36860700016)(376014)(1800799024)(56012099003)(22082099003)(18002099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: nfgCsZKTUS3Z+JCNTjagm5T/aZRzLKJvzzw3o/Z49YvF5N7iyBZdu7L58DjG0WTYi3idGhhucpRbodjw9B010AL1X7VwetoMVDbVBf/hMNZYvKrlTDDiybLmWCatPNx1iBVkTdZAA8Ra7K6qRONvrtzsRNbbLlxuqS/FPsIZXu1wu2Qb9Bu+0tQWNiP7eJ3XKIHo1DwHF5HRwEAa7hScxZponm0qQV5XSbS82YjQy0Vv8j5iDxvyXDmNQh3s2JSygiEvLc10NWEi/NAjwrfQpCLL8zy5CXGta0Eu4FlR7AdFLnK0CJJUbJ3xY2x6Ei2CrZ3naK76FSfWGUJhzE2BUPBlS8yKTp+RCHKhqY9Dh9z2Od/TLrwt7rw6S7jqAk9pE+MJ9VHjcLbx27DsafIe+yzktbNtJTHBRO5oG8BUlzsQXIEpvMurbgliYZ+000B8 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 10:05:45.8226 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6e614460-644d-48b5-e1ef-08dea4448cba 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: MW1PEPF0001615E.namprd21.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB8770 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 czoKCmRybV9wYWdlbWFwX29wcyAodG9wLWxldmVsIGVudHJ5IHBvaW50cyk6CiAgLSBkZXZpY2Vf bWFwOiAgIGNvbnZlcnQgWk9ORV9ERVZJQ0UgcGFnZSB0byBHUFUgUFRFIGFkZHJlc3MKICAtIHBv cHVsYXRlX21tOiAgYWxsb2NhdGUgVlJBTSBCTyBhbmQgdHJpZ2dlciBtaWdyYXRpb24KCmRybV9w YWdlbWFwX2Rldm1lbV9vcHMgKHBlci1CTyBtaWdyYXRpb24gbWVjaGFuaWNzKToKICAtIHBvcHVs YXRlX2Rldm1lbV9wZm46IHdhbGsgQk8gYnVkZHkgYmxvY2tzIHRvIGJ1aWxkIFBGTiBhcnJheQog IC0gY29weV90b19kZXZtZW06ICAgICAgU0RNQSBjb3B5IHN5c3RlbSBSQU0gLT4gVlJBTSB2aWEg R0FSVCB3aW5kb3cKICAtIGNvcHlfdG9fcmFtOiAgICAgICAgIFNETUEgY29weSBWUkFNIC0+IHN5 c3RlbSBSQU0gdmlhIEdBUlQgd2luZG93CiAgLSBkZXZtZW1fcmVsZWFzZTogICAgICBmcmVlIEJP IHdoZW4gYWxsIHBhZ2VzIG1pZ3JhdGUgYmFjawoKU2lnbmVkLW9mZi1ieTogSnVuaHVhIFNoZW4g PEp1bmh1YS5TaGVuQGFtZC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X21pZ3JhdGUuYyB8IDYxNiArKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs IDYxMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9taWdyYXRlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfbWlncmF0ZS5jCmluZGV4IDE3MGUyZWFkYzEwNi4uNDIwOTI2NTFiNGQ1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbWlncmF0ZS5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9taWdyYXRlLmMKQEAgLTY0 LDEyICs2NCwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L21lbXJlbWFwLmg+CiAjaW5jbHVkZSA8bGlu dXgvbWlncmF0ZS5oPgogCi0jaW5jbHVkZSAiYW1kZ3B1X2FtZGtmZC5oIgogI2luY2x1ZGUgImFt ZGdwdV9taWdyYXRlLmgiCiAjaW5jbHVkZSAiYW1kZ3B1LmgiCisjaW5jbHVkZSAiYW1kZ3B1X3R0 bS5oIgorI2luY2x1ZGUgImFtZGdwdV9yZXNfY3Vyc29yLmgiCisKKyNkZWZpbmUgQU1ER1BVX01J R1JBVEVfVFJBQ0UoZm10LCAuLi4pIFwKKwlwcl9kZWJ1ZygiJXM6ICIgZm10LCBfX2Z1bmNfXywg IyNfX1ZBX0FSR1NfXykKKworLyogU0RNQSBjb3B5IGRpcmVjdGlvbiAqLworI2RlZmluZSBGUk9N X1JBTV9UT19WUkFNCTAKKyNkZWZpbmUgRlJPTV9WUkFNX1RPX1JBTQkxCiAKIHN0YXRpYyBpbmxp bmUgc3RydWN0IGFtZGdwdV9wYWdlbWFwICoKLWRwYWdlbWFwX3RvX2FwYWdlbWFwKHN0cnVjdCBk cm1fcGFnZW1hcCAqZHBhZ2VtYXApCit0b19hbWRncHVfcGFnZW1hcChzdHJ1Y3QgZHJtX3BhZ2Vt YXAgKmRwYWdlbWFwKQogewogCXJldHVybiBjb250YWluZXJfb2YoZHBhZ2VtYXAsIHN0cnVjdCBh bWRncHVfcGFnZW1hcCwgZHBhZ2VtYXApOwogfQpAQCAtOTQsOCArMTAyLDYxMCBAQCBhbWRncHVf c3ZtX3BhZ2VfdG9fYXBhZ2VtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiAJcmV0dXJuIGNvbnRhaW5l cl9vZihwZ21hcCwgc3RydWN0IGFtZGdwdV9wYWdlbWFwLCBwZ21hcCk7CiB9CiAKKy8qIGRybV9w YWdlbWFwX2Rldm1lbV9vcHMg4oCUIHBlci1CTyBtaWdyYXRpb24gbWVjaGFuaWNzICovCisKKy8q KgorICogc3RydWN0IGFtZGdwdV9zdm1fYm8gLSBXcmFwcGVyIGxpbmtpbmcgZHJtX3BhZ2VtYXBf ZGV2bWVtIHRvIGFtZGdwdV9ibworICoKKyAqIEBkZXZtZW06IGRybV9wYWdlbWFwIGRldmljZSBt ZW1vcnkgYWxsb2NhdGlvbiAocGFzc2VkIHRvIGZyYW1ld29yaykKKyAqIEBibzogVGhlIGJhY2tp bmcgVlJBTSBhbWRncHVfYm8KKyAqCisgKiBJdCBpcyBhbGxvY2F0ZWQgcGVyLW1pZ3JhdGlvbiBp biBwb3B1bGF0ZV9tbSgpIGFuZCBmcmVlZCBieQorICogZGV2bWVtX3JlbGVhc2UoKSB3aGVuIGFs bCBkZXZpY2UtcHJpdmF0ZSBwYWdlcyBoYXZlIG1pZ3JhdGVkCisgKiBiYWNrIHRvIHN5c3RlbSBt ZW1vcnkuCisgKgorICogTGlmZWN5Y2xlIGlzIG1hbmFnZWQgYnkgdGhlIGRybV9wYWdlbWFwIGZy YW1ld29yaydzIGludGVybmFsIHpkZCByZWZjb3VudDoKKyAqICAgLSB6ZGQtPmRldm1lbV9hbGxv Y2F0aW9uIHBvaW50cyB0byAmc3ZtX2JvLT5kZXZtZW0KKyAqICAgLSBXaGVuIHpkZCByZWZjb3Vu dCBkcm9wcyB0byB6ZXJvLCBmcmFtZXdvcmsgY2FsbHMgZGV2bWVtX3JlbGVhc2UoKQorICogICAt IGRldm1lbV9yZWxlYXNlKCkgZnJlZXMgYm90aCB0aGUgQk8gcmVmZXJlbmNlIGFuZCB0aGUgc3Zt X2JvIGl0c2VsZgorICovCitzdHJ1Y3QgYW1kZ3B1X3N2bV9ibyB7CisJc3RydWN0IGFtZGdwdV9i byAqYm87CisJc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSBkZXZtZW07Cit9OworCitzdGF0aWMg aW5saW5lIHN0cnVjdCBhbWRncHVfc3ZtX2JvICoKK3RvX2FtZGdwdV9zdm1fYm8oc3RydWN0IGRy bV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVtX2FsbG9jYXRpb24pCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihkZXZtZW1fYWxsb2NhdGlvbiwgc3RydWN0IGFtZGdwdV9zdm1fYm8sIGRldm1lbSk7Cit9 CisKKy8qKgorICogYW1kZ3B1X3N2bV9kZXZtZW1fcmVsZWFzZSAtIFJlbGVhc2UgQk8gd2hlbiBh bGwgZGV2aWNlIHBhZ2VzIG1pZ3JhdGUgYmFjaworICoKKyAqIENhbGxlZCBieSB0aGUgZHJtX3Bh Z2VtYXAgZnJhbWV3b3JrICh2aWEgZHJtX3BhZ2VtYXBfemRkX2Rlc3Ryb3kpIHdoZW4gdGhlCisg KiBsYXN0IGRldmljZS1wcml2YXRlIHBhZ2UgYmFja2VkIGJ5IHRoaXMgYWxsb2NhdGlvbiBoYXMg YmVlbiBtaWdyYXRlZCBiYWNrCisgKiB0byBzeXN0ZW0gbWVtb3J5IChvciB0aGUgb3duaW5nIHBy b2Nlc3MgZXhpdHMpLgorICoKKyAqIEZyZWVzIGJvdGggdGhlIGFtZGdwdV9ibyByZWZlcmVuY2Ug YW5kIHRoZSB3cmFwcGVyIGFtZGdwdV9zdm1fYm8gaXRzZWxmLgorICovCitzdGF0aWMgdm9pZAor YW1kZ3B1X3N2bV9kZXZtZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVtICpkZXZt ZW1fYWxsb2NhdGlvbikKK3sKKwlzdHJ1Y3QgYW1kZ3B1X3N2bV9ibyAqc3ZtX2JvID0gdG9fYW1k Z3B1X3N2bV9ibyhkZXZtZW1fYWxsb2NhdGlvbik7CisKKwlBTURHUFVfTUlHUkFURV9UUkFDRSgi UmVsZWFzZSBzdm1fYm89JXB4IGJvPSVweFxuIiwgc3ZtX2JvLCBzdm1fYm8tPmJvKTsKKwlhbWRn cHVfYm9fdW5yZWYoJnN2bV9iby0+Ym8pOworCWtmcmVlKHN2bV9ibyk7Cit9CisKKy8qKgorICog YW1kZ3B1X3N2bV9wb3B1bGF0ZV9kZXZtZW1fcGZuIC0gQ29udmVydCBCTyBWUkFNIGFsbG9jYXRp b24gdG8gUEZOIGFycmF5CisgKiBAZGV2bWVtX2FsbG9jYXRpb246IFRoZSBkZXZtZW0gYWxsb2Nh dGlvbiBpbiB0aGUgYW1kZ3B1X3N2bV9ibyB3cmFwcGVyCisgKiBAbnBhZ2VzOiBOdW1iZXIgb2Yg UEZOIGVudHJpZXMgdG8gZmlsbAorICogQHBmbjogT3V0cHV0IFBGTiBhcnJheQorICoKKyAqIEl0 ZXJhdGVzIG92ZXIgdGhlIEJPJ3MgVFRNIHZyYW1fbWdyIGJ1ZGR5IGJsb2NrcyBhbmQgY29udmVy dHMgZWFjaAorICogYmxvY2sncyBWUkFNIG9mZnNldCB0byBaT05FX0RFVklDRSBQRk5zOgorICoK KyAqICAgUEZOID0gUEhZU19QRk4oYmxvY2tfb2Zmc2V0ICsgYXBhZ2VtYXAuaHBhX2Jhc2UpICsg cGFnZV9pbmRleAorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGRybV9wYWdlbWFwX21pZ3JhdGVf dG9fZGV2bWVtKCkgdG8gYnVpbGQgdGhlCisgKiBkZXN0aW5hdGlvbiBQRk4gYXJyYXkgZm9yIG1p Z3JhdGVfdm1hX3BhZ2VzKCkuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MKKyAqLworc3Rh dGljIGludAorYW1kZ3B1X3N2bV9wb3B1bGF0ZV9kZXZtZW1fcGZuKHN0cnVjdCBkcm1fcGFnZW1h cF9kZXZtZW0gKmRldm1lbV9hbGxvY2F0aW9uLAorCQkJCXVuc2lnbmVkIGxvbmcgbnBhZ2VzLCB1 bnNpZ25lZCBsb25nICpwZm4pCit7CisJc3RydWN0IGFtZGdwdV9wYWdlbWFwICpzdm1fZG0gPSB0 b19hbWRncHVfcGFnZW1hcChkZXZtZW1fYWxsb2NhdGlvbi0+ZHBhZ2VtYXApOworCXN0cnVjdCBh bWRncHVfc3ZtX2JvICpzdm1fYm8gPSB0b19hbWRncHVfc3ZtX2JvKGRldm1lbV9hbGxvY2F0aW9u KTsKKwlzdHJ1Y3QgYW1kZ3B1X2JvICpibyA9IHN2bV9iby0+Ym87CisJc3RydWN0IGFtZGdwdV9y ZXNfY3Vyc29yIGN1cnNvcjsKKwl1bnNpZ25lZCBsb25nIGkgPSAwOworCWludCByZXQ7CisKKwly ZXQgPSBhbWRncHVfYm9fcmVzZXJ2ZShibywgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiBy ZXQ7CisKKwlhbWRncHVfcmVzX2ZpcnN0KGJvLT50Ym8ucmVzb3VyY2UsIDAsIG5wYWdlcyA8PCBQ QUdFX1NISUZULCAmY3Vyc29yKTsKKwl3aGlsZSAoY3Vyc29yLnJlbWFpbmluZyAmJiBpIDwgbnBh Z2VzKSB7CisJCXU2NCBwZm5fYmFzZSA9IFBIWVNfUEZOKGN1cnNvci5zdGFydCArIHN2bV9kbS0+ aHBhX2Jhc2UpOworCQl1NjQgcGFnZXMgPSBjdXJzb3Iuc2l6ZSA+PiBQQUdFX1NISUZUOworCQl1 bnNpZ25lZCBsb25nIGo7CisKKwkJZm9yIChqID0gMDsgaiA8IHBhZ2VzICYmIGkgPCBucGFnZXM7 IGorKywgaSsrKQorCQkJcGZuW2ldID0gcGZuX2Jhc2UgKyBqOworCisJCWFtZGdwdV9yZXNfbmV4 dCgmY3Vyc29yLCBjdXJzb3Iuc2l6ZSk7CisJfQorCisJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7 CisKKwlBTURHUFVfTUlHUkFURV9UUkFDRSgicG9wdWxhdGVfZGV2bWVtX3BmbjogbnBhZ2VzPSVs dSBmaXJzdF9wZm49MHglbHhcbiIsCisJCQkgIG5wYWdlcywgbnBhZ2VzID4gMCA/IHBmblswXSA6 IDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNETUEgY29weSBoZWxwZXJzIOKAlCBHQVJUIHdp bmRvdyBiYXNlZCBkYXRhIHRyYW5zZmVyICovCisKKy8qKgorICogYW1kZ3B1X3N2bV9kaXJlY3Rf bWFwcGluZ19hZGRyIC0gQ29udmVydCBWUkFNIG9mZnNldCB0byBNQyBhZGRyZXNzCisgKiBAYWRl djogQU1ER1BVIGRldmljZQorICogQHZyYW1fb2Zmc2V0OiBCeXRlIG9mZnNldCB3aXRoaW4gVlJB TQorICoKKyAqIFJldHVybjogTUMgYWRkcmVzcyBzdWl0YWJsZSBmb3IgU0RNQSBzcmMvZHN0Cisg Ki8KK3N0YXRpYyB1NjQKK2FtZGdwdV9zdm1fZGlyZWN0X21hcHBpbmdfYWRkcihzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwgdTY0IHZyYW1fb2Zmc2V0KQoreworCXJldHVybiB2cmFtX29mZnNl dCArIGFtZGdwdV90dG1fZG9tYWluX3N0YXJ0KGFkZXYsIFRUTV9QTF9WUkFNKTsKK30KKworLyoq CisgKiBhbWRncHVfc3ZtX2dhcnRfbWFwIC0gTWFwIHN5c3RlbSBETUEgYWRkcmVzc2VzIGludG8g R0FSVCB3aW5kb3cKKyAqIEByaW5nOiBTRE1BIHJpbmcgZm9yIHRoZSBHQVJUIHVwZGF0ZSBqb2IK KyAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlcyB0byBtYXAKKyAqIEBhZGRyOiBBcnJheSBvZiBz eXN0ZW0gbWVtb3J5IERNQSBhZGRyZXNzZXMKKyAqIEBnYXJ0X2FkZHI6IE91dHB1dCDigJQgR0FS VCBiYXNlIGFkZHJlc3MgdG8gdXNlIGluIFNETUEgY29weQorICogQGZsYWdzOiBQVEUgZmxhZ3Mg KGUuZy4gd3JpdGVhYmxlIGZvciBSQU0tdG8tVlJBTSBzcmMpCisgKgorICogQnVpbGRzIEdBUlQg UFRFcyBwb2ludGluZyBhdCB0aGUgZ2l2ZW4gRE1BIGFkZHJlc3Nlcywgc3VibWl0cyBhbgorICog U0RNQSBqb2IgdG8gdXBkYXRlIHRoZSBHQVJUIGVudHJpZXMsIGFuZCByZXR1cm5zIHRoZSBHQVJU IGFkZHJlc3MKKyAqIHRoYXQgY2FuIGJlIHVzZWQgYXMgc3JjIG9yIGRzdCBpbiBhIHN1YnNlcXVl bnQgYW1kZ3B1X2NvcHlfYnVmZmVyKCkuCisgKgorICogVXNlcyBHQVJUIHdpbmRvdyAwLCBwcm90 ZWN0ZWQgYnkgZ3R0X3dpbmRvd19sb2NrLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludAorYW1kZ3B1X3N2 bV9nYXJ0X21hcChzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsCisJCSAgICAgc3RydWN0IGFtZGdw dV90dG1fYnVmZmVyX2VudGl0eSAqZW50aXR5LAorCQkgICAgIHU2NCBucGFnZXMsCisJCSAgICAg ZG1hX2FkZHJfdCAqYWRkciwgdTY0ICpnYXJ0X2FkZHIsIHU2NCBmbGFncykKK3sKKwlzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7CisJc3RydWN0IGFtZGdwdV9qb2IgKmpv YjsKKwl1bnNpZ25lZCBpbnQgbnVtX2R3LCBudW1fYnl0ZXM7CisJc3RydWN0IGRtYV9mZW5jZSAq ZmVuY2U7CisJdTY0IHNyY19hZGRyLCBkc3RfYWRkcjsKKwl1NjQgcHRlX2ZsYWdzOworCXZvaWQg KmNwdV9hZGRyOworCWludCByOworCisJLyogVXNlIGVudGl0eSdzIEdBUlQgd2luZG93IDAgKi8K KwkqZ2FydF9hZGRyID0gYW1kZ3B1X2NvbXB1dGVfZ2FydF9hZGRyZXNzKCZhZGV2LT5nbWMsIGVu dGl0eSwgMCk7CisKKwludW1fZHcgPSBBTElHTihhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jcy0+Y29w eV9udW1fZHcsIDgpOworCW51bV9ieXRlcyA9IG5wYWdlcyAqIDggKiBBTURHUFVfR1BVX1BBR0VT X0lOX0NQVV9QQUdFOworCisJciA9IGFtZGdwdV9qb2JfYWxsb2Nfd2l0aF9pYihhZGV2LCAmZW50 aXR5LT5iYXNlLAorCQkJCSAgICAgQU1ER1BVX0ZFTkNFX09XTkVSX1VOREVGSU5FRCwKKwkJCQkg ICAgIG51bV9kdyAqIDQgKyBudW1fYnl0ZXMsCisJCQkJICAgICBBTURHUFVfSUJfUE9PTF9ERUxB WUVELAorCQkJCSAgICAgJmpvYiwKKwkJCQkgICAgIEFNREdQVV9LRVJORUxfSk9CX0lEX0tGRF9H QVJUX01BUCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJc3JjX2FkZHIgPSBudW1fZHcgKiA0 OworCXNyY19hZGRyICs9IGpvYi0+aWJzWzBdLmdwdV9hZGRyOworCisJZHN0X2FkZHIgPSBhbWRn cHVfYm9fZ3B1X29mZnNldChhZGV2LT5nYXJ0LmJvKTsKKwlkc3RfYWRkciArPSAoZW50aXR5LT5n YXJ0X3dpbmRvd19vZmZzWzBdID4+IEFNREdQVV9HUFVfUEFHRV9TSElGVCkgKiA4OworCWFtZGdw dV9lbWl0X2NvcHlfYnVmZmVyKGFkZXYsICZqb2ItPmlic1swXSwgc3JjX2FkZHIsCisJCQkJZHN0 X2FkZHIsIG51bV9ieXRlcywgMCk7CisKKwlhbWRncHVfcmluZ19wYWRfaWIocmluZywgJmpvYi0+ aWJzWzBdKTsKKwlXQVJOX09OKGpvYi0+aWJzWzBdLmxlbmd0aF9kdyA+IG51bV9kdyk7CisKKwlw dGVfZmxhZ3MgPSBBTURHUFVfUFRFX1ZBTElEIHwgQU1ER1BVX1BURV9SRUFEQUJMRTsKKwlwdGVf ZmxhZ3MgfD0gQU1ER1BVX1BURV9TWVNURU0gfCBBTURHUFVfUFRFX1NOT09QRUQ7CisJaWYgKGZs YWdzICYgQU1ER1BVX1BURV9XUklURUFCTEUpCisJCXB0ZV9mbGFncyB8PSBBTURHUFVfUFRFX1dS SVRFQUJMRTsKKwlwdGVfZmxhZ3MgfD0gYWRldi0+Z2FydC5nYXJ0X3B0ZV9mbGFnczsKKworCWNw dV9hZGRyID0gJmpvYi0+aWJzWzBdLnB0cltudW1fZHddOworCisJYW1kZ3B1X2dhcnRfbWFwKGFk ZXYsIDAsIG5wYWdlcywgYWRkciwgcHRlX2ZsYWdzLCBjcHVfYWRkcik7CisJZmVuY2UgPSBhbWRn cHVfam9iX3N1Ym1pdChqb2IpOworCWRtYV9mZW5jZV9wdXQoZmVuY2UpOworCisJcmV0dXJuIDA7 Cit9CisKKy8qKgorICogYW1kZ3B1X3N2bV9jb3B5X21lbW9yeV9nYXJ0IC0gU0RNQSBjb3B5IGJl dHdlZW4gc3lzdGVtIFJBTSBhbmQgVlJBTQorICogQGFkZXY6IEFNREdQVSBkZXZpY2UKKyAqIEBz eXM6IEFycmF5IG9mIERNQSBhZGRyZXNzZXMgZm9yIHN5c3RlbSBtZW1vcnkgcGFnZXMKKyAqIEB2 cmFtOiBBcnJheSBvZiBWUkFNIGJ5dGUgb2Zmc2V0cyAocmVsYXRpdmUgdG8gc3RhcnQgb2YgVlJB TSkKKyAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlcyB0byBjb3B5CisgKiBAZGlyZWN0aW9uOiBG Uk9NX1JBTV9UT19WUkFNIG9yIEZST01fVlJBTV9UT19SQU0KKyAqIEBtZmVuY2U6IEluL291dCDi gJQgY2FycmllcyB0aGUgbGFzdCBTRE1BIGZlbmNlIGZvciBzZXJpYWxpemF0aW9uCisgKgorICog TWFwcyBzeXN0ZW0gbWVtb3J5IHBhZ2VzIGludG8gdGhlIEdBUlQgd2luZG93IGFuZCB1c2VzIFNE TUEgdG8gY29weQorICogZGF0YSB0by9mcm9tIFZSQU0uIEhhbmRsZXMgc3BsaXR0aW5nIGludG8g QU1ER1BVX0dUVF9NQVhfVFJBTlNGRVJfU0laRQorICogY2h1bmtzLiBBY3F1aXJlcyBlbnRpdHkt PmxvY2sgaW50ZXJuYWxseSB0byBwcm90ZWN0IHRoZSBHQVJUIHdpbmRvdywKKyAqIG1hdGNoaW5n IHRoZSBLRkQgc3ZtX21pZ3JhdGVfY29weV9tZW1vcnlfZ2FydCgpIHBhdHRlcm4uCisgKgorICog UmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICov CitzdGF0aWMgaW50CithbWRncHVfc3ZtX2NvcHlfbWVtb3J5X2dhcnQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsIGRtYV9hZGRyX3QgKnN5cywKKwkJCSAgICB1NjQgKnZyYW0sIHU2NCBucGFn ZXMsIGludCBkaXJlY3Rpb24sCisJCQkgICAgc3RydWN0IGRtYV9mZW5jZSAqKm1mZW5jZSkKK3sK Kwljb25zdCB1NjQgbWF4X3BhZ2VzID0gQU1ER1BVX0dUVF9NQVhfVFJBTlNGRVJfU0laRTsKKwlz dHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcgPSBhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jc19yaW5nOwor CXN0cnVjdCBhbWRncHVfdHRtX2J1ZmZlcl9lbnRpdHkgKmVudGl0eSA9ICZhZGV2LT5tbWFuLm1v dmVfZW50aXR5OworCXU2NCBnYXJ0X3MsIGdhcnRfZDsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpuZXh0 OworCXU2NCBzaXplOworCWludCByOworCisJbXV0ZXhfbG9jaygmZW50aXR5LT5sb2NrKTsKKwor CXdoaWxlIChucGFnZXMpIHsKKwkJc2l6ZSA9IG1pbihtYXhfcGFnZXMsIG5wYWdlcyk7CisKKwkJ aWYgKGRpcmVjdGlvbiA9PSBGUk9NX1ZSQU1fVE9fUkFNKSB7CisJCQlnYXJ0X3MgPSBhbWRncHVf c3ZtX2RpcmVjdF9tYXBwaW5nX2FkZHIoYWRldiwgKnZyYW0pOworCQkJciA9IGFtZGdwdV9zdm1f Z2FydF9tYXAocmluZywgZW50aXR5LCBzaXplLCBzeXMsCisJCQkJCQkmZ2FydF9kLCBBTURHUFVf UFRFX1dSSVRFQUJMRSk7CisJCX0gZWxzZSB7CisJCQlyID0gYW1kZ3B1X3N2bV9nYXJ0X21hcChy aW5nLCBlbnRpdHksIHNpemUsIHN5cywKKwkJCQkJCSZnYXJ0X3MsIDApOworCQkJZ2FydF9kID0g YW1kZ3B1X3N2bV9kaXJlY3RfbWFwcGluZ19hZGRyKGFkZXYsICp2cmFtKTsKKwkJfQorCQlpZiAo cikgeworCQkJZGV2X2VycihhZGV2LT5kZXYsICJmYWlsZWQgJWQgdG8gbWFwIEdBUlQgZm9yIFNE TUFcbiIsIHIpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisKKwkJQU1ER1BVX01JR1JBVEVf VFJBQ0UoIlNETUFfQ09QWTogJXMgbnBhZ2VzPSVsbHUgdnJhbV9vZmY9MHglbGx4XG4iLAorCQkJ CSAgZGlyZWN0aW9uID09IEZST01fUkFNX1RPX1ZSQU0gPyAiUkFNLT5WUkFNIiA6ICJWUkFNLT5S QU0iLAorCQkJCSAgc2l6ZSwgKHU2NCkqdnJhbSk7CisKKwkJciA9IGFtZGdwdV9jb3B5X2J1ZmZl cihhZGV2LCBlbnRpdHksIGdhcnRfcywgZ2FydF9kLAorCQkJCSAgICAgICBzaXplICogUEFHRV9T SVpFLAorCQkJCSAgICAgICBOVUxMLCAmbmV4dCwgdHJ1ZSwgMCk7CisJCWlmIChyKSB7CisJCQlk ZXZfZXJyKGFkZXYtPmRldiwgImZhaWxlZCAlZCB0byBjb3B5IGJ1ZmZlclxuIiwgcik7CisJCQln b3RvIG91dF91bmxvY2s7CisJCX0KKworCQlkbWFfZmVuY2VfcHV0KCptZmVuY2UpOworCQkqbWZl bmNlID0gbmV4dDsKKwkJbnBhZ2VzIC09IHNpemU7CisJCWlmIChucGFnZXMpIHsKKwkJCXN5cyAr PSBzaXplOworCQkJdnJhbSArPSBzaXplOworCQl9CisJfQorCitvdXRfdW5sb2NrOgorCW11dGV4 X3VubG9jaygmZW50aXR5LT5sb2NrKTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIGFtZGdw dV9zdm1fY29weV90b19kZXZtZW0gLSBTRE1BIGNvcHkgc3lzdGVtIG1lbW9yeSAtPiBWUkFNCisg KiBAcGFnZXM6IEFycmF5IG9mIGRlc3RpbmF0aW9uIFpPTkVfREVWSUNFIHBhZ2VzIChWUkFNLWJh Y2tlZCkKKyAqIEBwYWdlbWFwX2FkZHI6IEFycmF5IG9mIHNvdXJjZSBETUEgYWRkcmVzc2VzIChz eXN0ZW0gbWVtb3J5LCBhbHJlYWR5IG1hcHBlZCkKKyAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdl cyB0byBjb3B5CisgKgorICogQnVpbGRzIHBhcmFsbGVsIHN5c1tdIGFuZCB2cmFtW10gYXJyYXlz IGZyb20gdGhlIGZyYW1ld29yay1wcm92aWRlZAorICogcGFnZW1hcF9hZGRyIGFuZCBkZXZpY2Ug cGFnZXMsIHRoZW4gc3VibWl0cyBiYXRjaGVkIFNETUEgY29waWVzIHZpYQorICogdGhlIEdBUlQg d2luZG93LgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2Rl IG9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludAorYW1kZ3B1X3N2bV9jb3B5X3RvX2Rldm1lbShz dHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkJICAgc3RydWN0IGRybV9wYWdlbWFwX2FkZHIgKnBhZ2Vt YXBfYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzLAorCQkJICAgc3RydWN0IGRtYV9m ZW5jZSAqcHJlX21pZ3JhdGVfZmVuY2UpCit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXY7 CisJc3RydWN0IGFtZGdwdV9wYWdlbWFwICpzdm1fZG07CisJc3RydWN0IGRtYV9mZW5jZSAqbWZl bmNlID0gTlVMTDsKKwlkbWFfYWRkcl90ICpzeXM7CisJdTY0ICp2cmFtOworCXVuc2lnbmVkIGxv bmcgaSwgajsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbnBhZ2VzKQorCQlyZXR1cm4gMDsKKwor CS8qCisJICogRmluZCB0aGUgZmlyc3Qgbm9uLU5VTEwgcGFnZSB0byBkZXJpdmUgdGhlIGRldmlj ZS4KKwkgKiBUaGUgcGFnZXMgYXJyYXkgbWF5IGNvbnRhaW4gTlVMTCBlbnRyaWVzIGZvciBwb3Np dGlvbnMgd2hlcmUKKwkgKiBubyB2YWxpZCBkZXZpY2UgcGFnZSBleGlzdHMuCisJICovCisJZm9y IChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCWlmIChwYWdlc1tpXSkKKwkJCWJyZWFrOwor CX0KKwlpZiAoaSA9PSBucGFnZXMpCisJCXJldHVybiAwOworCisJc3ZtX2RtID0gYW1kZ3B1X3N2 bV9wYWdlX3RvX2FwYWdlbWFwKHBhZ2VzW2ldKTsKKwlhZGV2ID0gc3ZtX2RtLT5hZGV2OworCisJ c3lzID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKnN5cyksIEdGUF9LRVJORUwpOworCXZyYW0g PSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqdnJhbSksIEdGUF9LRVJORUwpOworCWlmICghc3lz IHx8ICF2cmFtKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJ Zm9yIChpID0gMCwgaiA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQlpZiAoIXBhZ2VtYXBfYWRk cltpXS5hZGRyKQorCQkJZ290byBmbHVzaDsKKworCQlzeXNbal0gPSBwYWdlbWFwX2FkZHJbaV0u YWRkcjsKKwkJdnJhbVtqXSA9ICgodTY0KXBhZ2VfdG9fcGZuKHBhZ2VzW2ldKSA8PCBQQUdFX1NI SUZUKSAtCisJCQkgIHN2bV9kbS0+aHBhX2Jhc2U7CisKKwkJLyogQ2hlY2sgaWYgbmV4dCB2cmFt IHBhZ2UgaXMgY29udGlndW91cyB3aXRoIGN1cnJlbnQgKi8KKwkJaWYgKGogPiAwICYmIHZyYW1b al0gIT0gdnJhbVtqIC0gMV0gKyBQQUdFX1NJWkUpCisJCQlnb3RvIGZsdXNoOworCisJCWorKzsK KwkJY29udGludWU7CitmbHVzaDoKKwkJaWYgKGopIHsKKwkJCXJldCA9IGFtZGdwdV9zdm1fY29w eV9tZW1vcnlfZ2FydChhZGV2LCBzeXMsIHZyYW0sIGosCisJCQkJCQkJICBGUk9NX1JBTV9UT19W UkFNLAorCQkJCQkJCSAgJm1mZW5jZSk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0X2ZlbmNl OworCQkJaiA9IDA7CisJCX0KKwkJLyogUmUtcHJvY2VzcyBjdXJyZW50IHBhZ2UgaWYgaXQgd2Fz IHZhbGlkIGJ1dCBicm9rZSBjb250aWd1aXR5ICovCisJCWlmIChwYWdlbWFwX2FkZHJbaV0uYWRk cikgeworCQkJc3lzWzBdID0gcGFnZW1hcF9hZGRyW2ldLmFkZHI7CisJCQl2cmFtWzBdID0gKCh1 NjQpcGFnZV90b19wZm4ocGFnZXNbaV0pIDw8IFBBR0VfU0hJRlQpIC0KKwkJCQkgIHN2bV9kbS0+ aHBhX2Jhc2U7CisJCQlqID0gMTsKKwkJfQorCX0KKworCS8qIEZsdXNoIHJlbWFpbmluZyBiYXRj aCAqLworCWlmIChqKQorCQlyZXQgPSBhbWRncHVfc3ZtX2NvcHlfbWVtb3J5X2dhcnQoYWRldiwg c3lzLCB2cmFtLCBqLAorCQkJCQkJICBGUk9NX1JBTV9UT19WUkFNLCAmbWZlbmNlKTsKKworb3V0 X2ZlbmNlOgorCWlmIChtZmVuY2UpIHsKKwkJZG1hX2ZlbmNlX3dhaXQobWZlbmNlLCBmYWxzZSk7 CisJCWRtYV9mZW5jZV9wdXQobWZlbmNlKTsKKwl9CisKKwlBTURHUFVfTUlHUkFURV9UUkFDRSgi Y29weV90b19kZXZtZW0gZG9uZTogbnBhZ2VzPSVsZCByZXQ9JWRcbiIsCisJCQkgIG5wYWdlcywg cmV0KTsKKworb3V0X2ZyZWU6CisJa3ZmcmVlKHZyYW0pOworCWt2ZnJlZShzeXMpOworCXJldHVy biByZXQ7Cit9CisKKy8qKgorICogYW1kZ3B1X3N2bV9jb3B5X3RvX3JhbSAtIFNETUEgY29weSBW UkFNIC0+IHN5c3RlbSBtZW1vcnkKKyAqIEBwYWdlczogQXJyYXkgb2Ygc291cmNlIFpPTkVfREVW SUNFIHBhZ2VzIChWUkFNLWJhY2tlZCkKKyAqIEBwYWdlbWFwX2FkZHI6IEFycmF5IG9mIGRlc3Rp bmF0aW9uIERNQSBhZGRyZXNzZXMgKHN5c3RlbSBtZW1vcnksIGFscmVhZHkgbWFwcGVkKQorICog QG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkKKyAqCisgKiBNaXJyb3Igb2YgY29weV90 b19kZXZtZW0gd2l0aCBzcmMvZHN0IHN3YXBwZWQuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nl c3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50CithbWRn cHVfc3ZtX2NvcHlfdG9fcmFtKHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQlzdHJ1Y3QgZHJtX3Bh Z2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLAorCQkJdW5zaWduZWQgbG9uZyBucGFnZXMsCisJCQlz dHJ1Y3QgZG1hX2ZlbmNlICpwcmVfbWlncmF0ZV9mZW5jZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldjsKKwlzdHJ1Y3QgYW1kZ3B1X3BhZ2VtYXAgKnN2bV9kbTsKKwlzdHJ1Y3QgZG1h X2ZlbmNlICptZmVuY2UgPSBOVUxMOworCWRtYV9hZGRyX3QgKnN5czsKKwl1NjQgKnZyYW07CisJ dW5zaWduZWQgbG9uZyBpLCBqOworCWludCByZXQgPSAwOworCisJaWYgKCFucGFnZXMpCisJCXJl dHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJCWlmIChwYWdlc1tp XSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBucGFnZXMpCisJCXJldHVybiAwOworCisJc3Zt X2RtID0gYW1kZ3B1X3N2bV9wYWdlX3RvX2FwYWdlbWFwKHBhZ2VzW2ldKTsKKwlhZGV2ID0gc3Zt X2RtLT5hZGV2OworCisJc3lzID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKnN5cyksIEdGUF9L RVJORUwpOworCXZyYW0gPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqdnJhbSksIEdGUF9LRVJO RUwpOworCWlmICghc3lzIHx8ICF2cmFtKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0 X2ZyZWU7CisJfQorCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBucGFnZXM7IGkrKykgeworCQlp ZiAoIXBhZ2VtYXBfYWRkcltpXS5hZGRyIHx8ICFwYWdlc1tpXSkKKwkJCWdvdG8gZmx1c2g7CisK KwkJdnJhbVtqXSA9ICgodTY0KXBhZ2VfdG9fcGZuKHBhZ2VzW2ldKSA8PCBQQUdFX1NISUZUKSAt CisJCQkgIHN2bV9kbS0+aHBhX2Jhc2U7CisJCXN5c1tqXSA9IHBhZ2VtYXBfYWRkcltpXS5hZGRy OworCisJCS8qIENoZWNrIGlmIG5leHQgdnJhbSBwYWdlIGlzIGNvbnRpZ3VvdXMgd2l0aCBjdXJy ZW50ICovCisJCWlmIChqID4gMCAmJiB2cmFtW2pdICE9IHZyYW1baiAtIDFdICsgUEFHRV9TSVpF KQorCQkJZ290byBmbHVzaDsKKworCQlqKys7CisJCWNvbnRpbnVlOworZmx1c2g6CisJCWlmIChq KSB7CisJCQlyZXQgPSBhbWRncHVfc3ZtX2NvcHlfbWVtb3J5X2dhcnQoYWRldiwgc3lzLCB2cmFt LCBqLAorCQkJCQkJCSAgRlJPTV9WUkFNX1RPX1JBTSwKKwkJCQkJCQkgICZtZmVuY2UpOworCQkJ aWYgKHJldCkKKwkJCQlnb3RvIG91dF9mZW5jZTsKKwkJCWogPSAwOworCQl9CisJCS8qIFJlLXBy b2Nlc3MgY3VycmVudCBwYWdlIGlmIGl0IHdhcyB2YWxpZCBidXQgYnJva2UgY29udGlndWl0eSAq LworCQlpZiAocGFnZW1hcF9hZGRyW2ldLmFkZHIgJiYgcGFnZXNbaV0pIHsKKwkJCXZyYW1bMF0g PSAoKHU2NClwYWdlX3RvX3BmbihwYWdlc1tpXSkgPDwgUEFHRV9TSElGVCkgLQorCQkJCSAgc3Zt X2RtLT5ocGFfYmFzZTsKKwkJCXN5c1swXSA9IHBhZ2VtYXBfYWRkcltpXS5hZGRyOworCQkJaiA9 IDE7CisJCX0KKwl9CisKKwkvKiBGbHVzaCByZW1haW5pbmcgYmF0Y2ggKi8KKwlpZiAoaikKKwkJ cmV0ID0gYW1kZ3B1X3N2bV9jb3B5X21lbW9yeV9nYXJ0KGFkZXYsIHN5cywgdnJhbSwgaiwKKwkJ CQkJCSAgRlJPTV9WUkFNX1RPX1JBTSwgJm1mZW5jZSk7CisKK291dF9mZW5jZToKKwlpZiAobWZl bmNlKSB7CisJCWRtYV9mZW5jZV93YWl0KG1mZW5jZSwgZmFsc2UpOworCQlkbWFfZmVuY2VfcHV0 KG1mZW5jZSk7CisJfQorCisJQU1ER1BVX01JR1JBVEVfVFJBQ0UoImNvcHlfdG9fcmFtIGRvbmU6 IG5wYWdlcz0lbGQgcmV0PSVkXG4iLCBucGFnZXMsIHJldCk7CisKK291dF9mcmVlOgorCWt2ZnJl ZSh2cmFtKTsKKwlrdmZyZWUoc3lzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbV9vcHMgYW1kZ3B1X3BhZ2VtYXBfb3BzID0geworCS5k ZXZtZW1fcmVsZWFzZSAgICAgID0gYW1kZ3B1X3N2bV9kZXZtZW1fcmVsZWFzZSwKKwkucG9wdWxh dGVfZGV2bWVtX3BmbiA9IGFtZGdwdV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbiwKKwkuY29weV90 b19kZXZtZW0gICAgICA9IGFtZGdwdV9zdm1fY29weV90b19kZXZtZW0sCisJLmNvcHlfdG9fcmFt ICAgICAgICAgPSBhbWRncHVfc3ZtX2NvcHlfdG9fcmFtLAorfTsKKworLyogZHJtX3BhZ2VtYXBf b3BzIOKAlCB0b3AtbGV2ZWwgbWlncmF0aW9uIGVudHJ5IHBvaW50cyAqLworCisvKioKKyAqIGFt ZGdwdV9zdm1fZGV2aWNlX21hcCAtIENvbnZlcnQgWk9ORV9ERVZJQ0UgcGFnZSB0byBHUFUgUFRF IGFkZHJlc3MKKyAqIEBkcGFnZW1hcDogVGhlIGRybV9wYWdlbWFwIGZvciB0aGlzIGRldmljZQor ICogQGRldjogUmVxdWVzdGluZyBkZXZpY2UgKGZvciBQMlAgY2hlY2spCisgKiBAcGFnZTogWk9O RV9ERVZJQ0UgcGFnZSBiYWNrZWQgYnkgVlJBTQorICogQG9yZGVyOiBQYWdlIG9yZGVyICgwID0g NEssIDkgPSAyTSwgZXRjLikKKyAqIEBkaXI6IERNQSBkaXJlY3Rpb24gKHVudXNlZCBmb3IgbG9j YWwgVlJBTSkKKyAqCisgKiBBZGRyZXNzIGNvbnZlcnNpb24gY2hhaW46CisgKiAgIHBhZ2UgLT4g UEZOIC0+IEhQQSAtPiBWUkFNIG9mZnNldCAtPiBQVEUgYWRkcmVzcworICoKKyAqICAgSFBBID0g cGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVAorICogICBWUkFNIG9mZnNldCA9IEhQQSAt IGFwYWdlbWFwLmhwYV9iYXNlCisgKiAgIFBURSBhZGRyZXNzID0gVlJBTSBvZmZzZXQgKyBhZGV2 LT52bV9tYW5hZ2VyLnZyYW1fYmFzZV9vZmZzZXQKKyAqCisgKiBSZXR1cm46IGRybV9wYWdlbWFw X2FkZHIgd2l0aCBQVEUgYWRkcmVzcyBhbmQgQU1ER1BVX0lOVEVSQ09OTkVDVF9WUkFNIHByb3Rv Y29sCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkcgorYW1kZ3B1X3N2bV9kZXZp Y2VfbWFwKHN0cnVjdCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsCisJCSAgICAgICBzdHJ1Y3QgZGV2 aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJICAgICAgIHVuc2lnbmVk IGludCBvcmRlciwKKwkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlz dHJ1Y3QgYW1kZ3B1X3BhZ2VtYXAgKnN2bV9kbSA9IHRvX2FtZGdwdV9wYWdlbWFwKGRwYWdlbWFw KTsKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRwYWdlbWFwX3RvX2FkZXYoZHBhZ2Vt YXApOworCWRtYV9hZGRyX3QgYWRkcjsKKworCWlmIChkcGFnZW1hcC0+ZHJtLT5kZXYgPT0gZGV2 KSB7CisJCS8qIFNhbWUgZGV2aWNlOiByZXR1cm4gVlJBTSBQVEUgYWRkcmVzcyAqLworCQl1NjQg aHBhID0gKHU2NClwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUOworCQl1NjQgdnJhbV9v ZmZzZXQgPSBocGEgLSBzdm1fZG0tPmhwYV9iYXNlOworCisJCWFkZHIgPSB2cmFtX29mZnNldCAr IGFkZXYtPnZtX21hbmFnZXIudnJhbV9iYXNlX29mZnNldDsKKwl9IGVsc2UgeworCQkvKiBDcm9z cy1kZXZpY2UgUDJQOiBub3QgeWV0IHN1cHBvcnRlZCAqLworCQlhZGRyID0gRE1BX01BUFBJTkdf RVJST1I7CisJfQorCisJcmV0dXJuIGRybV9wYWdlbWFwX2FkZHJfZW5jb2RlKGFkZHIsCisJCQkJ QU1ER1BVX0lOVEVSQ09OTkVDVF9WUkFNLCBvcmRlciwgZGlyKTsKK30KKworLyoqCisgKiBhbWRn cHVfc3ZtX2JvX2FsbG9jIC0gQWxsb2NhdGUgYW4gYW1kZ3B1X3N2bV9ibyB3cmFwcGVyIHdpdGgg VlJBTSBiYWNraW5nCisgKiBAYWRldjogQU1ER1BVIGRldmljZQorICogQGRwYWdlbWFwOiBUaGUg ZHJtX3BhZ2VtYXAgZm9yIHRoaXMgZGV2aWNlCisgKiBAbW06IG1tX3N0cnVjdCBvZiB0aGUgb3du aW5nIHByb2Nlc3MKKyAqIEBzaXplOiBBbGxvY2F0aW9uIHNpemUgaW4gYnl0ZXMKKyAqCisgKiBS ZXR1cm46IFBvaW50ZXIgdG8gYWxsb2NhdGVkIGFtZGdwdV9zdm1fYm8gb24gc3VjY2VzcywgRVJS X1BUUiBvbiBmYWlsdXJlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYW1kZ3B1X3N2bV9ibyAqCithbWRn cHVfc3ZtX2JvX2FsbG9jKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAorCQkgICAgIHN0cnVj dCBkcm1fcGFnZW1hcCAqZHBhZ2VtYXAsCisJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVu c2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X3N2bV9ibyAqc3ZtX2JvOworCXN0 cnVjdCBhbWRncHVfYm9fcGFyYW0gYnAgPSB7fTsKKwlzdHJ1Y3QgYW1kZ3B1X2JvICpibzsKKwlp bnQgcmV0OworCisJc3ZtX2JvID0ga3phbGxvYyhzaXplb2YoKnN2bV9ibyksIEdGUF9LRVJORUwp OworCWlmICghc3ZtX2JvKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWJwLnNpemUg PSBzaXplOworCWJwLmJvX3B0cl9zaXplID0gc2l6ZW9mKHN0cnVjdCBhbWRncHVfYm8pOworCWJw LmRvbWFpbiA9IEFNREdQVV9HRU1fRE9NQUlOX1ZSQU07CisJYnAudHlwZSA9IHR0bV9ib190eXBl X2RldmljZTsKKwlicC5mbGFncyA9IEFNREdQVV9HRU1fQ1JFQVRFX05PX0NQVV9BQ0NFU1MgfAor CQkgICBBTURHUFVfR0VNX0NSRUFURV9WUkFNX0NPTlRJR1VPVVMgfAorCQkgICBBTURHUFVfR0VN X0NSRUFURV9WUkFNX0NMRUFSRUQ7CisKKwlyZXQgPSBhbWRncHVfYm9fY3JlYXRlKGFkZXYsICZi cCwgJmJvKTsKKwlpZiAocmV0KSB7CisJCUFNREdQVV9NSUdSQVRFX1RSQUNFKCJGYWlsZWQgdG8g Y3JlYXRlIFNWTSBCT1xuIik7CisJCWtmcmVlKHN2bV9ibyk7CisJCXJldHVybiBFUlJfUFRSKHJl dCk7CisJfQorCisJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7CisJc3ZtX2JvLT5ibyA9IGJvOwor CisJZHJtX3BhZ2VtYXBfZGV2bWVtX2luaXQoJnN2bV9iby0+ZGV2bWVtLAorCQkJCWFkZXYtPmRl diwgbW0sCisJCQkJJmFtZGdwdV9wYWdlbWFwX29wcywKKwkJCQlkcGFnZW1hcCwgc2l6ZSwgTlVM TCk7CisKKwlyZXR1cm4gc3ZtX2JvOworfQorCisvKioKKyAqIGFtZGdwdV9zdm1fcG9wdWxhdGVf bW0gLSBBbGxvY2F0ZSBWUkFNIEJPIGFuZCBtaWdyYXRlIHBhZ2VzCisgKiBAZHBhZ2VtYXA6IFRo ZSBkcm1fcGFnZW1hcCBmb3IgdGhpcyBkZXZpY2UKKyAqIEBzdGFydDogU3RhcnQgdmlydHVhbCBh ZGRyZXNzIG9mIHRoZSByYW5nZSB0byBtaWdyYXRlCisgKiBAZW5kOiBFbmQgdmlydHVhbCBhZGRy ZXNzIChleGNsdXNpdmUpCisgKiBAbW06IG1tX3N0cnVjdCBvZiB0aGUgb3duaW5nIHByb2Nlc3MK KyAqIEB0aW1lc2xpY2VfbXM6IE1heGltdW0gdGltZSB0byBzcGVuZCBtaWdyYXRpbmcgKGZvciBm YWlybmVzcykKKyAqCisgKiBDb3JlIG1pZ3JhdGlvbiBlbnRyeSBwb2ludCBjYWxsZWQgYnkgZHJt X3BhZ2VtYXBfcG9wdWxhdGVfbW0oKS4KKyAqIEFsbG9jYXRlcyBhbiBhbWRncHVfc3ZtX2JvIHZp YSBhbWRncHVfc3ZtX2JvX2FsbG9jKCksIHRoZW4gY2FsbHMKKyAqIGRybV9wYWdlbWFwX21pZ3Jh dGVfdG9fZGV2bWVtKCkgdG8gZXhlY3V0ZSB0aGUgYWN0dWFsIG1pZ3JhdGlvbi4KKyAqCisgKiBS ZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlCisgKi8K K3N0YXRpYyBpbnQKK2FtZGdwdV9zdm1fcG9wdWxhdGVfbW0oc3RydWN0IGRybV9wYWdlbWFwICpk cGFnZW1hcCwKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJ c3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQl1bnNpZ25lZCBsb25nIHRpbWVzbGljZV9tcykKK3sK KwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGRwYWdlbWFwX3RvX2FkZXYoZHBhZ2VtYXAp OworCXN0cnVjdCBkcm1fcGFnZW1hcF9taWdyYXRlX2RldGFpbHMgbWRldGFpbHMgPSB7CisJCS50 aW1lc2xpY2VfbXMgPSB0aW1lc2xpY2VfbXMsCisJfTsKKwlzdHJ1Y3QgYW1kZ3B1X3N2bV9ibyAq c3ZtX2JvOworCWludCByZXQ7CisKKwlzdm1fYm8gPSBhbWRncHVfc3ZtX2JvX2FsbG9jKGFkZXYs IGRwYWdlbWFwLCBtbSwgZW5kIC0gc3RhcnQpOworCWlmIChJU19FUlIoc3ZtX2JvKSkKKwkJcmV0 dXJuIFBUUl9FUlIoc3ZtX2JvKTsKKworCUFNREdQVV9NSUdSQVRFX1RSQUNFKCJwb3B1bGF0ZV9t bTogWzB4JWx4LTB4JWx4XSBzaXplPSVsdVxuIiwKKwkJCSAgc3RhcnQsIGVuZCwgZW5kIC0gc3Rh cnQpOworCisJcmV0ID0gZHJtX3BhZ2VtYXBfbWlncmF0ZV90b19kZXZtZW0oJnN2bV9iby0+ZGV2 bWVtLAorCQkJCQkgICAgIG1tLCBzdGFydCwgZW5kLAorCQkJCQkgICAgICZtZGV0YWlscyk7CisK KwlyZXR1cm4gcmV0OworfQogCi1jb25zdCBzdHJ1Y3QgZHJtX3BhZ2VtYXBfb3BzIGFtZGdwdV9z dm1fZHJtX3BhZ2VtYXBfb3BzID0geyB9OworY29uc3Qgc3RydWN0IGRybV9wYWdlbWFwX29wcyBh bWRncHVfc3ZtX2RybV9wYWdlbWFwX29wcyA9IHsKKwkuZGV2aWNlX21hcCA9IGFtZGdwdV9zdm1f ZGV2aWNlX21hcCwKKwkucG9wdWxhdGVfbW0gPSBhbWRncHVfc3ZtX3BvcHVsYXRlX21tLAorfTsK IAogLyoqCiAgKiBhbWRncHVfc3ZtX21pZ3JhdGlvbl9pbml0IC0gUmVnaXN0ZXIgWk9ORV9ERVZJ Q0UgYW5kIGluaXRpYWxpemUgZHJtX3BhZ2VtYXAKLS0gCjIuMzQuMQoK