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 A808DFF8864 for ; Mon, 27 Apr 2026 22:20:41 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 07D6F10E98D; Mon, 27 Apr 2026 22:20:41 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.b="kavlgKA8"; dkim-atps=neutral Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010052.outbound.protection.outlook.com [40.93.198.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id D718F10E98B; Mon, 27 Apr 2026 22:20:38 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rXSvVWvQOxk7VhtbWV2rKAoILgPfVd95pRHv90/b0OivuKYfv8u3P6SXd7npkq5jYuWSVt4I3HNuDsgQ+ezIVSSWIOww4muqXb/nhCyKdsesggD2N0HWRzNN1aJPBtnQn06+q+MhxolUMp3lBNWLrilUfcIvTcHHq//isARG9dNshNpo4+Xe47a6ynrqUqkzijM7mYDr3ENBKb/6Ak9b2Sv9isn3E5Ek/Rk8V/tEQDW38JVLNGAdTjjP+G5s6Yz4aTrH8p2BhAUQGD2wi4p7jhNqTJ6c+NCnq/rrlov91b1g+Wir2aa/7Ur7DpRvUfXdFMec21hZFFAdD/JbYRUJqQ== 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=qSSVyh3rDAZLenSi6Sjitr6B/+OB5zSr0L4yfD9rf3Y=; b=ZkrzOW6viqIyY7gSIgb5czyrYcDCsnQ6wftC5b6jmAoM9olw4hXMks9Q0j7Z6dg4zLdxAEdV8hefxBrca4cdge4cMRGRGN7Uhs2aBvzEDwR38DwptCXJIXK8q+jVQKVa9/zQVquAYrPPYoKJV/n4M3CvbkKu9UvBvPBPCyxevvKWdthXXJOUVdP5+X/0FRe/um9el5r4Ffax2JEaWrCbfGNFf5HBZAUSXb6Qh+VrNMvX4mEiKEuHYdXik19SXy9y5bgqu1tsp+RhSn8rXyGB580lz2xfVAXeP4JIrMQRTxLqy/ye+Ulen7HR6zmatXqOjvcKgCd6iqMy9p0lAFRNOg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none 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=qSSVyh3rDAZLenSi6Sjitr6B/+OB5zSr0L4yfD9rf3Y=; b=kavlgKA8oJFZ9OrI4Ig8ZjnUJG5Fzpo1sX6w8HFQwBXSh+nfLFQMAjjzpQ0u2ce1OFttlySQSosVjz3SeO+6O5NMqVTpJAOEuW9jOHRwLT6hoN4qEdI69UcXsuHisXArNNFT27Anr6re+cp0EpYgQRGVDd2gze5Ov2OfkYlUGKA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from BL1PR12MB5112.namprd12.prod.outlook.com (2603:10b6:208:316::16) by DS0PR12MB8454.namprd12.prod.outlook.com (2603:10b6:8:15e::10) 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 22:20:35 +0000 Received: from BL1PR12MB5112.namprd12.prod.outlook.com ([fe80::d977:95c9:e89:ff27]) by BL1PR12MB5112.namprd12.prod.outlook.com ([fe80::d977:95c9:e89:ff27%6]) with mapi id 15.20.9870.013; Mon, 27 Apr 2026 22:20:34 +0000 Message-ID: <9d223506-c424-4519-a3d5-e729468d88f5@amd.com> Date: Mon, 27 Apr 2026 18:20:32 -0400 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 2/5] drm/amdgpu: implement drm_pagemap SDMA migration callbacks To: Junhua Shen , Alexander.Deucher@amd.com, Christian.Koenig@amd.com, Oak.Zeng@amd.com, Jenny-Jing.Liu@amd.com, Philip.Yang@amd.com, Xiaogang.Chen@amd.com, Ray.Huang@amd.com, honglei1.huang@amd.com, Lingshan.Zhu@amd.com Cc: amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20260427100522.7014-1-Junhua.Shen@amd.com> <20260427100522.7014-3-Junhua.Shen@amd.com> Content-Language: en-US From: Felix Kuehling Organization: AMD Inc. In-Reply-To: <20260427100522.7014-3-Junhua.Shen@amd.com> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-ClientProxiedBy: YT4PR01CA0214.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:ad::21) To BL1PR12MB5112.namprd12.prod.outlook.com (2603:10b6:208:316::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL1PR12MB5112:EE_|DS0PR12MB8454:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f07f8c6-04b4-4696-01bb-08dea4ab3361 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|366016|1800799024|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: 0sQmi6MynbbeLFP0Xo2XDMTgnGBx0vdgkj33U/q38pQGw9ULljtnQoM9vlbpLquvN2bqaw/AmHSu6t4FEc6lqa4xdZzymmYSIIkCL1pS1+6TxPXrJAv5ZKcKd0KXexFRYyo1SQmvQ8Zr5CUatefEzphrdNFwmfN67YlZs1ynYoLnSIhXKcgNn8KMVNmP59ivgAh9aTXuG7q7nkGOZh0xGp9O6NQbAfT90qja86xKctXYV8mFmi54yMxGCziqMILPmV2s2nBK6ACT1TSomf5XWiUQ9FTtbgW7vui+ahq6kLiyohCOOYCt9FKz5ys6CcqAyOIFbZbqE7nuj6pZQnC0/i19Lv46dVRU9NGlNW9DnqSn1fQT/V8moDRwSfLbra2rv3dYzo4hZczS3r/q/vne9vjK5D4Q7WVU4lVwWHKB/kemYPe83m9R3/vMWgX+Ea1ak9/kXr+NxOE8yB367X9HBPjnSHESwE4Yukm4TQ2+Iqvf3pYIdH13ky5BgHpDdlxoVtKBmQAmDNSHRKJWa9d73pUiO25goKOl1mBupJZUSuhNmAFPf/v2KzRScOJZ7OHUnCA6ZqRgPJOvYe2xZ+D0pjncUKd7OeF5g/bAxSskP8MntODagIXJn1PtLDQCoy/G2PwbTLlmKfoQ8MAXSPIdkxrGsdlKM3x9oc4krkDyJ/imwrLXsaR0CPRNCiH34E5iLF+EnTZnLIoXUS4eafSofOPEiD8VnI07PN8ma5jb+IebrKG/eNx72COH3qNrQX4ZrE3HfWf2NLBXdO1nBo0gRA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BL1PR12MB5112.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024)(56012099003)(22082099003)(18002099003)(921020); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TWxPN0orZXJqNWxWMkpHRi84Ymw0TFJaTmVydHNUOEdCazRGVjY0cTdrcTVJ?= =?utf-8?B?QW9CQlNkOUhFUlQrdkp3Rm4vYTI3UFBXSmc2Rk03TjIvQ3V2cytwdzFGZW14?= =?utf-8?B?TkdQMGgvZ0tmU1hMUUVNaEMzVmVoR0NyM3BXNFk5a01iV1dBd2g2b1dmKzRk?= =?utf-8?B?NlBhdkdCWjBkRTJSUWlnT2Uxdmk4ZnlxR0Y5aTFRMkIvNHBZTHc5QUcrS21J?= =?utf-8?B?VXVCWm1sOGFhVDVvVnFmZGZHeGFKV3VVUTlMRVZWc0JleDQvd2d5VU5yWDZY?= =?utf-8?B?b0R1ZEdGQnpHYWVrMjBNaCsxekR2NHpIT0hiUmQydXM4QXd0UjlyWmJSWEt1?= =?utf-8?B?cFBDeXIxbDdZQmoxNHN6Y0VkeFE0bXRSQnZKLytLSzBpV2xyLzJiQkEwbVo5?= =?utf-8?B?bllvTzRLQldhVUp5Q2pYMFE1YTJyclpnYXVCaW0reHk2TWd0aUR1bDZnSkR0?= =?utf-8?B?ak1DV1dwQU9BTXl0RWxrV1pwRHliK0xzRUJVZjlGWlJvYzlEemFWd0VpVmxk?= =?utf-8?B?dm0welZCUWVRcHdGN1VoUmUwSW5qbnRqZE9aUE1jZjRIMG4rOUI3S3owZlhX?= =?utf-8?B?N3gvQTZsaVFQZ3BRNHBNOEdTQnZOZXNIY2dqVWY2VnZpbEUrM1VHblJBSnJp?= =?utf-8?B?ZTAzZXhtQnRDRjlIak5WUWlWRjVzbFkzMER5MTVOSGlqbHgyTGhsQ1hDeEJI?= =?utf-8?B?OG5rYVVxdDNuWGVwZDNYV0JrL0hwZ01tZngrWERvOGd6WGVDb0dXWTZFSll0?= =?utf-8?B?K0dFL1JMMnFlY29QTHFLL05qUjdtRFZYUzgwM2Y5VEtMeE5rVWsrRHhLWS9O?= =?utf-8?B?bUZSWEg2UGN3RTAxZDZURnBLOENCZWhOd3BXOFo5WDVGTFNHN1pkNHBOVjQ3?= =?utf-8?B?SE9IdEdZQWVCMWgvUmNmTjFZNGUxamFyRCt6dUVCZmRGalp3b29uUkxZdHhY?= =?utf-8?B?OGc1QzZFSTRaU2dqSHNtUDVKeklzQ2pZY0p3NEJVczZQbCtMdkxwMElGMEpO?= =?utf-8?B?ZkNjeFBaNDlKVkFXSWhuYnBFU3dLeDlZUDA1U0VSeDNiSkRBK1Avc2JNQzB3?= =?utf-8?B?aFRUYU41QzUxMW9hbk9JUms3bDlNcmgvWG1BSW9iYkp3MW5TNFpwZXcwcnAr?= =?utf-8?B?MzhQNWF2NmJtMHR0N2FvdHZOWGVWc1FBNnFycVZVdTdDQy9wNHJRdDlndEl5?= =?utf-8?B?dEIvOWp2MHIzR3NqS0h6czMrdFo5ZTVwL2xZOWlXRm9Zc3l4QkdsYUhCeHlS?= =?utf-8?B?alRESmorU1djNnphSkJRQldqTm5UTDUybWg4S0RYZGt0Q2ZibVI5ZkVpUER3?= =?utf-8?B?bW9jRGFiemRZcjE5SUhuR0U0ZlhKcDJqUXQvVy9sVFlLLzZNRVRWSzdrUUxx?= =?utf-8?B?dVNieUJSeWZaUXd5QlVYOThzUzF1ejJtUFRuQzZVSnhIbm9Fbyt1MWtkRHNC?= =?utf-8?B?aXdzU08xOENDelQ0dlVkNEhmWmV5RGZDOGNJaFNUUUFwNGZuQnZqQkhzOUxR?= =?utf-8?B?OStINzVWaWR6aHBZUDRaTER2U1ZrYmtOL0l6YUxoSThjRm9vQW9WT2tHTDR2?= =?utf-8?B?dWp3ZzA2WWNUMVlFem1CRVBDcVp3S3UrRHVFS3h2NzFLQ0hnMUFPRkZNWWpK?= =?utf-8?B?NDJSK1dxS2dDYzVrWjNxbzRiSjlzV1QyVkdNYTU5MDlIS0NWblJnaHRTb2Zr?= =?utf-8?B?ZFg3WFd6WDRqVzJaQkFVSExoUFhVZU5UMGVXaW4vYmNWandyRy9jZkdIM0t3?= =?utf-8?B?OWg4d2pnREdpbWVQUDNQazhzdmFScDRFZ1RsbnJUOURQRUpTdlN3RFZyM1BH?= =?utf-8?B?QXJhTlJDWTVVYlNYRG5lQTlMTTJWeG9yOG1FSlpZVnhSK3g3Q3BEK0lpZVFX?= =?utf-8?B?dG1GNTlZakZYUDRIWmxoVkt6VzRmakVOTDNHMDFSQU8wZUx2NDVuajZaOGdO?= =?utf-8?B?clRxYmd1WElUbEF6Kyt4YVJEMEpVczFwMjh0bDhrSXhpZXpMRDVHaVB6VFhu?= =?utf-8?B?c2xNVExqWVRqUEpvTk5hUC9uNDJIK3FjUkM5ZUJlVmVnalpoM3hzVjJ0VUxS?= =?utf-8?B?M05ZR2ZobnRGYTAxTmdEeHlSVUduWU9ZeXMxbmJJOVgzSmxMa29ZSFlnSUVs?= =?utf-8?B?aEVWWlJhNFhOWDhQbzZkdjR2Nk1VQ1I4b1ZhWCtIT0U1bkYzOTlRd2FtWlNS?= =?utf-8?B?K2V5amh2cWQ0cWFMOVcrYm03ZDI5SEdtNjlmVlFPbE1aV04xQldLSDZKa0pL?= =?utf-8?B?YXQ2SUVkejBzdUd1b2pyR2xOMWtYcWN1c1dUWW1YQU9SWGRHK1MwazN1UnUw?= =?utf-8?B?eXRlb2k3TW9xRVJyY3lkVHYyclRaWC91dEdMQ2RMUHpRRnNLTnE2UT09?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6f07f8c6-04b4-4696-01bb-08dea4ab3361 X-MS-Exchange-CrossTenant-AuthSource: BL1PR12MB5112.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Apr 2026 22:20:34.7359 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: W137y/0rYnc3EoWMJlP8Rtbl4zfvHrgqSSPgwlcqv2qmNo1UOhowc5r3FaiPjRTBLhPxcyNzLba4EQ8IINEzkA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB8454 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" Ck9uIDIwMjYtMDQtMjcgMDY6MDUsIEp1bmh1YSBTaGVuIHdyb3RlOgo+IEltcGxlbWVudCB0aGUg ZHJtX3BhZ2VtYXBfZGV2bWVtX29wcyBhbmQgZHJtX3BhZ2VtYXBfb3BzIGNhbGxiYWNrcwo+IHRo YXQgdGhlIERSTSBHUFVTVk0gbWlncmF0aW9uIGZyYW1ld29yayByZXF1aXJlczoKPgo+IGRybV9w YWdlbWFwX29wcyAodG9wLWxldmVsIGVudHJ5IHBvaW50cyk6Cj4gICAgLSBkZXZpY2VfbWFwOiAg IGNvbnZlcnQgWk9ORV9ERVZJQ0UgcGFnZSB0byBHUFUgUFRFIGFkZHJlc3MKPiAgICAtIHBvcHVs YXRlX21tOiAgYWxsb2NhdGUgVlJBTSBCTyBhbmQgdHJpZ2dlciBtaWdyYXRpb24KPgo+IGRybV9w YWdlbWFwX2Rldm1lbV9vcHMgKHBlci1CTyBtaWdyYXRpb24gbWVjaGFuaWNzKToKPiAgICAtIHBv cHVsYXRlX2Rldm1lbV9wZm46IHdhbGsgQk8gYnVkZHkgYmxvY2tzIHRvIGJ1aWxkIFBGTiBhcnJh eQo+ICAgIC0gY29weV90b19kZXZtZW06ICAgICAgU0RNQSBjb3B5IHN5c3RlbSBSQU0gLT4gVlJB TSB2aWEgR0FSVCB3aW5kb3cKPiAgICAtIGNvcHlfdG9fcmFtOiAgICAgICAgIFNETUEgY29weSBW UkFNIC0+IHN5c3RlbSBSQU0gdmlhIEdBUlQgd2luZG93Cj4gICAgLSBkZXZtZW1fcmVsZWFzZTog ICAgICBmcmVlIEJPIHdoZW4gYWxsIHBhZ2VzIG1pZ3JhdGUgYmFjawo+Cj4gU2lnbmVkLW9mZi1i eTogSnVuaHVhIFNoZW4gPEp1bmh1YS5TaGVuQGFtZC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbWlncmF0ZS5jIHwgNjE2ICsrKysrKysrKysrKysrKysr KystCj4gICAxIGZpbGUgY2hhbmdlZCwgNjEzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0p Cj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21pZ3Jh dGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9taWdyYXRlLmMKPiBpbmRl eCAxNzBlMmVhZGMxMDYuLjQyMDkyNjUxYjRkNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfbWlncmF0ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X21pZ3JhdGUuYwo+IEBAIC02NCwxMiArNjQsMjAgQEAKPiAgICNpbmNs dWRlIDxsaW51eC9tZW1yZW1hcC5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L21pZ3JhdGUuaD4KPiAg IAo+IC0jaW5jbHVkZSAiYW1kZ3B1X2FtZGtmZC5oIgo+ICAgI2luY2x1ZGUgImFtZGdwdV9taWdy YXRlLmgiCj4gICAjaW5jbHVkZSAiYW1kZ3B1LmgiCj4gKyNpbmNsdWRlICJhbWRncHVfdHRtLmgi Cj4gKyNpbmNsdWRlICJhbWRncHVfcmVzX2N1cnNvci5oIgo+ICsKPiArI2RlZmluZSBBTURHUFVf TUlHUkFURV9UUkFDRShmbXQsIC4uLikgXAo+ICsJcHJfZGVidWcoIiVzOiAiIGZtdCwgX19mdW5j X18sICMjX19WQV9BUkdTX18pCj4gKwo+ICsvKiBTRE1BIGNvcHkgZGlyZWN0aW9uICovCj4gKyNk ZWZpbmUgRlJPTV9SQU1fVE9fVlJBTQkwCj4gKyNkZWZpbmUgRlJPTV9WUkFNX1RPX1JBTQkxCj4g ICAKPiAgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFtZGdwdV9wYWdlbWFwICoKPiAtZHBhZ2VtYXBf dG9fYXBhZ2VtYXAoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCkKPiArdG9fYW1kZ3B1X3Bh Z2VtYXAoc3RydWN0IGRybV9wYWdlbWFwICpkcGFnZW1hcCkKPiAgIHsKPiAgIAlyZXR1cm4gY29u dGFpbmVyX29mKGRwYWdlbWFwLCBzdHJ1Y3QgYW1kZ3B1X3BhZ2VtYXAsIGRwYWdlbWFwKTsKPiAg IH0KPiBAQCAtOTQsOCArMTAyLDYxMCBAQCBhbWRncHVfc3ZtX3BhZ2VfdG9fYXBhZ2VtYXAoc3Ry dWN0IHBhZ2UgKnBhZ2UpCj4gICAJcmV0dXJuIGNvbnRhaW5lcl9vZihwZ21hcCwgc3RydWN0IGFt ZGdwdV9wYWdlbWFwLCBwZ21hcCk7Cj4gICB9Cj4gICAKPiArLyogZHJtX3BhZ2VtYXBfZGV2bWVt X29wcyDigJQgcGVyLUJPIG1pZ3JhdGlvbiBtZWNoYW5pY3MgKi8KPiArCj4gKy8qKgo+ICsgKiBz dHJ1Y3QgYW1kZ3B1X3N2bV9ibyAtIFdyYXBwZXIgbGlua2luZyBkcm1fcGFnZW1hcF9kZXZtZW0g dG8gYW1kZ3B1X2JvCj4gKyAqCj4gKyAqIEBkZXZtZW06IGRybV9wYWdlbWFwIGRldmljZSBtZW1v cnkgYWxsb2NhdGlvbiAocGFzc2VkIHRvIGZyYW1ld29yaykKPiArICogQGJvOiBUaGUgYmFja2lu ZyBWUkFNIGFtZGdwdV9ibwo+ICsgKgo+ICsgKiBJdCBpcyBhbGxvY2F0ZWQgcGVyLW1pZ3JhdGlv biBpbiBwb3B1bGF0ZV9tbSgpIGFuZCBmcmVlZCBieQo+ICsgKiBkZXZtZW1fcmVsZWFzZSgpIHdo ZW4gYWxsIGRldmljZS1wcml2YXRlIHBhZ2VzIGhhdmUgbWlncmF0ZWQKPiArICogYmFjayB0byBz eXN0ZW0gbWVtb3J5Lgo+ICsgKgo+ICsgKiBMaWZlY3ljbGUgaXMgbWFuYWdlZCBieSB0aGUgZHJt X3BhZ2VtYXAgZnJhbWV3b3JrJ3MgaW50ZXJuYWwgemRkIHJlZmNvdW50Ogo+ICsgKiAgIC0gemRk LT5kZXZtZW1fYWxsb2NhdGlvbiBwb2ludHMgdG8gJnN2bV9iby0+ZGV2bWVtCj4gKyAqICAgLSBX aGVuIHpkZCByZWZjb3VudCBkcm9wcyB0byB6ZXJvLCBmcmFtZXdvcmsgY2FsbHMgZGV2bWVtX3Jl bGVhc2UoKQo+ICsgKiAgIC0gZGV2bWVtX3JlbGVhc2UoKSBmcmVlcyBib3RoIHRoZSBCTyByZWZl cmVuY2UgYW5kIHRoZSBzdm1fYm8gaXRzZWxmCj4gKyAqLwo+ICtzdHJ1Y3QgYW1kZ3B1X3N2bV9i byB7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2JvICpibzsKPiArCXN0cnVjdCBkcm1fcGFnZW1hcF9kZXZt ZW0gZGV2bWVtOwo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgYW1kZ3B1X3N2bV9i byAqCj4gK3RvX2FtZGdwdV9zdm1fYm8oc3RydWN0IGRybV9wYWdlbWFwX2Rldm1lbSAqZGV2bWVt X2FsbG9jYXRpb24pCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoZGV2bWVtX2FsbG9jYXRp b24sIHN0cnVjdCBhbWRncHVfc3ZtX2JvLCBkZXZtZW0pOwo+ICt9Cj4gKwo+ICsvKioKPiArICog YW1kZ3B1X3N2bV9kZXZtZW1fcmVsZWFzZSAtIFJlbGVhc2UgQk8gd2hlbiBhbGwgZGV2aWNlIHBh Z2VzIG1pZ3JhdGUgYmFjawo+ICsgKgo+ICsgKiBDYWxsZWQgYnkgdGhlIGRybV9wYWdlbWFwIGZy YW1ld29yayAodmlhIGRybV9wYWdlbWFwX3pkZF9kZXN0cm95KSB3aGVuIHRoZQo+ICsgKiBsYXN0 IGRldmljZS1wcml2YXRlIHBhZ2UgYmFja2VkIGJ5IHRoaXMgYWxsb2NhdGlvbiBoYXMgYmVlbiBt aWdyYXRlZCBiYWNrCj4gKyAqIHRvIHN5c3RlbSBtZW1vcnkgKG9yIHRoZSBvd25pbmcgcHJvY2Vz cyBleGl0cykuCj4gKyAqCj4gKyAqIEZyZWVzIGJvdGggdGhlIGFtZGdwdV9ibyByZWZlcmVuY2Ug YW5kIHRoZSB3cmFwcGVyIGFtZGdwdV9zdm1fYm8gaXRzZWxmLgo+ICsgKi8KPiArc3RhdGljIHZv aWQKPiArYW1kZ3B1X3N2bV9kZXZtZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX3BhZ2VtYXBfZGV2bWVt ICpkZXZtZW1fYWxsb2NhdGlvbikKPiArewo+ICsJc3RydWN0IGFtZGdwdV9zdm1fYm8gKnN2bV9i byA9IHRvX2FtZGdwdV9zdm1fYm8oZGV2bWVtX2FsbG9jYXRpb24pOwo+ICsKPiArCUFNREdQVV9N SUdSQVRFX1RSQUNFKCJSZWxlYXNlIHN2bV9ibz0lcHggYm89JXB4XG4iLCBzdm1fYm8sIHN2bV9i by0+Ym8pOwo+ICsJYW1kZ3B1X2JvX3VucmVmKCZzdm1fYm8tPmJvKTsKPiArCWtmcmVlKHN2bV9i byk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfc3ZtX3BvcHVsYXRlX2Rldm1lbV9wZm4g LSBDb252ZXJ0IEJPIFZSQU0gYWxsb2NhdGlvbiB0byBQRk4gYXJyYXkKPiArICogQGRldm1lbV9h bGxvY2F0aW9uOiBUaGUgZGV2bWVtIGFsbG9jYXRpb24gaW4gdGhlIGFtZGdwdV9zdm1fYm8gd3Jh cHBlcgo+ICsgKiBAbnBhZ2VzOiBOdW1iZXIgb2YgUEZOIGVudHJpZXMgdG8gZmlsbAo+ICsgKiBA cGZuOiBPdXRwdXQgUEZOIGFycmF5Cj4gKyAqCj4gKyAqIEl0ZXJhdGVzIG92ZXIgdGhlIEJPJ3Mg VFRNIHZyYW1fbWdyIGJ1ZGR5IGJsb2NrcyBhbmQgY29udmVydHMgZWFjaAo+ICsgKiBibG9jaydz IFZSQU0gb2Zmc2V0IHRvIFpPTkVfREVWSUNFIFBGTnM6Cj4gKyAqCj4gKyAqICAgUEZOID0gUEhZ U19QRk4oYmxvY2tfb2Zmc2V0ICsgYXBhZ2VtYXAuaHBhX2Jhc2UpICsgcGFnZV9pbmRleAo+ICsg Kgo+ICsgKiBUaGlzIGlzIGNhbGxlZCBieSBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSgp IHRvIGJ1aWxkIHRoZQo+ICsgKiBkZXN0aW5hdGlvbiBQRk4gYXJyYXkgZm9yIG1pZ3JhdGVfdm1h X3BhZ2VzKCkuCj4gKyAqCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzCj4gKyAqLwo+ICtzdGF0 aWMgaW50Cj4gK2FtZGdwdV9zdm1fcG9wdWxhdGVfZGV2bWVtX3BmbihzdHJ1Y3QgZHJtX3BhZ2Vt YXBfZGV2bWVtICpkZXZtZW1fYWxsb2NhdGlvbiwKPiArCQkJCXVuc2lnbmVkIGxvbmcgbnBhZ2Vz LCB1bnNpZ25lZCBsb25nICpwZm4pCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfcGFnZW1hcCAqc3Zt X2RtID0gdG9fYW1kZ3B1X3BhZ2VtYXAoZGV2bWVtX2FsbG9jYXRpb24tPmRwYWdlbWFwKTsKPiAr CXN0cnVjdCBhbWRncHVfc3ZtX2JvICpzdm1fYm8gPSB0b19hbWRncHVfc3ZtX2JvKGRldm1lbV9h bGxvY2F0aW9uKTsKPiArCXN0cnVjdCBhbWRncHVfYm8gKmJvID0gc3ZtX2JvLT5ibzsKPiArCXN0 cnVjdCBhbWRncHVfcmVzX2N1cnNvciBjdXJzb3I7Cj4gKwl1bnNpZ25lZCBsb25nIGkgPSAwOwo+ ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBhbWRncHVfYm9fcmVzZXJ2ZShibywgZmFsc2UpOwo+ ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWFtZGdwdV9yZXNfZmlyc3QoYm8t PnRiby5yZXNvdXJjZSwgMCwgbnBhZ2VzIDw8IFBBR0VfU0hJRlQsICZjdXJzb3IpOwoKSG93IGRv IHlvdSBlbnN1cmUgdGhhdCB0aGUgQk8gaXMgdmFsaWQgYW5kIGFjdHVhbGx5IGluIFZSQU0gYXQg dGhlIHRpbWU/IApBbmQgaG93IGRvIHlvdSBlbnN1cmUgdGhhdCBpdCBzdGF5cyB0aGVyZSBhcyBs b25nIGFzIHRoZSB6b25lX2RldmljZSAKcGFnZXMgYXJlIGluIHVzZT8gQXMgZmFyIGFzIEkgY2Fu IHRlbGwsIHRoZSBCTyBpcyBub3QgcGlubmVkIGFuZCB0aGVyZSAKaXMgbm8gZmVuY2UgdGhhdCBw cmV2ZW50cyBpdCBmcm9tIGJlaW5nIGV2aWN0ZWQgdG8gR1RUIGJ5IFRUTSB3aXRob3V0IAp3YXJu aW5nLgoKUmVnYXJkcywKIMKgIEZlbGl4CgoKPiArCXdoaWxlIChjdXJzb3IucmVtYWluaW5nICYm IGkgPCBucGFnZXMpIHsKPiArCQl1NjQgcGZuX2Jhc2UgPSBQSFlTX1BGTihjdXJzb3Iuc3RhcnQg KyBzdm1fZG0tPmhwYV9iYXNlKTsKPiArCQl1NjQgcGFnZXMgPSBjdXJzb3Iuc2l6ZSA+PiBQQUdF X1NISUZUOwo+ICsJCXVuc2lnbmVkIGxvbmcgajsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IHBh Z2VzICYmIGkgPCBucGFnZXM7IGorKywgaSsrKQo+ICsJCQlwZm5baV0gPSBwZm5fYmFzZSArIGo7 Cj4gKwo+ICsJCWFtZGdwdV9yZXNfbmV4dCgmY3Vyc29yLCBjdXJzb3Iuc2l6ZSk7Cj4gKwl9Cj4g Kwo+ICsJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7Cj4gKwo+ICsJQU1ER1BVX01JR1JBVEVfVFJB Q0UoInBvcHVsYXRlX2Rldm1lbV9wZm46IG5wYWdlcz0lbHUgZmlyc3RfcGZuPTB4JWx4XG4iLAo+ ICsJCQkgIG5wYWdlcywgbnBhZ2VzID4gMCA/IHBmblswXSA6IDApOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICsvKiBTRE1BIGNvcHkgaGVscGVycyDigJQgR0FSVCB3aW5kb3cgYmFzZWQg ZGF0YSB0cmFuc2ZlciAqLwo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV9zdm1fZGlyZWN0X21hcHBp bmdfYWRkciAtIENvbnZlcnQgVlJBTSBvZmZzZXQgdG8gTUMgYWRkcmVzcwo+ICsgKiBAYWRldjog QU1ER1BVIGRldmljZQo+ICsgKiBAdnJhbV9vZmZzZXQ6IEJ5dGUgb2Zmc2V0IHdpdGhpbiBWUkFN Cj4gKyAqCj4gKyAqIFJldHVybjogTUMgYWRkcmVzcyBzdWl0YWJsZSBmb3IgU0RNQSBzcmMvZHN0 Cj4gKyAqLwo+ICtzdGF0aWMgdTY0Cj4gK2FtZGdwdV9zdm1fZGlyZWN0X21hcHBpbmdfYWRkcihz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgdTY0IHZyYW1fb2Zmc2V0KQo+ICt7Cj4gKwlyZXR1 cm4gdnJhbV9vZmZzZXQgKyBhbWRncHVfdHRtX2RvbWFpbl9zdGFydChhZGV2LCBUVE1fUExfVlJB TSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfc3ZtX2dhcnRfbWFwIC0gTWFwIHN5c3Rl bSBETUEgYWRkcmVzc2VzIGludG8gR0FSVCB3aW5kb3cKPiArICogQHJpbmc6IFNETUEgcmluZyBm b3IgdGhlIEdBUlQgdXBkYXRlIGpvYgo+ICsgKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXMgdG8g bWFwCj4gKyAqIEBhZGRyOiBBcnJheSBvZiBzeXN0ZW0gbWVtb3J5IERNQSBhZGRyZXNzZXMKPiAr ICogQGdhcnRfYWRkcjogT3V0cHV0IOKAlCBHQVJUIGJhc2UgYWRkcmVzcyB0byB1c2UgaW4gU0RN QSBjb3B5Cj4gKyAqIEBmbGFnczogUFRFIGZsYWdzIChlLmcuIHdyaXRlYWJsZSBmb3IgUkFNLXRv LVZSQU0gc3JjKQo+ICsgKgo+ICsgKiBCdWlsZHMgR0FSVCBQVEVzIHBvaW50aW5nIGF0IHRoZSBn aXZlbiBETUEgYWRkcmVzc2VzLCBzdWJtaXRzIGFuCj4gKyAqIFNETUEgam9iIHRvIHVwZGF0ZSB0 aGUgR0FSVCBlbnRyaWVzLCBhbmQgcmV0dXJucyB0aGUgR0FSVCBhZGRyZXNzCj4gKyAqIHRoYXQg Y2FuIGJlIHVzZWQgYXMgc3JjIG9yIGRzdCBpbiBhIHN1YnNlcXVlbnQgYW1kZ3B1X2NvcHlfYnVm ZmVyKCkuCj4gKyAqCj4gKyAqIFVzZXMgR0FSVCB3aW5kb3cgMCwgcHJvdGVjdGVkIGJ5IGd0dF93 aW5kb3dfbG9jay4KPiArICoKPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZQo+ICsgKi8KPiArc3RhdGljIGludAo+ICthbWRncHVfc3ZtX2dh cnRfbWFwKHN0cnVjdCBhbWRncHVfcmluZyAqcmluZywKPiArCQkgICAgIHN0cnVjdCBhbWRncHVf dHRtX2J1ZmZlcl9lbnRpdHkgKmVudGl0eSwKPiArCQkgICAgIHU2NCBucGFnZXMsCj4gKwkJICAg ICBkbWFfYWRkcl90ICphZGRyLCB1NjQgKmdhcnRfYWRkciwgdTY0IGZsYWdzKQo+ICt7Cj4gKwlz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IHJpbmctPmFkZXY7Cj4gKwlzdHJ1Y3QgYW1kZ3B1 X2pvYiAqam9iOwo+ICsJdW5zaWduZWQgaW50IG51bV9kdywgbnVtX2J5dGVzOwo+ICsJc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2U7Cj4gKwl1NjQgc3JjX2FkZHIsIGRzdF9hZGRyOwo+ICsJdTY0IHB0 ZV9mbGFnczsKPiArCXZvaWQgKmNwdV9hZGRyOwo+ICsJaW50IHI7Cj4gKwo+ICsJLyogVXNlIGVu dGl0eSdzIEdBUlQgd2luZG93IDAgKi8KPiArCSpnYXJ0X2FkZHIgPSBhbWRncHVfY29tcHV0ZV9n YXJ0X2FkZHJlc3MoJmFkZXYtPmdtYywgZW50aXR5LCAwKTsKPiArCj4gKwludW1fZHcgPSBBTElH TihhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jcy0+Y29weV9udW1fZHcsIDgpOwo+ICsJbnVtX2J5dGVz ID0gbnBhZ2VzICogOCAqIEFNREdQVV9HUFVfUEFHRVNfSU5fQ1BVX1BBR0U7Cj4gKwo+ICsJciA9 IGFtZGdwdV9qb2JfYWxsb2Nfd2l0aF9pYihhZGV2LCAmZW50aXR5LT5iYXNlLAo+ICsJCQkJICAg ICBBTURHUFVfRkVOQ0VfT1dORVJfVU5ERUZJTkVELAo+ICsJCQkJICAgICBudW1fZHcgKiA0ICsg bnVtX2J5dGVzLAo+ICsJCQkJICAgICBBTURHUFVfSUJfUE9PTF9ERUxBWUVELAo+ICsJCQkJICAg ICAmam9iLAo+ICsJCQkJICAgICBBTURHUFVfS0VSTkVMX0pPQl9JRF9LRkRfR0FSVF9NQVApOwo+ ICsJaWYgKHIpCj4gKwkJcmV0dXJuIHI7Cj4gKwo+ICsJc3JjX2FkZHIgPSBudW1fZHcgKiA0Owo+ ICsJc3JjX2FkZHIgKz0gam9iLT5pYnNbMF0uZ3B1X2FkZHI7Cj4gKwo+ICsJZHN0X2FkZHIgPSBh bWRncHVfYm9fZ3B1X29mZnNldChhZGV2LT5nYXJ0LmJvKTsKPiArCWRzdF9hZGRyICs9IChlbnRp dHktPmdhcnRfd2luZG93X29mZnNbMF0gPj4gQU1ER1BVX0dQVV9QQUdFX1NISUZUKSAqIDg7Cj4g KwlhbWRncHVfZW1pdF9jb3B5X2J1ZmZlcihhZGV2LCAmam9iLT5pYnNbMF0sIHNyY19hZGRyLAo+ ICsJCQkJZHN0X2FkZHIsIG51bV9ieXRlcywgMCk7Cj4gKwo+ICsJYW1kZ3B1X3JpbmdfcGFkX2li KHJpbmcsICZqb2ItPmlic1swXSk7Cj4gKwlXQVJOX09OKGpvYi0+aWJzWzBdLmxlbmd0aF9kdyA+ IG51bV9kdyk7Cj4gKwo+ICsJcHRlX2ZsYWdzID0gQU1ER1BVX1BURV9WQUxJRCB8IEFNREdQVV9Q VEVfUkVBREFCTEU7Cj4gKwlwdGVfZmxhZ3MgfD0gQU1ER1BVX1BURV9TWVNURU0gfCBBTURHUFVf UFRFX1NOT09QRUQ7Cj4gKwlpZiAoZmxhZ3MgJiBBTURHUFVfUFRFX1dSSVRFQUJMRSkKPiArCQlw dGVfZmxhZ3MgfD0gQU1ER1BVX1BURV9XUklURUFCTEU7Cj4gKwlwdGVfZmxhZ3MgfD0gYWRldi0+ Z2FydC5nYXJ0X3B0ZV9mbGFnczsKPiArCj4gKwljcHVfYWRkciA9ICZqb2ItPmlic1swXS5wdHJb bnVtX2R3XTsKPiArCj4gKwlhbWRncHVfZ2FydF9tYXAoYWRldiwgMCwgbnBhZ2VzLCBhZGRyLCBw dGVfZmxhZ3MsIGNwdV9hZGRyKTsKPiArCWZlbmNlID0gYW1kZ3B1X2pvYl9zdWJtaXQoam9iKTsK PiArCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsv KioKPiArICogYW1kZ3B1X3N2bV9jb3B5X21lbW9yeV9nYXJ0IC0gU0RNQSBjb3B5IGJldHdlZW4g c3lzdGVtIFJBTSBhbmQgVlJBTQo+ICsgKiBAYWRldjogQU1ER1BVIGRldmljZQo+ICsgKiBAc3lz OiBBcnJheSBvZiBETUEgYWRkcmVzc2VzIGZvciBzeXN0ZW0gbWVtb3J5IHBhZ2VzCj4gKyAqIEB2 cmFtOiBBcnJheSBvZiBWUkFNIGJ5dGUgb2Zmc2V0cyAocmVsYXRpdmUgdG8gc3RhcnQgb2YgVlJB TSkKPiArICogQG5wYWdlczogTnVtYmVyIG9mIHBhZ2VzIHRvIGNvcHkKPiArICogQGRpcmVjdGlv bjogRlJPTV9SQU1fVE9fVlJBTSBvciBGUk9NX1ZSQU1fVE9fUkFNCj4gKyAqIEBtZmVuY2U6IElu L291dCDigJQgY2FycmllcyB0aGUgbGFzdCBTRE1BIGZlbmNlIGZvciBzZXJpYWxpemF0aW9uCj4g KyAqCj4gKyAqIE1hcHMgc3lzdGVtIG1lbW9yeSBwYWdlcyBpbnRvIHRoZSBHQVJUIHdpbmRvdyBh bmQgdXNlcyBTRE1BIHRvIGNvcHkKPiArICogZGF0YSB0by9mcm9tIFZSQU0uIEhhbmRsZXMgc3Bs aXR0aW5nIGludG8gQU1ER1BVX0dUVF9NQVhfVFJBTlNGRVJfU0laRQo+ICsgKiBjaHVua3MuIEFj cXVpcmVzIGVudGl0eS0+bG9jayBpbnRlcm5hbGx5IHRvIHByb3RlY3QgdGhlIEdBUlQgd2luZG93 LAo+ICsgKiBtYXRjaGluZyB0aGUgS0ZEIHN2bV9taWdyYXRlX2NvcHlfbWVtb3J5X2dhcnQoKSBw YXR0ZXJuLgo+ICsgKgo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3Ig Y29kZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtzdGF0aWMgaW50Cj4gK2FtZGdwdV9zdm1fY29weV9t ZW1vcnlfZ2FydChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwgZG1hX2FkZHJfdCAqc3lzLAo+ ICsJCQkgICAgdTY0ICp2cmFtLCB1NjQgbnBhZ2VzLCBpbnQgZGlyZWN0aW9uLAo+ICsJCQkgICAg c3RydWN0IGRtYV9mZW5jZSAqKm1mZW5jZSkKPiArewo+ICsJY29uc3QgdTY0IG1heF9wYWdlcyA9 IEFNREdQVV9HVFRfTUFYX1RSQU5TRkVSX1NJWkU7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcgPSBhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jc19yaW5nOwo+ICsJc3RydWN0IGFtZGdwdV90dG1f YnVmZmVyX2VudGl0eSAqZW50aXR5ID0gJmFkZXYtPm1tYW4ubW92ZV9lbnRpdHk7Cj4gKwl1NjQg Z2FydF9zLCBnYXJ0X2Q7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpuZXh0Owo+ICsJdTY0IHNpemU7 Cj4gKwlpbnQgcjsKPiArCj4gKwltdXRleF9sb2NrKCZlbnRpdHktPmxvY2spOwo+ICsKPiArCXdo aWxlIChucGFnZXMpIHsKPiArCQlzaXplID0gbWluKG1heF9wYWdlcywgbnBhZ2VzKTsKPiArCj4g KwkJaWYgKGRpcmVjdGlvbiA9PSBGUk9NX1ZSQU1fVE9fUkFNKSB7Cj4gKwkJCWdhcnRfcyA9IGFt ZGdwdV9zdm1fZGlyZWN0X21hcHBpbmdfYWRkcihhZGV2LCAqdnJhbSk7Cj4gKwkJCXIgPSBhbWRn cHVfc3ZtX2dhcnRfbWFwKHJpbmcsIGVudGl0eSwgc2l6ZSwgc3lzLAo+ICsJCQkJCQkmZ2FydF9k LCBBTURHUFVfUFRFX1dSSVRFQUJMRSk7Cj4gKwkJfSBlbHNlIHsKPiArCQkJciA9IGFtZGdwdV9z dm1fZ2FydF9tYXAocmluZywgZW50aXR5LCBzaXplLCBzeXMsCj4gKwkJCQkJCSZnYXJ0X3MsIDAp Owo+ICsJCQlnYXJ0X2QgPSBhbWRncHVfc3ZtX2RpcmVjdF9tYXBwaW5nX2FkZHIoYWRldiwgKnZy YW0pOwo+ICsJCX0KPiArCQlpZiAocikgewo+ICsJCQlkZXZfZXJyKGFkZXYtPmRldiwgImZhaWxl ZCAlZCB0byBtYXAgR0FSVCBmb3IgU0RNQVxuIiwgcik7Cj4gKwkJCWdvdG8gb3V0X3VubG9jazsK PiArCQl9Cj4gKwo+ICsJCUFNREdQVV9NSUdSQVRFX1RSQUNFKCJTRE1BX0NPUFk6ICVzIG5wYWdl cz0lbGx1IHZyYW1fb2ZmPTB4JWxseFxuIiwKPiArCQkJCSAgZGlyZWN0aW9uID09IEZST01fUkFN X1RPX1ZSQU0gPyAiUkFNLT5WUkFNIiA6ICJWUkFNLT5SQU0iLAo+ICsJCQkJICBzaXplLCAodTY0 KSp2cmFtKTsKPiArCj4gKwkJciA9IGFtZGdwdV9jb3B5X2J1ZmZlcihhZGV2LCBlbnRpdHksIGdh cnRfcywgZ2FydF9kLAo+ICsJCQkJICAgICAgIHNpemUgKiBQQUdFX1NJWkUsCj4gKwkJCQkgICAg ICAgTlVMTCwgJm5leHQsIHRydWUsIDApOwo+ICsJCWlmIChyKSB7Cj4gKwkJCWRldl9lcnIoYWRl di0+ZGV2LCAiZmFpbGVkICVkIHRvIGNvcHkgYnVmZmVyXG4iLCByKTsKPiArCQkJZ290byBvdXRf dW5sb2NrOwo+ICsJCX0KPiArCj4gKwkJZG1hX2ZlbmNlX3B1dCgqbWZlbmNlKTsKPiArCQkqbWZl bmNlID0gbmV4dDsKPiArCQlucGFnZXMgLT0gc2l6ZTsKPiArCQlpZiAobnBhZ2VzKSB7Cj4gKwkJ CXN5cyArPSBzaXplOwo+ICsJCQl2cmFtICs9IHNpemU7Cj4gKwkJfQo+ICsJfQo+ICsKPiArb3V0 X3VubG9jazoKPiArCW11dGV4X3VubG9jaygmZW50aXR5LT5sb2NrKTsKPiArCj4gKwlyZXR1cm4g cjsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV9zdm1fY29weV90b19kZXZtZW0gLSBTRE1B IGNvcHkgc3lzdGVtIG1lbW9yeSAtPiBWUkFNCj4gKyAqIEBwYWdlczogQXJyYXkgb2YgZGVzdGlu YXRpb24gWk9ORV9ERVZJQ0UgcGFnZXMgKFZSQU0tYmFja2VkKQo+ICsgKiBAcGFnZW1hcF9hZGRy OiBBcnJheSBvZiBzb3VyY2UgRE1BIGFkZHJlc3NlcyAoc3lzdGVtIG1lbW9yeSwgYWxyZWFkeSBt YXBwZWQpCj4gKyAqIEBucGFnZXM6IE51bWJlciBvZiBwYWdlcyB0byBjb3B5Cj4gKyAqCj4gKyAq IEJ1aWxkcyBwYXJhbGxlbCBzeXNbXSBhbmQgdnJhbVtdIGFycmF5cyBmcm9tIHRoZSBmcmFtZXdv cmstcHJvdmlkZWQKPiArICogcGFnZW1hcF9hZGRyIGFuZCBkZXZpY2UgcGFnZXMsIHRoZW4gc3Vi bWl0cyBiYXRjaGVkIFNETUEgY29waWVzIHZpYQo+ICsgKiB0aGUgR0FSVCB3aW5kb3cuCj4gKyAq Cj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1 cmUKPiArICovCj4gK3N0YXRpYyBpbnQKPiArYW1kZ3B1X3N2bV9jb3B5X3RvX2Rldm1lbShzdHJ1 Y3QgcGFnZSAqKnBhZ2VzLAo+ICsJCQkgICBzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1h cF9hZGRyLAo+ICsJCQkgICB1bnNpZ25lZCBsb25nIG5wYWdlcywKPiArCQkJICAgc3RydWN0IGRt YV9mZW5jZSAqcHJlX21pZ3JhdGVfZmVuY2UpCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2Owo+ICsJc3RydWN0IGFtZGdwdV9wYWdlbWFwICpzdm1fZG07Cj4gKwlzdHJ1Y3QgZG1h X2ZlbmNlICptZmVuY2UgPSBOVUxMOwo+ICsJZG1hX2FkZHJfdCAqc3lzOwo+ICsJdTY0ICp2cmFt Owo+ICsJdW5zaWduZWQgbG9uZyBpLCBqOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFu cGFnZXMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJLyoKPiArCSAqIEZpbmQgdGhlIGZpcnN0IG5v bi1OVUxMIHBhZ2UgdG8gZGVyaXZlIHRoZSBkZXZpY2UuCj4gKwkgKiBUaGUgcGFnZXMgYXJyYXkg bWF5IGNvbnRhaW4gTlVMTCBlbnRyaWVzIGZvciBwb3NpdGlvbnMgd2hlcmUKPiArCSAqIG5vIHZh bGlkIGRldmljZSBwYWdlIGV4aXN0cy4KPiArCSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IG5wYWdl czsgaSsrKSB7Cj4gKwkJaWYgKHBhZ2VzW2ldKQo+ICsJCQlicmVhazsKPiArCX0KPiArCWlmIChp ID09IG5wYWdlcykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlzdm1fZG0gPSBhbWRncHVfc3ZtX3Bh Z2VfdG9fYXBhZ2VtYXAocGFnZXNbaV0pOwo+ICsJYWRldiA9IHN2bV9kbS0+YWRldjsKPiArCj4g KwlzeXMgPSBrdmNhbGxvYyhucGFnZXMsIHNpemVvZigqc3lzKSwgR0ZQX0tFUk5FTCk7Cj4gKwl2 cmFtID0ga3ZjYWxsb2MobnBhZ2VzLCBzaXplb2YoKnZyYW0pLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghc3lzIHx8ICF2cmFtKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIG91dF9mcmVl Owo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKPiAr CQlpZiAoIXBhZ2VtYXBfYWRkcltpXS5hZGRyKQo+ICsJCQlnb3RvIGZsdXNoOwo+ICsKPiArCQlz eXNbal0gPSBwYWdlbWFwX2FkZHJbaV0uYWRkcjsKPiArCQl2cmFtW2pdID0gKCh1NjQpcGFnZV90 b19wZm4ocGFnZXNbaV0pIDw8IFBBR0VfU0hJRlQpIC0KPiArCQkJICBzdm1fZG0tPmhwYV9iYXNl Owo+ICsKPiArCQkvKiBDaGVjayBpZiBuZXh0IHZyYW0gcGFnZSBpcyBjb250aWd1b3VzIHdpdGgg Y3VycmVudCAqLwo+ICsJCWlmIChqID4gMCAmJiB2cmFtW2pdICE9IHZyYW1baiAtIDFdICsgUEFH RV9TSVpFKQo+ICsJCQlnb3RvIGZsdXNoOwo+ICsKPiArCQlqKys7Cj4gKwkJY29udGludWU7Cj4g K2ZsdXNoOgo+ICsJCWlmIChqKSB7Cj4gKwkJCXJldCA9IGFtZGdwdV9zdm1fY29weV9tZW1vcnlf Z2FydChhZGV2LCBzeXMsIHZyYW0sIGosCj4gKwkJCQkJCQkgIEZST01fUkFNX1RPX1ZSQU0sCj4g KwkJCQkJCQkgICZtZmVuY2UpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJZ290byBvdXRfZmVuY2U7 Cj4gKwkJCWogPSAwOwo+ICsJCX0KPiArCQkvKiBSZS1wcm9jZXNzIGN1cnJlbnQgcGFnZSBpZiBp dCB3YXMgdmFsaWQgYnV0IGJyb2tlIGNvbnRpZ3VpdHkgKi8KPiArCQlpZiAocGFnZW1hcF9hZGRy W2ldLmFkZHIpIHsKPiArCQkJc3lzWzBdID0gcGFnZW1hcF9hZGRyW2ldLmFkZHI7Cj4gKwkJCXZy YW1bMF0gPSAoKHU2NClwYWdlX3RvX3BmbihwYWdlc1tpXSkgPDwgUEFHRV9TSElGVCkgLQo+ICsJ CQkJICBzdm1fZG0tPmhwYV9iYXNlOwo+ICsJCQlqID0gMTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ LyogRmx1c2ggcmVtYWluaW5nIGJhdGNoICovCj4gKwlpZiAoaikKPiArCQlyZXQgPSBhbWRncHVf c3ZtX2NvcHlfbWVtb3J5X2dhcnQoYWRldiwgc3lzLCB2cmFtLCBqLAo+ICsJCQkJCQkgIEZST01f UkFNX1RPX1ZSQU0sICZtZmVuY2UpOwo+ICsKPiArb3V0X2ZlbmNlOgo+ICsJaWYgKG1mZW5jZSkg ewo+ICsJCWRtYV9mZW5jZV93YWl0KG1mZW5jZSwgZmFsc2UpOwo+ICsJCWRtYV9mZW5jZV9wdXQo bWZlbmNlKTsKPiArCX0KPiArCj4gKwlBTURHUFVfTUlHUkFURV9UUkFDRSgiY29weV90b19kZXZt ZW0gZG9uZTogbnBhZ2VzPSVsZCByZXQ9JWRcbiIsCj4gKwkJCSAgbnBhZ2VzLCByZXQpOwo+ICsK PiArb3V0X2ZyZWU6Cj4gKwlrdmZyZWUodnJhbSk7Cj4gKwlrdmZyZWUoc3lzKTsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfc3ZtX2NvcHlfdG9fcmFtIC0gU0RN QSBjb3B5IFZSQU0gLT4gc3lzdGVtIG1lbW9yeQo+ICsgKiBAcGFnZXM6IEFycmF5IG9mIHNvdXJj ZSBaT05FX0RFVklDRSBwYWdlcyAoVlJBTS1iYWNrZWQpCj4gKyAqIEBwYWdlbWFwX2FkZHI6IEFy cmF5IG9mIGRlc3RpbmF0aW9uIERNQSBhZGRyZXNzZXMgKHN5c3RlbSBtZW1vcnksIGFscmVhZHkg bWFwcGVkKQo+ICsgKiBAbnBhZ2VzOiBOdW1iZXIgb2YgcGFnZXMgdG8gY29weQo+ICsgKgo+ICsg KiBNaXJyb3Igb2YgY29weV90b19kZXZtZW0gd2l0aCBzcmMvZHN0IHN3YXBwZWQuCj4gKyAqCj4g KyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUK PiArICovCj4gK3N0YXRpYyBpbnQKPiArYW1kZ3B1X3N2bV9jb3B5X3RvX3JhbShzdHJ1Y3QgcGFn ZSAqKnBhZ2VzLAo+ICsJCQlzdHJ1Y3QgZHJtX3BhZ2VtYXBfYWRkciAqcGFnZW1hcF9hZGRyLAo+ ICsJCQl1bnNpZ25lZCBsb25nIG5wYWdlcywKPiArCQkJc3RydWN0IGRtYV9mZW5jZSAqcHJlX21p Z3JhdGVfZmVuY2UpCj4gK3sKPiArCXN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2Owo+ICsJc3Ry dWN0IGFtZGdwdV9wYWdlbWFwICpzdm1fZG07Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICptZmVuY2Ug PSBOVUxMOwo+ICsJZG1hX2FkZHJfdCAqc3lzOwo+ICsJdTY0ICp2cmFtOwo+ICsJdW5zaWduZWQg bG9uZyBpLCBqOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJaWYgKCFucGFnZXMpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7Cj4gKwkJaWYgKHBh Z2VzW2ldKQo+ICsJCQlicmVhazsKPiArCX0KPiArCWlmIChpID09IG5wYWdlcykKPiArCQlyZXR1 cm4gMDsKPiArCj4gKwlzdm1fZG0gPSBhbWRncHVfc3ZtX3BhZ2VfdG9fYXBhZ2VtYXAocGFnZXNb aV0pOwo+ICsJYWRldiA9IHN2bV9kbS0+YWRldjsKPiArCj4gKwlzeXMgPSBrdmNhbGxvYyhucGFn ZXMsIHNpemVvZigqc3lzKSwgR0ZQX0tFUk5FTCk7Cj4gKwl2cmFtID0ga3ZjYWxsb2MobnBhZ2Vz LCBzaXplb2YoKnZyYW0pLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc3lzIHx8ICF2cmFtKSB7Cj4g KwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIG91dF9mcmVlOwo+ICsJfQo+ICsKPiArCWZvciAo aSA9IDAsIGogPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKPiArCQlpZiAoIXBhZ2VtYXBfYWRkcltp XS5hZGRyIHx8ICFwYWdlc1tpXSkKPiArCQkJZ290byBmbHVzaDsKPiArCj4gKwkJdnJhbVtqXSA9 ICgodTY0KXBhZ2VfdG9fcGZuKHBhZ2VzW2ldKSA8PCBQQUdFX1NISUZUKSAtCj4gKwkJCSAgc3Zt X2RtLT5ocGFfYmFzZTsKPiArCQlzeXNbal0gPSBwYWdlbWFwX2FkZHJbaV0uYWRkcjsKPiArCj4g KwkJLyogQ2hlY2sgaWYgbmV4dCB2cmFtIHBhZ2UgaXMgY29udGlndW91cyB3aXRoIGN1cnJlbnQg Ki8KPiArCQlpZiAoaiA+IDAgJiYgdnJhbVtqXSAhPSB2cmFtW2ogLSAxXSArIFBBR0VfU0laRSkK PiArCQkJZ290byBmbHVzaDsKPiArCj4gKwkJaisrOwo+ICsJCWNvbnRpbnVlOwo+ICtmbHVzaDoK PiArCQlpZiAoaikgewo+ICsJCQlyZXQgPSBhbWRncHVfc3ZtX2NvcHlfbWVtb3J5X2dhcnQoYWRl diwgc3lzLCB2cmFtLCBqLAo+ICsJCQkJCQkJICBGUk9NX1ZSQU1fVE9fUkFNLAo+ICsJCQkJCQkJ ICAmbWZlbmNlKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCWdvdG8gb3V0X2ZlbmNlOwo+ICsJCQlq ID0gMDsKPiArCQl9Cj4gKwkJLyogUmUtcHJvY2VzcyBjdXJyZW50IHBhZ2UgaWYgaXQgd2FzIHZh bGlkIGJ1dCBicm9rZSBjb250aWd1aXR5ICovCj4gKwkJaWYgKHBhZ2VtYXBfYWRkcltpXS5hZGRy ICYmIHBhZ2VzW2ldKSB7Cj4gKwkJCXZyYW1bMF0gPSAoKHU2NClwYWdlX3RvX3BmbihwYWdlc1tp XSkgPDwgUEFHRV9TSElGVCkgLQo+ICsJCQkJICBzdm1fZG0tPmhwYV9iYXNlOwo+ICsJCQlzeXNb MF0gPSBwYWdlbWFwX2FkZHJbaV0uYWRkcjsKPiArCQkJaiA9IDE7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCS8qIEZsdXNoIHJlbWFpbmluZyBiYXRjaCAqLwo+ICsJaWYgKGopCj4gKwkJcmV0ID0gYW1k Z3B1X3N2bV9jb3B5X21lbW9yeV9nYXJ0KGFkZXYsIHN5cywgdnJhbSwgaiwKPiArCQkJCQkJICBG Uk9NX1ZSQU1fVE9fUkFNLCAmbWZlbmNlKTsKPiArCj4gK291dF9mZW5jZToKPiArCWlmIChtZmVu Y2UpIHsKPiArCQlkbWFfZmVuY2Vfd2FpdChtZmVuY2UsIGZhbHNlKTsKPiArCQlkbWFfZmVuY2Vf cHV0KG1mZW5jZSk7Cj4gKwl9Cj4gKwo+ICsJQU1ER1BVX01JR1JBVEVfVFJBQ0UoImNvcHlfdG9f cmFtIGRvbmU6IG5wYWdlcz0lbGQgcmV0PSVkXG4iLCBucGFnZXMsIHJldCk7Cj4gKwo+ICtvdXRf ZnJlZToKPiArCWt2ZnJlZSh2cmFtKTsKPiArCWt2ZnJlZShzeXMpOwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFnZW1hcF9kZXZtZW1fb3BzIGFt ZGdwdV9wYWdlbWFwX29wcyA9IHsKPiArCS5kZXZtZW1fcmVsZWFzZSAgICAgID0gYW1kZ3B1X3N2 bV9kZXZtZW1fcmVsZWFzZSwKPiArCS5wb3B1bGF0ZV9kZXZtZW1fcGZuID0gYW1kZ3B1X3N2bV9w b3B1bGF0ZV9kZXZtZW1fcGZuLAo+ICsJLmNvcHlfdG9fZGV2bWVtICAgICAgPSBhbWRncHVfc3Zt X2NvcHlfdG9fZGV2bWVtLAo+ICsJLmNvcHlfdG9fcmFtICAgICAgICAgPSBhbWRncHVfc3ZtX2Nv cHlfdG9fcmFtLAo+ICt9Owo+ICsKPiArLyogZHJtX3BhZ2VtYXBfb3BzIOKAlCB0b3AtbGV2ZWwg bWlncmF0aW9uIGVudHJ5IHBvaW50cyAqLwo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV9zdm1fZGV2 aWNlX21hcCAtIENvbnZlcnQgWk9ORV9ERVZJQ0UgcGFnZSB0byBHUFUgUFRFIGFkZHJlc3MKPiAr ICogQGRwYWdlbWFwOiBUaGUgZHJtX3BhZ2VtYXAgZm9yIHRoaXMgZGV2aWNlCj4gKyAqIEBkZXY6 IFJlcXVlc3RpbmcgZGV2aWNlIChmb3IgUDJQIGNoZWNrKQo+ICsgKiBAcGFnZTogWk9ORV9ERVZJ Q0UgcGFnZSBiYWNrZWQgYnkgVlJBTQo+ICsgKiBAb3JkZXI6IFBhZ2Ugb3JkZXIgKDAgPSA0Sywg OSA9IDJNLCBldGMuKQo+ICsgKiBAZGlyOiBETUEgZGlyZWN0aW9uICh1bnVzZWQgZm9yIGxvY2Fs IFZSQU0pCj4gKyAqCj4gKyAqIEFkZHJlc3MgY29udmVyc2lvbiBjaGFpbjoKPiArICogICBwYWdl IC0+IFBGTiAtPiBIUEEgLT4gVlJBTSBvZmZzZXQgLT4gUFRFIGFkZHJlc3MKPiArICoKPiArICog ICBIUEEgPSBwYWdlX3RvX3BmbihwYWdlKSA8PCBQQUdFX1NISUZUCj4gKyAqICAgVlJBTSBvZmZz ZXQgPSBIUEEgLSBhcGFnZW1hcC5ocGFfYmFzZQo+ICsgKiAgIFBURSBhZGRyZXNzID0gVlJBTSBv ZmZzZXQgKyBhZGV2LT52bV9tYW5hZ2VyLnZyYW1fYmFzZV9vZmZzZXQKPiArICoKPiArICogUmV0 dXJuOiBkcm1fcGFnZW1hcF9hZGRyIHdpdGggUFRFIGFkZHJlc3MgYW5kIEFNREdQVV9JTlRFUkNP Tk5FQ1RfVlJBTSBwcm90b2NvbAo+ICsgKi8KPiArc3RhdGljIHN0cnVjdCBkcm1fcGFnZW1hcF9h ZGRyCj4gK2FtZGdwdV9zdm1fZGV2aWNlX21hcChzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFw LAo+ICsJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gKwkJICAgICAgIHN0cnVjdCBwYWdl ICpwYWdlLAo+ICsJCSAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsCj4gKwkJICAgICAgIGVudW0g ZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKPiArewo+ICsJc3RydWN0IGFtZGdwdV9wYWdlbWFwICpz dm1fZG0gPSB0b19hbWRncHVfcGFnZW1hcChkcGFnZW1hcCk7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IGRwYWdlbWFwX3RvX2FkZXYoZHBhZ2VtYXApOwo+ICsJZG1hX2FkZHJfdCBh ZGRyOwo+ICsKPiArCWlmIChkcGFnZW1hcC0+ZHJtLT5kZXYgPT0gZGV2KSB7Cj4gKwkJLyogU2Ft ZSBkZXZpY2U6IHJldHVybiBWUkFNIFBURSBhZGRyZXNzICovCj4gKwkJdTY0IGhwYSA9ICh1NjQp cGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVDsKPiArCQl1NjQgdnJhbV9vZmZzZXQgPSBo cGEgLSBzdm1fZG0tPmhwYV9iYXNlOwo+ICsKPiArCQlhZGRyID0gdnJhbV9vZmZzZXQgKyBhZGV2 LT52bV9tYW5hZ2VyLnZyYW1fYmFzZV9vZmZzZXQ7Cj4gKwl9IGVsc2Ugewo+ICsJCS8qIENyb3Nz LWRldmljZSBQMlA6IG5vdCB5ZXQgc3VwcG9ydGVkICovCj4gKwkJYWRkciA9IERNQV9NQVBQSU5H X0VSUk9SOwo+ICsJfQo+ICsKPiArCXJldHVybiBkcm1fcGFnZW1hcF9hZGRyX2VuY29kZShhZGRy LAo+ICsJCQkJQU1ER1BVX0lOVEVSQ09OTkVDVF9WUkFNLCBvcmRlciwgZGlyKTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIGFtZGdwdV9zdm1fYm9fYWxsb2MgLSBBbGxvY2F0ZSBhbiBhbWRncHVfc3Zt X2JvIHdyYXBwZXIgd2l0aCBWUkFNIGJhY2tpbmcKPiArICogQGFkZXY6IEFNREdQVSBkZXZpY2UK PiArICogQGRwYWdlbWFwOiBUaGUgZHJtX3BhZ2VtYXAgZm9yIHRoaXMgZGV2aWNlCj4gKyAqIEBt bTogbW1fc3RydWN0IG9mIHRoZSBvd25pbmcgcHJvY2Vzcwo+ICsgKiBAc2l6ZTogQWxsb2NhdGlv biBzaXplIGluIGJ5dGVzCj4gKyAqCj4gKyAqIFJldHVybjogUG9pbnRlciB0byBhbGxvY2F0ZWQg YW1kZ3B1X3N2bV9ibyBvbiBzdWNjZXNzLCBFUlJfUFRSIG9uIGZhaWx1cmUKPiArICovCj4gK3N0 YXRpYyBzdHJ1Y3QgYW1kZ3B1X3N2bV9ibyAqCj4gK2FtZGdwdV9zdm1fYm9fYWxsb2Moc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gKwkJICAgICBzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdl bWFwLAo+ICsJCSAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkK PiArewo+ICsJc3RydWN0IGFtZGdwdV9zdm1fYm8gKnN2bV9ibzsKPiArCXN0cnVjdCBhbWRncHVf Ym9fcGFyYW0gYnAgPSB7fTsKPiArCXN0cnVjdCBhbWRncHVfYm8gKmJvOwo+ICsJaW50IHJldDsK PiArCj4gKwlzdm1fYm8gPSBremFsbG9jKHNpemVvZigqc3ZtX2JvKSwgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIXN2bV9ibykKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlicC5z aXplID0gc2l6ZTsKPiArCWJwLmJvX3B0cl9zaXplID0gc2l6ZW9mKHN0cnVjdCBhbWRncHVfYm8p Owo+ICsJYnAuZG9tYWluID0gQU1ER1BVX0dFTV9ET01BSU5fVlJBTTsKPiArCWJwLnR5cGUgPSB0 dG1fYm9fdHlwZV9kZXZpY2U7Cj4gKwlicC5mbGFncyA9IEFNREdQVV9HRU1fQ1JFQVRFX05PX0NQ VV9BQ0NFU1MgfAo+ICsJCSAgIEFNREdQVV9HRU1fQ1JFQVRFX1ZSQU1fQ09OVElHVU9VUyB8Cj4g KwkJICAgQU1ER1BVX0dFTV9DUkVBVEVfVlJBTV9DTEVBUkVEOwo+ICsKPiArCXJldCA9IGFtZGdw dV9ib19jcmVhdGUoYWRldiwgJmJwLCAmYm8pOwo+ICsJaWYgKHJldCkgewo+ICsJCUFNREdQVV9N SUdSQVRFX1RSQUNFKCJGYWlsZWQgdG8gY3JlYXRlIFNWTSBCT1xuIik7Cj4gKwkJa2ZyZWUoc3Zt X2JvKTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ICsKPiArCWFtZGdwdV9ib191 bnJlc2VydmUoYm8pOwo+ICsJc3ZtX2JvLT5ibyA9IGJvOwo+ICsKPiArCWRybV9wYWdlbWFwX2Rl dm1lbV9pbml0KCZzdm1fYm8tPmRldm1lbSwKPiArCQkJCWFkZXYtPmRldiwgbW0sCj4gKwkJCQkm YW1kZ3B1X3BhZ2VtYXBfb3BzLAo+ICsJCQkJZHBhZ2VtYXAsIHNpemUsIE5VTEwpOwo+ICsKPiAr CXJldHVybiBzdm1fYm87Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhbWRncHVfc3ZtX3BvcHVsYXRl X21tIC0gQWxsb2NhdGUgVlJBTSBCTyBhbmQgbWlncmF0ZSBwYWdlcwo+ICsgKiBAZHBhZ2VtYXA6 IFRoZSBkcm1fcGFnZW1hcCBmb3IgdGhpcyBkZXZpY2UKPiArICogQHN0YXJ0OiBTdGFydCB2aXJ0 dWFsIGFkZHJlc3Mgb2YgdGhlIHJhbmdlIHRvIG1pZ3JhdGUKPiArICogQGVuZDogRW5kIHZpcnR1 YWwgYWRkcmVzcyAoZXhjbHVzaXZlKQo+ICsgKiBAbW06IG1tX3N0cnVjdCBvZiB0aGUgb3duaW5n IHByb2Nlc3MKPiArICogQHRpbWVzbGljZV9tczogTWF4aW11bSB0aW1lIHRvIHNwZW5kIG1pZ3Jh dGluZyAoZm9yIGZhaXJuZXNzKQo+ICsgKgo+ICsgKiBDb3JlIG1pZ3JhdGlvbiBlbnRyeSBwb2lu dCBjYWxsZWQgYnkgZHJtX3BhZ2VtYXBfcG9wdWxhdGVfbW0oKS4KPiArICogQWxsb2NhdGVzIGFu IGFtZGdwdV9zdm1fYm8gdmlhIGFtZGdwdV9zdm1fYm9fYWxsb2MoKSwgdGhlbiBjYWxscwo+ICsg KiBkcm1fcGFnZW1hcF9taWdyYXRlX3RvX2Rldm1lbSgpIHRvIGV4ZWN1dGUgdGhlIGFjdHVhbCBt aWdyYXRpb24uCj4gKyAqCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJv ciBjb2RlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyBpbnQKPiArYW1kZ3B1X3N2bV9wb3B1 bGF0ZV9tbShzdHJ1Y3QgZHJtX3BhZ2VtYXAgKmRwYWdlbWFwLAo+ICsJCQl1bnNpZ25lZCBsb25n IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKPiArCQkJc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4g KwkJCXVuc2lnbmVkIGxvbmcgdGltZXNsaWNlX21zKQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiA9IGRwYWdlbWFwX3RvX2FkZXYoZHBhZ2VtYXApOwo+ICsJc3RydWN0IGRybV9w YWdlbWFwX21pZ3JhdGVfZGV0YWlscyBtZGV0YWlscyA9IHsKPiArCQkudGltZXNsaWNlX21zID0g dGltZXNsaWNlX21zLAo+ICsJfTsKPiArCXN0cnVjdCBhbWRncHVfc3ZtX2JvICpzdm1fYm87Cj4g KwlpbnQgcmV0Owo+ICsKPiArCXN2bV9ibyA9IGFtZGdwdV9zdm1fYm9fYWxsb2MoYWRldiwgZHBh Z2VtYXAsIG1tLCBlbmQgLSBzdGFydCk7Cj4gKwlpZiAoSVNfRVJSKHN2bV9ibykpCj4gKwkJcmV0 dXJuIFBUUl9FUlIoc3ZtX2JvKTsKPiArCj4gKwlBTURHUFVfTUlHUkFURV9UUkFDRSgicG9wdWxh dGVfbW06IFsweCVseC0weCVseF0gc2l6ZT0lbHVcbiIsCj4gKwkJCSAgc3RhcnQsIGVuZCwgZW5k IC0gc3RhcnQpOwo+ICsKPiArCXJldCA9IGRybV9wYWdlbWFwX21pZ3JhdGVfdG9fZGV2bWVtKCZz dm1fYm8tPmRldm1lbSwKPiArCQkJCQkgICAgIG1tLCBzdGFydCwgZW5kLAo+ICsJCQkJCSAgICAg Jm1kZXRhaWxzKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gICAKPiAtY29uc3Qgc3RydWN0 IGRybV9wYWdlbWFwX29wcyBhbWRncHVfc3ZtX2RybV9wYWdlbWFwX29wcyA9IHsgfTsKPiArY29u c3Qgc3RydWN0IGRybV9wYWdlbWFwX29wcyBhbWRncHVfc3ZtX2RybV9wYWdlbWFwX29wcyA9IHsK PiArCS5kZXZpY2VfbWFwID0gYW1kZ3B1X3N2bV9kZXZpY2VfbWFwLAo+ICsJLnBvcHVsYXRlX21t ID0gYW1kZ3B1X3N2bV9wb3B1bGF0ZV9tbSwKPiArfTsKPiAgIAo+ICAgLyoqCj4gICAgKiBhbWRn cHVfc3ZtX21pZ3JhdGlvbl9pbml0IC0gUmVnaXN0ZXIgWk9ORV9ERVZJQ0UgYW5kIGluaXRpYWxp emUgZHJtX3BhZ2VtYXAK