From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 925A9C47080 for ; Tue, 1 Jun 2021 17:27:36 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 55421613C1 for ; Tue, 1 Jun 2021 17:27:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 55421613C1 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B6B8789131; Tue, 1 Jun 2021 17:27:35 +0000 (UTC) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2053.outbound.protection.outlook.com [40.107.220.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 953EA8912C; Tue, 1 Jun 2021 17:27:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z2DCOyxC2wWnk7P5jKcmZcA3NOu6aRKe4URmCLMhCxJLQDTfdNHGirO9U3Xgvps4HGXskI54eqsb3ffcp2hDtLmcvM1J0ZGBBMUCsMIUlxHfkLdSv/ERuj6qLAtEksJucFa0Hb/YMYy5sSEjN3ObYGwbbE+BNNdyJbbj6YeORqazy023FNX0CmrEYugZP8q84yERxBLiO6RvthocO/YVHOHYrwQqtRhS75uHMzSK8XkWLZpdE59Bac+3fmtVxagscjYeWIDpizDMtE/TaWE0GevO8vA8itm2LSZD7kHygRpRGJ5zOQ3CBBdQUOHogsU4XsTEvMc+HhwuvO3SpIzAmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZ91bEibyL5UUvXTq+vUTreFubeCYxUEpqtNLG875cM=; b=dbQBO6u9BJa6Dj697B5VxNd1ilKFlK3tBwTvKbdeN9NcXg+9n/P5NZSWHPPCu365eAghAHpAEVnLbU/QSCLOHqtIwhh7AunIjt3EO9SOjp7Up7VcErJqKmXQ2I8VvVS5/PtzflMjfFoOy58IuAc1EqjbAosJuaF0ooP6syxdhA/eZSFe0NjIeR3hyzxkpGrKBOL6uQzThQ5trBA0Fnk9hnZTGEgY8gE1mizoECuoVyMsBVILf+FM1KAj41N/41JuYnyh129H+nlqz6Du1YCu+O+bSZy6rdBhCfWC8fvUDLoV60YvTPiDf0KHzX1R9666lMS3nzRUyk73O30SThh0DA== 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=KZ91bEibyL5UUvXTq+vUTreFubeCYxUEpqtNLG875cM=; b=qXlukS8p7s4YUpRYOZ2a/qmWO8GsTh5blivpzeve3Nuiv28HbVWovYbxgw0NWWM3UOeyu3kbCzvQxcW6U5QlkZsp5Y5emOpF7fpAhDqZwLwry0afu+eCgoIsavIvMLF3oWu/408ZgOwKpzoxVI4IC3rbwnvA2tyjWJyJmoNt5Fw= Authentication-Results: vmware.com; dkim=none (message not signed) header.d=none;vmware.com; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by MN2PR12MB4221.namprd12.prod.outlook.com (2603:10b6:208:1d2::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.21; Tue, 1 Jun 2021 17:27:31 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6d4d:4674:1cf6:8d34]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6d4d:4674:1cf6:8d34%6]) with mapi id 15.20.4173.030; Tue, 1 Jun 2021 17:27:31 +0000 To: Daniel Vetter References: <20210525211753.1086069-1-jason@jlekstrand.net> <20210525211753.1086069-3-jason@jlekstrand.net> <82e16239-e8ea-8b03-6a90-c7d18a5f8a91@amd.com> <4c7cede0-4e33-ffc5-6308-7eccd3570e9d@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <7692f363-ed5e-54fb-71c9-3bc3f69a07ec@amd.com> Date: Tue, 1 Jun 2021 19:27:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 In-Reply-To: Content-Language: en-US X-Originating-IP: [2a02:908:1252:fb60:7517:785b:7177:d6a6] X-ClientProxiedBy: AM4PR0202CA0006.eurprd02.prod.outlook.com (2603:10a6:200:89::16) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [IPv6:2a02:908:1252:fb60:7517:785b:7177:d6a6] (2a02:908:1252:fb60:7517:785b:7177:d6a6) by AM4PR0202CA0006.eurprd02.prod.outlook.com (2603:10a6:200:89::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Tue, 1 Jun 2021 17:27:29 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f2d0ad2e-6f56-44e1-f289-08d9252288f1 X-MS-TrafficTypeDiagnostic: MN2PR12MB4221: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PLI54F5aAKVtiQJ19ZFELCk8PbSx/lA+4ZXQmTDt5bba2fU7j+dEN0lXiYFK/6CqHsvsiJzNoV0RLz9H2hO2ggDRoggNn42hQVQeDV5l9D3o6EibWG0POjgGB0CmwSPyNQUj9rr/YImnGllKMD9H5vbI7iD86LwEJ+O6RPLGpZRPKjXEc+pLbrQhZyN7xXM8vHG8cmSVwyxsY5DWewyHjUpQQNaq/ZZ0HNwh6dN406BI2LK/In5DqE9ETrFMdkSmANAcw456Rxr5BhvE/bqMqmrUKv7wLh7YABs02VTmPFxxpP2H7ECyjUhAD/bbFfXOwVeU5BoRAH17npRUYcmyU+oHfTQLDz6yMzgZiyt35v+K9rBF8acHDmudlKRQELkAcD2hq/xcACXJ6kzAToq7Ld5zubmF+/wBT8XOfeLMOSIql2ntm58NrRUkGsb9Ofo37C/BXb1wKKbZEb16YApka4xQzSfoA8d+udbn/Un9XhcqZLmwtb/P11IlKa4smRJ3OZajv0aGibHxNOCrKHwCxxfSJdt4u0mdhrx4P69qdBgN/9Q9xcdKvUeW8jRhpc9fgaXHYtieEDLs9aFwANjtDutxwQbKHo+LEGjC8zBVu9ASYN8WV2n595sPG7dw3vK9y9hBUBiDkvKq/VpfO4OKeiASeLjKUBePJpF5aXXCSw7V97NmJe6JIEfesdI7gUE9 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(39860400002)(346002)(376002)(366004)(136003)(31686004)(6916009)(38100700002)(2616005)(86362001)(66574015)(5660300002)(83380400001)(6486002)(8676002)(16526019)(186003)(2906002)(53546011)(7416002)(54906003)(6666004)(66476007)(66556008)(478600001)(8936002)(4326008)(66946007)(36756003)(30864003)(31696002)(316002)(43740500002)(45980500001)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?cWprSUxMWDdIRzBHQVQyOVdQN3R6NDBWZ1FnOGVBUlBhbGhrMEZXRUp3QnpM?= =?utf-8?B?VmFOaUZ6cTlnM1BmT3pLMGtzcWhWL0ZNaEpiWjZ3elVOTjNId0VRbFI4STd4?= =?utf-8?B?NlREOHpaVk5jNDRuYlZyay9XMDNVTjZ5di96NnQ1T1gzSE51VG1JV2Z2R2VF?= =?utf-8?B?SXJFZVlTWVp6S2cwRVRiRGNtS2xBamVUbk1LWktJYkhIOUplOFlIM1RYN2tl?= =?utf-8?B?cjY2eDFCaUhDbHQzVWxDUkhSWWQxbThhNDQxby9hN0VFby9PZzRGK2N6RTlm?= =?utf-8?B?azU3Tm9NUGQzMTNQY2JjMTg3V1A5aXJmZHMydWpCcWlHVE02UG1jRVBZZjA2?= =?utf-8?B?UzF4MU1iWFdaeUFSaHpmOXpTclk5dm5keWlCOXdIcy9NWGhKMXRObURSODFW?= =?utf-8?B?MU1PT2VHbnlJNEFFaVJTVWh5Nm9ab0hEYmhNWnBueWpXWEJiZjBTVGJFWnlv?= =?utf-8?B?ZmhzZ3pqU1pBL05BQThVTTBpTzZUVW1TcnNWZnUvcDIwR1pBalBkZ2NlN1pG?= =?utf-8?B?TTZRRzRVYlJQSXpwRE9PaGx5VFBXZnRjTmZzU1Q3WHhEKzM2Sy9SNkRkeGsr?= =?utf-8?B?TVg2RllDa3dwNUtZOElLbWJyeGVxQmtuNm1QQ2FNZ0NFRmkrREQzdHJDOW1w?= =?utf-8?B?cGRyM2lSZW1DTFdzY3BjeGRkOERiNUs0WDgyRkZvVGUybnNCd1dlSEE0NEZS?= =?utf-8?B?VE02Y2t3cFF5VVIvU2dLWUFuWGZGQ3F2ei95aWdNVktPQ3ZBZUE1T0ZiUG5K?= =?utf-8?B?UlQvdzJFMFN0YjFOZFQ1ZVhsQWlBU0k5azhyRDBxSXo5ZHdxMFpKU3g1Vnlj?= =?utf-8?B?QSsxMG9wNGhGZHNOdmtxVEtrbWpjMmFPSUFOTFNaZ0p4ZHI1T3Z5SGJ2ZjRa?= =?utf-8?B?cVpKNXRjTkRkU1kyejF0bVZXMzVVV3FNRnpxTU16YlkxS21Gc1J1ZHFodm9L?= =?utf-8?B?UlVORlpTQVNlNFZaRFphT0JCYVQyLzNzZDFzZ1hUM2VpYmZaMXZJTFZOVG1Q?= =?utf-8?B?cE1MU09hUXZvU0lDc2ZkSXVaTG00TjB4c2VIekhOQUhiaFYvc1ZCdXZZV0R3?= =?utf-8?B?UmZiN3hQY2JjcGZkcXYzV2F4WmZjQi9PRTZpT1IvWS9BVlVYZVZtRFVhZHFp?= =?utf-8?B?TWNSZVNLeTBwZERxREJzWDZlcHdlSHdOeFNLZHpsTVZnRGhkZnBUWXpiUVRS?= =?utf-8?B?bE1HU0s5dGV3Q0NtZ05uVS9Ob1N4ZEtHK3AxSUFjQys0VTVpRFcwZHI4WmhI?= =?utf-8?B?RWNCdURRYkdIdzNlUE9remJVbDlKcEI3VXdhWDJlVHlnSWRSY2xGbENOOEpL?= =?utf-8?B?L3hLK3Q5cmFjMVhiR1hOYVU0MXFqOTdISE5NZ0ZUQkVZa0pZYUNLbVQ1RU5r?= =?utf-8?B?YS9lVmd4UVk1NVoxMGlkWFhtSGhTWGRuNU4wNExKV0RRR2ptMFU0MDZJK0E1?= =?utf-8?B?Wm45VWVVd0JqTlRQaER4bWJUNzVWcHhrNU1GUGgyK2hsdUQxVXE5aFhsdHdt?= =?utf-8?B?N0l3SlVsL3FJOTlyamlkeVB4SlBCZ3NJQUFLeE1LeENZeWhrMDkvOVlzVU1E?= =?utf-8?B?b1dsaVBrSVB1ZW9PQ2IzV0JPcjlVdU9RekcxZFdpWWIwWEhJNGFUYVhvZVRu?= =?utf-8?B?S3dzRk9EdUZFR2d5OUQ5Y3YzZjVvQkhTblZ2QlZ6R08vSDhYLzNoNUl3R3Vm?= =?utf-8?B?TjUwcHM2M09ROFQzcytnMWxDNVhSVDBQbXlpZHBIU1RBNFo0dk1qL096cDdF?= =?utf-8?B?NlVaYS9wRWRPcmRLVnJTeUw2K05odkhtQnNIbC8zdG82MDQyejNDcUY0anky?= =?utf-8?B?dVhBbnRLM2tsbXlNVm5YaGhJK3EzZUNlUHZ4QWZZR2lqK2FScStWdm9ZWVJw?= =?utf-8?Q?Bwxcv4RY4Iszk?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2d0ad2e-6f56-44e1-f289-08d9252288f1 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2021 17:27:30.8937 (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: gWTLXtBKfcxTRBa1N2BfbpViMkYXLs4+6Bdu8dvlFGzJpYnZevE8nIT8Ux0ha0Q2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4221 Subject: Re: [Intel-gfx] [PATCH 2/7] dma-buf: Rename dma_resv helpers from _rcu to _unlocked (v2) X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Gerd Hoffmann , intel-gfx , Maxime Ripard , Huang Rui , VMware Graphics , dri-devel , Thomas Zimmermann , Lucas Stach Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QW0gMDEuMDYuMjEgdW0gMTY6MzQgc2NocmllYiBEYW5pZWwgVmV0dGVyOgo+IE9uIFRodSwgTWF5 IDI3LCAyMDIxIGF0IDAzOjQxOjAyUE0gKzAyMDAsIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+ IEFtIDI3LjA1LjIxIHVtIDE1OjI1IHNjaHJpZWIgRGFuaWVsIFZldHRlcjoKPj4+IE9uIFRodSwg TWF5IDI3LCAyMDIxIGF0IDE6NTkgUE0gQ2hyaXN0aWFuIEvDtm5pZwo+Pj4gPGNocmlzdGlhbi5r b2VuaWdAYW1kLmNvbT4gd3JvdGU6Cj4+Pj4gQW0gMjcuMDUuMjEgdW0gMTI6Mzkgc2NocmllYiBE YW5pZWwgVmV0dGVyOgo+Pj4+PiBPbiBXZWQsIE1heSAyNiwgMjAyMSBhdCAxMjo1Nzo0MFBNICsw MjAwLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+Pj4+Pj4gQW0gMjUuMDUuMjEgdW0gMjM6MTcg c2NocmllYiBKYXNvbiBFa3N0cmFuZDoKPj4+Pj4+PiBOb25lIG9mIHRoZXNlIGhlbHBlcnMgYWN0 dWFsbHkgbGVhayBhbnkgUkNVIGRldGFpbHMgdG8gdGhlIGNhbGxlci4gIFRoZXkKPj4+Pj4+PiBh bGwgYXNzdW1lIHlvdSBoYXZlIGEgZ2VudWluZSByZWZlcmVuY2UsIHRha2UgdGhlIFJDVSByZWFk IGxvY2ssIGFuZAo+Pj4+Pj4+IHJldHJ5IGlmIG5lZWRlZC4gIE5hbWluZyB0aGVtIHdpdGggYW4g X3JjdSBpcyBsaWtlbHkgdG8gY2F1c2UgY2FsbGVycwo+Pj4+Pj4+IG1vcmUgcGFuaWMgdGhhbiBu ZWVkZWQuCj4+Pj4+PiBJJ20gcmVhbGx5IHdvbmRlcmluZyBpZiB3ZSBuZWVkIHRoaXMgcG9zdGZp eCBpbiB0aGUgZmlyc3QgcGxhY2UuCj4+Pj4+Pgo+Pj4+Pj4gSWYgd2UgdXNlIHRoZSByaWdodCBy Y3VfZGVyZWZlcmVuY2VfY2hlY2soKSBtYWNybyB0aGVuIHRob3NlIGZ1bmN0aW9ucyBjYW4KPj4+ Pj4+IGJlIGNhbGxlZCB3aXRoIGJvdGggdGhlIHJlc2VydmF0aW9uIG9iamVjdCBsb2NrZWQgYW5k IHVubG9ja2VkLiBJdCBzaG91bGRuJ3QKPj4+Pj4+IG1hdHRlciB0byB0aGVtLgo+Pj4+Pj4KPj4+ Pj4+IEJ1dCBnZXR0aW5nIHJpZCBvZiB0aGUgX3JjdSBwb3N0Zml4IHNvdW5kcyBsaWtlIGEgZ29v ZCBpZGVhIGluIGdlbmVyYWwgdG8KPj4+Pj4+IG1lLgo+Pj4+PiBTbyBkb2VzIHRoYXQgY291bnQg YXMgYW4gYWNrIG9yIG5vdD8gSWYgeWVzIEkgdGhpbmsgd2Ugc2hvdWxkIGxhbmQgdGhpcwo+Pj4+ PiBwYXRjaCByaWdodCBhd2F5LCBzaW5jZSBpdCdzIGdvaW5nIHRvIGNvbmZsaWN0IHJlYWwgZmFz dCBiYWRseS4KPj4+PiBJIGhhZCBzb21lIGZvbGxvdyB1cCBkaXNjdXNzaW9uIHdpdGggSmFzb24g YW5kIEkgd291bGQgcmF0aGVyIGxpa2UgdG8KPj4+PiBzd2l0Y2ggdG8gdXNpbmcgcmN1X2RlcmVm ZXJlbmNlX2NoZWNrKCkgaW4gYWxsIHBsYWNlcyBhbmQgY29tcGxldGVseQo+Pj4+IHJlbW92ZSB0 aGUgX3JjdSBwb3N0Zml4Lgo+Pj4gSG0sIEknbSBub3Qgc3VyZSB3aGV0aGVyIHNwcmVhZGluZyBf cmN1IHRyaWNrcyBmdXJ0aGVyIGlzIGFuCj4+PiBlc3BlY2lhbGx5IGJyaWdodCBpZGVhLiBBdCBs ZWFzdCBpOTE1IGlzIGZ1bGwgb2YgdmVyeSBjbGV2ZXIgX3JjdQo+Pj4gdHJpY2tzLCBhbmQgZW5j b3VyYWdpbmcgZHJpdmVycyB0byByb2xsIG91dCB0aGVpciBvd24gX3JjdSBldmVyeXdoZXJlCj4+ PiBpcyBwcm9iYWJseSBub3QgaW4gb3VyIGJlc3QgaW50ZXJlc3QuIFNvbWUgZmFzdC1wYXRoIGNo ZWNraW5nIGlzIGltbwo+Pj4gb2ssIGJ1dCB0aGF0J3MgaXQuIEVzcGVjaWFsbHkgb25jZSB3ZSBn ZXQgaW50byB0aGUgZW50aXJlCj4+PiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBidXNpbmVzcyBpdCBi ZWNvbWVzIHJlYWxseSBuYXN0eSByZWFsbHkgcXVpY2tseS4KPj4gT2gsIHllcyBjb21wbGV0ZWx5 IGFncmVlLiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBpcyBvcHRpbWl6aW5nIGZvciB0aGUgd3JvbmcK Pj4gdXNlIGNhc2UgSSB0aGluay4KPj4KPj4gWW91IHNhdmUgYSBiaXQgb2Ygb3ZlcmhlYWQgd2hp bGUgZnJlZWluZyBmZW5jZXMsIGJ1dCBpbiByZXR1cm4geW91IGhhdmUKPj4gZXh0cmEgb3Zlcmhl YWQgd2hpbGUgYWRkaW5nIGZlbmNlcyB0byB0aGUgZG1hX3Jlc3Ygb2JqZWN0Lgo+IEdldHRpbmcg d2F5IG9mZiB0b3BpYywgYnV0IEknbSB3b25kZXJpbmcgd2hldGhlciB0aGUgZW50aXJlIHJjdSBi dXNpbmVzcwo+IGlzIHJlYWxseSB3b3J0aCBpdCBmb3IgZG1hX2ZlbmNlLgo+Cj4gTW9zdGx5IHdl IG1hbmlwdWxhdGUgZG1hX3Jlc3Ygd2hpbGUgaG9sZGluZyBkbWFfcmVzdiBhbnl3YXkuIFRoZXJl J3MgbWF5YmUKPiBhIGZldyB3YWl0cyBhbmQgc3R1ZmYsIGJ1dCBJJ20gbm90IHN1cmUgd2hldGhl ciB0aGUgZG1hX3Jlc3ZfbG9jayArCj4gZG1hX2ZlbmNlX2dldCArIGRtYV9yZXN2X3VubG9jayAr IGRtYV9mZW5jZV9wdXQgcmVhbGx5IG1hdHRlci4gQW5kIGlmIHlvdQo+IGhhdmUgbG9jayBjb250 ZW50aW9uIG9uIGEgc2luZ2xlIGJ1ZmZlciB5b3UndmUgbG9zdCBhbnl3YXkuCj4KPiBBdCB0aGF0 IHBvaW50IEkgdGhpbmsgd2UgaGF2ZSBtYXliZSBzb21lIGxvY2tsZXNzIHRyaWNrcyBpbiB0aGUg ZXZpY3QKPiBjb2RlLCBidXQgdGhlbiBhZ2FpbiBvbmNlIHlvdSdyZSBldmljdGluZyBpdCdzIHBy b2JhYmx5IGdvaW5nIHByZXR0eSBiYWQKPiBhbHJlYWR5Lgo+Cj4gU28gU0xBQl9UWVBFU0FGRV9C WV9SQ1UgaXMgc29tZXRoaW5nIEkgd2FudCB0byBhbmFseXplIGZvciBpOTE1IHdoZXRoZXIKPiBp dCdzIHJlYWxseSB3b3J0aCBpdCBhbmQgd2FzIGp1c3RpZmllZCwgb3Igd2hldGhlciB3ZSBzaG91 bGQgZHJvcCBpdC4gQnV0Cj4gSSdtIHdvbmRlcmluZyB3aGV0aGVyIHdlIHNob3VsZCBkcm9wIHJj dSBmb3IgZmVuY2VzIG91dHJpZ2h0LiBXb3VsZCBiZQo+IHF1aXRlIHNvbWUgYXVkaXQgdG8gY2hl Y2sgb3V0IHdoZXJlIGl0J3MgdXNlZC4KPgo+ICBGcm9tIGk5MTUgc2lkZSB3ZSd2ZSBkb25lIHRo ZXNlIGxvY2tsZXNzIHRyaWNrcyBiYWNrIHdoZW4KPiBkZXYtPnN0cnVjdF9tdXRleCB3YXMgYSB0 aGluZyBhbmQgYWx3YXMgY29udGVuZGVkLiBCdXQgd2l0aCBwZXItb2JqCj4gbG9ja2luZyBub3cg aGFwcGVuaW5nIGZvciByZWFsIHdpdGggZG1hLXJlc3YsIHRoYXQncyBwcm9iYWJseSBub3QKPiBq dXN0aWZpZWQuCj4KPiBCdXQgdGhlbiBsb29raW5nIGF0IGdpdCBoaXN0b3J5IHRoZSByY3UgaW4g ZG1hX3Jlc3YgaXMgb2xkZXIgdGhhbiB0aGF0LAo+IGFuZCB3YXMganVzdGlmaWVkIHdpdGggdHRt LgoKU2NyYXRjaGluZyBteSBoZWFkIHdoZW4gYW5kIHdoeSBUVE0gc2hvdWxkIGhhdmUgZXZlciBu ZWVkZWQgc29tZSAKbG9ja2xlc3Mgb3BlcmF0aW9uIHdoZW4gdGhhdCB3YXMgYWRkZWQ/IFdlIGRv IGhhdmUgc29tZSBub3csIGJ1dCBqdXN0IApiZWNhdXNlIHRoZXkgd2hlcmUgYXZhaWxhYmxlLgoK T24gdGhlIG90aGVyIGhhbmQgSSdtIHByZXR0eSBzdXJlIHRoYXQgd2UgY2FuIG1ha2UgdGhlIHdo b2xlIFJDVSAKaGFuZGxpbmcgaW4gdGhlIGRtYV9yZXN2IG9iamVjdCBtdWNoIGxlc3MgcGFpbmZ1 bC4gQmFzaWMgcHJvYmxlbSBoZXJlIGlzIAp0aGF0IHdlIGhhdmUgdHdvIHBvaW50ZXJzIGluc3Rl YWQgb2Ygb25lLCBlLmcuIHRoZSBleGNsIGZlbmNlIGFuZC9vciB0aGUgCnNoYXJlZCBmZW5jZXMu CgpJZiB3ZSBjb3VsZCBtb3ZlIHRoZSBleGNsdXNpdmUgZmVuY2UgcG9pbnRlciBpbnRvIHRoZSBz aGFyZWQgZmVuY2VzIG1vc3QgCm9mIHRoZSB0cm91YmxlIHdvdWxkIGdvIGF3YXkgc3VkZGVubHku CgpUaGUgb3RoZXIgdGhpbmcgd2Ugc2hvdWxkIGNlcnRhaW5seSBoYXZlIGlzIG1vcmUgdXNlIGNh c2UgYmFzZWQgCml0ZXJhdG9ycy4gRS5nLiBzb21ldGhpbmcgbGlrZSBkbWFfcmVzdl9mb3JfZWFj aF9zeW5jX2ZlbmNlKC4uLikgey4uLn0uCgpSZWdhcmRzLApDaHJpc3RpYW4uCgo+Cj4+PiBUaGF0 J3Mgd2h5IEknbSBzbGlnaHRseSBsZWFuaW5nIHRvd2FyZHMgX3VubG9ja2VkIHZhcmlhbnRzLCBl eGNlcHQgd2UKPj4+IGRvIHVzZSB0aG9zZSBpbiBsb3RzIG9mIHBsYWNlcyB3aGVyZSB3ZSBob2xk IGRtYV9yZXN2X2xvY2sgdG9vLiBTbyBub3QKPj4+IHN1cmUgd2hhdCdzIHRoZSBiZXN0IHBsYW4g b3ZlcmFsbCBoZXJlLgo+PiBXZWxsIHdoYXQgZnVuY3Rpb24gbmFtZXMgYXJlIHdlIGFjdHVhbGx5 IHRhbGtpbmcgYWJvdXQ/Cj4+Cj4+IEZvciB0aGUgZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KCkgY2Fz ZSBJIGFncmVlIHdlIHNob3VsZCBwcm9iYWJseSBuYW1lIHRoYXQgdG8KPj4gZG1hX3Jlc3ZfZ2V0 X2V4Y2xfdW5sb2NrZWQoKSBiZWNhdXNlIGl0IG1ha2VzIG5vIHNlbnNlIGF0IGFsbCB0byB1c2Ug dGhpcwo+PiBmdW5jdGlvbiB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLgo+Pgo+PiBCdXQgZm9yIHRo ZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgo+PiBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdQo+PiBkbWFf cmVzdl93YWl0X3RpbWVvdXRfcmN1Cj4+IGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1Cj4+Cj4+ IEkgdGhpbmsgd2Ugc2hvdWxkIGp1c3QgZHJvcCB0aGUgX3JjdSBuYW1pbmcgYmVjYXVzZSB0aG9z ZSBhcmUgc3VwcG9zZWQgdG8KPj4gd29yayBpbmRlcGVuZGVudCBpZiB0aGUgcmVzdiBsb2NrIGlz IGhlbGQgb3Igbm90Lgo+IEFjayBvbiBhbGwgbmFtaW5nLgo+IC1EYW5pZWwKPgo+PiBSZWdhcmRz LAo+PiBDaHJpc3RpYW4uCj4+Cj4+PiAtRGFuaWVsCj4+Pgo+Pj4+IEJ1dCB5ZXMgSSBzZWUgdGhl IHBhaW4gb2YgcmViYXNpbmcgdGhpcyBhcyB3ZWxsLgo+Pj4+Cj4+Pj4gQ2hyaXN0aWFuLgo+Pj4+ Cj4+Pj4+IC1EYW5pZWwKPj4+Pj4KPj4+Pj4+IENocmlzdGlhbi4KPj4+Pj4+Cj4+Pj4+Pj4gdjIg KEphc29uIEVrc3RyYW5kKToKPj4+Pj4+PiAgICAgIC0gRml4IGZ1bmN0aW9uIGFyZ3VtZW50IGlu ZGVudGF0aW9uCj4+Pj4+Pj4KPj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBKYXNvbiBFa3N0cmFuZCA8 amFzb25Aamxla3N0cmFuZC5uZXQ+Cj4+Pj4+Pj4gU3VnZ2VzdGVkLWJ5OiBEYW5pZWwgVmV0dGVy IDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+Pj4+Pj4+IENjOiBDaHJpc3RpYW4gS8O2bmlnIDxj aHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4+Pj4+Pj4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxt YWFydGVuLmxhbmtob3JzdEBsaW51eC5pbnRlbC5jb20+Cj4+Pj4+Pj4gQ2M6IE1heGltZSBSaXBh cmQgPG1yaXBhcmRAa2VybmVsLm9yZz4KPj4+Pj4+PiBDYzogVGhvbWFzIFppbW1lcm1hbm4gPHR6 aW1tZXJtYW5uQHN1c2UuZGU+Cj4+Pj4+Pj4gQ2M6IEx1Y2FzIFN0YWNoIDxsLnN0YWNoQHBlbmd1 dHJvbml4LmRlPgo+Pj4+Pj4+IENjOiBSb2IgQ2xhcmsgPHJvYmRjbGFya0BnbWFpbC5jb20+Cj4+ Pj4+Pj4gQ2M6IFNlYW4gUGF1bCA8c2VhbkBwb29ybHkucnVuPgo+Pj4+Pj4+IENjOiBIdWFuZyBS dWkgPHJheS5odWFuZ0BhbWQuY29tPgo+Pj4+Pj4+IENjOiBHZXJkIEhvZmZtYW5uIDxrcmF4ZWxA cmVkaGF0LmNvbT4KPj4+Pj4+PiBDYzogVk13YXJlIEdyYXBoaWNzIDxsaW51eC1ncmFwaGljcy1t YWludGFpbmVyQHZtd2FyZS5jb20+Cj4+Pj4+Pj4gLS0tCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2Rt YS1idWYvZG1hLWJ1Zi5jICAgICAgICAgICAgICAgICAgICAgfCAgNCArLS0KPj4+Pj4+PiAgICAg IGRyaXZlcnMvZG1hLWJ1Zi9kbWEtcmVzdi5jICAgICAgICAgICAgICAgICAgICB8IDI4ICsrKysr KysrKy0tLS0tLS0tLS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9kaXNwbGF5LmMgICB8ICA2ICsrLS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMgICB8ICAyICstCj4+Pj4+Pj4gICAgICBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgICAgICAgfCAgNCArLS0KPj4+Pj4+PiAg ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9pZHMuYyAgICAgICB8ICA2ICsr LS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jICAg ICAgICB8ICA0ICstLQo+Pj4+Pj4+ICAgICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X29iamVjdC5jICAgIHwgIDQgKy0tCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdXZkLmMgICAgICAgfCAgNiArKy0tCj4+Pj4+Pj4gICAgICBkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYyAgICAgICAgfCAxNCArKysrKy0tLS0tCj4+ Pj4+Pj4gICAgICAuLi4vZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMg fCAgNiArKy0tCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jICAgICAgICAg ICAgICAgICAgICAgfCAxMCArKystLS0tCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0vZHJt X2dlbV9hdG9taWNfaGVscGVyLmMgICAgICAgfCAgMiArLQo+Pj4+Pj4+ICAgICAgZHJpdmVycy9n cHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYyAgICAgICAgIHwgIDcgKystLS0KPj4+Pj4+PiAg ICAgIGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtX3N1Ym1pdC5jICB8ICA4ICsr Ky0tLQo+Pj4+Pj4+ICAgICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNw bGF5LmMgIHwgIDIgKy0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2RtYV9yZXN2 X3V0aWxzLmMgICAgICAgICB8ICAyICstCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fYnVzeS5jICAgICAgfCAgMiArLQo+Pj4+Pj4+ICAgICAgLi4uL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jICAgIHwgIDIgKy0KPj4+Pj4+PiAgICAg IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCAgICB8ICAyICstCj4+ Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jICAg fCAgNCArLS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV93 YWl0LmMgICAgICB8IDEwICsrKy0tLS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8ICA2ICsrLS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfc3dfZmVuY2UuYyAgICAgICAgICB8ICA0ICstLQo+Pj4+Pj4+ICAg ICAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMgICAgICAgICAgICAgICAgIHwgIDMgKy0K Pj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUwL3duZHcuYyAgICAg ICB8ICAyICstCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dl bS5jICAgICAgICAgfCAgNCArLS0KPj4+Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9wYW5mcm9z dC9wYW5mcm9zdF9kcnYuYyAgICAgICB8ICA0ICstLQo+Pj4+Pj4+ICAgICAgZHJpdmVycy9ncHUv ZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jICAgICAgIHwgIDIgKy0KPj4+Pj4+PiAgICAgIGRy aXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jICAgICAgICAgICB8ICA2ICsrLS0KPj4+ Pj4+PiAgICAgIGRyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21uLmMgICAgICAgICAgICB8 ICA0ICstLQo+Pj4+Pj4+ICAgICAgZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyAgICAgICAg ICAgICAgICAgIHwgMTggKysrKysrLS0tLS0tCj4+Pj4+Pj4gICAgICBkcml2ZXJzL2dwdS9kcm0v dmdlbS92Z2VtX2ZlbmNlLmMgICAgICAgICAgICAgfCAgNCArLS0KPj4+Pj4+PiAgICAgIGRyaXZl cnMvZ3B1L2RybS92aXJ0aW8vdmlydGdwdV9pb2N0bC5jICAgICAgICB8ICA2ICsrLS0KPj4+Pj4+ PiAgICAgIGRyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JvLmMgICAgICAgICAgICB8ICAy ICstCj4+Pj4+Pj4gICAgICBpbmNsdWRlL2xpbnV4L2RtYS1yZXN2LmggICAgICAgICAgICAgICAg ICAgICAgfCAxOCArKysrKystLS0tLS0KPj4+Pj4+PiAgICAgIDM2IGZpbGVzIGNoYW5nZWQsIDEw OCBpbnNlcnRpb25zKCspLCAxMTAgZGVsZXRpb25zKC0pCj4+Pj4+Pj4KPj4+Pj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVm LmMKPj4+Pj4+PiBpbmRleCBmMjY0YjcwYzM4M2ViLi5lZDY0NTFkNTVkNjYzIDEwMDY0NAo+Pj4+ Pj4+IC0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPj4+Pj4+PiArKysgYi9kcml2ZXJz L2RtYS1idWYvZG1hLWJ1Zi5jCj4+Pj4+Pj4gQEAgLTExNDcsOCArMTE0Nyw4IEBAIHN0YXRpYyBp bnQgX19kbWFfYnVmX2JlZ2luX2NwdV9hY2Nlc3Moc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPj4+ Pj4+PiAgICAgICBsb25nIHJldDsKPj4+Pj4+PiAgICAgICAvKiBXYWl0IG9uIGFueSBpbXBsaWNp dCByZW5kZXJpbmcgZmVuY2VzICovCj4+Pj4+Pj4gLSAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGlt ZW91dF9yY3UocmVzdiwgd3JpdGUsIHRydWUsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPj4+Pj4+PiAr ICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKHJlc3YsIHdyaXRlLCB0cnVl LAo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1ND SEVEVUxFX1RJTUVPVVQpOwo+Pj4+Pj4+ICAgICAgIGlmIChyZXQgPCAwKQo+Pj4+Pj4+ICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsKPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVm L2RtYS1yZXN2LmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLXJlc3YuYwo+Pj4+Pj4+IGluZGV4IDZk ZGJlYjVkZmJmNjUuLmQ2ZjFlZDRjZDRkNTUgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9k bWEtYnVmL2RtYS1yZXN2LmMKPj4+Pj4+PiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLXJlc3Yu Ywo+Pj4+Pj4+IEBAIC00MTcsNyArNDE3LDcgQEAgaW50IGRtYV9yZXN2X2NvcHlfZmVuY2VzKHN0 cnVjdCBkbWFfcmVzdiAqZHN0LCBzdHJ1Y3QgZG1hX3Jlc3YgKnNyYykKPj4+Pj4+PiAgICAgIEVY UE9SVF9TWU1CT0woZG1hX3Jlc3ZfY29weV9mZW5jZXMpOwo+Pj4+Pj4+ICAgICAgLyoqCj4+Pj4+ Pj4gLSAqIGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1IC0gR2V0IGFuIG9iamVjdCdzIHNoYXJlZCBh bmQgZXhjbHVzaXZlCj4+Pj4+Pj4gKyAqIGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQgLSBH ZXQgYW4gb2JqZWN0J3Mgc2hhcmVkIGFuZCBleGNsdXNpdmUKPj4+Pj4+PiAgICAgICAqIGZlbmNl cyB3aXRob3V0IHVwZGF0ZSBzaWRlIGxvY2sgaGVsZAo+Pj4+Pj4+ICAgICAgICogQG9iajogdGhl IHJlc2VydmF0aW9uIG9iamVjdAo+Pj4+Pj4+ICAgICAgICogQHBmZW5jZV9leGNsOiB0aGUgcmV0 dXJuZWQgZXhjbHVzaXZlIGZlbmNlIChvciBOVUxMKQo+Pj4+Pj4+IEBAIC00MjksMTAgKzQyOSwx MCBAQCBFWFBPUlRfU1lNQk9MKGRtYV9yZXN2X2NvcHlfZmVuY2VzKTsKPj4+Pj4+PiAgICAgICAq IGV4Y2x1c2l2ZSBmZW5jZSBpcyBub3Qgc3BlY2lmaWVkIHRoZSBmZW5jZSBpcyBwdXQgaW50byB0 aGUgYXJyYXkgb2YgdGhlCj4+Pj4+Pj4gICAgICAgKiBzaGFyZWQgZmVuY2VzIGFzIHdlbGwuIFJl dHVybnMgZWl0aGVyIHplcm8gb3IgLUVOT01FTS4KPj4+Pj4+PiAgICAgICAqLwo+Pj4+Pj4+IC1p bnQgZG1hX3Jlc3ZfZ2V0X2ZlbmNlc19yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosCj4+Pj4+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKnBmZW5jZV9leGNsLAo+ Pj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpwc2hhcmVkX2NvdW50LAo+ Pj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKioqcHNoYXJl ZCkKPj4+Pj4+PiAraW50IGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQoc3RydWN0IGRtYV9y ZXN2ICpvYmosCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG1h X2ZlbmNlICoqcGZlbmNlX2V4Y2wsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCAqcHNoYXJlZF9jb3VudCwKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKioqcHNoYXJlZCkKPj4+Pj4+PiAgICAgIHsKPj4+Pj4+ PiAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkID0gTlVMTDsKPj4+Pj4+PiAgICAgICBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZV9leGNsOwo+Pj4+Pj4+IEBAIC01MTUsMTAgKzUxNSwxMCBA QCBpbnQgZG1hX3Jlc3ZfZ2V0X2ZlbmNlc19yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosCj4+Pj4+ Pj4gICAgICAgKnBzaGFyZWQgPSBzaGFyZWQ7Cj4+Pj4+Pj4gICAgICAgcmV0dXJuIHJldDsKPj4+ Pj4+PiAgICAgIH0KPj4+Pj4+PiAtRVhQT1JUX1NZTUJPTF9HUEwoZG1hX3Jlc3ZfZ2V0X2ZlbmNl c19yY3UpOwo+Pj4+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfcmVzdl9nZXRfZmVuY2VzX3Vu bG9ja2VkKTsKPj4+Pj4+PiAgICAgIC8qKgo+Pj4+Pj4+IC0gKiBkbWFfcmVzdl93YWl0X3RpbWVv dXRfcmN1IC0gV2FpdCBvbiByZXNlcnZhdGlvbidzIG9iamVjdHMKPj4+Pj4+PiArICogZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkIC0gV2FpdCBvbiByZXNlcnZhdGlvbidzIG9iamVjdHMK Pj4+Pj4+PiAgICAgICAqIHNoYXJlZCBhbmQvb3IgZXhjbHVzaXZlIGZlbmNlcy4KPj4+Pj4+PiAg ICAgICAqIEBvYmo6IHRoZSByZXNlcnZhdGlvbiBvYmplY3QKPj4+Pj4+PiAgICAgICAqIEB3YWl0 X2FsbDogaWYgdHJ1ZSwgd2FpdCBvbiBhbGwgZmVuY2VzLCBlbHNlIHdhaXQgb24ganVzdCBleGNs dXNpdmUgZmVuY2UKPj4+Pj4+PiBAQCAtNTI5LDkgKzUyOSw5IEBAIEVYUE9SVF9TWU1CT0xfR1BM KGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KTsKPj4+Pj4+PiAgICAgICAqIFJldHVybnMgLUVSRVNU QVJUU1lTIGlmIGludGVycnVwdGVkLCAwIGlmIHRoZSB3YWl0IHRpbWVkIG91dCwgb3IKPj4+Pj4+ PiAgICAgICAqIGdyZWF0ZXIgdGhhbiB6ZXIgb24gc3VjY2Vzcy4KPj4+Pj4+PiAgICAgICAqLwo+ Pj4+Pj4+IC1sb25nIGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpv YmosCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3YWl0X2FsbCwgYm9v bCBpbnRyLAo+Pj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg dGltZW91dCkKPj4+Pj4+PiArbG9uZyBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQoc3Ry dWN0IGRtYV9yZXN2ICpvYmosCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBib29sIHdhaXRfYWxsLCBib29sIGludHIsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCj4+Pj4+Pj4gICAgICB7Cj4+Pj4+Pj4g ICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4+Pj4+Pj4gICAgICAgdW5zaWduZWQgc2Vx LCBzaGFyZWRfY291bnQ7Cj4+Pj4+Pj4gQEAgLTYwMiw3ICs2MDIsNyBAQCBsb25nIGRtYV9yZXN2 X3dhaXRfdGltZW91dF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosCj4+Pj4+Pj4gICAgICAgcmN1 X3JlYWRfdW5sb2NrKCk7Cj4+Pj4+Pj4gICAgICAgZ290byByZXRyeTsKPj4+Pj4+PiAgICAgIH0K Pj4+Pj4+PiAtRVhQT1JUX1NZTUJPTF9HUEwoZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdSk7Cj4+ Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZCk7 Cj4+Pj4+Pj4gICAgICBzdGF0aWMgaW5saW5lIGludCBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3Np bmdsZShzdHJ1Y3QgZG1hX2ZlbmNlICpwYXNzZWRfZmVuY2UpCj4+Pj4+Pj4gQEAgLTYyMiw3ICs2 MjIsNyBAQCBzdGF0aWMgaW5saW5lIGludCBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3NpbmdsZShz dHJ1Y3QgZG1hX2ZlbmNlICpwYXNzZWRfZmVuY2UpCj4+Pj4+Pj4gICAgICB9Cj4+Pj4+Pj4gICAg ICAvKioKPj4+Pj4+PiAtICogZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UgLSBUZXN0IGlmIGEg cmVzZXJ2YXRpb24gb2JqZWN0J3MKPj4+Pj4+PiArICogZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91 bmxvY2tlZCAtIFRlc3QgaWYgYSByZXNlcnZhdGlvbiBvYmplY3Qncwo+Pj4+Pj4+ICAgICAgICog ZmVuY2VzIGhhdmUgYmVlbiBzaWduYWxlZC4KPj4+Pj4+PiAgICAgICAqIEBvYmo6IHRoZSByZXNl cnZhdGlvbiBvYmplY3QKPj4+Pj4+PiAgICAgICAqIEB0ZXN0X2FsbDogaWYgdHJ1ZSwgdGVzdCBh bGwgZmVuY2VzLCBvdGhlcndpc2Ugb25seSB0ZXN0IHRoZSBleGNsdXNpdmUKPj4+Pj4+PiBAQCAt NjMxLDcgKzYzMSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRf c2luZ2xlKHN0cnVjdCBkbWFfZmVuY2UgKnBhc3NlZF9mZW5jZSkKPj4+Pj4+PiAgICAgICAqIFJF VFVSTlMKPj4+Pj4+PiAgICAgICAqIHRydWUgaWYgYWxsIGZlbmNlcyBzaWduYWxlZCwgZWxzZSBm YWxzZQo+Pj4+Pj4+ICAgICAgICovCj4+Pj4+Pj4gLWJvb2wgZG1hX3Jlc3ZfdGVzdF9zaWduYWxl ZF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wgdGVzdF9hbGwpCj4+Pj4+Pj4gK2Jvb2wg ZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChzdHJ1Y3QgZG1hX3Jlc3YgKm9iaiwgYm9v bCB0ZXN0X2FsbCkKPj4+Pj4+PiAgICAgIHsKPj4+Pj4+PiAgICAgICB1bnNpZ25lZCBzZXEsIHNo YXJlZF9jb3VudDsKPj4+Pj4+PiAgICAgICBpbnQgcmV0Owo+Pj4+Pj4+IEBAIC02ODAsNCArNjgw LDQgQEAgYm9vbCBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShzdHJ1Y3QgZG1hX3Jlc3YgKm9i aiwgYm9vbCB0ZXN0X2FsbCkKPj4+Pj4+PiAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPj4+Pj4+ PiAgICAgICByZXR1cm4gcmV0Owo+Pj4+Pj4+ICAgICAgfQo+Pj4+Pj4+IC1FWFBPUlRfU1lNQk9M X0dQTChkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdSk7Cj4+Pj4+Pj4gK0VYUE9SVF9TWU1CT0xf R1BMKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQpOwo+Pj4+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGlzcGxheS5jIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rpc3BsYXkuYwo+Pj4+Pj4+IGluZGV4IDhhMWZiOGI2 NjA2ZTUuLmI4ZTI0ZjE5OWJlOWEgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2Rpc3BsYXkuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9kaXNwbGF5LmMKPj4+Pj4+PiBAQCAtMjAzLDkgKzIwMyw5IEBA IGludCBhbWRncHVfZGlzcGxheV9jcnRjX3BhZ2VfZmxpcF90YXJnZXQoc3RydWN0IGRybV9jcnRj ICpjcnRjLAo+Pj4+Pj4+ICAgICAgICAgICAgICAgZ290byB1bnBpbjsKPj4+Pj4+PiAgICAgICB9 Cj4+Pj4+Pj4gLSAgIHIgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShuZXdfYWJvLT50Ym8uYmFz ZS5yZXN2LCAmd29yay0+ZXhjbCwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmd29yay0+c2hhcmVkX2NvdW50LAo+Pj4+Pj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3b3JrLT5zaGFyZWQpOwo+Pj4+Pj4+ICsgICBy ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChuZXdfYWJvLT50Ym8uYmFzZS5yZXN2LCAm d29yay0+ZXhjbCwKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JndvcmstPnNoYXJlZF9jb3VudCwKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJndvcmstPnNoYXJlZCk7Cj4+Pj4+Pj4gICAgICAgaWYgKHVubGlrZWx5KHIgIT0g MCkpIHsKPj4+Pj4+PiAgICAgICAgICAgICAgIERSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBmZW5j ZXMgZm9yIGJ1ZmZlclxuIik7Cj4+Pj4+Pj4gICAgICAgICAgICAgICBnb3RvIHVucGluOwo+Pj4+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1 Zi5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+Pj4+Pj4+ IGluZGV4IGJhYTk4MGE0NzdkOTQuLjBkMDMxOWJjNTE1NzcgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+Pj4+Pj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kbWFfYnVmLmMKPj4+Pj4+PiBAQCAt OTgsNyArOTgsNyBAQCBfX2RtYV9yZXN2X21ha2VfZXhjbHVzaXZlKHN0cnVjdCBkbWFfcmVzdiAq b2JqKQo+Pj4+Pj4+ICAgICAgIGlmICghZG1hX3Jlc3ZfZ2V0X2xpc3Qob2JqKSkgLyogbm8gc2hh cmVkIGZlbmNlcyB0byBjb252ZXJ0ICovCj4+Pj4+Pj4gICAgICAgICAgICAgICByZXR1cm4gMDsK Pj4+Pj4+PiAtICAgciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KG9iaiwgTlVMTCwgJmNvdW50 LCAmZmVuY2VzKTsKPj4+Pj4+PiArICAgciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQo b2JqLCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+Pj4+Pj4+ICAgICAgIGlmIChyKQo+Pj4+Pj4+ ICAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9nZW0uYwo+Pj4+Pj4+IGluZGV4IDE4OTc0YmQwODFmMDAuLjhlMjk5NmQ2YmEzYWQg MTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dl bS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5j Cj4+Pj4+Pj4gQEAgLTQ3MSw4ICs0NzEsOCBAQCBpbnQgYW1kZ3B1X2dlbV93YWl0X2lkbGVfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4+PiAgICAgICAgICAg ICAgIHJldHVybiAtRU5PRU5UOwo+Pj4+Pj4+ICAgICAgIH0KPj4+Pj4+PiAgICAgICByb2JqID0g Z2VtX3RvX2FtZGdwdV9ibyhnb2JqKTsKPj4+Pj4+PiAtICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90 aW1lb3V0X3JjdShyb2JqLT50Ym8uYmFzZS5yZXN2LCB0cnVlLCB0cnVlLAo+Pj4+Pj4+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKPj4+Pj4+ PiArICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKHJvYmotPnRiby5iYXNl LnJlc3YsIHRydWUsIHRydWUsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aW1lb3V0KTsKPj4+Pj4+PiAgICAgICAvKiByZXQgPT0gMCBtZWFucyBub3Qg c2lnbmFsZWQsCj4+Pj4+Pj4gICAgICAgICogcmV0ID4gMCBtZWFucyBzaWduYWxlZAo+Pj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMKPj4+Pj4+PiBpbmRleCBiNDk3 MWU5MGI5OGNmLi4zOGUxYjMyZGQyY2VmIDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9pZHMuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9pZHMuYwo+Pj4+Pj4+IEBAIC0xMTIsNyArMTEyLDcgQEAgdm9p ZCBhbWRncHVfcGFzaWRfZnJlZV9kZWxheWVkKHN0cnVjdCBkbWFfcmVzdiAqcmVzdiwKPj4+Pj4+ PiAgICAgICB1bnNpZ25lZCBjb3VudDsKPj4+Pj4+PiAgICAgICBpbnQgcjsKPj4+Pj4+PiAtICAg ciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KHJlc3YsIE5VTEwsICZjb3VudCwgJmZlbmNlcyk7 Cj4+Pj4+Pj4gKyAgIHIgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHJlc3YsIE5VTEws ICZjb3VudCwgJmZlbmNlcyk7Cj4+Pj4+Pj4gICAgICAgaWYgKHIpCj4+Pj4+Pj4gICAgICAgICAg ICAgICBnb3RvIGZhbGxiYWNrOwo+Pj4+Pj4+IEBAIC0xNTYsOCArMTU2LDggQEAgdm9pZCBhbWRn cHVfcGFzaWRfZnJlZV9kZWxheWVkKHN0cnVjdCBkbWFfcmVzdiAqcmVzdiwKPj4+Pj4+PiAgICAg ICAvKiBOb3QgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIGRlbGF5ZWQgZGVsZXRlLCBhcyBsYXN0IHJl c29ydAo+Pj4+Pj4+ICAgICAgICAqIGJsb2NrIGZvciBhbGwgdGhlIGZlbmNlcyB0byBjb21wbGV0 ZS4KPj4+Pj4+PiAgICAgICAgKi8KPj4+Pj4+PiAtICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Jj dShyZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+Pj4+ICsgICBkbWFfcmVzdl93 YWl0X3RpbWVvdXRfdW5sb2NrZWQocmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+Pj4g ICAgICAgYW1kZ3B1X3Bhc2lkX2ZyZWUocGFzaWQpOwo+Pj4+Pj4+ICAgICAgfQo+Pj4+Pj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCj4+Pj4+Pj4gaW5kZXggODI4YjUxNjdm ZjEyOC4uMDMxOWM4YjU0N2M0OCAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfbW4uYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9tbi5jCj4+Pj4+Pj4gQEAgLTc1LDggKzc1LDggQEAgc3RhdGljIGJvb2wg YW1kZ3B1X21uX2ludmFsaWRhdGVfZ2Z4KHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKm1u aSwKPj4+Pj4+PiAgICAgICBtbXVfaW50ZXJ2YWxfc2V0X3NlcShtbmksIGN1cl9zZXEpOwo+Pj4+ Pj4+IC0gICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+dGJvLmJhc2UucmVzdiwg dHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1B WF9TQ0hFRFVMRV9USU1FT1VUKTsKPj4+Pj4+PiArICAgciA9IGRtYV9yZXN2X3dhaXRfdGltZW91 dF91bmxvY2tlZChiby0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ Pj4+Pj4+ICAgICAgIG11dGV4X3VubG9jaygmYWRldi0+bm90aWZpZXJfbG9jayk7Cj4+Pj4+Pj4g ICAgICAgaWYgKHIgPD0gMCkKPj4+Pj4+PiAgICAgICAgICAgICAgIERSTV9FUlJPUigiKCVsZCkg ZmFpbGVkIHRvIHdhaXQgZm9yIHVzZXIgYm9cbiIsIHIpOwo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPj4+Pj4+PiBpbmRleCAwYWRmZmNhY2UzMjYz Li5kZTFjN2M1NTAxNjgzIDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+Pj4+IEBAIC03OTEsOCArNzkxLDggQEAgaW50IGFt ZGdwdV9ib19rbWFwKHN0cnVjdCBhbWRncHVfYm8gKmJvLCB2b2lkICoqcHRyKQo+Pj4+Pj4+ICAg ICAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+IC0gICByID0gZG1h X3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+dGJvLmJhc2UucmVzdiwgZmFsc2UsIGZhbHNlLAo+ Pj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1ND SEVEVUxFX1RJTUVPVVQpOwo+Pj4+Pj4+ICsgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Vu bG9ja2VkKGJvLT50Ym8uYmFzZS5yZXN2LCBmYWxzZSwgZmFsc2UsCj4+Pj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+ Pj4+ICAgICAgIGlmIChyIDwgMCkKPj4+Pj4+PiAgICAgICAgICAgICAgIHJldHVybiByOwo+Pj4+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdXZkLmMKPj4+Pj4+PiBpbmRleCBj NmRiYzA4MDE2MDQ1Li40YTIxOTY0MDRmYjY5IDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91dmQuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV91dmQuYwo+Pj4+Pj4+IEBAIC0xMTE1LDkgKzExMTUsOSBA QCBzdGF0aWMgaW50IGFtZGdwdV91dmRfc2VuZF9tc2coc3RydWN0IGFtZGdwdV9yaW5nICpyaW5n LCBzdHJ1Y3QgYW1kZ3B1X2JvICpibywKPj4+Pj4+PiAgICAgICBpYi0+bGVuZ3RoX2R3ID0gMTY7 Cj4+Pj4+Pj4gICAgICAgaWYgKGRpcmVjdCkgewo+Pj4+Pj4+IC0gICAgICAgICAgIHIgPSBkbWFf cmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT50Ym8uYmFzZS5yZXN2LAo+Pj4+Pj4+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBmYWxzZSwK Pj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbXNlY3NfdG9famlmZmllcygxMCkpOwo+Pj4+Pj4+ICsgICAgICAgICAgIHIgPSBkbWFfcmVz dl93YWl0X3RpbWVvdXRfdW5sb2NrZWQoYm8tPnRiby5iYXNlLnJlc3YsCj4+Pj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCBmYWxzZSwKPj4+ Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZWNz X3RvX2ppZmZpZXMoMTApKTsKPj4+Pj4+PiAgICAgICAgICAgICAgIGlmIChyID09IDApCj4+Pj4+ Pj4gICAgICAgICAgICAgICAgICAgICAgIHIgPSAtRVRJTUVET1VUOwo+Pj4+Pj4+ICAgICAgICAg ICAgICAgaWYgKHIgPCAwKQo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92 bS5jCj4+Pj4+Pj4gaW5kZXggNGEzZTNmNzJlMTI3Ny4uN2JhMWM1MzdkNjU4NCAxMDA2NDQKPj4+ Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+Pj4+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+Pj4gQEAg LTIwMDcsMTQgKzIwMDcsMTQgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX3BydF9maW5pKHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2LCBzdHJ1Y3QgYW1kZ3B1X3ZtICp2bSkKPj4+Pj4+PiAgICAg ICB1bnNpZ25lZCBpLCBzaGFyZWRfY291bnQ7Cj4+Pj4+Pj4gICAgICAgaW50IHI7Cj4+Pj4+Pj4g LSAgIHIgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShyZXN2LCAmZXhjbCwKPj4+Pj4+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hhcmVkX2NvdW50LCAmc2hh cmVkKTsKPj4+Pj4+PiArICAgciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQocmVzdiwg JmV4Y2wsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaGFy ZWRfY291bnQsICZzaGFyZWQpOwo+Pj4+Pj4+ICAgICAgIGlmIChyKSB7Cj4+Pj4+Pj4gICAgICAg ICAgICAgICAvKiBOb3QgZW5vdWdoIG1lbW9yeSB0byBncmFiIHRoZSBmZW5jZSBsaXN0LCBhcyBs YXN0IHJlc29ydAo+Pj4+Pj4+ICAgICAgICAgICAgICAgICogYmxvY2sgZm9yIGFsbCB0aGUgZmVu Y2VzIHRvIGNvbXBsZXRlLgo+Pj4+Pj4+ICAgICAgICAgICAgICAgICovCj4+Pj4+Pj4gLSAgICAg ICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShyZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NI RURVTEVfVElNRU9VVCk7Cj4+Pj4+Pj4gKyAgICAgICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0 X3VubG9ja2VkKHJlc3YsIHRydWUsIGZhbHNlLAo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+Pj4gICAg ICAgICAgICAgICByZXR1cm47Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+IEBAIC0yNjI1LDcgKzI2 MjUsNyBAQCBib29sIGFtZGdwdV92bV9ldmljdGFibGUoc3RydWN0IGFtZGdwdV9ibyAqYm8pCj4+ Pj4+Pj4gICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+Pj4+PiAgICAgICAvKiBEb24ndCBl dmljdCBWTSBwYWdlIHRhYmxlcyB3aGlsZSB0aGV5IGFyZSBidXN5ICovCj4+Pj4+Pj4gLSAgIGlm ICghZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UoYm8tPnRiby5iYXNlLnJlc3YsIHRydWUpKQo+ Pj4+Pj4+ICsgICBpZiAoIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQoYm8tPnRiby5i YXNlLnJlc3YsIHRydWUpKQo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4+ Pj4+ICAgICAgIC8qIFRyeSB0byBibG9jayBvbmdvaW5nIHVwZGF0ZXMgKi8KPj4+Pj4+PiBAQCAt MjgwNSw4ICsyODA1LDggQEAgdm9pZCBhbWRncHVfdm1fYWRqdXN0X3NpemUoc3RydWN0IGFtZGdw dV9kZXZpY2UgKmFkZXYsIHVpbnQzMl90IG1pbl92bV9zaXplLAo+Pj4+Pj4+ICAgICAgICovCj4+ Pj4+Pj4gICAgICBsb25nIGFtZGdwdV92bV93YWl0X2lkbGUoc3RydWN0IGFtZGdwdV92bSAqdm0s IGxvbmcgdGltZW91dCkKPj4+Pj4+PiAgICAgIHsKPj4+Pj4+PiAtICAgdGltZW91dCA9IGRtYV9y ZXN2X3dhaXRfdGltZW91dF9yY3Uodm0tPnJvb3QuYmFzZS5iby0+dGJvLmJhc2UucmVzdiwKPj4+ Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwg dGltZW91dCk7Cj4+Pj4+Pj4gKyAgIHRpbWVvdXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5s b2NrZWQodm0tPnJvb3QuYmFzZS5iby0+dGJvLmJhc2UucmVzdiwKPj4+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlLCB0aW1lb3V0KTsK Pj4+Pj4+PiAgICAgICBpZiAodGltZW91dCA8PSAwKQo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0 dXJuIHRpbWVvdXQ7Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlz cGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv YW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4+Pj4+Pj4gaW5kZXggOWNhNTE3YjY1ODU0Ni4uMDEyMWQy ODE3ZmEyNiAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv YW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9k aXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+Pj4+Pj4+IEBAIC04Mjc2LDkgKzgyNzYsOSBA QCBzdGF0aWMgdm9pZCBhbWRncHVfZG1fY29tbWl0X3BsYW5lcyhzdHJ1Y3QgZHJtX2F0b21pY19z dGF0ZSAqc3RhdGUsCj4+Pj4+Pj4gICAgICAgICAgICAgICAgKiBkZWFkbG9jayBkdXJpbmcgR1BV IHJlc2V0IHdoZW4gdGhpcyBmZW5jZSB3aWxsIG5vdCBzaWduYWwKPj4+Pj4+PiAgICAgICAgICAg ICAgICAqIGJ1dCB3ZSBob2xkIHJlc2VydmF0aW9uIGxvY2sgZm9yIHRoZSBCTy4KPj4+Pj4+PiAg ICAgICAgICAgICAgICAqLwo+Pj4+Pj4+IC0gICAgICAgICAgIHIgPSBkbWFfcmVzdl93YWl0X3Rp bWVvdXRfcmN1KGFiby0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwKPj4+Pj4+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCj4+Pj4+Pj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZWNzX3Rv X2ppZmZpZXMoNTAwMCkpOwo+Pj4+Pj4+ICsgICAgICAgICAgIHIgPSBkbWFfcmVzdl93YWl0X3Rp bWVvdXRfdW5sb2NrZWQoYWJvLT50Ym8uYmFzZS5yZXN2LCB0cnVlLAo+Pj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCj4+Pj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2Vjc190b19qaWZm aWVzKDUwMDApKTsKPj4+Pj4+PiAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShyIDw9IDApKQo+ Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBEUk1fRVJST1IoIldhaXRpbmcgZm9yIGZlbmNl cyB0aW1lZCBvdXQhIik7Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f Z2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4+Pj4+Pj4gaW5kZXggOTk4OTQyNWU5 ODc1YS4uMTI0MWE0MjFiOWU4MSAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2dlbS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwo+Pj4+Pj4+ IEBAIC03NzAsOCArNzcwLDggQEAgbG9uZyBkcm1fZ2VtX2RtYV9yZXN2X3dhaXQoc3RydWN0IGRy bV9maWxlICpmaWxlcCwgdTMyIGhhbmRsZSwKPj4+Pj4+PiAgICAgICAgICAgICAgIHJldHVybiAt RUlOVkFMOwo+Pj4+Pj4+ICAgICAgIH0KPj4+Pj4+PiAtICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90 aW1lb3V0X3JjdShvYmotPnJlc3YsIHdhaXRfYWxsLAo+Pj4+Pj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0aW1lb3V0KTsKPj4+Pj4+PiArICAg cmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+cmVzdiwgd2FpdF9hbGws Cj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0 aW1lb3V0KTsKPj4+Pj4+PiAgICAgICBpZiAocmV0ID09IDApCj4+Pj4+Pj4gICAgICAgICAgICAg ICByZXQgPSAtRVRJTUU7Cj4+Pj4+Pj4gICAgICAgZWxzZSBpZiAocmV0ID4gMCkKPj4+Pj4+PiBA QCAtMTM3NSwxMyArMTM3NSwxMyBAQCBpbnQgZHJtX2dlbV9mZW5jZV9hcnJheV9hZGRfaW1wbGlj aXQoc3RydWN0IHhhcnJheSAqZmVuY2VfYXJyYXksCj4+Pj4+Pj4gICAgICAgaWYgKCF3cml0ZSkg ewo+Pj4+Pj4+ICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPQo+Pj4+Pj4+ IC0gICAgICAgICAgICAgICAgICAgZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KG9iai0+cmVzdik7Cj4+ Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChvYmot PnJlc3YpOwo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIGRybV9nZW1fZmVuY2VfYXJyYXlf YWRkKGZlbmNlX2FycmF5LCBmZW5jZSk7Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+IC0gICByZXQg PSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShvYmotPnJlc3YsIE5VTEwsCj4+Pj4+Pj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmVuY2VfY291bnQsICZmZW5j ZXMpOwo+Pj4+Pj4+ICsgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKG9iai0+ cmVzdiwgTlVMTCwKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZmVuY2VfY291bnQsICZmZW5jZXMpOwo+Pj4+Pj4+ICAgICAgIGlmIChyZXQgfHwgIWZlbmNl X2NvdW50KQo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+Pj4+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9n cHUvZHJtL2RybV9nZW1fYXRvbWljX2hlbHBlci5jCj4+Pj4+Pj4gaW5kZXggYTAwNWM1YTBiYTQ2 YS4uYTI3MTM1MDg0YWU1YyAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJt X2dlbV9hdG9taWNfaGVscGVyLmMKPj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dl bV9hdG9taWNfaGVscGVyLmMKPj4+Pj4+PiBAQCAtMTQ3LDcgKzE0Nyw3IEBAIGludCBkcm1fZ2Vt X3BsYW5lX2hlbHBlcl9wcmVwYXJlX2ZiKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLCBzdHJ1Y3Qg ZHJtX3BsYW5lX3N0Cj4+Pj4+Pj4gICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4+PiAgICAg ICBvYmogPSBkcm1fZ2VtX2ZiX2dldF9vYmooc3RhdGUtPmZiLCAwKTsKPj4+Pj4+PiAtICAgZmVu Y2UgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3Uob2JqLT5yZXN2KTsKPj4+Pj4+PiArICAgZmVuY2Ug PSBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChvYmotPnJlc3YpOwo+Pj4+Pj4+ICAgICAgIGRy bV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZShzdGF0ZSwgZmVuY2UpOwo+Pj4+Pj4+ICAgICAg IHJldHVybiAwOwo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9l dG5hdml2X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYwo+Pj4+ Pj4+IGluZGV4IGRiNjlmMTlhYjViY2EuLjRlNmY1MzQ2ZTg0ZTQgMTAwNjQ0Cj4+Pj4+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYwo+Pj4+Pj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfZ2VtLmMKPj4+Pj4+PiBAQCAtMzkwLDE0ICsz OTAsMTMgQEAgaW50IGV0bmF2aXZfZ2VtX2NwdV9wcmVwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqLCB1MzIgb3AsCj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+ICAgICAgIGlmIChvcCAmIEVUTkFf UFJFUF9OT1NZTkMpIHsKPj4+Pj4+PiAtICAgICAgICAgICBpZiAoIWRtYV9yZXN2X3Rlc3Rfc2ln bmFsZWRfcmN1KG9iai0+cmVzdiwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSkpCj4+Pj4+Pj4gKyAgICAgICAgICAgaWYg KCFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKG9iai0+cmVzdiwgd3JpdGUpKQo+Pj4+ Pj4+ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwo+Pj4+Pj4+ICAgICAgIH0g ZWxzZSB7Cj4+Pj4+Pj4gICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHJlbWFpbiA9IGV0bmF2 aXZfdGltZW91dF90b19qaWZmaWVzKHRpbWVvdXQpOwo+Pj4+Pj4+IC0gICAgICAgICAgIHJldCA9 IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uob2JqLT5yZXN2LAo+Pj4+Pj4+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlLCB0cnVlLCBy ZW1haW4pOwo+Pj4+Pj4+ICsgICAgICAgICAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91 bmxvY2tlZChvYmotPnJlc3YsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdyaXRlLCB0cnVlLCByZW1haW4pOwo+Pj4+Pj4+ICAgICAgICAg ICAgICAgaWYgKHJldCA8PSAwKQo+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g cmV0ID09IDAgPyAtRVRJTUVET1VUIDogcmV0Owo+Pj4+Pj4+ICAgICAgIH0KPj4+Pj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMgYi9k cml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYwo+Pj4+Pj4+IGluZGV4 IGQwNWMzNTk5NDU3OTkuLjY2MTdmYWRhNDU5NWQgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMKPj4+Pj4+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYwo+Pj4+Pj4+IEBAIC0xODks MTMgKzE4OSwxMyBAQCBzdGF0aWMgaW50IHN1Ym1pdF9mZW5jZV9zeW5jKHN0cnVjdCBldG5hdml2 X2dlbV9zdWJtaXQgKnN1Ym1pdCkKPj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7Cj4+Pj4+Pj4gICAgICAgICAgICAgICBpZiAoYm8tPmZsYWdzICYgRVROQV9TVUJNSVRfQk9f V1JJVEUpIHsKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgIHJldCA9IGRtYV9yZXN2X2dldF9m ZW5jZXNfcmN1KHJvYmosICZiby0+ZXhjbCwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm8tPm5yX3NoYXJlZCwKPj4+ Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmYm8tPnNoYXJlZCk7Cj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICByZXQgPSBk bWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHJvYmosICZiby0+ZXhjbCwKPj4+Pj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvLT5u cl9zaGFyZWQsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZiby0+c2hhcmVkKTsKPj4+Pj4+PiAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHJldCkKPj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g cmV0Owo+Pj4+Pj4+ICAgICAgICAgICAgICAgfSBlbHNlIHsKPj4+Pj4+PiAtICAgICAgICAgICAg ICAgICAgIGJvLT5leGNsID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KHJvYmopOwo+Pj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgYm8tPmV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChy b2JqKTsKPj4+Pj4+PiAgICAgICAgICAgICAgIH0KPj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPj4+Pj4+PiBpbmRl eCA0MjJiNTllYmY2ZGNlLi41ZjBiODVhMTAyMTU5IDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jCj4+Pj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMKPj4+Pj4+PiBAQCAtMTEw NDAsNyArMTEwNDAsNyBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUg Kl9wbGFuZSwKPj4+Pj4+PiAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+Pj4+Pj4+ICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIHVucGluX2ZiOwo+Pj4+Pj4+IC0gICAgICAgICAgIGZlbmNl ID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KG9iai0+YmFzZS5yZXN2KTsKPj4+Pj4+PiArICAgICAg ICAgICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2KTsK Pj4+Pj4+PiAgICAgICAgICAgICAgIGlmIChmZW5jZSkgewo+Pj4+Pj4+ICAgICAgICAgICAgICAg ICAgICAgICBhZGRfcnBzX2Jvb3N0X2FmdGVyX3ZibGFuayhuZXdfcGxhbmVfc3RhdGUtPmh3LmNy dGMsCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZlbmNlKTsKPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZG1h X3Jlc3ZfdXRpbHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2RtYV9yZXN2X3V0aWxzLmMKPj4+ Pj4+PiBpbmRleCA5ZTUwOGU3ZDQ2MjlmLi5iZGZjNmJmMTZhNGU5IDEwMDY0NAo+Pj4+Pj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2RtYV9yZXN2X3V0aWxzLmMKPj4+Pj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9kbWFfcmVzdl91dGlscy5jCj4+Pj4+Pj4gQEAgLTEwLDcgKzEw LDcgQEAKPj4+Pj4+PiAgICAgIHZvaWQgZG1hX3Jlc3ZfcHJ1bmUoc3RydWN0IGRtYV9yZXN2ICpy ZXN2KQo+Pj4+Pj4+ICAgICAgewo+Pj4+Pj4+ICAgICAgIGlmIChkbWFfcmVzdl90cnlsb2NrKHJl c3YpKSB7Cj4+Pj4+Pj4gLSAgICAgICAgICAgaWYgKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1 KHJlc3YsIHRydWUpKQo+Pj4+Pj4+ICsgICAgICAgICAgIGlmIChkbWFfcmVzdl90ZXN0X3NpZ25h bGVkX3VubG9ja2VkKHJlc3YsIHRydWUpKQo+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBk bWFfcmVzdl9hZGRfZXhjbF9mZW5jZShyZXN2LCBOVUxMKTsKPj4+Pj4+PiAgICAgICAgICAgICAg IGRtYV9yZXN2X3VubG9jayhyZXN2KTsKPj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9idXN5LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fYnVzeS5jCj4+Pj4+Pj4gaW5kZXggMjUyMzVlZjYzMGMx MC4uNzU0YWQ2ZDFiYWNlOSAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fYnVzeS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX2J1c3kuYwo+Pj4+Pj4+IEBAIC0xMDUsNyArMTA1LDcgQEAgaTkxNV9nZW1f YnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4+Pj4+ICAg ICAgICAqIEFsdGVybmF0aXZlbHksIHdlIGNhbiB0cmFkZSB0aGF0IGV4dHJhIGluZm9ybWF0aW9u IG9uIHJlYWQvd3JpdGUKPj4+Pj4+PiAgICAgICAgKiBhY3Rpdml0eSB3aXRoCj4+Pj4+Pj4gICAg ICAgICogICAgICBhcmdzLT5idXN5ID0KPj4+Pj4+PiAtICAgICogICAgICAgICAgICAgICFkbWFf cmVzdl90ZXN0X3NpZ25hbGVkX3JjdShvYmotPnJlc3YsIHRydWUpOwo+Pj4+Pj4+ICsgICAgKiAg ICAgICAgICAgICAgIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQob2JqLT5yZXN2LCB0 cnVlKTsKPj4+Pj4+PiAgICAgICAgKiB0byByZXBvcnQgdGhlIG92ZXJhbGwgYnVzeW5lc3MuIFRo aXMgaXMgd2hhdCB0aGUgd2FpdC1pb2N0bCBkb2VzLgo+Pj4+Pj4+ICAgICAgICAqCj4+Pj4+Pj4g ICAgICAgICovCj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f ZXhlY2J1ZmZlci5jCj4+Pj4+Pj4gaW5kZXggMjk3MTQzNTExZjk5Yi4uZThmMzIzNTY0ZTU3YiAx MDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhl Y2J1ZmZlci5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2V4ZWNidWZmZXIuYwo+Pj4+Pj4+IEBAIC0xNDgxLDcgKzE0ODEsNyBAQCBzdGF0aWMgaW5saW5l IGJvb2wgdXNlX3JlbG9jX2dwdShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPj4+Pj4+PiAgICAgICBp ZiAoREJHX0ZPUkNFX1JFTE9DKQo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+ Pj4+Pj4+IC0gICByZXR1cm4gIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KHZtYS0+cmVzdiwg dHJ1ZSk7Cj4+Pj4+Pj4gKyAgIHJldHVybiAhZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tl ZCh2bWEtPnJlc3YsIHRydWUpOwo+Pj4+Pj4+ICAgICAgfQo+Pj4+Pj4+ICAgICAgc3RhdGljIHVu c2lnbmVkIGxvbmcgdm1hX3BoeXNfYWRkcihzdHJ1Y3QgaTkxNV92bWEgKnZtYSwgdTMyIG9mZnNl dCkKPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oCj4+ Pj4+Pj4gaW5kZXggMmViZDc5NTM3YWVhOS4uN2MwZWI0MjVjYjNiMyAxMDA2NDQKPj4+Pj4+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPj4+Pj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmgKPj4+Pj4+PiBA QCAtNTAwLDcgKzUwMCw3IEBAIGk5MTVfZ2VtX29iamVjdF9sYXN0X3dyaXRlX2VuZ2luZShzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+Pj4+Pj4+ICAgICAgIHN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlOwo+Pj4+Pj4+ICAgICAgIHJjdV9yZWFkX2xvY2soKTsKPj4+Pj4+PiAtICAgZmVu Y2UgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3Uob2JqLT5iYXNlLnJlc3YpOwo+Pj4+Pj4+ICsgICBm ZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2KTsKPj4+Pj4+ PiAgICAgICByY3VfcmVhZF91bmxvY2soKTsKPj4+Pj4+PiAgICAgICBpZiAoZmVuY2UgJiYgZG1h X2ZlbmNlX2lzX2k5MTUoZmVuY2UpICYmICFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2UpKQo+ Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNl cnB0ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+Pj4+ Pj4+IGluZGV4IGE2NTdiOTllYzc2MDYuLjQ0ZGYxOGRjOTY2OWYgMTAwNjQ0Cj4+Pj4+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+Pj4+Pj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKPj4+Pj4+PiBA QCAtODUsOCArODUsOCBAQCBzdGF0aWMgYm9vbCBpOTE1X2dlbV91c2VycHRyX2ludmFsaWRhdGUo c3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAo+Pj4+Pj4+ICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7Cj4+Pj4+Pj4gICAgICAgLyogd2Ugd2lsbCB1bmJpbmQgb24gbmV4dCBzdWJt aXNzaW9uLCBzdGlsbCBoYXZlIHVzZXJwdHIgcGlucyAqLwo+Pj4+Pj4+IC0gICByID0gZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3JjdShvYmotPmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsK Pj4+Pj4+PiArICAgciA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChvYmotPmJhc2Uu cmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+Pj4+ICAgICAgIGlmIChyIDw9IDAp Cj4+Pj4+Pj4gICAgICAgICAgICAgICBkcm1fZXJyKCZpOTE1LT5kcm0sICIoJWxkKSBmYWlsZWQg dG8gd2FpdCBmb3IgaWRsZVxuIiwgcik7Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV93YWl0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0v aTkxNV9nZW1fd2FpdC5jCj4+Pj4+Pj4gaW5kZXggNGI5ODU2ZDViYTE0Zi4uNWI2YzUyNjU5YWQ0 ZCAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f d2FpdC5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3dh aXQuYwo+Pj4+Pj4+IEBAIC00NSw3ICs0NSw3IEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3Jlc2Vy dmF0aW9uKHN0cnVjdCBkbWFfcmVzdiAqcmVzdiwKPj4+Pj4+PiAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjb3VudCwgaTsKPj4+Pj4+PiAgICAgICAgICAgICAgIGludCByZXQ7Cj4+Pj4+Pj4g LSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc19yY3UocmVzdiwgJmV4Y2wsICZj b3VudCwgJnNoYXJlZCk7Cj4+Pj4+Pj4gKyAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2Zl bmNlc191bmxvY2tlZChyZXN2LCAmZXhjbCwgJmNvdW50LCAmc2hhcmVkKTsKPj4+Pj4+PiAgICAg ICAgICAgICAgIGlmIChyZXQpCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7Cj4+Pj4+Pj4gQEAgLTczLDcgKzczLDcgQEAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVzZXJ2 YXRpb24oc3RydWN0IGRtYV9yZXN2ICpyZXN2LAo+Pj4+Pj4+ICAgICAgICAgICAgICAgICovCj4+ Pj4+Pj4gICAgICAgICAgICAgICBwcnVuZV9mZW5jZXMgPSBjb3VudCAmJiB0aW1lb3V0ID49IDA7 Cj4+Pj4+Pj4gICAgICAgfSBlbHNlIHsKPj4+Pj4+PiAtICAgICAgICAgICBleGNsID0gZG1hX3Jl c3ZfZ2V0X2V4Y2xfcmN1KHJlc3YpOwo+Pj4+Pj4+ICsgICAgICAgICAgIGV4Y2wgPSBkbWFfcmVz dl9nZXRfZXhjbF91bmxvY2tlZChyZXN2KTsKPj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4gICAgICAg aWYgKGV4Y2wgJiYgdGltZW91dCA+PSAwKQo+Pj4+Pj4+IEBAIC0xNTgsOCArMTU4LDggQEAgaTkx NV9nZW1fb2JqZWN0X3dhaXRfcHJpb3JpdHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aiwKPj4+Pj4+PiAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCwgaTsKPj4+Pj4+PiAg ICAgICAgICAgICAgIGludCByZXQ7Cj4+Pj4+Pj4gLSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3Zf Z2V0X2ZlbmNlc19yY3Uob2JqLT5iYXNlLnJlc3YsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2wsICZjb3VudCwgJnNoYXJlZCk7Cj4+Pj4+Pj4g KyAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChvYmotPmJhc2Uu cmVzdiwKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZleGNsLCAmY291bnQsICZzaGFyZWQpOwo+Pj4+Pj4+ICAgICAgICAgICAgICAgaWYgKHJl dCkKPj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+Pj4+PiBAQCAt MTcwLDcgKzE3MCw3IEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3ByaW9yaXR5KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4+Pj4+Pj4gICAgICAgICAgICAgICBrZnJlZShzaGFyZWQp Owo+Pj4+Pj4+ICAgICAgIH0gZWxzZSB7Cj4+Pj4+Pj4gLSAgICAgICAgICAgZXhjbCA9IGRtYV9y ZXN2X2dldF9leGNsX3JjdShvYmotPmJhc2UucmVzdik7Cj4+Pj4+Pj4gKyAgICAgICAgICAgZXhj bCA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2KTsKPj4+Pj4+PiAg ICAgICB9Cj4+Pj4+Pj4gICAgICAgaWYgKGV4Y2wpIHsKPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlcXVlc3QuYwo+Pj4+Pj4+IGluZGV4IDk3MGQ4ZjQ5ODZiYmUuLmYxZWQwM2NlZDdkZDEg MTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMK Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+Pj4+Pj4+ IEBAIC0xNTk0LDggKzE1OTQsOCBAQCBpOTE1X3JlcXVlc3RfYXdhaXRfb2JqZWN0KHN0cnVjdCBp OTE1X3JlcXVlc3QgKnRvLAo+Pj4+Pj4+ICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAq KnNoYXJlZDsKPj4+Pj4+PiAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCwgaTsKPj4+ Pj4+PiAtICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShvYmotPmJhc2Uu cmVzdiwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmV4Y2wsICZjb3VudCwgJnNoYXJlZCk7Cj4+Pj4+Pj4gKyAgICAgICAgICAgcmV0 ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChvYmotPmJhc2UucmVzdiwKPj4+Pj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNsLCAmY291 bnQsICZzaGFyZWQpOwo+Pj4+Pj4+ICAgICAgICAgICAgICAgaWYgKHJldCkKPj4+Pj4+PiAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+Pj4+PiBAQCAtMTYxMSw3ICsxNjExLDcg QEAgaTkxNV9yZXF1ZXN0X2F3YWl0X29iamVjdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICp0bywKPj4+ Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgZG1hX2ZlbmNlX3B1dChzaGFyZWRbaV0pOwo+Pj4+ Pj4+ICAgICAgICAgICAgICAga2ZyZWUoc2hhcmVkKTsKPj4+Pj4+PiAgICAgICB9IGVsc2Ugewo+ Pj4+Pj4+IC0gICAgICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3Uob2JqLT5iYXNl LnJlc3YpOwo+Pj4+Pj4+ICsgICAgICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRfZXhjbF91bmxv Y2tlZChvYmotPmJhc2UucmVzdik7Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+ICAgICAgIGlmIChl eGNsKSB7Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3df ZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3dfZmVuY2UuYwo+Pj4+Pj4+IGlu ZGV4IDI3NDQ1NThmMzA1MDcuLjBiY2I3ZWE0NDIwMWUgMTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5jCj4+Pj4+Pj4gQEAgLTU4Miw3ICs1ODIsNyBAQCBp bnQgaTkxNV9zd19mZW5jZV9hd2FpdF9yZXNlcnZhdGlvbihzdHJ1Y3QgaTkxNV9zd19mZW5jZSAq ZmVuY2UsCj4+Pj4+Pj4gICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkOwo+ Pj4+Pj4+ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBpOwo+Pj4+Pj4+IC0gICAg ICAgICAgIHJldCA9IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KHJlc3YsICZleGNsLCAmY291bnQs ICZzaGFyZWQpOwo+Pj4+Pj4+ICsgICAgICAgICAgIHJldCA9IGRtYV9yZXN2X2dldF9mZW5jZXNf dW5sb2NrZWQocmVzdiwgJmV4Y2wsICZjb3VudCwgJnNoYXJlZCk7Cj4+Pj4+Pj4gICAgICAgICAg ICAgICBpZiAocmV0KQo+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ Pj4+Pj4+IEBAIC02MDYsNyArNjA2LDcgQEAgaW50IGk5MTVfc3dfZmVuY2VfYXdhaXRfcmVzZXJ2 YXRpb24oc3RydWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlLAo+Pj4+Pj4+ICAgICAgICAgICAgICAg ICAgICAgICBkbWFfZmVuY2VfcHV0KHNoYXJlZFtpXSk7Cj4+Pj4+Pj4gICAgICAgICAgICAgICBr ZnJlZShzaGFyZWQpOwo+Pj4+Pj4+ICAgICAgIH0gZWxzZSB7Cj4+Pj4+Pj4gLSAgICAgICAgICAg ZXhjbCA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShyZXN2KTsKPj4+Pj4+PiArICAgICAgICAgICBl eGNsID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQocmVzdik7Cj4+Pj4+Pj4gICAgICAgfQo+ Pj4+Pj4+ICAgICAgIGlmIChyZXQgPj0gMCAmJiBleGNsICYmIGV4Y2wtPm9wcyAhPSBleGNsdWRl KSB7Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jIGIv ZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKPj4+Pj4+PiBpbmRleCA1NmRmODZlNWY3NDAw Li4xYWNhNjA1MDdiYjE0IDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tc20v bXNtX2dlbS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZ2VtLmMKPj4+ Pj4+PiBAQCAtOTE1LDggKzkxNSw3IEBAIGludCBtc21fZ2VtX2NwdV9wcmVwKHN0cnVjdCBkcm1f Z2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBvcCwga3RpbWVfdCAqdGltZW91dCkKPj4+Pj4+PiAg ICAgICAgICAgICAgIG9wICYgTVNNX1BSRVBfTk9TWU5DID8gMCA6IHRpbWVvdXRfdG9famlmZmll cyh0aW1lb3V0KTsKPj4+Pj4+PiAgICAgICBsb25nIHJldDsKPj4+Pj4+PiAtICAgcmV0ID0gZG1h X3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShvYmotPnJlc3YsIHdyaXRlLAo+Pj4+Pj4+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCAgcmVtYWluKTsKPj4+ Pj4+PiArICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+cmVzdiwg d3JpdGUsIHRydWUsIHJlbWFpbik7Cj4+Pj4+Pj4gICAgICAgaWYgKHJldCA9PSAwKQo+Pj4+Pj4+ ICAgICAgICAgICAgICAgcmV0dXJuIHJlbWFpbiA9PSAwID8gLUVCVVNZIDogLUVUSU1FRE9VVDsK Pj4+Pj4+PiAgICAgICBlbHNlIGlmIChyZXQgPCAwKQo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC93bmR3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91 dmVhdS9kaXNwbnY1MC93bmR3LmMKPj4+Pj4+PiBpbmRleCAwY2IxZjlkODQ4ZDNlLi44ZDA0OGJh Y2Q2ZjAyIDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3Bu djUwL3duZHcuYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUw L3duZHcuYwo+Pj4+Pj4+IEBAIC01NjEsNyArNTYxLDcgQEAgbnY1MF93bmR3X3ByZXBhcmVfZmIo c3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+ Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICBhc3l3LT5pbWFnZS5oYW5kbGVbMF0gPSBjdHhk bWEtPm9iamVjdC5oYW5kbGU7Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+IC0gICBhc3l3LT5zdGF0 ZS5mZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShudmJvLT5iby5iYXNlLnJlc3YpOwo+Pj4+ Pj4+ICsgICBhc3l3LT5zdGF0ZS5mZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG52 Ym8tPmJvLmJhc2UucmVzdik7Cj4+Pj4+Pj4gICAgICAgYXN5dy0+aW1hZ2Uub2Zmc2V0WzBdID0g bnZiby0+b2Zmc2V0Owo+Pj4+Pj4+ICAgICAgIGlmICh3bmR3LT5mdW5jLT5wcmVwYXJlKSB7Cj4+ Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4+Pj4+Pj4gaW5kZXggYTcw ZTgyNDEzZmE3NS4uYmM2YjA5ZWU5YjU1MiAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L25vdXZlYXUvbm91dmVhdV9nZW0uYwo+Pj4+Pj4+IEBAIC05MjgsOCArOTI4LDggQEAgbm91dmVh dV9nZW1faW9jdGxfY3B1X3ByZXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwK Pj4+Pj4+PiAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+Pj4+Pj4+ICAgICAgIG52Ym8g PSBub3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKPj4+Pj4+PiAtICAgbHJldCA9IGRtYV9yZXN2X3dh aXRfdGltZW91dF9yY3UobnZiby0+Ym8uYmFzZS5yZXN2LCB3cml0ZSwgdHJ1ZSwKPj4+Pj4+PiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3dhaXQgPyAw IDogMzAgKiBIWik7Cj4+Pj4+Pj4gKyAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5s b2NrZWQobnZiby0+Ym8uYmFzZS5yZXN2LCB3cml0ZSwgdHJ1ZSwKPj4+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub193YWl0ID8gMCA6IDMwICogSFopOwo+ Pj4+Pj4+ICAgICAgIGlmICghbHJldCkKPj4+Pj4+PiAgICAgICAgICAgICAgIHJldCA9IC1FQlVT WTsKPj4+Pj4+PiAgICAgICBlbHNlIGlmIChscmV0ID4gMCkKPj4+Pj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJt L3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCj4+Pj4+Pj4gaW5kZXggY2EwNzA5OGE2MTQxOS4uZWVm NWI2MzJlZTBjZSAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3Qv cGFuZnJvc3RfZHJ2LmMKPj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFu ZnJvc3RfZHJ2LmMKPj4+Pj4+PiBAQCAtMzExLDggKzMxMSw4IEBAIHBhbmZyb3N0X2lvY3RsX3dh aXRfYm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4+PiAgICAgICBp ZiAoIWdlbV9vYmopCj4+Pj4+Pj4gICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKPj4+Pj4+ PiAtICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShnZW1fb2JqLT5yZXN2LCB0cnVl LAo+Pj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 cnVlLCB0aW1lb3V0KTsKPj4+Pj4+PiArICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Vu bG9ja2VkKGdlbV9vYmotPnJlc3YsIHRydWUsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0cnVlLCB0aW1lb3V0KTsKPj4+Pj4+PiAgICAgICBpZiAoIXJl dCkKPj4+Pj4+PiAgICAgICAgICAgICAgIHJldCA9IHRpbWVvdXQgPyAtRVRJTUVET1VUIDogLUVC VVNZOwo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJv c3Rfam9iLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmMKPj4+Pj4+ PiBpbmRleCA2MDAzY2ZlYjEzMjIxLi4yZGYzZTk5OWEzOGQwIDEwMDY0NAo+Pj4+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwo+Pj4+Pj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwo+Pj4+Pj4+IEBAIC0yMDMsNyAr MjAzLDcgQEAgc3RhdGljIHZvaWQgcGFuZnJvc3RfYWNxdWlyZV9vYmplY3RfZmVuY2VzKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqKmJvcywKPj4+Pj4+PiAgICAgICBpbnQgaTsKPj4+Pj4+PiAgICAg ICBmb3IgKGkgPSAwOyBpIDwgYm9fY291bnQ7IGkrKykKPj4+Pj4+PiAtICAgICAgICAgICBpbXBs aWNpdF9mZW5jZXNbaV0gPSBkbWFfcmVzdl9nZXRfZXhjbF9yY3UoYm9zW2ldLT5yZXN2KTsKPj4+ Pj4+PiArICAgICAgICAgICBpbXBsaWNpdF9mZW5jZXNbaV0gPSBkbWFfcmVzdl9nZXRfZXhjbF91 bmxvY2tlZChib3NbaV0tPnJlc3YpOwo+Pj4+Pj4+ICAgICAgfQo+Pj4+Pj4+ICAgICAgc3RhdGlj IHZvaWQgcGFuZnJvc3RfYXR0YWNoX29iamVjdF9mZW5jZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICoqYm9zLAo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVv bl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCj4+Pj4+Pj4gaW5k ZXggMDVlYTJmMzlmNjI2MS4uMWEzOGIwYmYzNmQxMSAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYwo+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCj4+Pj4+Pj4gQEAgLTEyNSw3ICsxMjUsNyBAQCBzdGF0 aWMgaW50IHJhZGVvbl9nZW1fc2V0X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmos Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+ICAgICAgIGlmIChkb21haW4gPT0gUkFERU9OX0dFTV9E T01BSU5fQ1BVKSB7Cj4+Pj4+Pj4gICAgICAgICAgICAgICAvKiBBc2tpbmcgZm9yIGNwdSBhY2Nl c3Mgd2FpdCBmb3Igb2JqZWN0IGlkbGUgKi8KPj4+Pj4+PiAtICAgICAgICAgICByID0gZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3JjdShyb2JqLT50Ym8uYmFzZS5yZXN2LCB0cnVlLCB0cnVlLCAzMCAq IEhaKTsKPj4+Pj4+PiArICAgICAgICAgICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9j a2VkKHJvYmotPnRiby5iYXNlLnJlc3YsIHRydWUsIHRydWUsIDMwICogSFopOwo+Pj4+Pj4+ICAg ICAgICAgICAgICAgaWYgKCFyKQo+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICByID0gLUVC VVNZOwo+Pj4+Pj4+IEBAIC00NzQsNyArNDc0LDcgQEAgaW50IHJhZGVvbl9nZW1fYnVzeV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4+Pj4+ICAgICAgIH0KPj4+ Pj4+PiAgICAgICByb2JqID0gZ2VtX3RvX3JhZGVvbl9ibyhnb2JqKTsKPj4+Pj4+PiAtICAgciA9 IGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KHJvYmotPnRiby5iYXNlLnJlc3YsIHRydWUpOwo+ Pj4+Pj4+ICsgICByID0gZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChyb2JqLT50Ym8u YmFzZS5yZXN2LCB0cnVlKTsKPj4+Pj4+PiAgICAgICBpZiAociA9PSAwKQo+Pj4+Pj4+ICAgICAg ICAgICAgICAgciA9IC1FQlVTWTsKPj4+Pj4+PiAgICAgICBlbHNlCj4+Pj4+Pj4gQEAgLTUwMyw3 ICs1MDMsNyBAQCBpbnQgcmFkZW9uX2dlbV93YWl0X2lkbGVfaW9jdGwoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4gICAgICAgcm9iaiA9 IGdlbV90b19yYWRlb25fYm8oZ29iaik7Cj4+Pj4+Pj4gLSAgIHJldCA9IGRtYV9yZXN2X3dhaXRf dGltZW91dF9yY3Uocm9iai0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwgdHJ1ZSwgMzAgKiBIWik7Cj4+ Pj4+Pj4gKyAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChyb2JqLT50Ym8u YmFzZS5yZXN2LCB0cnVlLCB0cnVlLCAzMCAqIEhaKTsKPj4+Pj4+PiAgICAgICBpZiAocmV0ID09 IDApCj4+Pj4+Pj4gICAgICAgICAgICAgICByID0gLUVCVVNZOwo+Pj4+Pj4+ICAgICAgIGVsc2Ug aWYgKHJldCA8IDApCj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24v cmFkZW9uX21uLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tbi5jCj4+Pj4+Pj4g aW5kZXggZTM3YzlhNTdhN2MzNi4uYTE5YmUzZjhhMjE4YyAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tbi5jCj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3JhZGVvbi9yYWRlb25fbW4uYwo+Pj4+Pj4+IEBAIC02Niw4ICs2Niw4IEBAIHN0YXRp YyBib29sIHJhZGVvbl9tbl9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIg Km1uLAo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4+Pj4+Pj4gICAgICAgfQo+ Pj4+Pj4+IC0gICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+dGJvLmJhc2UucmVz diwgdHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPj4+Pj4+PiArICAgciA9IGRtYV9yZXN2X3dhaXRfdGlt ZW91dF91bmxvY2tlZChiby0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQp Owo+Pj4+Pj4+ICAgICAgIGlmIChyIDw9IDApCj4+Pj4+Pj4gICAgICAgICAgICAgICBEUk1fRVJS T1IoIiglbGQpIGZhaWxlZCB0byB3YWl0IGZvciB1c2VyIGJvXG4iLCByKTsKPj4+Pj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS90 dG0vdHRtX2JvLmMKPj4+Pj4+PiBpbmRleCBjYTFiMDk4YjZhNTYxLi4yMTVjYWQzMTQ5NjIxIDEw MDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPj4+Pj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCj4+Pj4+Pj4gQEAgLTI5NCw3ICsyOTQs NyBAQCBzdGF0aWMgaW50IHR0bV9ib19jbGVhbnVwX3JlZnMoc3RydWN0IHR0bV9idWZmZXJfb2Jq ZWN0ICpibywKPj4+Pj4+PiAgICAgICBzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YgPSAmYm8tPmJhc2Uu X3Jlc3Y7Cj4+Pj4+Pj4gICAgICAgaW50IHJldDsKPj4+Pj4+PiAtICAgaWYgKGRtYV9yZXN2X3Rl c3Rfc2lnbmFsZWRfcmN1KHJlc3YsIHRydWUpKQo+Pj4+Pj4+ICsgICBpZiAoZG1hX3Jlc3ZfdGVz dF9zaWduYWxlZF91bmxvY2tlZChyZXN2LCB0cnVlKSkKPj4+Pj4+PiAgICAgICAgICAgICAgIHJl dCA9IDA7Cj4+Pj4+Pj4gICAgICAgZWxzZQo+Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0ID0gLUVC VVNZOwo+Pj4+Pj4+IEBAIC0zMDYsOCArMzA2LDggQEAgc3RhdGljIGludCB0dG1fYm9fY2xlYW51 cF9yZWZzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4+Pj4+Pj4gICAgICAgICAgICAg ICAgICAgICAgIGRtYV9yZXN2X3VubG9jayhiby0+YmFzZS5yZXN2KTsKPj4+Pj4+PiAgICAgICAg ICAgICAgIHNwaW5fdW5sb2NrKCZiby0+YmRldi0+bHJ1X2xvY2spOwo+Pj4+Pj4+IC0gICAgICAg ICAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KHJlc3YsIHRydWUsIGludGVycnVw dGlibGUsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMzAgKiBIWik7Cj4+Pj4+Pj4gKyAgICAgICAgICAgbHJldCA9IGRtYV9yZXN2X3dhaXRfdGlt ZW91dF91bmxvY2tlZChyZXN2LCB0cnVlLCBpbnRlcnJ1cHRpYmxlLAo+Pj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAgKiBIWik7Cj4+Pj4+ Pj4gICAgICAgICAgICAgICBpZiAobHJldCA8IDApCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBscmV0Owo+Pj4+Pj4+IEBAIC00MDksOCArNDA5LDggQEAgc3RhdGljIHZvaWQg dHRtX2JvX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCj4+Pj4+Pj4gICAgICAgICAgICAgICAg ICAgICAgIC8qIExhc3QgcmVzb3J0LCBpZiB3ZSBmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig dGhlCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAqIGZlbmNlcyBibG9jayBmb3IgdGhl IEJPIHRvIGJlY29tZSBpZGxlCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAqLwo+Pj4+ Pj4+IC0gICAgICAgICAgICAgICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+YmFz ZS5yZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMzAgKiBIWik7Cj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICBk bWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQoYm8tPmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2Us Cj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMzAgKiBIWik7Cj4+Pj4+Pj4gICAgICAgICAgICAgICB9Cj4+Pj4+Pj4gICAgICAgICAgICAg ICBpZiAoYm8tPmJkZXYtPmZ1bmNzLT5yZWxlYXNlX25vdGlmeSkKPj4+Pj4+PiBAQCAtNDIwLDcg KzQyMCw3IEBAIHN0YXRpYyB2b2lkIHR0bV9ib19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+ Pj4+Pj4+ICAgICAgICAgICAgICAgdHRtX21lbV9pb19mcmVlKGJkZXYsICZiby0+bWVtKTsKPj4+ Pj4+PiAgICAgICB9Cj4+Pj4+Pj4gLSAgIGlmICghZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3Uo Ym8tPmJhc2UucmVzdiwgdHJ1ZSkgfHwKPj4+Pj4+PiArICAgaWYgKCFkbWFfcmVzdl90ZXN0X3Np Z25hbGVkX3VubG9ja2VkKGJvLT5iYXNlLnJlc3YsIHRydWUpIHx8Cj4+Pj4+Pj4gICAgICAgICAg ICFkbWFfcmVzdl90cnlsb2NrKGJvLT5iYXNlLnJlc3YpKSB7Cj4+Pj4+Pj4gICAgICAgICAgICAg ICAvKiBUaGUgQk8gaXMgbm90IGlkbGUsIHJlc3VycmVjdCBpdCBmb3IgZGVsYXllZCBkZXN0cm95 ICovCj4+Pj4+Pj4gICAgICAgICAgICAgICB0dG1fYm9fZmx1c2hfYWxsX2ZlbmNlcyhibyk7Cj4+ Pj4+Pj4gQEAgLTExMTYsMTQgKzExMTYsMTQgQEAgaW50IHR0bV9ib193YWl0KHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqYm8sCj4+Pj4+Pj4gICAgICAgbG9uZyB0aW1lb3V0ID0gMTUgKiBIWjsK Pj4+Pj4+PiAgICAgICBpZiAobm9fd2FpdCkgewo+Pj4+Pj4+IC0gICAgICAgICAgIGlmIChkbWFf cmVzdl90ZXN0X3NpZ25hbGVkX3JjdShiby0+YmFzZS5yZXN2LCB0cnVlKSkKPj4+Pj4+PiArICAg ICAgICAgICBpZiAoZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChiby0+YmFzZS5yZXN2 LCB0cnVlKSkKPj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+Pj4g ICAgICAgICAgICAgICBlbHNlCj4+Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAt RUJVU1k7Cj4+Pj4+Pj4gICAgICAgfQo+Pj4+Pj4+IC0gICB0aW1lb3V0ID0gZG1hX3Jlc3Zfd2Fp dF90aW1lb3V0X3JjdShiby0+YmFzZS5yZXN2LCB0cnVlLAo+Pj4+Pj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0aWJsZSwgdGltZW91 dCk7Cj4+Pj4+Pj4gKyAgIHRpbWVvdXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQo Ym8tPmJhc2UucmVzdiwgdHJ1ZSwKPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRpYmxlLCB0aW1lb3V0KTsKPj4+Pj4+PiAgICAgICBp ZiAodGltZW91dCA8IDApCj4+Pj4+Pj4gICAgICAgICAgICAgICByZXR1cm4gdGltZW91dDsKPj4+ Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5jZS5jIGIvZHJp dmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5jZS5jCj4+Pj4+Pj4gaW5kZXggMjkwMmRjNmU2NGZh Zi4uMDEwYTgyNDA1ZTM3NCAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmdl bS92Z2VtX2ZlbmNlLmMKPj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2Zl bmNlLmMKPj4+Pj4+PiBAQCAtMTUxLDggKzE1MSw4IEBAIGludCB2Z2VtX2ZlbmNlX2F0dGFjaF9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+Pj4+Pj4+ICAgICAgIC8qIENoZWNrIGZvciBh IGNvbmZsaWN0aW5nIGZlbmNlICovCj4+Pj4+Pj4gICAgICAgcmVzdiA9IG9iai0+cmVzdjsKPj4+ Pj4+PiAtICAgaWYgKCFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShyZXN2LAo+Pj4+Pj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmctPmZsYWdzICYg VkdFTV9GRU5DRV9XUklURSkpIHsKPj4+Pj4+PiArICAgaWYgKCFkbWFfcmVzdl90ZXN0X3NpZ25h bGVkX3VubG9ja2VkKHJlc3YsCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhcmctPmZsYWdzICYgVkdFTV9GRU5DRV9XUklURSkpIHsKPj4+Pj4+PiAgICAg ICAgICAgICAgIHJldCA9IC1FQlVTWTsKPj4+Pj4+PiAgICAgICAgICAgICAgIGdvdG8gZXJyX2Zl bmNlOwo+Pj4+Pj4+ICAgICAgIH0KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3ZpcnRpby92aXJ0Z3B1X2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVf aW9jdGwuYwo+Pj4+Pj4+IGluZGV4IDY2OWYyZWUzOTUxNTQuLmFiMDEwYzhlMzI4MTYgMTAwNjQ0 Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2lvY3RsLmMKPj4+ Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlydGlvL3ZpcnRncHVfaW9jdGwuYwo+Pj4+Pj4+ IEBAIC00NTEsMTAgKzQ1MSwxMCBAQCBzdGF0aWMgaW50IHZpcnRpb19ncHVfd2FpdF9pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4+Pj4+ICAgICAgICAgICAgICAg cmV0dXJuIC1FTk9FTlQ7Cj4+Pj4+Pj4gICAgICAgaWYgKGFyZ3MtPmZsYWdzICYgVklSVEdQVV9X QUlUX05PV0FJVCkgewo+Pj4+Pj4+IC0gICAgICAgICAgIHJldCA9IGRtYV9yZXN2X3Rlc3Rfc2ln bmFsZWRfcmN1KG9iai0+cmVzdiwgdHJ1ZSk7Cj4+Pj4+Pj4gKyAgICAgICAgICAgcmV0ID0gZG1h X3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChvYmotPnJlc3YsIHRydWUpOwo+Pj4+Pj4+ICAg ICAgIH0gZWxzZSB7Cj4+Pj4+Pj4gLSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1l b3V0X3JjdShvYmotPnJlc3YsIHRydWUsIHRydWUsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KTsKPj4+Pj4+PiArICAgICAgICAgICBy ZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQob2JqLT5yZXN2LCB0cnVlLCB0cnVl LAo+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aW1lb3V0KTsKPj4+Pj4+PiAgICAgICB9Cj4+Pj4+Pj4gICAgICAgaWYgKHJldCA9PSAwKQo+ Pj4+Pj4+ICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dm eC92bXdnZnhfYm8uYwo+Pj4+Pj4+IGluZGV4IDA0ZGQ0OWM0YzI1NzIuLjE5ZTFjZTIzODQyYTkg MTAwNjQ0Cj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfYm8uYwo+ Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JvLmMKPj4+Pj4+PiBA QCAtNzQzLDcgKzc0Myw3IEBAIHN0YXRpYyBpbnQgdm13X3VzZXJfYm9fc3luY2NwdV9ncmFiKHN0 cnVjdCB2bXdfdXNlcl9idWZmZXJfb2JqZWN0ICp1c2VyX2JvLAo+Pj4+Pj4+ICAgICAgIGlmIChm bGFncyAmIGRybV92bXdfc3luY2NwdV9hbGxvd19jcykgewo+Pj4+Pj4+ICAgICAgICAgICAgICAg bG9uZyBscmV0Owo+Pj4+Pj4+IC0gICAgICAgICAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVv dXRfcmN1Cj4+Pj4+Pj4gKyAgICAgICAgICAgbHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91 bmxvY2tlZAo+Pj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAoYm8tPmJhc2UucmVzdiwgdHJ1 ZSwgdHJ1ZSwKPj4+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NrID8gMCA6IE1B WF9TQ0hFRFVMRV9USU1FT1VUKTsKPj4+Pj4+PiAgICAgICAgICAgICAgIGlmICghbHJldCkKPj4+ Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtcmVzdi5oIGIvaW5jbHVkZS9saW51 eC9kbWEtcmVzdi5oCj4+Pj4+Pj4gaW5kZXggZDQ0YTc3ZThhN2UzNC4uOTljZmI3YWY5NjZiOCAx MDA2NDQKPj4+Pj4+PiAtLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1yZXN2LmgKPj4+Pj4+PiArKysg Yi9pbmNsdWRlL2xpbnV4L2RtYS1yZXN2LmgKPj4+Pj4+PiBAQCAtMjQ2LDcgKzI0Niw3IEBAIGRt YV9yZXN2X2dldF9leGNsKHN0cnVjdCBkbWFfcmVzdiAqb2JqKQo+Pj4+Pj4+ICAgICAgfQo+Pj4+ Pj4+ICAgICAgLyoqCj4+Pj4+Pj4gLSAqIGRtYV9yZXN2X2dldF9leGNsX3JjdSAtIGdldCB0aGUg cmVzZXJ2YXRpb24gb2JqZWN0J3MKPj4+Pj4+PiArICogZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2Nr ZWQgLSBnZXQgdGhlIHJlc2VydmF0aW9uIG9iamVjdCdzCj4+Pj4+Pj4gICAgICAgKiBleGNsdXNp dmUgZmVuY2UsIHdpdGhvdXQgbG9jayBoZWxkLgo+Pj4+Pj4+ICAgICAgICogQG9iajogdGhlIHJl c2VydmF0aW9uIG9iamVjdAo+Pj4+Pj4+ICAgICAgICoKPj4+Pj4+PiBAQCAtMjU3LDcgKzI1Nyw3 IEBAIGRtYV9yZXN2X2dldF9leGNsKHN0cnVjdCBkbWFfcmVzdiAqb2JqKQo+Pj4+Pj4+ICAgICAg ICogVGhlIGV4Y2x1c2l2ZSBmZW5jZSBvciBOVUxMIGlmIG5vbmUKPj4+Pj4+PiAgICAgICAqLwo+ Pj4+Pj4+ICAgICAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX2ZlbmNlICoKPj4+Pj4+PiAtZG1h X3Jlc3ZfZ2V0X2V4Y2xfcmN1KHN0cnVjdCBkbWFfcmVzdiAqb2JqKQo+Pj4+Pj4+ICtkbWFfcmVz dl9nZXRfZXhjbF91bmxvY2tlZChzdHJ1Y3QgZG1hX3Jlc3YgKm9iaikKPj4+Pj4+PiAgICAgIHsK Pj4+Pj4+PiAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPj4+Pj4+PiBAQCAtMjc4LDE2 ICsyNzgsMTYgQEAgdm9pZCBkbWFfcmVzdl9hZGRfc2hhcmVkX2ZlbmNlKHN0cnVjdCBkbWFfcmVz diAqb2JqLCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSk7Cj4+Pj4+Pj4gICAgICB2b2lkIGRtYV9y ZXN2X2FkZF9leGNsX2ZlbmNlKHN0cnVjdCBkbWFfcmVzdiAqb2JqLCBzdHJ1Y3QgZG1hX2ZlbmNl ICpmZW5jZSk7Cj4+Pj4+Pj4gLWludCBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShzdHJ1Y3QgZG1h X3Jlc3YgKm9iaiwKPj4+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2Zl bmNlICoqcGZlbmNlX2V4Y2wsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgKnBzaGFyZWRfY291bnQsCj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRtYV9mZW5jZSAqKipwc2hhcmVkKTsKPj4+Pj4+PiAraW50IGRtYV9yZXN2X2dldF9mZW5jZXNf dW5sb2NrZWQoc3RydWN0IGRtYV9yZXN2ICpvYmosCj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqcGZlbmNlX2V4Y2wsCj4+Pj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcHNoYXJlZF9jb3VudCwKPj4+Pj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKioqcHNoYXJlZCk7 Cj4+Pj4+Pj4gICAgICBpbnQgZG1hX3Jlc3ZfY29weV9mZW5jZXMoc3RydWN0IGRtYV9yZXN2ICpk c3QsIHN0cnVjdCBkbWFfcmVzdiAqc3JjKTsKPj4+Pj4+PiAtbG9uZyBkbWFfcmVzdl93YWl0X3Rp bWVvdXRfcmN1KHN0cnVjdCBkbWFfcmVzdiAqb2JqLCBib29sIHdhaXRfYWxsLCBib29sIGludHIs Cj4+Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0 KTsKPj4+Pj4+PiArbG9uZyBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQoc3RydWN0IGRt YV9yZXN2ICpvYmosIGJvb2wgd2FpdF9hbGwsIGJvb2wgaW50ciwKPj4+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7Cj4+Pj4+Pj4gLWJv b2wgZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wg dGVzdF9hbGwpOwo+Pj4+Pj4+ICtib29sIGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQo c3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wgdGVzdF9hbGwpOwo+Pj4+Pj4+ICAgICAgI2VuZGlm IC8qIF9MSU5VWF9SRVNFUlZBVElPTl9IICovCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55D33C4708F for ; Tue, 1 Jun 2021 17:27:39 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1164E60234 for ; Tue, 1 Jun 2021 17:27:39 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1164E60234 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 908248912C; Tue, 1 Jun 2021 17:27:35 +0000 (UTC) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2053.outbound.protection.outlook.com [40.107.220.53]) by gabe.freedesktop.org (Postfix) with ESMTPS id 953EA8912C; Tue, 1 Jun 2021 17:27:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z2DCOyxC2wWnk7P5jKcmZcA3NOu6aRKe4URmCLMhCxJLQDTfdNHGirO9U3Xgvps4HGXskI54eqsb3ffcp2hDtLmcvM1J0ZGBBMUCsMIUlxHfkLdSv/ERuj6qLAtEksJucFa0Hb/YMYy5sSEjN3ObYGwbbE+BNNdyJbbj6YeORqazy023FNX0CmrEYugZP8q84yERxBLiO6RvthocO/YVHOHYrwQqtRhS75uHMzSK8XkWLZpdE59Bac+3fmtVxagscjYeWIDpizDMtE/TaWE0GevO8vA8itm2LSZD7kHygRpRGJ5zOQ3CBBdQUOHogsU4XsTEvMc+HhwuvO3SpIzAmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=KZ91bEibyL5UUvXTq+vUTreFubeCYxUEpqtNLG875cM=; b=dbQBO6u9BJa6Dj697B5VxNd1ilKFlK3tBwTvKbdeN9NcXg+9n/P5NZSWHPPCu365eAghAHpAEVnLbU/QSCLOHqtIwhh7AunIjt3EO9SOjp7Up7VcErJqKmXQ2I8VvVS5/PtzflMjfFoOy58IuAc1EqjbAosJuaF0ooP6syxdhA/eZSFe0NjIeR3hyzxkpGrKBOL6uQzThQ5trBA0Fnk9hnZTGEgY8gE1mizoECuoVyMsBVILf+FM1KAj41N/41JuYnyh129H+nlqz6Du1YCu+O+bSZy6rdBhCfWC8fvUDLoV60YvTPiDf0KHzX1R9666lMS3nzRUyk73O30SThh0DA== 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=KZ91bEibyL5UUvXTq+vUTreFubeCYxUEpqtNLG875cM=; b=qXlukS8p7s4YUpRYOZ2a/qmWO8GsTh5blivpzeve3Nuiv28HbVWovYbxgw0NWWM3UOeyu3kbCzvQxcW6U5QlkZsp5Y5emOpF7fpAhDqZwLwry0afu+eCgoIsavIvMLF3oWu/408ZgOwKpzoxVI4IC3rbwnvA2tyjWJyJmoNt5Fw= Authentication-Results: vmware.com; dkim=none (message not signed) header.d=none;vmware.com; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by MN2PR12MB4221.namprd12.prod.outlook.com (2603:10b6:208:1d2::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.21; Tue, 1 Jun 2021 17:27:31 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6d4d:4674:1cf6:8d34]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6d4d:4674:1cf6:8d34%6]) with mapi id 15.20.4173.030; Tue, 1 Jun 2021 17:27:31 +0000 Subject: Re: [PATCH 2/7] dma-buf: Rename dma_resv helpers from _rcu to _unlocked (v2) To: Daniel Vetter References: <20210525211753.1086069-1-jason@jlekstrand.net> <20210525211753.1086069-3-jason@jlekstrand.net> <82e16239-e8ea-8b03-6a90-c7d18a5f8a91@amd.com> <4c7cede0-4e33-ffc5-6308-7eccd3570e9d@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <7692f363-ed5e-54fb-71c9-3bc3f69a07ec@amd.com> Date: Tue, 1 Jun 2021 19:27:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [2a02:908:1252:fb60:7517:785b:7177:d6a6] X-ClientProxiedBy: AM4PR0202CA0006.eurprd02.prod.outlook.com (2603:10a6:200:89::16) To MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from [IPv6:2a02:908:1252:fb60:7517:785b:7177:d6a6] (2a02:908:1252:fb60:7517:785b:7177:d6a6) by AM4PR0202CA0006.eurprd02.prod.outlook.com (2603:10a6:200:89::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Tue, 1 Jun 2021 17:27:29 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f2d0ad2e-6f56-44e1-f289-08d9252288f1 X-MS-TrafficTypeDiagnostic: MN2PR12MB4221: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PLI54F5aAKVtiQJ19ZFELCk8PbSx/lA+4ZXQmTDt5bba2fU7j+dEN0lXiYFK/6CqHsvsiJzNoV0RLz9H2hO2ggDRoggNn42hQVQeDV5l9D3o6EibWG0POjgGB0CmwSPyNQUj9rr/YImnGllKMD9H5vbI7iD86LwEJ+O6RPLGpZRPKjXEc+pLbrQhZyN7xXM8vHG8cmSVwyxsY5DWewyHjUpQQNaq/ZZ0HNwh6dN406BI2LK/In5DqE9ETrFMdkSmANAcw456Rxr5BhvE/bqMqmrUKv7wLh7YABs02VTmPFxxpP2H7ECyjUhAD/bbFfXOwVeU5BoRAH17npRUYcmyU+oHfTQLDz6yMzgZiyt35v+K9rBF8acHDmudlKRQELkAcD2hq/xcACXJ6kzAToq7Ld5zubmF+/wBT8XOfeLMOSIql2ntm58NrRUkGsb9Ofo37C/BXb1wKKbZEb16YApka4xQzSfoA8d+udbn/Un9XhcqZLmwtb/P11IlKa4smRJ3OZajv0aGibHxNOCrKHwCxxfSJdt4u0mdhrx4P69qdBgN/9Q9xcdKvUeW8jRhpc9fgaXHYtieEDLs9aFwANjtDutxwQbKHo+LEGjC8zBVu9ASYN8WV2n595sPG7dw3vK9y9hBUBiDkvKq/VpfO4OKeiASeLjKUBePJpF5aXXCSw7V97NmJe6JIEfesdI7gUE9 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(39860400002)(346002)(376002)(366004)(136003)(31686004)(6916009)(38100700002)(2616005)(86362001)(66574015)(5660300002)(83380400001)(6486002)(8676002)(16526019)(186003)(2906002)(53546011)(7416002)(54906003)(6666004)(66476007)(66556008)(478600001)(8936002)(4326008)(66946007)(36756003)(30864003)(31696002)(316002)(43740500002)(45980500001)(579004)(559001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?cWprSUxMWDdIRzBHQVQyOVdQN3R6NDBWZ1FnOGVBUlBhbGhrMEZXRUp3QnpM?= =?utf-8?B?VmFOaUZ6cTlnM1BmT3pLMGtzcWhWL0ZNaEpiWjZ3elVOTjNId0VRbFI4STd4?= =?utf-8?B?NlREOHpaVk5jNDRuYlZyay9XMDNVTjZ5di96NnQ1T1gzSE51VG1JV2Z2R2VF?= =?utf-8?B?SXJFZVlTWVp6S2cwRVRiRGNtS2xBamVUbk1LWktJYkhIOUplOFlIM1RYN2tl?= =?utf-8?B?cjY2eDFCaUhDbHQzVWxDUkhSWWQxbThhNDQxby9hN0VFby9PZzRGK2N6RTlm?= =?utf-8?B?azU3Tm9NUGQzMTNQY2JjMTg3V1A5aXJmZHMydWpCcWlHVE02UG1jRVBZZjA2?= =?utf-8?B?UzF4MU1iWFdaeUFSaHpmOXpTclk5dm5keWlCOXdIcy9NWGhKMXRObURSODFW?= =?utf-8?B?MU1PT2VHbnlJNEFFaVJTVWh5Nm9ab0hEYmhNWnBueWpXWEJiZjBTVGJFWnlv?= =?utf-8?B?ZmhzZ3pqU1pBL05BQThVTTBpTzZUVW1TcnNWZnUvcDIwR1pBalBkZ2NlN1pG?= =?utf-8?B?TTZRRzRVYlJQSXpwRE9PaGx5VFBXZnRjTmZzU1Q3WHhEKzM2Sy9SNkRkeGsr?= =?utf-8?B?TVg2RllDa3dwNUtZOElLbWJyeGVxQmtuNm1QQ2FNZ0NFRmkrREQzdHJDOW1w?= =?utf-8?B?cGRyM2lSZW1DTFdzY3BjeGRkOERiNUs0WDgyRkZvVGUybnNCd1dlSEE0NEZS?= =?utf-8?B?VE02Y2t3cFF5VVIvU2dLWUFuWGZGQ3F2ei95aWdNVktPQ3ZBZUE1T0ZiUG5K?= =?utf-8?B?UlQvdzJFMFN0YjFOZFQ1ZVhsQWlBU0k5azhyRDBxSXo5ZHdxMFpKU3g1Vnlj?= =?utf-8?B?QSsxMG9wNGhGZHNOdmtxVEtrbWpjMmFPSUFOTFNaZ0p4ZHI1T3Z5SGJ2ZjRa?= =?utf-8?B?cVpKNXRjTkRkU1kyejF0bVZXMzVVV3FNRnpxTU16YlkxS21Gc1J1ZHFodm9L?= =?utf-8?B?UlVORlpTQVNlNFZaRFphT0JCYVQyLzNzZDFzZ1hUM2VpYmZaMXZJTFZOVG1Q?= =?utf-8?B?cE1MU09hUXZvU0lDc2ZkSXVaTG00TjB4c2VIekhOQUhiaFYvc1ZCdXZZV0R3?= =?utf-8?B?UmZiN3hQY2JjcGZkcXYzV2F4WmZjQi9PRTZpT1IvWS9BVlVYZVZtRFVhZHFp?= =?utf-8?B?TWNSZVNLeTBwZERxREJzWDZlcHdlSHdOeFNLZHpsTVZnRGhkZnBUWXpiUVRS?= =?utf-8?B?bE1HU0s5dGV3Q0NtZ05uVS9Ob1N4ZEtHK3AxSUFjQys0VTVpRFcwZHI4WmhI?= =?utf-8?B?RWNCdURRYkdIdzNlUE9remJVbDlKcEI3VXdhWDJlVHlnSWRSY2xGbENOOEpL?= =?utf-8?B?L3hLK3Q5cmFjMVhiR1hOYVU0MXFqOTdISE5NZ0ZUQkVZa0pZYUNLbVQ1RU5r?= =?utf-8?B?YS9lVmd4UVk1NVoxMGlkWFhtSGhTWGRuNU4wNExKV0RRR2ptMFU0MDZJK0E1?= =?utf-8?B?Wm45VWVVd0JqTlRQaER4bWJUNzVWcHhrNU1GUGgyK2hsdUQxVXE5aFhsdHdt?= =?utf-8?B?N0l3SlVsL3FJOTlyamlkeVB4SlBCZ3NJQUFLeE1LeENZeWhrMDkvOVlzVU1E?= =?utf-8?B?b1dsaVBrSVB1ZW9PQ2IzV0JPcjlVdU9RekcxZFdpWWIwWEhJNGFUYVhvZVRu?= =?utf-8?B?S3dzRk9EdUZFR2d5OUQ5Y3YzZjVvQkhTblZ2QlZ6R08vSDhYLzNoNUl3R3Vm?= =?utf-8?B?TjUwcHM2M09ROFQzcytnMWxDNVhSVDBQbXlpZHBIU1RBNFo0dk1qL096cDdF?= =?utf-8?B?NlVaYS9wRWRPcmRLVnJTeUw2K05odkhtQnNIbC8zdG82MDQyejNDcUY0anky?= =?utf-8?B?dVhBbnRLM2tsbXlNVm5YaGhJK3EzZUNlUHZ4QWZZR2lqK2FScStWdm9ZWVJw?= =?utf-8?Q?Bwxcv4RY4Iszk?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2d0ad2e-6f56-44e1-f289-08d9252288f1 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jun 2021 17:27:30.8937 (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: gWTLXtBKfcxTRBa1N2BfbpViMkYXLs4+6Bdu8dvlFGzJpYnZevE8nIT8Ux0ha0Q2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4221 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: , Cc: Gerd Hoffmann , Jason Ekstrand , intel-gfx , Huang Rui , VMware Graphics , dri-devel , Thomas Zimmermann , Sean Paul Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Am 01.06.21 um 16:34 schrieb Daniel Vetter: > On Thu, May 27, 2021 at 03:41:02PM +0200, Christian König wrote: >> Am 27.05.21 um 15:25 schrieb Daniel Vetter: >>> On Thu, May 27, 2021 at 1:59 PM Christian König >>> wrote: >>>> Am 27.05.21 um 12:39 schrieb Daniel Vetter: >>>>> On Wed, May 26, 2021 at 12:57:40PM +0200, Christian König wrote: >>>>>> Am 25.05.21 um 23:17 schrieb Jason Ekstrand: >>>>>>> None of these helpers actually leak any RCU details to the caller. They >>>>>>> all assume you have a genuine reference, take the RCU read lock, and >>>>>>> retry if needed. Naming them with an _rcu is likely to cause callers >>>>>>> more panic than needed. >>>>>> I'm really wondering if we need this postfix in the first place. >>>>>> >>>>>> If we use the right rcu_dereference_check() macro then those functions can >>>>>> be called with both the reservation object locked and unlocked. It shouldn't >>>>>> matter to them. >>>>>> >>>>>> But getting rid of the _rcu postfix sounds like a good idea in general to >>>>>> me. >>>>> So does that count as an ack or not? If yes I think we should land this >>>>> patch right away, since it's going to conflict real fast badly. >>>> I had some follow up discussion with Jason and I would rather like to >>>> switch to using rcu_dereference_check() in all places and completely >>>> remove the _rcu postfix. >>> Hm, I'm not sure whether spreading _rcu tricks further is an >>> especially bright idea. At least i915 is full of very clever _rcu >>> tricks, and encouraging drivers to roll out their own _rcu everywhere >>> is probably not in our best interest. Some fast-path checking is imo >>> ok, but that's it. Especially once we get into the entire >>> SLAB_TYPESAFE_BY_RCU business it becomes really nasty really quickly. >> Oh, yes completely agree. SLAB_TYPESAFE_BY_RCU is optimizing for the wrong >> use case I think. >> >> You save a bit of overhead while freeing fences, but in return you have >> extra overhead while adding fences to the dma_resv object. > Getting way off topic, but I'm wondering whether the entire rcu business > is really worth it for dma_fence. > > Mostly we manipulate dma_resv while holding dma_resv anyway. There's maybe > a few waits and stuff, but I'm not sure whether the dma_resv_lock + > dma_fence_get + dma_resv_unlock + dma_fence_put really matter. And if you > have lock contention on a single buffer you've lost anyway. > > At that point I think we have maybe some lockless tricks in the evict > code, but then again once you're evicting it's probably going pretty bad > already. > > So SLAB_TYPESAFE_BY_RCU is something I want to analyze for i915 whether > it's really worth it and was justified, or whether we should drop it. But > I'm wondering whether we should drop rcu for fences outright. Would be > quite some audit to check out where it's used. > > From i915 side we've done these lockless tricks back when > dev->struct_mutex was a thing and alwas contended. But with per-obj > locking now happening for real with dma-resv, that's probably not > justified. > > But then looking at git history the rcu in dma_resv is older than that, > and was justified with ttm. Scratching my head when and why TTM should have ever needed some lockless operation when that was added? We do have some now, but just because they where available. On the other hand I'm pretty sure that we can make the whole RCU handling in the dma_resv object much less painful. Basic problem here is that we have two pointers instead of one, e.g. the excl fence and/or the shared fences. If we could move the exclusive fence pointer into the shared fences most of the trouble would go away suddenly. The other thing we should certainly have is more use case based iterators. E.g. something like dma_resv_for_each_sync_fence(...) {...}. Regards, Christian. > >>> That's why I'm slightly leaning towards _unlocked variants, except we >>> do use those in lots of places where we hold dma_resv_lock too. So not >>> sure what's the best plan overall here. >> Well what function names are we actually talking about? >> >> For the dma_resv_get_excl_rcu() case I agree we should probably name that to >> dma_resv_get_excl_unlocked() because it makes no sense at all to use this >> function while holding the lock. >> >> But for the following functions: >> dma_resv_get_fences_rcu >> dma_resv_wait_timeout_rcu >> dma_resv_test_signaled_rcu >> >> I think we should just drop the _rcu naming because those are supposed to >> work independent if the resv lock is held or not. > Ack on all naming. > -Daniel > >> Regards, >> Christian. >> >>> -Daniel >>> >>>> But yes I see the pain of rebasing this as well. >>>> >>>> Christian. >>>> >>>>> -Daniel >>>>> >>>>>> Christian. >>>>>> >>>>>>> v2 (Jason Ekstrand): >>>>>>> - Fix function argument indentation >>>>>>> >>>>>>> Signed-off-by: Jason Ekstrand >>>>>>> Suggested-by: Daniel Vetter >>>>>>> Cc: Christian König >>>>>>> Cc: Maarten Lankhorst >>>>>>> Cc: Maxime Ripard >>>>>>> Cc: Thomas Zimmermann >>>>>>> Cc: Lucas Stach >>>>>>> Cc: Rob Clark >>>>>>> Cc: Sean Paul >>>>>>> Cc: Huang Rui >>>>>>> Cc: Gerd Hoffmann >>>>>>> Cc: VMware Graphics >>>>>>> --- >>>>>>> drivers/dma-buf/dma-buf.c | 4 +-- >>>>>>> drivers/dma-buf/dma-resv.c | 28 +++++++++---------- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 6 ++-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 2 +- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 4 +-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 6 ++-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 4 +-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 +-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 6 ++-- >>>>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 14 +++++----- >>>>>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 ++-- >>>>>>> drivers/gpu/drm/drm_gem.c | 10 +++---- >>>>>>> drivers/gpu/drm/drm_gem_atomic_helper.c | 2 +- >>>>>>> drivers/gpu/drm/etnaviv/etnaviv_gem.c | 7 ++--- >>>>>>> drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 8 +++--- >>>>>>> drivers/gpu/drm/i915/display/intel_display.c | 2 +- >>>>>>> drivers/gpu/drm/i915/dma_resv_utils.c | 2 +- >>>>>>> drivers/gpu/drm/i915/gem/i915_gem_busy.c | 2 +- >>>>>>> .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- >>>>>>> drivers/gpu/drm/i915/gem/i915_gem_object.h | 2 +- >>>>>>> drivers/gpu/drm/i915/gem/i915_gem_userptr.c | 4 +-- >>>>>>> drivers/gpu/drm/i915/gem/i915_gem_wait.c | 10 +++---- >>>>>>> drivers/gpu/drm/i915/i915_request.c | 6 ++-- >>>>>>> drivers/gpu/drm/i915/i915_sw_fence.c | 4 +-- >>>>>>> drivers/gpu/drm/msm/msm_gem.c | 3 +- >>>>>>> drivers/gpu/drm/nouveau/dispnv50/wndw.c | 2 +- >>>>>>> drivers/gpu/drm/nouveau/nouveau_gem.c | 4 +-- >>>>>>> drivers/gpu/drm/panfrost/panfrost_drv.c | 4 +-- >>>>>>> drivers/gpu/drm/panfrost/panfrost_job.c | 2 +- >>>>>>> drivers/gpu/drm/radeon/radeon_gem.c | 6 ++-- >>>>>>> drivers/gpu/drm/radeon/radeon_mn.c | 4 +-- >>>>>>> drivers/gpu/drm/ttm/ttm_bo.c | 18 ++++++------ >>>>>>> drivers/gpu/drm/vgem/vgem_fence.c | 4 +-- >>>>>>> drivers/gpu/drm/virtio/virtgpu_ioctl.c | 6 ++-- >>>>>>> drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 2 +- >>>>>>> include/linux/dma-resv.h | 18 ++++++------ >>>>>>> 36 files changed, 108 insertions(+), 110 deletions(-) >>>>>>> >>>>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c >>>>>>> index f264b70c383eb..ed6451d55d663 100644 >>>>>>> --- a/drivers/dma-buf/dma-buf.c >>>>>>> +++ b/drivers/dma-buf/dma-buf.c >>>>>>> @@ -1147,8 +1147,8 @@ static int __dma_buf_begin_cpu_access(struct dma_buf *dmabuf, >>>>>>> long ret; >>>>>>> /* Wait on any implicit rendering fences */ >>>>>>> - ret = dma_resv_wait_timeout_rcu(resv, write, true, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(resv, write, true, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> if (ret < 0) >>>>>>> return ret; >>>>>>> diff --git a/drivers/dma-buf/dma-resv.c b/drivers/dma-buf/dma-resv.c >>>>>>> index 6ddbeb5dfbf65..d6f1ed4cd4d55 100644 >>>>>>> --- a/drivers/dma-buf/dma-resv.c >>>>>>> +++ b/drivers/dma-buf/dma-resv.c >>>>>>> @@ -417,7 +417,7 @@ int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src) >>>>>>> EXPORT_SYMBOL(dma_resv_copy_fences); >>>>>>> /** >>>>>>> - * dma_resv_get_fences_rcu - Get an object's shared and exclusive >>>>>>> + * dma_resv_get_fences_unlocked - Get an object's shared and exclusive >>>>>>> * fences without update side lock held >>>>>>> * @obj: the reservation object >>>>>>> * @pfence_excl: the returned exclusive fence (or NULL) >>>>>>> @@ -429,10 +429,10 @@ EXPORT_SYMBOL(dma_resv_copy_fences); >>>>>>> * exclusive fence is not specified the fence is put into the array of the >>>>>>> * shared fences as well. Returns either zero or -ENOMEM. >>>>>>> */ >>>>>>> -int dma_resv_get_fences_rcu(struct dma_resv *obj, >>>>>>> - struct dma_fence **pfence_excl, >>>>>>> - unsigned *pshared_count, >>>>>>> - struct dma_fence ***pshared) >>>>>>> +int dma_resv_get_fences_unlocked(struct dma_resv *obj, >>>>>>> + struct dma_fence **pfence_excl, >>>>>>> + unsigned *pshared_count, >>>>>>> + struct dma_fence ***pshared) >>>>>>> { >>>>>>> struct dma_fence **shared = NULL; >>>>>>> struct dma_fence *fence_excl; >>>>>>> @@ -515,10 +515,10 @@ int dma_resv_get_fences_rcu(struct dma_resv *obj, >>>>>>> *pshared = shared; >>>>>>> return ret; >>>>>>> } >>>>>>> -EXPORT_SYMBOL_GPL(dma_resv_get_fences_rcu); >>>>>>> +EXPORT_SYMBOL_GPL(dma_resv_get_fences_unlocked); >>>>>>> /** >>>>>>> - * dma_resv_wait_timeout_rcu - Wait on reservation's objects >>>>>>> + * dma_resv_wait_timeout_unlocked - Wait on reservation's objects >>>>>>> * shared and/or exclusive fences. >>>>>>> * @obj: the reservation object >>>>>>> * @wait_all: if true, wait on all fences, else wait on just exclusive fence >>>>>>> @@ -529,9 +529,9 @@ EXPORT_SYMBOL_GPL(dma_resv_get_fences_rcu); >>>>>>> * Returns -ERESTARTSYS if interrupted, 0 if the wait timed out, or >>>>>>> * greater than zer on success. >>>>>>> */ >>>>>>> -long dma_resv_wait_timeout_rcu(struct dma_resv *obj, >>>>>>> - bool wait_all, bool intr, >>>>>>> - unsigned long timeout) >>>>>>> +long dma_resv_wait_timeout_unlocked(struct dma_resv *obj, >>>>>>> + bool wait_all, bool intr, >>>>>>> + unsigned long timeout) >>>>>>> { >>>>>>> struct dma_fence *fence; >>>>>>> unsigned seq, shared_count; >>>>>>> @@ -602,7 +602,7 @@ long dma_resv_wait_timeout_rcu(struct dma_resv *obj, >>>>>>> rcu_read_unlock(); >>>>>>> goto retry; >>>>>>> } >>>>>>> -EXPORT_SYMBOL_GPL(dma_resv_wait_timeout_rcu); >>>>>>> +EXPORT_SYMBOL_GPL(dma_resv_wait_timeout_unlocked); >>>>>>> static inline int dma_resv_test_signaled_single(struct dma_fence *passed_fence) >>>>>>> @@ -622,7 +622,7 @@ static inline int dma_resv_test_signaled_single(struct dma_fence *passed_fence) >>>>>>> } >>>>>>> /** >>>>>>> - * dma_resv_test_signaled_rcu - Test if a reservation object's >>>>>>> + * dma_resv_test_signaled_unlocked - Test if a reservation object's >>>>>>> * fences have been signaled. >>>>>>> * @obj: the reservation object >>>>>>> * @test_all: if true, test all fences, otherwise only test the exclusive >>>>>>> @@ -631,7 +631,7 @@ static inline int dma_resv_test_signaled_single(struct dma_fence *passed_fence) >>>>>>> * RETURNS >>>>>>> * true if all fences signaled, else false >>>>>>> */ >>>>>>> -bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all) >>>>>>> +bool dma_resv_test_signaled_unlocked(struct dma_resv *obj, bool test_all) >>>>>>> { >>>>>>> unsigned seq, shared_count; >>>>>>> int ret; >>>>>>> @@ -680,4 +680,4 @@ bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all) >>>>>>> rcu_read_unlock(); >>>>>>> return ret; >>>>>>> } >>>>>>> -EXPORT_SYMBOL_GPL(dma_resv_test_signaled_rcu); >>>>>>> +EXPORT_SYMBOL_GPL(dma_resv_test_signaled_unlocked); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c >>>>>>> index 8a1fb8b6606e5..b8e24f199be9a 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c >>>>>>> @@ -203,9 +203,9 @@ int amdgpu_display_crtc_page_flip_target(struct drm_crtc *crtc, >>>>>>> goto unpin; >>>>>>> } >>>>>>> - r = dma_resv_get_fences_rcu(new_abo->tbo.base.resv, &work->excl, >>>>>>> - &work->shared_count, >>>>>>> - &work->shared); >>>>>>> + r = dma_resv_get_fences_unlocked(new_abo->tbo.base.resv, &work->excl, >>>>>>> + &work->shared_count, >>>>>>> + &work->shared); >>>>>>> if (unlikely(r != 0)) { >>>>>>> DRM_ERROR("failed to get fences for buffer\n"); >>>>>>> goto unpin; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>>>>>> index baa980a477d94..0d0319bc51577 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c >>>>>>> @@ -98,7 +98,7 @@ __dma_resv_make_exclusive(struct dma_resv *obj) >>>>>>> if (!dma_resv_get_list(obj)) /* no shared fences to convert */ >>>>>>> return 0; >>>>>>> - r = dma_resv_get_fences_rcu(obj, NULL, &count, &fences); >>>>>>> + r = dma_resv_get_fences_unlocked(obj, NULL, &count, &fences); >>>>>>> if (r) >>>>>>> return r; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>>>>>> index 18974bd081f00..8e2996d6ba3ad 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c >>>>>>> @@ -471,8 +471,8 @@ int amdgpu_gem_wait_idle_ioctl(struct drm_device *dev, void *data, >>>>>>> return -ENOENT; >>>>>>> } >>>>>>> robj = gem_to_amdgpu_bo(gobj); >>>>>>> - ret = dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true, >>>>>>> - timeout); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(robj->tbo.base.resv, true, true, >>>>>>> + timeout); >>>>>>> /* ret == 0 means not signaled, >>>>>>> * ret > 0 means signaled >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c >>>>>>> index b4971e90b98cf..38e1b32dd2cef 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c >>>>>>> @@ -112,7 +112,7 @@ void amdgpu_pasid_free_delayed(struct dma_resv *resv, >>>>>>> unsigned count; >>>>>>> int r; >>>>>>> - r = dma_resv_get_fences_rcu(resv, NULL, &count, &fences); >>>>>>> + r = dma_resv_get_fences_unlocked(resv, NULL, &count, &fences); >>>>>>> if (r) >>>>>>> goto fallback; >>>>>>> @@ -156,8 +156,8 @@ void amdgpu_pasid_free_delayed(struct dma_resv *resv, >>>>>>> /* Not enough memory for the delayed delete, as last resort >>>>>>> * block for all the fences to complete. >>>>>>> */ >>>>>>> - dma_resv_wait_timeout_rcu(resv, true, false, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + dma_resv_wait_timeout_unlocked(resv, true, false, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> amdgpu_pasid_free(pasid); >>>>>>> } >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c >>>>>>> index 828b5167ff128..0319c8b547c48 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c >>>>>>> @@ -75,8 +75,8 @@ static bool amdgpu_mn_invalidate_gfx(struct mmu_interval_notifier *mni, >>>>>>> mmu_interval_set_seq(mni, cur_seq); >>>>>>> - r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, true, false, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + r = dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, true, false, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> mutex_unlock(&adev->notifier_lock); >>>>>>> if (r <= 0) >>>>>>> DRM_ERROR("(%ld) failed to wait for user bo\n", r); >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c >>>>>>> index 0adffcace3263..de1c7c5501683 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c >>>>>>> @@ -791,8 +791,8 @@ int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr) >>>>>>> return 0; >>>>>>> } >>>>>>> - r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, false, false, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + r = dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, false, false, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> if (r < 0) >>>>>>> return r; >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> index c6dbc08016045..4a2196404fb69 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c >>>>>>> @@ -1115,9 +1115,9 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring, struct amdgpu_bo *bo, >>>>>>> ib->length_dw = 16; >>>>>>> if (direct) { >>>>>>> - r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, >>>>>>> - true, false, >>>>>>> - msecs_to_jiffies(10)); >>>>>>> + r = dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, >>>>>>> + true, false, >>>>>>> + msecs_to_jiffies(10)); >>>>>>> if (r == 0) >>>>>>> r = -ETIMEDOUT; >>>>>>> if (r < 0) >>>>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>>>>>> index 4a3e3f72e1277..7ba1c537d6584 100644 >>>>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>>>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c >>>>>>> @@ -2007,14 +2007,14 @@ static void amdgpu_vm_prt_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm) >>>>>>> unsigned i, shared_count; >>>>>>> int r; >>>>>>> - r = dma_resv_get_fences_rcu(resv, &excl, >>>>>>> - &shared_count, &shared); >>>>>>> + r = dma_resv_get_fences_unlocked(resv, &excl, >>>>>>> + &shared_count, &shared); >>>>>>> if (r) { >>>>>>> /* Not enough memory to grab the fence list, as last resort >>>>>>> * block for all the fences to complete. >>>>>>> */ >>>>>>> - dma_resv_wait_timeout_rcu(resv, true, false, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + dma_resv_wait_timeout_unlocked(resv, true, false, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> return; >>>>>>> } >>>>>>> @@ -2625,7 +2625,7 @@ bool amdgpu_vm_evictable(struct amdgpu_bo *bo) >>>>>>> return true; >>>>>>> /* Don't evict VM page tables while they are busy */ >>>>>>> - if (!dma_resv_test_signaled_rcu(bo->tbo.base.resv, true)) >>>>>>> + if (!dma_resv_test_signaled_unlocked(bo->tbo.base.resv, true)) >>>>>>> return false; >>>>>>> /* Try to block ongoing updates */ >>>>>>> @@ -2805,8 +2805,8 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t min_vm_size, >>>>>>> */ >>>>>>> long amdgpu_vm_wait_idle(struct amdgpu_vm *vm, long timeout) >>>>>>> { >>>>>>> - timeout = dma_resv_wait_timeout_rcu(vm->root.base.bo->tbo.base.resv, >>>>>>> - true, true, timeout); >>>>>>> + timeout = dma_resv_wait_timeout_unlocked(vm->root.base.bo->tbo.base.resv, >>>>>>> + true, true, timeout); >>>>>>> if (timeout <= 0) >>>>>>> return timeout; >>>>>>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c >>>>>>> index 9ca517b658546..0121d2817fa26 100644 >>>>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c >>>>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c >>>>>>> @@ -8276,9 +8276,9 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, >>>>>>> * deadlock during GPU reset when this fence will not signal >>>>>>> * but we hold reservation lock for the BO. >>>>>>> */ >>>>>>> - r = dma_resv_wait_timeout_rcu(abo->tbo.base.resv, true, >>>>>>> - false, >>>>>>> - msecs_to_jiffies(5000)); >>>>>>> + r = dma_resv_wait_timeout_unlocked(abo->tbo.base.resv, true, >>>>>>> + false, >>>>>>> + msecs_to_jiffies(5000)); >>>>>>> if (unlikely(r <= 0)) >>>>>>> DRM_ERROR("Waiting for fences timed out!"); >>>>>>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c >>>>>>> index 9989425e9875a..1241a421b9e81 100644 >>>>>>> --- a/drivers/gpu/drm/drm_gem.c >>>>>>> +++ b/drivers/gpu/drm/drm_gem.c >>>>>>> @@ -770,8 +770,8 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, >>>>>>> return -EINVAL; >>>>>>> } >>>>>>> - ret = dma_resv_wait_timeout_rcu(obj->resv, wait_all, >>>>>>> - true, timeout); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(obj->resv, wait_all, >>>>>>> + true, timeout); >>>>>>> if (ret == 0) >>>>>>> ret = -ETIME; >>>>>>> else if (ret > 0) >>>>>>> @@ -1375,13 +1375,13 @@ int drm_gem_fence_array_add_implicit(struct xarray *fence_array, >>>>>>> if (!write) { >>>>>>> struct dma_fence *fence = >>>>>>> - dma_resv_get_excl_rcu(obj->resv); >>>>>>> + dma_resv_get_excl_unlocked(obj->resv); >>>>>>> return drm_gem_fence_array_add(fence_array, fence); >>>>>>> } >>>>>>> - ret = dma_resv_get_fences_rcu(obj->resv, NULL, >>>>>>> - &fence_count, &fences); >>>>>>> + ret = dma_resv_get_fences_unlocked(obj->resv, NULL, >>>>>>> + &fence_count, &fences); >>>>>>> if (ret || !fence_count) >>>>>>> return ret; >>>>>>> diff --git a/drivers/gpu/drm/drm_gem_atomic_helper.c b/drivers/gpu/drm/drm_gem_atomic_helper.c >>>>>>> index a005c5a0ba46a..a27135084ae5c 100644 >>>>>>> --- a/drivers/gpu/drm/drm_gem_atomic_helper.c >>>>>>> +++ b/drivers/gpu/drm/drm_gem_atomic_helper.c >>>>>>> @@ -147,7 +147,7 @@ int drm_gem_plane_helper_prepare_fb(struct drm_plane *plane, struct drm_plane_st >>>>>>> return 0; >>>>>>> obj = drm_gem_fb_get_obj(state->fb, 0); >>>>>>> - fence = dma_resv_get_excl_rcu(obj->resv); >>>>>>> + fence = dma_resv_get_excl_unlocked(obj->resv); >>>>>>> drm_atomic_set_fence_for_plane(state, fence); >>>>>>> return 0; >>>>>>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c >>>>>>> index db69f19ab5bca..4e6f5346e84e4 100644 >>>>>>> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c >>>>>>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c >>>>>>> @@ -390,14 +390,13 @@ int etnaviv_gem_cpu_prep(struct drm_gem_object *obj, u32 op, >>>>>>> } >>>>>>> if (op & ETNA_PREP_NOSYNC) { >>>>>>> - if (!dma_resv_test_signaled_rcu(obj->resv, >>>>>>> - write)) >>>>>>> + if (!dma_resv_test_signaled_unlocked(obj->resv, write)) >>>>>>> return -EBUSY; >>>>>>> } else { >>>>>>> unsigned long remain = etnaviv_timeout_to_jiffies(timeout); >>>>>>> - ret = dma_resv_wait_timeout_rcu(obj->resv, >>>>>>> - write, true, remain); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(obj->resv, >>>>>>> + write, true, remain); >>>>>>> if (ret <= 0) >>>>>>> return ret == 0 ? -ETIMEDOUT : ret; >>>>>>> } >>>>>>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c >>>>>>> index d05c359945799..6617fada4595d 100644 >>>>>>> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c >>>>>>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c >>>>>>> @@ -189,13 +189,13 @@ static int submit_fence_sync(struct etnaviv_gem_submit *submit) >>>>>>> continue; >>>>>>> if (bo->flags & ETNA_SUBMIT_BO_WRITE) { >>>>>>> - ret = dma_resv_get_fences_rcu(robj, &bo->excl, >>>>>>> - &bo->nr_shared, >>>>>>> - &bo->shared); >>>>>>> + ret = dma_resv_get_fences_unlocked(robj, &bo->excl, >>>>>>> + &bo->nr_shared, >>>>>>> + &bo->shared); >>>>>>> if (ret) >>>>>>> return ret; >>>>>>> } else { >>>>>>> - bo->excl = dma_resv_get_excl_rcu(robj); >>>>>>> + bo->excl = dma_resv_get_excl_unlocked(robj); >>>>>>> } >>>>>>> } >>>>>>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c >>>>>>> index 422b59ebf6dce..5f0b85a102159 100644 >>>>>>> --- a/drivers/gpu/drm/i915/display/intel_display.c >>>>>>> +++ b/drivers/gpu/drm/i915/display/intel_display.c >>>>>>> @@ -11040,7 +11040,7 @@ intel_prepare_plane_fb(struct drm_plane *_plane, >>>>>>> if (ret < 0) >>>>>>> goto unpin_fb; >>>>>>> - fence = dma_resv_get_excl_rcu(obj->base.resv); >>>>>>> + fence = dma_resv_get_excl_unlocked(obj->base.resv); >>>>>>> if (fence) { >>>>>>> add_rps_boost_after_vblank(new_plane_state->hw.crtc, >>>>>>> fence); >>>>>>> diff --git a/drivers/gpu/drm/i915/dma_resv_utils.c b/drivers/gpu/drm/i915/dma_resv_utils.c >>>>>>> index 9e508e7d4629f..bdfc6bf16a4e9 100644 >>>>>>> --- a/drivers/gpu/drm/i915/dma_resv_utils.c >>>>>>> +++ b/drivers/gpu/drm/i915/dma_resv_utils.c >>>>>>> @@ -10,7 +10,7 @@ >>>>>>> void dma_resv_prune(struct dma_resv *resv) >>>>>>> { >>>>>>> if (dma_resv_trylock(resv)) { >>>>>>> - if (dma_resv_test_signaled_rcu(resv, true)) >>>>>>> + if (dma_resv_test_signaled_unlocked(resv, true)) >>>>>>> dma_resv_add_excl_fence(resv, NULL); >>>>>>> dma_resv_unlock(resv); >>>>>>> } >>>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_busy.c b/drivers/gpu/drm/i915/gem/i915_gem_busy.c >>>>>>> index 25235ef630c10..754ad6d1bace9 100644 >>>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_busy.c >>>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_busy.c >>>>>>> @@ -105,7 +105,7 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data, >>>>>>> * Alternatively, we can trade that extra information on read/write >>>>>>> * activity with >>>>>>> * args->busy = >>>>>>> - * !dma_resv_test_signaled_rcu(obj->resv, true); >>>>>>> + * !dma_resv_test_signaled_unlocked(obj->resv, true); >>>>>>> * to report the overall busyness. This is what the wait-ioctl does. >>>>>>> * >>>>>>> */ >>>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c >>>>>>> index 297143511f99b..e8f323564e57b 100644 >>>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c >>>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c >>>>>>> @@ -1481,7 +1481,7 @@ static inline bool use_reloc_gpu(struct i915_vma *vma) >>>>>>> if (DBG_FORCE_RELOC) >>>>>>> return false; >>>>>>> - return !dma_resv_test_signaled_rcu(vma->resv, true); >>>>>>> + return !dma_resv_test_signaled_unlocked(vma->resv, true); >>>>>>> } >>>>>>> static unsigned long vma_phys_addr(struct i915_vma *vma, u32 offset) >>>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.h b/drivers/gpu/drm/i915/gem/i915_gem_object.h >>>>>>> index 2ebd79537aea9..7c0eb425cb3b3 100644 >>>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_object.h >>>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.h >>>>>>> @@ -500,7 +500,7 @@ i915_gem_object_last_write_engine(struct drm_i915_gem_object *obj) >>>>>>> struct dma_fence *fence; >>>>>>> rcu_read_lock(); >>>>>>> - fence = dma_resv_get_excl_rcu(obj->base.resv); >>>>>>> + fence = dma_resv_get_excl_unlocked(obj->base.resv); >>>>>>> rcu_read_unlock(); >>>>>>> if (fence && dma_fence_is_i915(fence) && !dma_fence_is_signaled(fence)) >>>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c >>>>>>> index a657b99ec7606..44df18dc9669f 100644 >>>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c >>>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c >>>>>>> @@ -85,8 +85,8 @@ static bool i915_gem_userptr_invalidate(struct mmu_interval_notifier *mni, >>>>>>> return true; >>>>>>> /* we will unbind on next submission, still have userptr pins */ >>>>>>> - r = dma_resv_wait_timeout_rcu(obj->base.resv, true, false, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + r = dma_resv_wait_timeout_unlocked(obj->base.resv, true, false, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> if (r <= 0) >>>>>>> drm_err(&i915->drm, "(%ld) failed to wait for idle\n", r); >>>>>>> diff --git a/drivers/gpu/drm/i915/gem/i915_gem_wait.c b/drivers/gpu/drm/i915/gem/i915_gem_wait.c >>>>>>> index 4b9856d5ba14f..5b6c52659ad4d 100644 >>>>>>> --- a/drivers/gpu/drm/i915/gem/i915_gem_wait.c >>>>>>> +++ b/drivers/gpu/drm/i915/gem/i915_gem_wait.c >>>>>>> @@ -45,7 +45,7 @@ i915_gem_object_wait_reservation(struct dma_resv *resv, >>>>>>> unsigned int count, i; >>>>>>> int ret; >>>>>>> - ret = dma_resv_get_fences_rcu(resv, &excl, &count, &shared); >>>>>>> + ret = dma_resv_get_fences_unlocked(resv, &excl, &count, &shared); >>>>>>> if (ret) >>>>>>> return ret; >>>>>>> @@ -73,7 +73,7 @@ i915_gem_object_wait_reservation(struct dma_resv *resv, >>>>>>> */ >>>>>>> prune_fences = count && timeout >= 0; >>>>>>> } else { >>>>>>> - excl = dma_resv_get_excl_rcu(resv); >>>>>>> + excl = dma_resv_get_excl_unlocked(resv); >>>>>>> } >>>>>>> if (excl && timeout >= 0) >>>>>>> @@ -158,8 +158,8 @@ i915_gem_object_wait_priority(struct drm_i915_gem_object *obj, >>>>>>> unsigned int count, i; >>>>>>> int ret; >>>>>>> - ret = dma_resv_get_fences_rcu(obj->base.resv, >>>>>>> - &excl, &count, &shared); >>>>>>> + ret = dma_resv_get_fences_unlocked(obj->base.resv, >>>>>>> + &excl, &count, &shared); >>>>>>> if (ret) >>>>>>> return ret; >>>>>>> @@ -170,7 +170,7 @@ i915_gem_object_wait_priority(struct drm_i915_gem_object *obj, >>>>>>> kfree(shared); >>>>>>> } else { >>>>>>> - excl = dma_resv_get_excl_rcu(obj->base.resv); >>>>>>> + excl = dma_resv_get_excl_unlocked(obj->base.resv); >>>>>>> } >>>>>>> if (excl) { >>>>>>> diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c >>>>>>> index 970d8f4986bbe..f1ed03ced7dd1 100644 >>>>>>> --- a/drivers/gpu/drm/i915/i915_request.c >>>>>>> +++ b/drivers/gpu/drm/i915/i915_request.c >>>>>>> @@ -1594,8 +1594,8 @@ i915_request_await_object(struct i915_request *to, >>>>>>> struct dma_fence **shared; >>>>>>> unsigned int count, i; >>>>>>> - ret = dma_resv_get_fences_rcu(obj->base.resv, >>>>>>> - &excl, &count, &shared); >>>>>>> + ret = dma_resv_get_fences_unlocked(obj->base.resv, >>>>>>> + &excl, &count, &shared); >>>>>>> if (ret) >>>>>>> return ret; >>>>>>> @@ -1611,7 +1611,7 @@ i915_request_await_object(struct i915_request *to, >>>>>>> dma_fence_put(shared[i]); >>>>>>> kfree(shared); >>>>>>> } else { >>>>>>> - excl = dma_resv_get_excl_rcu(obj->base.resv); >>>>>>> + excl = dma_resv_get_excl_unlocked(obj->base.resv); >>>>>>> } >>>>>>> if (excl) { >>>>>>> diff --git a/drivers/gpu/drm/i915/i915_sw_fence.c b/drivers/gpu/drm/i915/i915_sw_fence.c >>>>>>> index 2744558f30507..0bcb7ea44201e 100644 >>>>>>> --- a/drivers/gpu/drm/i915/i915_sw_fence.c >>>>>>> +++ b/drivers/gpu/drm/i915/i915_sw_fence.c >>>>>>> @@ -582,7 +582,7 @@ int i915_sw_fence_await_reservation(struct i915_sw_fence *fence, >>>>>>> struct dma_fence **shared; >>>>>>> unsigned int count, i; >>>>>>> - ret = dma_resv_get_fences_rcu(resv, &excl, &count, &shared); >>>>>>> + ret = dma_resv_get_fences_unlocked(resv, &excl, &count, &shared); >>>>>>> if (ret) >>>>>>> return ret; >>>>>>> @@ -606,7 +606,7 @@ int i915_sw_fence_await_reservation(struct i915_sw_fence *fence, >>>>>>> dma_fence_put(shared[i]); >>>>>>> kfree(shared); >>>>>>> } else { >>>>>>> - excl = dma_resv_get_excl_rcu(resv); >>>>>>> + excl = dma_resv_get_excl_unlocked(resv); >>>>>>> } >>>>>>> if (ret >= 0 && excl && excl->ops != exclude) { >>>>>>> diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c >>>>>>> index 56df86e5f7400..1aca60507bb14 100644 >>>>>>> --- a/drivers/gpu/drm/msm/msm_gem.c >>>>>>> +++ b/drivers/gpu/drm/msm/msm_gem.c >>>>>>> @@ -915,8 +915,7 @@ int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, ktime_t *timeout) >>>>>>> op & MSM_PREP_NOSYNC ? 0 : timeout_to_jiffies(timeout); >>>>>>> long ret; >>>>>>> - ret = dma_resv_wait_timeout_rcu(obj->resv, write, >>>>>>> - true, remain); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(obj->resv, write, true, remain); >>>>>>> if (ret == 0) >>>>>>> return remain == 0 ? -EBUSY : -ETIMEDOUT; >>>>>>> else if (ret < 0) >>>>>>> diff --git a/drivers/gpu/drm/nouveau/dispnv50/wndw.c b/drivers/gpu/drm/nouveau/dispnv50/wndw.c >>>>>>> index 0cb1f9d848d3e..8d048bacd6f02 100644 >>>>>>> --- a/drivers/gpu/drm/nouveau/dispnv50/wndw.c >>>>>>> +++ b/drivers/gpu/drm/nouveau/dispnv50/wndw.c >>>>>>> @@ -561,7 +561,7 @@ nv50_wndw_prepare_fb(struct drm_plane *plane, struct drm_plane_state *state) >>>>>>> asyw->image.handle[0] = ctxdma->object.handle; >>>>>>> } >>>>>>> - asyw->state.fence = dma_resv_get_excl_rcu(nvbo->bo.base.resv); >>>>>>> + asyw->state.fence = dma_resv_get_excl_unlocked(nvbo->bo.base.resv); >>>>>>> asyw->image.offset[0] = nvbo->offset; >>>>>>> if (wndw->func->prepare) { >>>>>>> diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c >>>>>>> index a70e82413fa75..bc6b09ee9b552 100644 >>>>>>> --- a/drivers/gpu/drm/nouveau/nouveau_gem.c >>>>>>> +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c >>>>>>> @@ -928,8 +928,8 @@ nouveau_gem_ioctl_cpu_prep(struct drm_device *dev, void *data, >>>>>>> return -ENOENT; >>>>>>> nvbo = nouveau_gem_object(gem); >>>>>>> - lret = dma_resv_wait_timeout_rcu(nvbo->bo.base.resv, write, true, >>>>>>> - no_wait ? 0 : 30 * HZ); >>>>>>> + lret = dma_resv_wait_timeout_unlocked(nvbo->bo.base.resv, write, true, >>>>>>> + no_wait ? 0 : 30 * HZ); >>>>>>> if (!lret) >>>>>>> ret = -EBUSY; >>>>>>> else if (lret > 0) >>>>>>> diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panfrost/panfrost_drv.c >>>>>>> index ca07098a61419..eef5b632ee0ce 100644 >>>>>>> --- a/drivers/gpu/drm/panfrost/panfrost_drv.c >>>>>>> +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c >>>>>>> @@ -311,8 +311,8 @@ panfrost_ioctl_wait_bo(struct drm_device *dev, void *data, >>>>>>> if (!gem_obj) >>>>>>> return -ENOENT; >>>>>>> - ret = dma_resv_wait_timeout_rcu(gem_obj->resv, true, >>>>>>> - true, timeout); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(gem_obj->resv, true, >>>>>>> + true, timeout); >>>>>>> if (!ret) >>>>>>> ret = timeout ? -ETIMEDOUT : -EBUSY; >>>>>>> diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panfrost/panfrost_job.c >>>>>>> index 6003cfeb13221..2df3e999a38d0 100644 >>>>>>> --- a/drivers/gpu/drm/panfrost/panfrost_job.c >>>>>>> +++ b/drivers/gpu/drm/panfrost/panfrost_job.c >>>>>>> @@ -203,7 +203,7 @@ static void panfrost_acquire_object_fences(struct drm_gem_object **bos, >>>>>>> int i; >>>>>>> for (i = 0; i < bo_count; i++) >>>>>>> - implicit_fences[i] = dma_resv_get_excl_rcu(bos[i]->resv); >>>>>>> + implicit_fences[i] = dma_resv_get_excl_unlocked(bos[i]->resv); >>>>>>> } >>>>>>> static void panfrost_attach_object_fences(struct drm_gem_object **bos, >>>>>>> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c >>>>>>> index 05ea2f39f6261..1a38b0bf36d11 100644 >>>>>>> --- a/drivers/gpu/drm/radeon/radeon_gem.c >>>>>>> +++ b/drivers/gpu/drm/radeon/radeon_gem.c >>>>>>> @@ -125,7 +125,7 @@ static int radeon_gem_set_domain(struct drm_gem_object *gobj, >>>>>>> } >>>>>>> if (domain == RADEON_GEM_DOMAIN_CPU) { >>>>>>> /* Asking for cpu access wait for object idle */ >>>>>>> - r = dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true, 30 * HZ); >>>>>>> + r = dma_resv_wait_timeout_unlocked(robj->tbo.base.resv, true, true, 30 * HZ); >>>>>>> if (!r) >>>>>>> r = -EBUSY; >>>>>>> @@ -474,7 +474,7 @@ int radeon_gem_busy_ioctl(struct drm_device *dev, void *data, >>>>>>> } >>>>>>> robj = gem_to_radeon_bo(gobj); >>>>>>> - r = dma_resv_test_signaled_rcu(robj->tbo.base.resv, true); >>>>>>> + r = dma_resv_test_signaled_unlocked(robj->tbo.base.resv, true); >>>>>>> if (r == 0) >>>>>>> r = -EBUSY; >>>>>>> else >>>>>>> @@ -503,7 +503,7 @@ int radeon_gem_wait_idle_ioctl(struct drm_device *dev, void *data, >>>>>>> } >>>>>>> robj = gem_to_radeon_bo(gobj); >>>>>>> - ret = dma_resv_wait_timeout_rcu(robj->tbo.base.resv, true, true, 30 * HZ); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(robj->tbo.base.resv, true, true, 30 * HZ); >>>>>>> if (ret == 0) >>>>>>> r = -EBUSY; >>>>>>> else if (ret < 0) >>>>>>> diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c >>>>>>> index e37c9a57a7c36..a19be3f8a218c 100644 >>>>>>> --- a/drivers/gpu/drm/radeon/radeon_mn.c >>>>>>> +++ b/drivers/gpu/drm/radeon/radeon_mn.c >>>>>>> @@ -66,8 +66,8 @@ static bool radeon_mn_invalidate(struct mmu_interval_notifier *mn, >>>>>>> return true; >>>>>>> } >>>>>>> - r = dma_resv_wait_timeout_rcu(bo->tbo.base.resv, true, false, >>>>>>> - MAX_SCHEDULE_TIMEOUT); >>>>>>> + r = dma_resv_wait_timeout_unlocked(bo->tbo.base.resv, true, false, >>>>>>> + MAX_SCHEDULE_TIMEOUT); >>>>>>> if (r <= 0) >>>>>>> DRM_ERROR("(%ld) failed to wait for user bo\n", r); >>>>>>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c >>>>>>> index ca1b098b6a561..215cad3149621 100644 >>>>>>> --- a/drivers/gpu/drm/ttm/ttm_bo.c >>>>>>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c >>>>>>> @@ -294,7 +294,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, >>>>>>> struct dma_resv *resv = &bo->base._resv; >>>>>>> int ret; >>>>>>> - if (dma_resv_test_signaled_rcu(resv, true)) >>>>>>> + if (dma_resv_test_signaled_unlocked(resv, true)) >>>>>>> ret = 0; >>>>>>> else >>>>>>> ret = -EBUSY; >>>>>>> @@ -306,8 +306,8 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, >>>>>>> dma_resv_unlock(bo->base.resv); >>>>>>> spin_unlock(&bo->bdev->lru_lock); >>>>>>> - lret = dma_resv_wait_timeout_rcu(resv, true, interruptible, >>>>>>> - 30 * HZ); >>>>>>> + lret = dma_resv_wait_timeout_unlocked(resv, true, interruptible, >>>>>>> + 30 * HZ); >>>>>>> if (lret < 0) >>>>>>> return lret; >>>>>>> @@ -409,8 +409,8 @@ static void ttm_bo_release(struct kref *kref) >>>>>>> /* Last resort, if we fail to allocate memory for the >>>>>>> * fences block for the BO to become idle >>>>>>> */ >>>>>>> - dma_resv_wait_timeout_rcu(bo->base.resv, true, false, >>>>>>> - 30 * HZ); >>>>>>> + dma_resv_wait_timeout_unlocked(bo->base.resv, true, false, >>>>>>> + 30 * HZ); >>>>>>> } >>>>>>> if (bo->bdev->funcs->release_notify) >>>>>>> @@ -420,7 +420,7 @@ static void ttm_bo_release(struct kref *kref) >>>>>>> ttm_mem_io_free(bdev, &bo->mem); >>>>>>> } >>>>>>> - if (!dma_resv_test_signaled_rcu(bo->base.resv, true) || >>>>>>> + if (!dma_resv_test_signaled_unlocked(bo->base.resv, true) || >>>>>>> !dma_resv_trylock(bo->base.resv)) { >>>>>>> /* The BO is not idle, resurrect it for delayed destroy */ >>>>>>> ttm_bo_flush_all_fences(bo); >>>>>>> @@ -1116,14 +1116,14 @@ int ttm_bo_wait(struct ttm_buffer_object *bo, >>>>>>> long timeout = 15 * HZ; >>>>>>> if (no_wait) { >>>>>>> - if (dma_resv_test_signaled_rcu(bo->base.resv, true)) >>>>>>> + if (dma_resv_test_signaled_unlocked(bo->base.resv, true)) >>>>>>> return 0; >>>>>>> else >>>>>>> return -EBUSY; >>>>>>> } >>>>>>> - timeout = dma_resv_wait_timeout_rcu(bo->base.resv, true, >>>>>>> - interruptible, timeout); >>>>>>> + timeout = dma_resv_wait_timeout_unlocked(bo->base.resv, true, >>>>>>> + interruptible, timeout); >>>>>>> if (timeout < 0) >>>>>>> return timeout; >>>>>>> diff --git a/drivers/gpu/drm/vgem/vgem_fence.c b/drivers/gpu/drm/vgem/vgem_fence.c >>>>>>> index 2902dc6e64faf..010a82405e374 100644 >>>>>>> --- a/drivers/gpu/drm/vgem/vgem_fence.c >>>>>>> +++ b/drivers/gpu/drm/vgem/vgem_fence.c >>>>>>> @@ -151,8 +151,8 @@ int vgem_fence_attach_ioctl(struct drm_device *dev, >>>>>>> /* Check for a conflicting fence */ >>>>>>> resv = obj->resv; >>>>>>> - if (!dma_resv_test_signaled_rcu(resv, >>>>>>> - arg->flags & VGEM_FENCE_WRITE)) { >>>>>>> + if (!dma_resv_test_signaled_unlocked(resv, >>>>>>> + arg->flags & VGEM_FENCE_WRITE)) { >>>>>>> ret = -EBUSY; >>>>>>> goto err_fence; >>>>>>> } >>>>>>> diff --git a/drivers/gpu/drm/virtio/virtgpu_ioctl.c b/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>>>>>> index 669f2ee395154..ab010c8e32816 100644 >>>>>>> --- a/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>>>>>> +++ b/drivers/gpu/drm/virtio/virtgpu_ioctl.c >>>>>>> @@ -451,10 +451,10 @@ static int virtio_gpu_wait_ioctl(struct drm_device *dev, void *data, >>>>>>> return -ENOENT; >>>>>>> if (args->flags & VIRTGPU_WAIT_NOWAIT) { >>>>>>> - ret = dma_resv_test_signaled_rcu(obj->resv, true); >>>>>>> + ret = dma_resv_test_signaled_unlocked(obj->resv, true); >>>>>>> } else { >>>>>>> - ret = dma_resv_wait_timeout_rcu(obj->resv, true, true, >>>>>>> - timeout); >>>>>>> + ret = dma_resv_wait_timeout_unlocked(obj->resv, true, true, >>>>>>> + timeout); >>>>>>> } >>>>>>> if (ret == 0) >>>>>>> ret = -EBUSY; >>>>>>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c >>>>>>> index 04dd49c4c2572..19e1ce23842a9 100644 >>>>>>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c >>>>>>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_bo.c >>>>>>> @@ -743,7 +743,7 @@ static int vmw_user_bo_synccpu_grab(struct vmw_user_buffer_object *user_bo, >>>>>>> if (flags & drm_vmw_synccpu_allow_cs) { >>>>>>> long lret; >>>>>>> - lret = dma_resv_wait_timeout_rcu >>>>>>> + lret = dma_resv_wait_timeout_unlocked >>>>>>> (bo->base.resv, true, true, >>>>>>> nonblock ? 0 : MAX_SCHEDULE_TIMEOUT); >>>>>>> if (!lret) >>>>>>> diff --git a/include/linux/dma-resv.h b/include/linux/dma-resv.h >>>>>>> index d44a77e8a7e34..99cfb7af966b8 100644 >>>>>>> --- a/include/linux/dma-resv.h >>>>>>> +++ b/include/linux/dma-resv.h >>>>>>> @@ -246,7 +246,7 @@ dma_resv_get_excl(struct dma_resv *obj) >>>>>>> } >>>>>>> /** >>>>>>> - * dma_resv_get_excl_rcu - get the reservation object's >>>>>>> + * dma_resv_get_excl_unlocked - get the reservation object's >>>>>>> * exclusive fence, without lock held. >>>>>>> * @obj: the reservation object >>>>>>> * >>>>>>> @@ -257,7 +257,7 @@ dma_resv_get_excl(struct dma_resv *obj) >>>>>>> * The exclusive fence or NULL if none >>>>>>> */ >>>>>>> static inline struct dma_fence * >>>>>>> -dma_resv_get_excl_rcu(struct dma_resv *obj) >>>>>>> +dma_resv_get_excl_unlocked(struct dma_resv *obj) >>>>>>> { >>>>>>> struct dma_fence *fence; >>>>>>> @@ -278,16 +278,16 @@ void dma_resv_add_shared_fence(struct dma_resv *obj, struct dma_fence *fence); >>>>>>> void dma_resv_add_excl_fence(struct dma_resv *obj, struct dma_fence *fence); >>>>>>> -int dma_resv_get_fences_rcu(struct dma_resv *obj, >>>>>>> - struct dma_fence **pfence_excl, >>>>>>> - unsigned *pshared_count, >>>>>>> - struct dma_fence ***pshared); >>>>>>> +int dma_resv_get_fences_unlocked(struct dma_resv *obj, >>>>>>> + struct dma_fence **pfence_excl, >>>>>>> + unsigned *pshared_count, >>>>>>> + struct dma_fence ***pshared); >>>>>>> int dma_resv_copy_fences(struct dma_resv *dst, struct dma_resv *src); >>>>>>> -long dma_resv_wait_timeout_rcu(struct dma_resv *obj, bool wait_all, bool intr, >>>>>>> - unsigned long timeout); >>>>>>> +long dma_resv_wait_timeout_unlocked(struct dma_resv *obj, bool wait_all, bool intr, >>>>>>> + unsigned long timeout); >>>>>>> -bool dma_resv_test_signaled_rcu(struct dma_resv *obj, bool test_all); >>>>>>> +bool dma_resv_test_signaled_unlocked(struct dma_resv *obj, bool test_all); >>>>>>> #endif /* _LINUX_RESERVATION_H */