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.2 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,URIBL_BLOCKED,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 AE87BC4707F for ; Thu, 27 May 2021 13:41:18 +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 799FA6128D for ; Thu, 27 May 2021 13:41:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 799FA6128D Authentication-Results: mail.kernel.org; dmarc=fail (p=none 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 1C8956E192; Thu, 27 May 2021 13:41:15 +0000 (UTC) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2048.outbound.protection.outlook.com [40.107.243.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9ACE26E0DE; Thu, 27 May 2021 13:41:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gGa0jL6EN8hEgFXudXsWUTgL+rFmWHF5z6daXEsQk7TuKArB3IZ7MBDYK4N1qmzS1OGz1xkxZW6a/l2lMA9sJzoFoBsjIUOLrGhCnC0/+l7ecVSR4OySu+hQjt9N7VI1Eu947/mIPo9cnBKBUFfZZBcO9ie2JSG00QD8zpVk+zVd43Lvewv42VoEo71fX3b6xsuCP2nasOwLn0sIL/IHpz8x9k46fPfp7u/VMu8Zgrq4qmY7fb45xriB2S3iF1s4t1UH/j7G2MOlLGsJaTcTH2KfxEb1DBJqgwyIXSCMnZOS+SadRWKaTuSfcggiyevW5ofBrYUvJybQuABVhBK7FQ== 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=k6wIu8PVw5apl5jsn/EiotdZFdABxnWhiQQR4SlUUeM=; b=YgBG5G6wrys+v5HBYxMqnv8aZ2bjDgGFD97oowaCcS8x6PoULS5zndX+Tqj3xa31MBUp/J7dBT0G85GFsUKosFt/0REGrWAMwKyz0+rPDr8p5RowUl1tvP3WcUeDLEJv8BaI5TJB5oRwpgEn6T5yxg2kFgjsteBPY4LTJO775U5RemXMDKsaZC9z9Oc3xSCBViBBNvUqRJhYRHvJQ01yNVyAMQ/m2jf1Bn46RPVglzOytjM110PmXK2Hm86HgYx5P8WbWOQb+0ZPYgoQCZqbCuOzlfGt0KvpvoCkhw+7gAIorjoyuphJOMaqWODcggfijVFr4vXa4ObAeVn8YUw8Hw== 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=k6wIu8PVw5apl5jsn/EiotdZFdABxnWhiQQR4SlUUeM=; b=pLBTIx8so2tXbwL4HQHlXqgmUm50n5szQShn7009jeLiSHR7ahWt58erSxE9H2NKLbQrAxG+lXnSenlMCu44grmXaSql8ZHEGOaDsEmKRTCLg/xQH6iUpU7vWT824+qKZvdDQ9H+ma2ZlqBXTXJsyDufQYu1L8PaScfyCJYcKTI= 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 MN2PR12MB3968.namprd12.prod.outlook.com (2603:10b6:208:16f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.22; Thu, 27 May 2021 13:41:10 +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.024; Thu, 27 May 2021 13:41:10 +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> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <4c7cede0-4e33-ffc5-6308-7eccd3570e9d@amd.com> Date: Thu, 27 May 2021 15:41:02 +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:e531:3aa1:4782:878a] X-ClientProxiedBy: PR3P251CA0008.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::11) 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:e531:3aa1:4782:878a] (2a02:908:1252:fb60:e531:3aa1:4782:878a) by PR3P251CA0008.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Thu, 27 May 2021 13:41:07 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e362b7b3-8b7b-4e5d-c8d9-08d92115162f X-MS-TrafficTypeDiagnostic: MN2PR12MB3968: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9ztZhzwBzl2n+tpa8NegITY5bVnBozRyjiTnxcpumkUXsnGHZAZ5jxWLeJHNId8o06VmAUR6L9n9Y71xltKxKQDUlP2EyN8UTFrx36A3+PAxGEqAoDsN9paAI/qhskgtZefEZNCyfYV0iqi3+hwJ4MC0qkUfkFu9XE4p70pLdJrNKoaJpQGbV7ABbqXEnmnoBf0P2GoA4BtP+O9n6I2fFZ/8JLkBRjiETrzSSDHW6yj+2rEUUquPLcxAwtH76Zaco6S6bDc9kma68c1FenQbScT8owwPr4faESRcyECtCDPRwUzmPyYrEPbqZCjCWWmvCOCUcLYmse2RqwMtLYvFy3e8VPnIzfh8rwEBJihNdkdo7tPZ5xwklJAZBKmoSN0BEhVR+WyYJfv30zf3bPa/pDfMjqtr12+n8AwS2/mEGoXA9TDhMsCF0XfNem9S+HcOqIL5DujBPTtjff72XxvPGcY0AaPrTxlPKfZ1Y3tr8BuiCXJV/Nk68gXD6qRdXeGUX9H3W2thArGOeXNcUXSKmz7euyeygmn83tseRGcEMYOPuCSdI5kjTUmmUBKobYj0fuI0GcP2e6WDOaoPFlnjLd78RRryvDQZkCcdoMxvm3ugsDeDfUiODjhzhqXuCSeItKqsyNZNRFzS8H7VHdQozTgASEGmCwMbbGubalYuVa7xTmzSc742HPmv0A1SmXjx 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)(39860400002)(396003)(346002)(366004)(376002)(136003)(7416002)(6666004)(4326008)(66574015)(2906002)(83380400001)(8936002)(5660300002)(36756003)(31696002)(52116002)(316002)(186003)(66946007)(54906003)(2616005)(86362001)(30864003)(6486002)(8676002)(38100700002)(478600001)(16526019)(31686004)(53546011)(6916009)(66476007)(66556008)(45980500001)(43740500002)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?dERBYlJpWWpNeGZSVU5GaFlEcEVXUksxR3o5cGtEL2R6VzhtSHVRWVZpMjcz?= =?utf-8?B?UXJHZE5zUVY4WlJyck1BemhXRWM4Rm5ObXpvMjV1VG1FOXVvZ0o4RUVUeW9D?= =?utf-8?B?T1dEN1dQcHJiaElZU3lRbHVoWVBCTENDUU43aFdyZklwYnBqaDc4M3JOcFBD?= =?utf-8?B?TFlSVmVJd3hWamwxemI3ZCtWVVBmSDlYSmdId1gveTBiSWU3aEcvU2FpYmtk?= =?utf-8?B?eVhwS2VLZG1McmVxditEc21kLzVqYkZPR1Q0NEpvU0V3YUxnMERSVVlMSGts?= =?utf-8?B?aFUzazBqQlEvYUVGQ1NUWjMvMGl0bWwySmxtSTFVcDJQTi9UZUZoaFVwZUtF?= =?utf-8?B?MFZTU2pXc2JWdzBpaDVqaXNVSXAzVHhxdkpzMmowT0lXek5GeThldTRFVElH?= =?utf-8?B?SStFZUF3SmhPTCtBNldodjE4czl1MHM3Q08zQmtKa3lmS2NFRCtxbVdQbkJl?= =?utf-8?B?Ly9aTUl4SUJxUm01c3ZuZXRWN21hMHFDaUJiRlRWRG95SUFOMDlLd1J5QUNy?= =?utf-8?B?RkNOQjlaWExpMkkrN2JwMVBsbzMrTHQyeWhYN2lJaUw2M1JPM0hZcDZvUy8z?= =?utf-8?B?WGMzU3oyazBPaloxWnp3alljL1FGandGZHd0VGhlTFVVT1F4YlRZWHd0dUU5?= =?utf-8?B?UWk2Y01MK0l6TXVxWTdPZ29RYlJVK2RiRWx6V1JxZm9adFJid01tenI1QlJ1?= =?utf-8?B?M3RJV2ZxY3ZjOVRpRDBpQnYzS0lSeWY5bElqY2tZbkMrMmxmRFlRUEtURCtG?= =?utf-8?B?aEJuU3RHTkxyK1dvM2xCYk5zMjVOd3JNU1lXbnBmcDF6WUpFWUxMY29oSEpR?= =?utf-8?B?Q3k3UEdLTzJRRlFxeUpsOVU2RkY5Ky9SeUx3aklyVk4wdk93WG9yRUFjS2Yr?= =?utf-8?B?Mm1XTGV4NjluRm56VFUzU1orejhacEVqNjNFQ0p2eU81VFNoVytGSUFJYXkz?= =?utf-8?B?dGdlVzJMeXYvZUdjcURTOHdlOEpUeWpMOEZSY01DT2x2R1Z6UThwUnZWRENr?= =?utf-8?B?eTI4cVZoVkVVSHR0anhFRU5tKzNEK0pGTVlvTTN0U3NWdHZzYkFxemNsL2h4?= =?utf-8?B?bEFsdXdkS0h1Sk81OHYrNVJ2SExkN0lOSmhuOTlPVzROV3kyNmRKaXhYYXlG?= =?utf-8?B?OFBHLy92QVRHYTVOeDN3SkVzQTJ5V1hvNkRUdVhqaVFlZlg3UndoaW55RjdE?= =?utf-8?B?S2VBVk8vMWhRRkFYeGlMeUMvVlp6alI0Zm5lV2hEeGhIb0FLUDFiTzlJMXo1?= =?utf-8?B?djVPTnZaT1VaUXJQa0NKTmI5VlhYdit4U0ttdUh3ODJwYzlHUzZqQ1pJbk1I?= =?utf-8?B?R1NMbDRMS3NnbzJkR3hiYmJoOEsrb0tXT2JyNFhTYU01TWtERlRZd1QxWUM3?= =?utf-8?B?WXY2UUtNQ0gzUzdLc3VCNnBiUWJTUWFmeHowaTB2OXFtSG9UcE1yYWpXV1BF?= =?utf-8?B?TkQ5U3VQeTZsd2NDZ29yQm9UQTNUcFZ5NTNIME9XYmZPY1pTZzJDL2o4aGRO?= =?utf-8?B?ZkNxbkZmSjRodDczWEptdm5CeEd0NDlnY25yc0VsZzZNL3JjMGVBZk41T1Zu?= =?utf-8?B?d2VlMW1CQmNKU1lxeEtTak9hU2JIRTN6enFuOFVPN3FmcDJ2dERLUW1oYS9s?= =?utf-8?B?b3NqQ0ZjZXRPVlFFQkpVaDg2RmFIcUVFYzdHZkxyYTNJbnZnQVZoc0pGNDJ1?= =?utf-8?B?anZKNXF1dmZSN3RkcU8yWVhsVmdLWE9wNzRhR1kzZ2pzWFNYK0t6UVNDZGZC?= =?utf-8?B?bWV2dGMvMG84aG9RUmkwcUl0dGFjemRSbWxYYXc2QVZrNVFwL0NRUS9tWEdm?= =?utf-8?B?Y3o4OHpscitOeVFLSWhMZVB5WTUyc1VuWWsxUlhhcnpFRDd3OGE1YnB2c1NC?= =?utf-8?Q?NgPKhWOQ5Rri3?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e362b7b3-8b7b-4e5d-c8d9-08d92115162f X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2021 13:41:10.2124 (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: DU/cK/JHNlKRTtaueVPsuWoQ1Yqe6G397whHbO9+rR3/VoQzQK43s/j+yOvAsHTY X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3968 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 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. > 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. 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 */ > 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.0 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, URIBL_BLOCKED,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 953C2C47089 for ; Thu, 27 May 2021 13:41:15 +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 5799360724 for ; Thu, 27 May 2021 13:41:15 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5799360724 Authentication-Results: mail.kernel.org; dmarc=fail (p=none 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 E4BE96E0DE; Thu, 27 May 2021 13:41:14 +0000 (UTC) Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2048.outbound.protection.outlook.com [40.107.243.48]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9ACE26E0DE; Thu, 27 May 2021 13:41:13 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gGa0jL6EN8hEgFXudXsWUTgL+rFmWHF5z6daXEsQk7TuKArB3IZ7MBDYK4N1qmzS1OGz1xkxZW6a/l2lMA9sJzoFoBsjIUOLrGhCnC0/+l7ecVSR4OySu+hQjt9N7VI1Eu947/mIPo9cnBKBUFfZZBcO9ie2JSG00QD8zpVk+zVd43Lvewv42VoEo71fX3b6xsuCP2nasOwLn0sIL/IHpz8x9k46fPfp7u/VMu8Zgrq4qmY7fb45xriB2S3iF1s4t1UH/j7G2MOlLGsJaTcTH2KfxEb1DBJqgwyIXSCMnZOS+SadRWKaTuSfcggiyevW5ofBrYUvJybQuABVhBK7FQ== 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=k6wIu8PVw5apl5jsn/EiotdZFdABxnWhiQQR4SlUUeM=; b=YgBG5G6wrys+v5HBYxMqnv8aZ2bjDgGFD97oowaCcS8x6PoULS5zndX+Tqj3xa31MBUp/J7dBT0G85GFsUKosFt/0REGrWAMwKyz0+rPDr8p5RowUl1tvP3WcUeDLEJv8BaI5TJB5oRwpgEn6T5yxg2kFgjsteBPY4LTJO775U5RemXMDKsaZC9z9Oc3xSCBViBBNvUqRJhYRHvJQ01yNVyAMQ/m2jf1Bn46RPVglzOytjM110PmXK2Hm86HgYx5P8WbWOQb+0ZPYgoQCZqbCuOzlfGt0KvpvoCkhw+7gAIorjoyuphJOMaqWODcggfijVFr4vXa4ObAeVn8YUw8Hw== 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=k6wIu8PVw5apl5jsn/EiotdZFdABxnWhiQQR4SlUUeM=; b=pLBTIx8so2tXbwL4HQHlXqgmUm50n5szQShn7009jeLiSHR7ahWt58erSxE9H2NKLbQrAxG+lXnSenlMCu44grmXaSql8ZHEGOaDsEmKRTCLg/xQH6iUpU7vWT824+qKZvdDQ9H+ma2ZlqBXTXJsyDufQYu1L8PaScfyCJYcKTI= 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 MN2PR12MB3968.namprd12.prod.outlook.com (2603:10b6:208:16f::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.22; Thu, 27 May 2021 13:41:10 +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.024; Thu, 27 May 2021 13:41:10 +0000 To: Daniel Vetter References: <20210525211753.1086069-1-jason@jlekstrand.net> <20210525211753.1086069-3-jason@jlekstrand.net> <82e16239-e8ea-8b03-6a90-c7d18a5f8a91@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <4c7cede0-4e33-ffc5-6308-7eccd3570e9d@amd.com> Date: Thu, 27 May 2021 15:41:02 +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:e531:3aa1:4782:878a] X-ClientProxiedBy: PR3P251CA0008.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::11) 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:e531:3aa1:4782:878a] (2a02:908:1252:fb60:e531:3aa1:4782:878a) by PR3P251CA0008.EURP251.PROD.OUTLOOK.COM (2603:10a6:102:b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Thu, 27 May 2021 13:41:07 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e362b7b3-8b7b-4e5d-c8d9-08d92115162f X-MS-TrafficTypeDiagnostic: MN2PR12MB3968: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9ztZhzwBzl2n+tpa8NegITY5bVnBozRyjiTnxcpumkUXsnGHZAZ5jxWLeJHNId8o06VmAUR6L9n9Y71xltKxKQDUlP2EyN8UTFrx36A3+PAxGEqAoDsN9paAI/qhskgtZefEZNCyfYV0iqi3+hwJ4MC0qkUfkFu9XE4p70pLdJrNKoaJpQGbV7ABbqXEnmnoBf0P2GoA4BtP+O9n6I2fFZ/8JLkBRjiETrzSSDHW6yj+2rEUUquPLcxAwtH76Zaco6S6bDc9kma68c1FenQbScT8owwPr4faESRcyECtCDPRwUzmPyYrEPbqZCjCWWmvCOCUcLYmse2RqwMtLYvFy3e8VPnIzfh8rwEBJihNdkdo7tPZ5xwklJAZBKmoSN0BEhVR+WyYJfv30zf3bPa/pDfMjqtr12+n8AwS2/mEGoXA9TDhMsCF0XfNem9S+HcOqIL5DujBPTtjff72XxvPGcY0AaPrTxlPKfZ1Y3tr8BuiCXJV/Nk68gXD6qRdXeGUX9H3W2thArGOeXNcUXSKmz7euyeygmn83tseRGcEMYOPuCSdI5kjTUmmUBKobYj0fuI0GcP2e6WDOaoPFlnjLd78RRryvDQZkCcdoMxvm3ugsDeDfUiODjhzhqXuCSeItKqsyNZNRFzS8H7VHdQozTgASEGmCwMbbGubalYuVa7xTmzSc742HPmv0A1SmXjx 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)(39860400002)(396003)(346002)(366004)(376002)(136003)(7416002)(6666004)(4326008)(66574015)(2906002)(83380400001)(8936002)(5660300002)(36756003)(31696002)(52116002)(316002)(186003)(66946007)(54906003)(2616005)(86362001)(30864003)(6486002)(8676002)(38100700002)(478600001)(16526019)(31686004)(53546011)(6916009)(66476007)(66556008)(45980500001)(43740500002)(579004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?dERBYlJpWWpNeGZSVU5GaFlEcEVXUksxR3o5cGtEL2R6VzhtSHVRWVZpMjcz?= =?utf-8?B?UXJHZE5zUVY4WlJyck1BemhXRWM4Rm5ObXpvMjV1VG1FOXVvZ0o4RUVUeW9D?= =?utf-8?B?T1dEN1dQcHJiaElZU3lRbHVoWVBCTENDUU43aFdyZklwYnBqaDc4M3JOcFBD?= =?utf-8?B?TFlSVmVJd3hWamwxemI3ZCtWVVBmSDlYSmdId1gveTBiSWU3aEcvU2FpYmtk?= =?utf-8?B?eVhwS2VLZG1McmVxditEc21kLzVqYkZPR1Q0NEpvU0V3YUxnMERSVVlMSGts?= =?utf-8?B?aFUzazBqQlEvYUVGQ1NUWjMvMGl0bWwySmxtSTFVcDJQTi9UZUZoaFVwZUtF?= =?utf-8?B?MFZTU2pXc2JWdzBpaDVqaXNVSXAzVHhxdkpzMmowT0lXek5GeThldTRFVElH?= =?utf-8?B?SStFZUF3SmhPTCtBNldodjE4czl1MHM3Q08zQmtKa3lmS2NFRCtxbVdQbkJl?= =?utf-8?B?Ly9aTUl4SUJxUm01c3ZuZXRWN21hMHFDaUJiRlRWRG95SUFOMDlLd1J5QUNy?= =?utf-8?B?RkNOQjlaWExpMkkrN2JwMVBsbzMrTHQyeWhYN2lJaUw2M1JPM0hZcDZvUy8z?= =?utf-8?B?WGMzU3oyazBPaloxWnp3alljL1FGandGZHd0VGhlTFVVT1F4YlRZWHd0dUU5?= =?utf-8?B?UWk2Y01MK0l6TXVxWTdPZ29RYlJVK2RiRWx6V1JxZm9adFJid01tenI1QlJ1?= =?utf-8?B?M3RJV2ZxY3ZjOVRpRDBpQnYzS0lSeWY5bElqY2tZbkMrMmxmRFlRUEtURCtG?= =?utf-8?B?aEJuU3RHTkxyK1dvM2xCYk5zMjVOd3JNU1lXbnBmcDF6WUpFWUxMY29oSEpR?= =?utf-8?B?Q3k3UEdLTzJRRlFxeUpsOVU2RkY5Ky9SeUx3aklyVk4wdk93WG9yRUFjS2Yr?= =?utf-8?B?Mm1XTGV4NjluRm56VFUzU1orejhacEVqNjNFQ0p2eU81VFNoVytGSUFJYXkz?= =?utf-8?B?dGdlVzJMeXYvZUdjcURTOHdlOEpUeWpMOEZSY01DT2x2R1Z6UThwUnZWRENr?= =?utf-8?B?eTI4cVZoVkVVSHR0anhFRU5tKzNEK0pGTVlvTTN0U3NWdHZzYkFxemNsL2h4?= =?utf-8?B?bEFsdXdkS0h1Sk81OHYrNVJ2SExkN0lOSmhuOTlPVzROV3kyNmRKaXhYYXlG?= =?utf-8?B?OFBHLy92QVRHYTVOeDN3SkVzQTJ5V1hvNkRUdVhqaVFlZlg3UndoaW55RjdE?= =?utf-8?B?S2VBVk8vMWhRRkFYeGlMeUMvVlp6alI0Zm5lV2hEeGhIb0FLUDFiTzlJMXo1?= =?utf-8?B?djVPTnZaT1VaUXJQa0NKTmI5VlhYdit4U0ttdUh3ODJwYzlHUzZqQ1pJbk1I?= =?utf-8?B?R1NMbDRMS3NnbzJkR3hiYmJoOEsrb0tXT2JyNFhTYU01TWtERlRZd1QxWUM3?= =?utf-8?B?WXY2UUtNQ0gzUzdLc3VCNnBiUWJTUWFmeHowaTB2OXFtSG9UcE1yYWpXV1BF?= =?utf-8?B?TkQ5U3VQeTZsd2NDZ29yQm9UQTNUcFZ5NTNIME9XYmZPY1pTZzJDL2o4aGRO?= =?utf-8?B?ZkNxbkZmSjRodDczWEptdm5CeEd0NDlnY25yc0VsZzZNL3JjMGVBZk41T1Zu?= =?utf-8?B?d2VlMW1CQmNKU1lxeEtTak9hU2JIRTN6enFuOFVPN3FmcDJ2dERLUW1oYS9s?= =?utf-8?B?b3NqQ0ZjZXRPVlFFQkpVaDg2RmFIcUVFYzdHZkxyYTNJbnZnQVZoc0pGNDJ1?= =?utf-8?B?anZKNXF1dmZSN3RkcU8yWVhsVmdLWE9wNzRhR1kzZ2pzWFNYK0t6UVNDZGZC?= =?utf-8?B?bWV2dGMvMG84aG9RUmkwcUl0dGFjemRSbWxYYXc2QVZrNVFwL0NRUS9tWEdm?= =?utf-8?B?Y3o4OHpscitOeVFLSWhMZVB5WTUyc1VuWWsxUlhhcnpFRDd3OGE1YnB2c1NC?= =?utf-8?Q?NgPKhWOQ5Rri3?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e362b7b3-8b7b-4e5d-c8d9-08d92115162f X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2021 13:41:10.2124 (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: DU/cK/JHNlKRTtaueVPsuWoQ1Yqe6G397whHbO9+rR3/VoQzQK43s/j+yOvAsHTY X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB3968 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" QW0gMjcuMDUuMjEgdW0gMTU6MjUgc2NocmllYiBEYW5pZWwgVmV0dGVyOgo+IE9uIFRodSwgTWF5 IDI3LCAyMDIxIGF0IDE6NTkgUE0gQ2hyaXN0aWFuIEvDtm5pZwo+IDxjaHJpc3RpYW4ua29lbmln QGFtZC5jb20+IHdyb3RlOgo+PiBBbSAyNy4wNS4yMSB1bSAxMjozOSBzY2hyaWViIERhbmllbCBW ZXR0ZXI6Cj4+PiBPbiBXZWQsIE1heSAyNiwgMjAyMSBhdCAxMjo1Nzo0MFBNICswMjAwLCBDaHJp c3RpYW4gS8O2bmlnIHdyb3RlOgo+Pj4+IEFtIDI1LjA1LjIxIHVtIDIzOjE3IHNjaHJpZWIgSmFz b24gRWtzdHJhbmQ6Cj4+Pj4+IE5vbmUgb2YgdGhlc2UgaGVscGVycyBhY3R1YWxseSBsZWFrIGFu eSBSQ1UgZGV0YWlscyB0byB0aGUgY2FsbGVyLiAgVGhleQo+Pj4+PiBhbGwgYXNzdW1lIHlvdSBo YXZlIGEgZ2VudWluZSByZWZlcmVuY2UsIHRha2UgdGhlIFJDVSByZWFkIGxvY2ssIGFuZAo+Pj4+ PiByZXRyeSBpZiBuZWVkZWQuICBOYW1pbmcgdGhlbSB3aXRoIGFuIF9yY3UgaXMgbGlrZWx5IHRv IGNhdXNlIGNhbGxlcnMKPj4+Pj4gbW9yZSBwYW5pYyB0aGFuIG5lZWRlZC4KPj4+PiBJJ20gcmVh bGx5IHdvbmRlcmluZyBpZiB3ZSBuZWVkIHRoaXMgcG9zdGZpeCBpbiB0aGUgZmlyc3QgcGxhY2Uu Cj4+Pj4KPj4+PiBJZiB3ZSB1c2UgdGhlIHJpZ2h0IHJjdV9kZXJlZmVyZW5jZV9jaGVjaygpIG1h Y3JvIHRoZW4gdGhvc2UgZnVuY3Rpb25zIGNhbgo+Pj4+IGJlIGNhbGxlZCB3aXRoIGJvdGggdGhl IHJlc2VydmF0aW9uIG9iamVjdCBsb2NrZWQgYW5kIHVubG9ja2VkLiBJdCBzaG91bGRuJ3QKPj4+ PiBtYXR0ZXIgdG8gdGhlbS4KPj4+Pgo+Pj4+IEJ1dCBnZXR0aW5nIHJpZCBvZiB0aGUgX3JjdSBw b3N0Zml4IHNvdW5kcyBsaWtlIGEgZ29vZCBpZGVhIGluIGdlbmVyYWwgdG8KPj4+PiBtZS4KPj4+ IFNvIGRvZXMgdGhhdCBjb3VudCBhcyBhbiBhY2sgb3Igbm90PyBJZiB5ZXMgSSB0aGluayB3ZSBz aG91bGQgbGFuZCB0aGlzCj4+PiBwYXRjaCByaWdodCBhd2F5LCBzaW5jZSBpdCdzIGdvaW5nIHRv IGNvbmZsaWN0IHJlYWwgZmFzdCBiYWRseS4KPj4gSSBoYWQgc29tZSBmb2xsb3cgdXAgZGlzY3Vz c2lvbiB3aXRoIEphc29uIGFuZCBJIHdvdWxkIHJhdGhlciBsaWtlIHRvCj4+IHN3aXRjaCB0byB1 c2luZyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSBpbiBhbGwgcGxhY2VzIGFuZCBjb21wbGV0ZWx5 Cj4+IHJlbW92ZSB0aGUgX3JjdSBwb3N0Zml4Lgo+IEhtLCBJJ20gbm90IHN1cmUgd2hldGhlciBz cHJlYWRpbmcgX3JjdSB0cmlja3MgZnVydGhlciBpcyBhbgo+IGVzcGVjaWFsbHkgYnJpZ2h0IGlk ZWEuIEF0IGxlYXN0IGk5MTUgaXMgZnVsbCBvZiB2ZXJ5IGNsZXZlciBfcmN1Cj4gdHJpY2tzLCBh bmQgZW5jb3VyYWdpbmcgZHJpdmVycyB0byByb2xsIG91dCB0aGVpciBvd24gX3JjdSBldmVyeXdo ZXJlCj4gaXMgcHJvYmFibHkgbm90IGluIG91ciBiZXN0IGludGVyZXN0LiBTb21lIGZhc3QtcGF0 aCBjaGVja2luZyBpcyBpbW8KPiBvaywgYnV0IHRoYXQncyBpdC4gRXNwZWNpYWxseSBvbmNlIHdl IGdldCBpbnRvIHRoZSBlbnRpcmUKPiBTTEFCX1RZUEVTQUZFX0JZX1JDVSBidXNpbmVzcyBpdCBi ZWNvbWVzIHJlYWxseSBuYXN0eSByZWFsbHkgcXVpY2tseS4KCk9oLCB5ZXMgY29tcGxldGVseSBh Z3JlZS4gU0xBQl9UWVBFU0FGRV9CWV9SQ1UgaXMgb3B0aW1pemluZyBmb3IgdGhlIAp3cm9uZyB1 c2UgY2FzZSBJIHRoaW5rLgoKWW91IHNhdmUgYSBiaXQgb2Ygb3ZlcmhlYWQgd2hpbGUgZnJlZWlu ZyBmZW5jZXMsIGJ1dCBpbiByZXR1cm4geW91IGhhdmUgCmV4dHJhIG92ZXJoZWFkIHdoaWxlIGFk ZGluZyBmZW5jZXMgdG8gdGhlIGRtYV9yZXN2IG9iamVjdC4KCj4gVGhhdCdzIHdoeSBJJ20gc2xp Z2h0bHkgbGVhbmluZyB0b3dhcmRzIF91bmxvY2tlZCB2YXJpYW50cywgZXhjZXB0IHdlCj4gZG8g dXNlIHRob3NlIGluIGxvdHMgb2YgcGxhY2VzIHdoZXJlIHdlIGhvbGQgZG1hX3Jlc3ZfbG9jayB0 b28uIFNvIG5vdAo+IHN1cmUgd2hhdCdzIHRoZSBiZXN0IHBsYW4gb3ZlcmFsbCBoZXJlLgoKV2Vs bCB3aGF0IGZ1bmN0aW9uIG5hbWVzIGFyZSB3ZSBhY3R1YWxseSB0YWxraW5nIGFib3V0PwoKRm9y IHRoZSBkbWFfcmVzdl9nZXRfZXhjbF9yY3UoKSBjYXNlIEkgYWdyZWUgd2Ugc2hvdWxkIHByb2Jh Ymx5IG5hbWUgCnRoYXQgdG8gZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQoKSBiZWNhdXNlIGl0 IG1ha2VzIG5vIHNlbnNlIGF0IGFsbCB0byAKdXNlIHRoaXMgZnVuY3Rpb24gd2hpbGUgaG9sZGlu ZyB0aGUgbG9jay4KCkJ1dCBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CmRtYV9yZXN2X2dl dF9mZW5jZXNfcmN1CmRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3UKZG1hX3Jlc3ZfdGVzdF9zaWdu YWxlZF9yY3UKCkkgdGhpbmsgd2Ugc2hvdWxkIGp1c3QgZHJvcCB0aGUgX3JjdSBuYW1pbmcgYmVj YXVzZSB0aG9zZSBhcmUgc3VwcG9zZWQgCnRvIHdvcmsgaW5kZXBlbmRlbnQgaWYgdGhlIHJlc3Yg bG9jayBpcyBoZWxkIG9yIG5vdC4KClJlZ2FyZHMsCkNocmlzdGlhbi4KCj4gLURhbmllbAo+Cj4+ IEJ1dCB5ZXMgSSBzZWUgdGhlIHBhaW4gb2YgcmViYXNpbmcgdGhpcyBhcyB3ZWxsLgo+Pgo+PiBD aHJpc3RpYW4uCj4+Cj4+PiAtRGFuaWVsCj4+Pgo+Pj4+IENocmlzdGlhbi4KPj4+Pgo+Pj4+PiB2 MiAoSmFzb24gRWtzdHJhbmQpOgo+Pj4+PiAgICAgLSBGaXggZnVuY3Rpb24gYXJndW1lbnQgaW5k ZW50YXRpb24KPj4+Pj4KPj4+Pj4gU2lnbmVkLW9mZi1ieTogSmFzb24gRWtzdHJhbmQgPGphc29u QGpsZWtzdHJhbmQubmV0Pgo+Pj4+PiBTdWdnZXN0ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmll bC52ZXR0ZXJAZmZ3bGwuY2g+Cj4+Pj4+IENjOiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4u a29lbmlnQGFtZC5jb20+Cj4+Pj4+IENjOiBNYWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5r aG9yc3RAbGludXguaW50ZWwuY29tPgo+Pj4+PiBDYzogTWF4aW1lIFJpcGFyZCA8bXJpcGFyZEBr ZXJuZWwub3JnPgo+Pj4+PiBDYzogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2Uu ZGU+Cj4+Pj4+IENjOiBMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4KPj4+Pj4g Q2M6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPj4+Pj4gQ2M6IFNlYW4gUGF1bCA8 c2VhbkBwb29ybHkucnVuPgo+Pj4+PiBDYzogSHVhbmcgUnVpIDxyYXkuaHVhbmdAYW1kLmNvbT4K Pj4+Pj4gQ2M6IEdlcmQgSG9mZm1hbm4gPGtyYXhlbEByZWRoYXQuY29tPgo+Pj4+PiBDYzogVk13 YXJlIEdyYXBoaWNzIDxsaW51eC1ncmFwaGljcy1tYWludGFpbmVyQHZtd2FyZS5jb20+Cj4+Pj4+ IC0tLQo+Pj4+PiAgICAgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyAgICAgICAgICAgICAgICAg ICAgIHwgIDQgKy0tCj4+Pj4+ICAgICBkcml2ZXJzL2RtYS1idWYvZG1hLXJlc3YuYyAgICAgICAg ICAgICAgICAgICAgfCAyOCArKysrKysrKystLS0tLS0tLS0tCj4+Pj4+ICAgICBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGlzcGxheS5jICAgfCAgNiArKy0tCj4+Pj4+ICAgICBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jICAgfCAgMiArLQo+Pj4+ PiAgICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dlbS5jICAgICAgIHwgIDQg Ky0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMgICAg ICAgfCAgNiArKy0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf bW4uYyAgICAgICAgfCAgNCArLS0KPj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9vYmplY3QuYyAgICB8ICA0ICstLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3V2ZC5jICAgICAgIHwgIDYgKystLQo+Pj4+PiAgICAgZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3ZtLmMgICAgICAgIHwgMTQgKysrKystLS0tLQo+Pj4+ PiAgICAgLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jIHwgIDYg KystLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyAgICAgICAgICAgICAgICAg ICAgIHwgMTAgKysrLS0tLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fYXRvbWlj X2hlbHBlci5jICAgICAgIHwgIDIgKy0KPj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2RybS9ldG5hdml2 L2V0bmF2aXZfZ2VtLmMgICAgICAgICB8ICA3ICsrLS0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X2dlbV9zdWJtaXQuYyAgfCAgOCArKystLS0KPj4+Pj4gICAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheS5jICB8ICAyICstCj4+Pj4+ ICAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9kbWFfcmVzdl91dGlscy5jICAgICAgICAgfCAgMiAr LQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYyAgICAg IHwgIDIgKy0KPj4+Pj4gICAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZm ZXIuYyAgICB8ICAyICstCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9n ZW1fb2JqZWN0LmggICAgfCAgMiArLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3VzZXJwdHIuYyAgIHwgIDQgKy0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fd2FpdC5jICAgICAgfCAxMCArKystLS0tCj4+Pj4+ICAgICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyAgICAgICAgICAgfCAgNiArKy0tCj4+Pj4+ ICAgICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3X2ZlbmNlLmMgICAgICAgICAgfCAgNCAr LS0KPj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2RybS9tc20vbXNtX2dlbS5jICAgICAgICAgICAgICAg ICB8ICAzICstCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC93bmR3 LmMgICAgICAgfCAgMiArLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVh dV9nZW0uYyAgICAgICAgIHwgIDQgKy0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvcGFuZnJvc3RfZHJ2LmMgICAgICAgfCAgNCArLS0KPj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2Ry bS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYyAgICAgICB8ICAyICstCj4+Pj4+ICAgICBkcml2ZXJz L2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyAgICAgICAgICAgfCAgNiArKy0tCj4+Pj4+ICAg ICBkcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tbi5jICAgICAgICAgICAgfCAgNCArLS0K Pj4+Pj4gICAgIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgICAgICAgICAgICAgICAgICB8 IDE4ICsrKysrKy0tLS0tLQo+Pj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5j ZS5jICAgICAgICAgICAgIHwgIDQgKy0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vdmlydGlv L3ZpcnRncHVfaW9jdGwuYyAgICAgICAgfCAgNiArKy0tCj4+Pj4+ICAgICBkcml2ZXJzL2dwdS9k cm0vdm13Z2Z4L3Ztd2dmeF9iby5jICAgICAgICAgICAgfCAgMiArLQo+Pj4+PiAgICAgaW5jbHVk ZS9saW51eC9kbWEtcmVzdi5oICAgICAgICAgICAgICAgICAgICAgIHwgMTggKysrKysrLS0tLS0t Cj4+Pj4+ICAgICAzNiBmaWxlcyBjaGFuZ2VkLCAxMDggaW5zZXJ0aW9ucygrKSwgMTEwIGRlbGV0 aW9ucygtKQo+Pj4+Pgo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYu YyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKPj4+Pj4gaW5kZXggZjI2NGI3MGMzODNlYi4u ZWQ2NDUxZDU1ZDY2MyAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYu Ywo+Pj4+PiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4+Pj4+IEBAIC0xMTQ3LDgg KzExNDcsOCBAQCBzdGF0aWMgaW50IF9fZG1hX2J1Zl9iZWdpbl9jcHVfYWNjZXNzKHN0cnVjdCBk bWFfYnVmICpkbWFidWYsCj4+Pj4+ICAgICAgbG9uZyByZXQ7Cj4+Pj4+ICAgICAgLyogV2FpdCBv biBhbnkgaW1wbGljaXQgcmVuZGVyaW5nIGZlbmNlcyAqLwo+Pj4+PiAtICAgcmV0ID0gZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3JjdShyZXN2LCB3cml0ZSwgdHJ1ZSwKPj4+Pj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsK Pj4+Pj4gKyAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChyZXN2LCB3cml0 ZSwgdHJ1ZSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBN QVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+ICAgICAgaWYgKHJldCA8IDApCj4+Pj4+ICAgICAg ICAgICAgICByZXR1cm4gcmV0Owo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2Rt YS1yZXN2LmMgYi9kcml2ZXJzL2RtYS1idWYvZG1hLXJlc3YuYwo+Pj4+PiBpbmRleCA2ZGRiZWI1 ZGZiZjY1Li5kNmYxZWQ0Y2Q0ZDU1IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYv ZG1hLXJlc3YuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLXJlc3YuYwo+Pj4+PiBA QCAtNDE3LDcgKzQxNyw3IEBAIGludCBkbWFfcmVzdl9jb3B5X2ZlbmNlcyhzdHJ1Y3QgZG1hX3Jl c3YgKmRzdCwgc3RydWN0IGRtYV9yZXN2ICpzcmMpCj4+Pj4+ICAgICBFWFBPUlRfU1lNQk9MKGRt YV9yZXN2X2NvcHlfZmVuY2VzKTsKPj4+Pj4gICAgIC8qKgo+Pj4+PiAtICogZG1hX3Jlc3ZfZ2V0 X2ZlbmNlc19yY3UgLSBHZXQgYW4gb2JqZWN0J3Mgc2hhcmVkIGFuZCBleGNsdXNpdmUKPj4+Pj4g KyAqIGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQgLSBHZXQgYW4gb2JqZWN0J3Mgc2hhcmVk IGFuZCBleGNsdXNpdmUKPj4+Pj4gICAgICAqIGZlbmNlcyB3aXRob3V0IHVwZGF0ZSBzaWRlIGxv Y2sgaGVsZAo+Pj4+PiAgICAgICogQG9iajogdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+Pj4+PiAg ICAgICogQHBmZW5jZV9leGNsOiB0aGUgcmV0dXJuZWQgZXhjbHVzaXZlIGZlbmNlIChvciBOVUxM KQo+Pj4+PiBAQCAtNDI5LDEwICs0MjksMTAgQEAgRVhQT1JUX1NZTUJPTChkbWFfcmVzdl9jb3B5 X2ZlbmNlcyk7Cj4+Pj4+ICAgICAgKiBleGNsdXNpdmUgZmVuY2UgaXMgbm90IHNwZWNpZmllZCB0 aGUgZmVuY2UgaXMgcHV0IGludG8gdGhlIGFycmF5IG9mIHRoZQo+Pj4+PiAgICAgICogc2hhcmVk IGZlbmNlcyBhcyB3ZWxsLiBSZXR1cm5zIGVpdGhlciB6ZXJvIG9yIC1FTk9NRU0uCj4+Pj4+ICAg ICAgKi8KPj4+Pj4gLWludCBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShzdHJ1Y3QgZG1hX3Jlc3Yg Km9iaiwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKnBm ZW5jZV9leGNsLAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcHNoYXJl ZF9jb3VudCwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAq Kipwc2hhcmVkKQo+Pj4+PiAraW50IGRtYV9yZXN2X2dldF9mZW5jZXNfdW5sb2NrZWQoc3RydWN0 IGRtYV9yZXN2ICpvYmosCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGRtYV9mZW5jZSAqKnBmZW5jZV9leGNsLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkICpwc2hhcmVkX2NvdW50LAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKioqcHNoYXJlZCkKPj4+Pj4gICAgIHsKPj4+Pj4gICAg ICBzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkID0gTlVMTDsKPj4+Pj4gICAgICBzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZV9leGNsOwo+Pj4+PiBAQCAtNTE1LDEwICs1MTUsMTAgQEAgaW50IGRtYV9y ZXN2X2dldF9mZW5jZXNfcmN1KHN0cnVjdCBkbWFfcmVzdiAqb2JqLAo+Pj4+PiAgICAgICpwc2hh cmVkID0gc2hhcmVkOwo+Pj4+PiAgICAgIHJldHVybiByZXQ7Cj4+Pj4+ICAgICB9Cj4+Pj4+IC1F WFBPUlRfU1lNQk9MX0dQTChkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdSk7Cj4+Pj4+ICtFWFBPUlRf U1lNQk9MX0dQTChkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKTsKPj4+Pj4gICAgIC8qKgo+ Pj4+PiAtICogZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdSAtIFdhaXQgb24gcmVzZXJ2YXRpb24n cyBvYmplY3RzCj4+Pj4+ICsgKiBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQgLSBXYWl0 IG9uIHJlc2VydmF0aW9uJ3Mgb2JqZWN0cwo+Pj4+PiAgICAgICogc2hhcmVkIGFuZC9vciBleGNs dXNpdmUgZmVuY2VzLgo+Pj4+PiAgICAgICogQG9iajogdGhlIHJlc2VydmF0aW9uIG9iamVjdAo+ Pj4+PiAgICAgICogQHdhaXRfYWxsOiBpZiB0cnVlLCB3YWl0IG9uIGFsbCBmZW5jZXMsIGVsc2Ug d2FpdCBvbiBqdXN0IGV4Y2x1c2l2ZSBmZW5jZQo+Pj4+PiBAQCAtNTI5LDkgKzUyOSw5IEBAIEVY UE9SVF9TWU1CT0xfR1BMKGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KTsKPj4+Pj4gICAgICAqIFJl dHVybnMgLUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkLCAwIGlmIHRoZSB3YWl0IHRpbWVkIG91 dCwgb3IKPj4+Pj4gICAgICAqIGdyZWF0ZXIgdGhhbiB6ZXIgb24gc3VjY2Vzcy4KPj4+Pj4gICAg ICAqLwo+Pj4+PiAtbG9uZyBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KHN0cnVjdCBkbWFfcmVz diAqb2JqLAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdhaXRfYWxsLCBi b29sIGludHIsCj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg dGltZW91dCkKPj4+Pj4gK2xvbmcgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKHN0cnVj dCBkbWFfcmVzdiAqb2JqLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv b2wgd2FpdF9hbGwsIGJvb2wgaW50ciwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCj4+Pj4+ICAgICB7Cj4+Pj4+ICAgICAgc3RydWN0 IGRtYV9mZW5jZSAqZmVuY2U7Cj4+Pj4+ICAgICAgdW5zaWduZWQgc2VxLCBzaGFyZWRfY291bnQ7 Cj4+Pj4+IEBAIC02MDIsNyArNjAyLDcgQEAgbG9uZyBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1 KHN0cnVjdCBkbWFfcmVzdiAqb2JqLAo+Pj4+PiAgICAgIHJjdV9yZWFkX3VubG9jaygpOwo+Pj4+ PiAgICAgIGdvdG8gcmV0cnk7Cj4+Pj4+ICAgICB9Cj4+Pj4+IC1FWFBPUlRfU1lNQk9MX0dQTChk bWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KTsKPj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9y ZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZCk7Cj4+Pj4+ICAgICBzdGF0aWMgaW5saW5lIGludCBk bWFfcmVzdl90ZXN0X3NpZ25hbGVkX3NpbmdsZShzdHJ1Y3QgZG1hX2ZlbmNlICpwYXNzZWRfZmVu Y2UpCj4+Pj4+IEBAIC02MjIsNyArNjIyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZG1hX3Jlc3Zf dGVzdF9zaWduYWxlZF9zaW5nbGUoc3RydWN0IGRtYV9mZW5jZSAqcGFzc2VkX2ZlbmNlKQo+Pj4+ PiAgICAgfQo+Pj4+PiAgICAgLyoqCj4+Pj4+IC0gKiBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3Jj dSAtIFRlc3QgaWYgYSByZXNlcnZhdGlvbiBvYmplY3Qncwo+Pj4+PiArICogZG1hX3Jlc3ZfdGVz dF9zaWduYWxlZF91bmxvY2tlZCAtIFRlc3QgaWYgYSByZXNlcnZhdGlvbiBvYmplY3Qncwo+Pj4+ PiAgICAgICogZmVuY2VzIGhhdmUgYmVlbiBzaWduYWxlZC4KPj4+Pj4gICAgICAqIEBvYmo6IHRo ZSByZXNlcnZhdGlvbiBvYmplY3QKPj4+Pj4gICAgICAqIEB0ZXN0X2FsbDogaWYgdHJ1ZSwgdGVz dCBhbGwgZmVuY2VzLCBvdGhlcndpc2Ugb25seSB0ZXN0IHRoZSBleGNsdXNpdmUKPj4+Pj4gQEAg LTYzMSw3ICs2MzEsNyBAQCBzdGF0aWMgaW5saW5lIGludCBkbWFfcmVzdl90ZXN0X3NpZ25hbGVk X3NpbmdsZShzdHJ1Y3QgZG1hX2ZlbmNlICpwYXNzZWRfZmVuY2UpCj4+Pj4+ICAgICAgKiBSRVRV Uk5TCj4+Pj4+ICAgICAgKiB0cnVlIGlmIGFsbCBmZW5jZXMgc2lnbmFsZWQsIGVsc2UgZmFsc2UK Pj4+Pj4gICAgICAqLwo+Pj4+PiAtYm9vbCBkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShzdHJ1 Y3QgZG1hX3Jlc3YgKm9iaiwgYm9vbCB0ZXN0X2FsbCkKPj4+Pj4gK2Jvb2wgZG1hX3Jlc3ZfdGVz dF9zaWduYWxlZF91bmxvY2tlZChzdHJ1Y3QgZG1hX3Jlc3YgKm9iaiwgYm9vbCB0ZXN0X2FsbCkK Pj4+Pj4gICAgIHsKPj4+Pj4gICAgICB1bnNpZ25lZCBzZXEsIHNoYXJlZF9jb3VudDsKPj4+Pj4g ICAgICBpbnQgcmV0Owo+Pj4+PiBAQCAtNjgwLDQgKzY4MCw0IEBAIGJvb2wgZG1hX3Jlc3ZfdGVz dF9zaWduYWxlZF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJvb2wgdGVzdF9hbGwpCj4+Pj4+ ICAgICAgcmN1X3JlYWRfdW5sb2NrKCk7Cj4+Pj4+ICAgICAgcmV0dXJuIHJldDsKPj4+Pj4gICAg IH0KPj4+Pj4gLUVYUE9SVF9TWU1CT0xfR1BMKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KTsK Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQp Owo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rp c3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kaXNwbGF5LmMKPj4+ Pj4gaW5kZXggOGExZmI4YjY2MDZlNS4uYjhlMjRmMTk5YmU5YSAxMDA2NDQKPj4+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rpc3BsYXkuYwo+Pj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGlzcGxheS5jCj4+Pj4+IEBAIC0yMDMs OSArMjAzLDkgQEAgaW50IGFtZGdwdV9kaXNwbGF5X2NydGNfcGFnZV9mbGlwX3RhcmdldChzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCj4+Pj4+ICAgICAgICAgICAgICBnb3RvIHVucGluOwo+Pj4+PiAg ICAgIH0KPj4+Pj4gLSAgIHIgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShuZXdfYWJvLT50Ym8u YmFzZS5yZXN2LCAmd29yay0+ZXhjbCwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJndvcmstPnNoYXJlZF9jb3VudCwKPj4+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJndvcmstPnNoYXJlZCk7Cj4+Pj4+ICsgICByID0g ZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChuZXdfYWJvLT50Ym8uYmFzZS5yZXN2LCAmd29y ay0+ZXhjbCwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3b3Jr LT5zaGFyZWRfY291bnQsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmd29yay0+c2hhcmVkKTsKPj4+Pj4gICAgICBpZiAodW5saWtlbHkociAhPSAwKSkgewo+Pj4+ PiAgICAgICAgICAgICAgRFJNX0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGZlbmNlcyBmb3IgYnVmZmVy XG4iKTsKPj4+Pj4gICAgICAgICAgICAgIGdvdG8gdW5waW47Cj4+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZG1hX2J1Zi5jIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RtYV9idWYuYwo+Pj4+PiBpbmRleCBiYWE5ODBhNDc3ZDk0 Li4wZDAzMTliYzUxNTc3IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZG1hX2J1Zi5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9kbWFfYnVmLmMKPj4+Pj4gQEAgLTk4LDcgKzk4LDcgQEAgX19kbWFfcmVzdl9t YWtlX2V4Y2x1c2l2ZShzdHJ1Y3QgZG1hX3Jlc3YgKm9iaikKPj4+Pj4gICAgICBpZiAoIWRtYV9y ZXN2X2dldF9saXN0KG9iaikpIC8qIG5vIHNoYXJlZCBmZW5jZXMgdG8gY29udmVydCAqLwo+Pj4+ PiAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+IC0gICByID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNl c19yY3Uob2JqLCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+Pj4+PiArICAgciA9IGRtYV9yZXN2 X2dldF9mZW5jZXNfdW5sb2NrZWQob2JqLCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+Pj4+PiAg ICAgIGlmIChyKQo+Pj4+PiAgICAgICAgICAgICAgcmV0dXJuIHI7Cj4+Pj4+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMKPj4+Pj4gaW5kZXggMTg5NzRiZDA4MWYwMC4uOGUy OTk2ZDZiYTNhZCAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2dlbS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9nZW0uYwo+Pj4+PiBAQCAtNDcxLDggKzQ3MSw4IEBAIGludCBhbWRncHVfZ2VtX3dhaXRfaWRs ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+Pj4+PiAgICAgICAg ICAgICAgcmV0dXJuIC1FTk9FTlQ7Cj4+Pj4+ICAgICAgfQo+Pj4+PiAgICAgIHJvYmogPSBnZW1f dG9fYW1kZ3B1X2JvKGdvYmopOwo+Pj4+PiAtICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0 X3JjdShyb2JqLT50Ym8uYmFzZS5yZXN2LCB0cnVlLCB0cnVlLAo+Pj4+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCk7Cj4+Pj4+ICsgICByZXQg PSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQocm9iai0+dGJvLmJhc2UucmVzdiwgdHJ1 ZSwgdHJ1ZSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aW1lb3V0KTsKPj4+Pj4gICAgICAvKiByZXQgPT0gMCBtZWFucyBub3Qgc2lnbmFsZWQsCj4+Pj4+ ICAgICAgICogcmV0ID4gMCBtZWFucyBzaWduYWxlZAo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2lkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1X2lkcy5jCj4+Pj4+IGluZGV4IGI0OTcxZTkwYjk4Y2YuLjM4ZTFiMzJkZDJj ZWYgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9p ZHMuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfaWRzLmMK Pj4+Pj4gQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIGFtZGdwdV9wYXNpZF9mcmVlX2RlbGF5ZWQo c3RydWN0IGRtYV9yZXN2ICpyZXN2LAo+Pj4+PiAgICAgIHVuc2lnbmVkIGNvdW50Owo+Pj4+PiAg ICAgIGludCByOwo+Pj4+PiAtICAgciA9IGRtYV9yZXN2X2dldF9mZW5jZXNfcmN1KHJlc3YsIE5V TEwsICZjb3VudCwgJmZlbmNlcyk7Cj4+Pj4+ICsgICByID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191 bmxvY2tlZChyZXN2LCBOVUxMLCAmY291bnQsICZmZW5jZXMpOwo+Pj4+PiAgICAgIGlmIChyKQo+ Pj4+PiAgICAgICAgICAgICAgZ290byBmYWxsYmFjazsKPj4+Pj4gQEAgLTE1Niw4ICsxNTYsOCBA QCB2b2lkIGFtZGdwdV9wYXNpZF9mcmVlX2RlbGF5ZWQoc3RydWN0IGRtYV9yZXN2ICpyZXN2LAo+ Pj4+PiAgICAgIC8qIE5vdCBlbm91Z2ggbWVtb3J5IGZvciB0aGUgZGVsYXllZCBkZWxldGUsIGFz IGxhc3QgcmVzb3J0Cj4+Pj4+ICAgICAgICogYmxvY2sgZm9yIGFsbCB0aGUgZmVuY2VzIHRvIGNv bXBsZXRlLgo+Pj4+PiAgICAgICAqLwo+Pj4+PiAtICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Jj dShyZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKPj4+Pj4gKyAgIGRtYV9yZXN2X3dhaXRf dGltZW91dF91bmxvY2tlZChyZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+ICAgICAgYW1k Z3B1X3Bhc2lkX2ZyZWUocGFzaWQpOwo+Pj4+PiAgICAgfQo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfbW4uYwo+Pj4+PiBpbmRleCA4MjhiNTE2N2ZmMTI4Li4wMzE5YzhiNTQ3 YzQ4IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf bW4uYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYwo+ Pj4+PiBAQCAtNzUsOCArNzUsOCBAQCBzdGF0aWMgYm9vbCBhbWRncHVfbW5faW52YWxpZGF0ZV9n Zngoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLAo+Pj4+PiAgICAgIG1tdV9pbnRl cnZhbF9zZXRfc2VxKG1uaSwgY3VyX3NlcSk7Cj4+Pj4+IC0gICByID0gZG1hX3Jlc3Zfd2FpdF90 aW1lb3V0X3JjdShiby0+dGJvLmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+ICsg ICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKGJvLT50Ym8uYmFzZS5yZXN2LCB0 cnVlLCBmYWxzZSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+PiAgICAgIG11dGV4X3VubG9jaygmYWRldi0+bm90 aWZpZXJfbG9jayk7Cj4+Pj4+ICAgICAgaWYgKHIgPD0gMCkKPj4+Pj4gICAgICAgICAgICAgIERS TV9FUlJPUigiKCVsZCkgZmFpbGVkIHRvIHdhaXQgZm9yIHVzZXIgYm9cbiIsIHIpOwo+Pj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCj4+Pj4+IGluZGV4IDBh ZGZmY2FjZTMyNjMuLmRlMWM3YzU1MDE2ODMgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPj4+Pj4gQEAgLTc5MSw4ICs3OTEsOCBAQCBp bnQgYW1kZ3B1X2JvX2ttYXAoc3RydWN0IGFtZGdwdV9ibyAqYm8sIHZvaWQgKipwdHIpCj4+Pj4+ ICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4gICAgICB9Cj4+Pj4+IC0gICByID0gZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3JjdShiby0+dGJvLmJhc2UucmVzdiwgZmFsc2UsIGZhbHNlLAo+Pj4+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9TQ0hFRFVM RV9USU1FT1VUKTsKPj4+Pj4gKyAgIHIgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQo Ym8tPnRiby5iYXNlLnJlc3YsIGZhbHNlLCBmYWxzZSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+PiAgICAgIGlm IChyIDwgMCkKPj4+Pj4gICAgICAgICAgICAgIHJldHVybiByOwo+Pj4+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3V2ZC5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3V2ZC5jCj4+Pj4+IGluZGV4IGM2ZGJjMDgwMTYwNDUuLjRhMjE5 NjQwNGZiNjkgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV91dmQuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf dXZkLmMKPj4+Pj4gQEAgLTExMTUsOSArMTExNSw5IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X3V2ZF9z ZW5kX21zZyhzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJpbmcsIHN0cnVjdCBhbWRncHVfYm8gKmJvLAo+ Pj4+PiAgICAgIGliLT5sZW5ndGhfZHcgPSAxNjsKPj4+Pj4gICAgICBpZiAoZGlyZWN0KSB7Cj4+ Pj4+IC0gICAgICAgICAgIHIgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT50Ym8uYmFz ZS5yZXN2LAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHJ1ZSwgZmFsc2UsCj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBtc2Vjc190b19qaWZmaWVzKDEwKSk7Cj4+Pj4+ICsgICAg ICAgICAgIHIgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQoYm8tPnRiby5iYXNlLnJl c3YsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHJ1ZSwgZmFsc2UsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbXNlY3NfdG9famlmZmllcygxMCkpOwo+Pj4+PiAgICAgICAgICAgICAgaWYgKHIg PT0gMCkKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgciA9IC1FVElNRURPVVQ7Cj4+Pj4+ICAg ICAgICAgICAgICBpZiAociA8IDApCj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV92bS5jCj4+Pj4+IGluZGV4IDRhM2UzZjcyZTEyNzcuLjdiYTFjNTM3ZDY1ODQgMTAwNjQ0Cj4+ Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4+Pj4+IEBAIC0yMDA3 LDE0ICsyMDA3LDE0IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV92bV9wcnRfZmluaShzdHJ1Y3QgYW1k Z3B1X2RldmljZSAqYWRldiwgc3RydWN0IGFtZGdwdV92bSAqdm0pCj4+Pj4+ICAgICAgdW5zaWdu ZWQgaSwgc2hhcmVkX2NvdW50Owo+Pj4+PiAgICAgIGludCByOwo+Pj4+PiAtICAgciA9IGRtYV9y ZXN2X2dldF9mZW5jZXNfcmN1KHJlc3YsICZleGNsLAo+Pj4+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmc2hhcmVkX2NvdW50LCAmc2hhcmVkKTsKPj4+Pj4gKyAg IHIgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHJlc3YsICZleGNsLAo+Pj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYXJlZF9jb3VudCwgJnNoYXJlZCk7 Cj4+Pj4+ICAgICAgaWYgKHIpIHsKPj4+Pj4gICAgICAgICAgICAgIC8qIE5vdCBlbm91Z2ggbWVt b3J5IHRvIGdyYWIgdGhlIGZlbmNlIGxpc3QsIGFzIGxhc3QgcmVzb3J0Cj4+Pj4+ICAgICAgICAg ICAgICAgKiBibG9jayBmb3IgYWxsIHRoZSBmZW5jZXMgdG8gY29tcGxldGUuCj4+Pj4+ICAgICAg ICAgICAgICAgKi8KPj4+Pj4gLSAgICAgICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShy ZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+Pj4+PiArICAgICAgICAgICBk bWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQocmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElN RU9VVCk7Cj4+Pj4+ICAgICAgICAgICAgICByZXR1cm47Cj4+Pj4+ICAgICAgfQo+Pj4+PiBAQCAt MjYyNSw3ICsyNjI1LDcgQEAgYm9vbCBhbWRncHVfdm1fZXZpY3RhYmxlKHN0cnVjdCBhbWRncHVf Ym8gKmJvKQo+Pj4+PiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4+Pj4+ICAgICAgLyogRG9u J3QgZXZpY3QgVk0gcGFnZSB0YWJsZXMgd2hpbGUgdGhleSBhcmUgYnVzeSAqLwo+Pj4+PiAtICAg aWYgKCFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShiby0+dGJvLmJhc2UucmVzdiwgdHJ1ZSkp Cj4+Pj4+ICsgICBpZiAoIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQoYm8tPnRiby5i YXNlLnJlc3YsIHRydWUpKQo+Pj4+PiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4+PiAg ICAgIC8qIFRyeSB0byBibG9jayBvbmdvaW5nIHVwZGF0ZXMgKi8KPj4+Pj4gQEAgLTI4MDUsOCAr MjgwNSw4IEBAIHZvaWQgYW1kZ3B1X3ZtX2FkanVzdF9zaXplKHN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2LCB1aW50MzJfdCBtaW5fdm1fc2l6ZSwKPj4+Pj4gICAgICAqLwo+Pj4+PiAgICAgbG9u ZyBhbWRncHVfdm1fd2FpdF9pZGxlKHN0cnVjdCBhbWRncHVfdm0gKnZtLCBsb25nIHRpbWVvdXQp Cj4+Pj4+ICAgICB7Cj4+Pj4+IC0gICB0aW1lb3V0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Jj dSh2bS0+cm9vdC5iYXNlLmJvLT50Ym8uYmFzZS5yZXN2LAo+Pj4+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgdGltZW91dCk7Cj4+Pj4+ICsgICB0 aW1lb3V0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKHZtLT5yb290LmJhc2UuYm8t PnRiby5iYXNlLnJlc3YsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRydWUsIHRydWUsIHRpbWVvdXQpOwo+Pj4+PiAgICAgIGlmICh0aW1lb3V0IDw9 IDApCj4+Pj4+ICAgICAgICAgICAgICByZXR1cm4gdGltZW91dDsKPj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jCj4+Pj4+IGluZGV4 IDljYTUxN2I2NTg1NDYuLjAxMjFkMjgxN2ZhMjYgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+Pj4+PiBAQCAt ODI3Niw5ICs4Mjc2LDkgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X2RtX2NvbW1pdF9wbGFuZXMoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlLAo+Pj4+PiAgICAgICAgICAgICAgICogZGVhZGxv Y2sgZHVyaW5nIEdQVSByZXNldCB3aGVuIHRoaXMgZmVuY2Ugd2lsbCBub3Qgc2lnbmFsCj4+Pj4+ ICAgICAgICAgICAgICAgKiBidXQgd2UgaG9sZCByZXNlcnZhdGlvbiBsb2NrIGZvciB0aGUgQk8u Cj4+Pj4+ICAgICAgICAgICAgICAgKi8KPj4+Pj4gLSAgICAgICAgICAgciA9IGRtYV9yZXN2X3dh aXRfdGltZW91dF9yY3UoYWJvLT50Ym8uYmFzZS5yZXN2LCB0cnVlLAo+Pj4+PiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCj4+Pj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2Vjc190 b19qaWZmaWVzKDUwMDApKTsKPj4+Pj4gKyAgICAgICAgICAgciA9IGRtYV9yZXN2X3dhaXRfdGlt ZW91dF91bmxvY2tlZChhYm8tPnRiby5iYXNlLnJlc3YsIHRydWUsCj4+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNlY3NfdG9famlmZmllcyg1 MDAwKSk7Cj4+Pj4+ICAgICAgICAgICAgICBpZiAodW5saWtlbHkociA8PSAwKSkKPj4+Pj4gICAg ICAgICAgICAgICAgICAgICAgRFJNX0VSUk9SKCJXYWl0aW5nIGZvciBmZW5jZXMgdGltZWQgb3V0 ISIpOwo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZ2VtLmMKPj4+Pj4gaW5kZXggOTk4OTQyNWU5ODc1YS4uMTI0MWE0MjFi OWU4MSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwo+Pj4+PiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCj4+Pj4+IEBAIC03NzAsOCArNzcwLDggQEAg bG9uZyBkcm1fZ2VtX2RtYV9yZXN2X3dhaXQoc3RydWN0IGRybV9maWxlICpmaWxlcCwgdTMyIGhh bmRsZSwKPj4+Pj4gICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4+PiAgICAgIH0KPj4+ Pj4gLSAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uob2JqLT5yZXN2LCB3YWl0X2Fs bCwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy dWUsIHRpbWVvdXQpOwo+Pj4+PiArICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9j a2VkKG9iai0+cmVzdiwgd2FpdF9hbGwsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHJ1ZSwgdGltZW91dCk7Cj4+Pj4+ICAgICAgaWYgKHJldCA9PSAwKQo+ Pj4+PiAgICAgICAgICAgICAgcmV0ID0gLUVUSU1FOwo+Pj4+PiAgICAgIGVsc2UgaWYgKHJldCA+ IDApCj4+Pj4+IEBAIC0xMzc1LDEzICsxMzc1LDEzIEBAIGludCBkcm1fZ2VtX2ZlbmNlX2FycmF5 X2FkZF9pbXBsaWNpdChzdHJ1Y3QgeGFycmF5ICpmZW5jZV9hcnJheSwKPj4+Pj4gICAgICBpZiAo IXdyaXRlKSB7Cj4+Pj4+ICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9Cj4+ Pj4+IC0gICAgICAgICAgICAgICAgICAgZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KG9iai0+cmVzdik7 Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQob2Jq LT5yZXN2KTsKPj4+Pj4gICAgICAgICAgICAgIHJldHVybiBkcm1fZ2VtX2ZlbmNlX2FycmF5X2Fk ZChmZW5jZV9hcnJheSwgZmVuY2UpOwo+Pj4+PiAgICAgIH0KPj4+Pj4gLSAgIHJldCA9IGRtYV9y ZXN2X2dldF9mZW5jZXNfcmN1KG9iai0+cmVzdiwgTlVMTCwKPj4+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmVuY2VfY291bnQsICZmZW5jZXMpOwo+Pj4+ PiArICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc191bmxvY2tlZChvYmotPnJlc3YsIE5VTEws Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZW5jZV9jb3Vu dCwgJmZlbmNlcyk7Cj4+Pj4+ICAgICAgaWYgKHJldCB8fCAhZmVuY2VfY291bnQpCj4+Pj4+ICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2RybV9nZW1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fYXRvbWlj X2hlbHBlci5jCj4+Pj4+IGluZGV4IGEwMDVjNWEwYmE0NmEuLmEyNzEzNTA4NGFlNWMgMTAwNjQ0 Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX2F0b21pY19oZWxwZXIuYwo+Pj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbV9hdG9taWNfaGVscGVyLmMKPj4+Pj4gQEAg LTE0Nyw3ICsxNDcsNyBAQCBpbnQgZHJtX2dlbV9wbGFuZV9oZWxwZXJfcHJlcGFyZV9mYihzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3RydWN0IGRybV9wbGFuZV9zdAo+Pj4+PiAgICAgICAgICAg ICAgcmV0dXJuIDA7Cj4+Pj4+ICAgICAgb2JqID0gZHJtX2dlbV9mYl9nZXRfb2JqKHN0YXRlLT5m YiwgMCk7Cj4+Pj4+IC0gICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShvYmotPnJlc3Yp Owo+Pj4+PiArICAgZmVuY2UgPSBkbWFfcmVzdl9nZXRfZXhjbF91bmxvY2tlZChvYmotPnJlc3Yp Owo+Pj4+PiAgICAgIGRybV9hdG9taWNfc2V0X2ZlbmNlX2Zvcl9wbGFuZShzdGF0ZSwgZmVuY2Up Owo+Pj4+PiAgICAgIHJldHVybiAwOwo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2V0bmF2aXYvZXRuYXZpdl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZf Z2VtLmMKPj4+Pj4gaW5kZXggZGI2OWYxOWFiNWJjYS4uNGU2ZjUzNDZlODRlNCAxMDA2NDQKPj4+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW0uYwo+Pj4+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi9ldG5hdml2X2dlbS5jCj4+Pj4+IEBAIC0zOTAsMTQg KzM5MCwxMyBAQCBpbnQgZXRuYXZpdl9nZW1fY3B1X3ByZXAoc3RydWN0IGRybV9nZW1fb2JqZWN0 ICpvYmosIHUzMiBvcCwKPj4+Pj4gICAgICB9Cj4+Pj4+ICAgICAgaWYgKG9wICYgRVROQV9QUkVQ X05PU1lOQykgewo+Pj4+PiAtICAgICAgICAgICBpZiAoIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRf cmN1KG9iai0+cmVzdiwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgd3JpdGUpKQo+Pj4+PiArICAgICAgICAgICBpZiAoIWRtYV9yZXN2 X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQob2JqLT5yZXN2LCB3cml0ZSkpCj4+Pj4+ICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Cj4+Pj4+ICAgICAgfSBlbHNlIHsKPj4+Pj4gICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVtYWluID0gZXRuYXZpdl90aW1lb3V0X3RvX2ppZmZp ZXModGltZW91dCk7Cj4+Pj4+IC0gICAgICAgICAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91 dF9yY3Uob2JqLT5yZXN2LAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3cml0ZSwgdHJ1ZSwgcmVtYWluKTsKPj4+Pj4gKyAgICAgICAg ICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+cmVzdiwKPj4+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlLCB0 cnVlLCByZW1haW4pOwo+Pj4+PiAgICAgICAgICAgICAgaWYgKHJldCA8PSAwKQo+Pj4+PiAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gcmV0ID09IDAgPyAtRVRJTUVET1VUIDogcmV0Owo+Pj4+ PiAgICAgIH0KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2 aXZfZ2VtX3N1Ym1pdC5jIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3Vi bWl0LmMKPj4+Pj4gaW5kZXggZDA1YzM1OTk0NTc5OS4uNjYxN2ZhZGE0NTk1ZCAxMDA2NDQKPj4+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMKPj4+ Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V0bmF2aXYvZXRuYXZpdl9nZW1fc3VibWl0LmMKPj4+ Pj4gQEAgLTE4OSwxMyArMTg5LDEzIEBAIHN0YXRpYyBpbnQgc3VibWl0X2ZlbmNlX3N5bmMoc3Ry dWN0IGV0bmF2aXZfZ2VtX3N1Ym1pdCAqc3VibWl0KQo+Pj4+PiAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKPj4+Pj4gICAgICAgICAgICAgIGlmIChiby0+ZmxhZ3MgJiBFVE5BX1NVQk1J VF9CT19XUklURSkgewo+Pj4+PiAtICAgICAgICAgICAgICAgICAgIHJldCA9IGRtYV9yZXN2X2dl dF9mZW5jZXNfcmN1KHJvYmosICZiby0+ZXhjbCwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvLT5ucl9zaGFyZWQsCj4+ Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZiby0+c2hhcmVkKTsKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICByZXQgPSBkbWFf cmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHJvYmosICZiby0+ZXhjbCwKPj4+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiby0+bnJfc2hh cmVkLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmJvLT5zaGFyZWQpOwo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0 KQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+Pj4+ICAg ICAgICAgICAgICB9IGVsc2Ugewo+Pj4+PiAtICAgICAgICAgICAgICAgICAgIGJvLT5leGNsID0g ZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KHJvYmopOwo+Pj4+PiArICAgICAgICAgICAgICAgICAgIGJv LT5leGNsID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQocm9iaik7Cj4+Pj4+ICAgICAgICAg ICAgICB9Cj4+Pj4+ICAgICAgfQo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5 L2ludGVsX2Rpc3BsYXkuYwo+Pj4+PiBpbmRleCA0MjJiNTllYmY2ZGNlLi41ZjBiODVhMTAyMTU5 IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rp c3BsYXkuYwo+Pj4+PiBAQCAtMTEwNDAsNyArMTEwNDAsNyBAQCBpbnRlbF9wcmVwYXJlX3BsYW5l X2ZiKHN0cnVjdCBkcm1fcGxhbmUgKl9wbGFuZSwKPj4+Pj4gICAgICAgICAgICAgIGlmIChyZXQg PCAwKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICBnb3RvIHVucGluX2ZiOwo+Pj4+PiAtICAg ICAgICAgICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShvYmotPmJhc2UucmVzdik7Cj4+ Pj4+ICsgICAgICAgICAgIGZlbmNlID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5sb2NrZWQob2JqLT5i YXNlLnJlc3YpOwo+Pj4+PiAgICAgICAgICAgICAgaWYgKGZlbmNlKSB7Cj4+Pj4+ICAgICAgICAg ICAgICAgICAgICAgIGFkZF9ycHNfYm9vc3RfYWZ0ZXJfdmJsYW5rKG5ld19wbGFuZV9zdGF0ZS0+ aHcuY3J0YywKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmVuY2UpOwo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZG1h X3Jlc3ZfdXRpbHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2RtYV9yZXN2X3V0aWxzLmMKPj4+ Pj4gaW5kZXggOWU1MDhlN2Q0NjI5Zi4uYmRmYzZiZjE2YTRlOSAxMDA2NDQKPj4+Pj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZG1hX3Jlc3ZfdXRpbHMuYwo+Pj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9kbWFfcmVzdl91dGlscy5jCj4+Pj4+IEBAIC0xMCw3ICsxMCw3IEBACj4+ Pj4+ICAgICB2b2lkIGRtYV9yZXN2X3BydW5lKHN0cnVjdCBkbWFfcmVzdiAqcmVzdikKPj4+Pj4g ICAgIHsKPj4+Pj4gICAgICBpZiAoZG1hX3Jlc3ZfdHJ5bG9jayhyZXN2KSkgewo+Pj4+PiAtICAg ICAgICAgICBpZiAoZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UocmVzdiwgdHJ1ZSkpCj4+Pj4+ ICsgICAgICAgICAgIGlmIChkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKHJlc3YsIHRy dWUpKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICBkbWFfcmVzdl9hZGRfZXhjbF9mZW5jZShy ZXN2LCBOVUxMKTsKPj4+Pj4gICAgICAgICAgICAgIGRtYV9yZXN2X3VubG9jayhyZXN2KTsKPj4+ Pj4gICAgICB9Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkx NV9nZW1fYnVzeS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2J1c3kuYwo+ Pj4+PiBpbmRleCAyNTIzNWVmNjMwYzEwLi43NTRhZDZkMWJhY2U5IDEwMDY0NAo+Pj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fYnVzeS5jCj4+Pj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9idXN5LmMKPj4+Pj4gQEAgLTEwNSw3ICsx MDUsNyBAQCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCj4+Pj4+ICAgICAgICogQWx0ZXJuYXRpdmVseSwgd2UgY2FuIHRyYWRlIHRoYXQgZXh0 cmEgaW5mb3JtYXRpb24gb24gcmVhZC93cml0ZQo+Pj4+PiAgICAgICAqIGFjdGl2aXR5IHdpdGgK Pj4+Pj4gICAgICAgKiAgICAgIGFyZ3MtPmJ1c3kgPQo+Pj4+PiAtICAgICogICAgICAgICAgICAg ICFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShvYmotPnJlc3YsIHRydWUpOwo+Pj4+PiArICAg ICogICAgICAgICAgICAgICFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKG9iai0+cmVz diwgdHJ1ZSk7Cj4+Pj4+ICAgICAgICogdG8gcmVwb3J0IHRoZSBvdmVyYWxsIGJ1c3luZXNzLiBU aGlzIGlzIHdoYXQgdGhlIHdhaXQtaW9jdGwgZG9lcy4KPj4+Pj4gICAgICAgKgo+Pj4+PiAgICAg ICAqLwo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMKPj4+Pj4gaW5kZXggMjk3MTQzNTExZjk5Yi4uZThmMzIzNTY0ZTU3YiAxMDA2NDQKPj4+ Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5j Cj4+Pj4+IEBAIC0xNDgxLDcgKzE0ODEsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdXNlX3JlbG9j X2dwdShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPj4+Pj4gICAgICBpZiAoREJHX0ZPUkNFX1JFTE9D KQo+Pj4+PiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo+Pj4+PiAtICAgcmV0dXJuICFkbWFf cmVzdl90ZXN0X3NpZ25hbGVkX3JjdSh2bWEtPnJlc3YsIHRydWUpOwo+Pj4+PiArICAgcmV0dXJu ICFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKHZtYS0+cmVzdiwgdHJ1ZSk7Cj4+Pj4+ ICAgICB9Cj4+Pj4+ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfcGh5c19hZGRyKHN0cnVj dCBpOTE1X3ZtYSAqdm1hLCB1MzIgb2Zmc2V0KQo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX29iamVjdC5oCj4+Pj4+IGluZGV4IDJlYmQ3OTUzN2FlYTkuLjdjMGViNDI1 Y2IzYjMgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuaAo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f b2JqZWN0LmgKPj4+Pj4gQEAgLTUwMCw3ICs1MDAsNyBAQCBpOTE1X2dlbV9vYmplY3RfbGFzdF93 cml0ZV9lbmdpbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPj4+Pj4gICAgICBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPj4+Pj4gICAgICByY3VfcmVhZF9sb2NrKCk7Cj4+Pj4+ IC0gICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShvYmotPmJhc2UucmVzdik7Cj4+Pj4+ ICsgICBmZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2KTsK Pj4+Pj4gICAgICByY3VfcmVhZF91bmxvY2soKTsKPj4+Pj4gICAgICBpZiAoZmVuY2UgJiYgZG1h X2ZlbmNlX2lzX2k5MTUoZmVuY2UpICYmICFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2UpKQo+ Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJw dHIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV91c2VycHRyLmMKPj4+Pj4g aW5kZXggYTY1N2I5OWVjNzYwNi4uNDRkZjE4ZGM5NjY5ZiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3VzZXJwdHIuYwo+Pj4+PiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fdXNlcnB0ci5jCj4+Pj4+IEBAIC04NSw4ICs4 NSw4IEBAIHN0YXRpYyBib29sIGk5MTVfZ2VtX3VzZXJwdHJfaW52YWxpZGF0ZShzdHJ1Y3QgbW11 X2ludGVydmFsX25vdGlmaWVyICptbmksCj4+Pj4+ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK Pj4+Pj4gICAgICAvKiB3ZSB3aWxsIHVuYmluZCBvbiBuZXh0IHN1Ym1pc3Npb24sIHN0aWxsIGhh dmUgdXNlcnB0ciBwaW5zICovCj4+Pj4+IC0gICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3Jj dShvYmotPmJhc2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+ICsgICByID0gZG1hX3Jl c3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+YmFzZS5yZXN2LCB0cnVlLCBmYWxzZSwKPj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJ TUVPVVQpOwo+Pj4+PiAgICAgIGlmIChyIDw9IDApCj4+Pj4+ICAgICAgICAgICAgICBkcm1fZXJy KCZpOTE1LT5kcm0sICIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgaWRsZVxuIiwgcik7Cj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fd2FpdC5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3dhaXQuYwo+Pj4+PiBpbmRleCA0Yjk4 NTZkNWJhMTRmLi41YjZjNTI2NTlhZDRkIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fd2FpdC5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2dlbS9pOTE1X2dlbV93YWl0LmMKPj4+Pj4gQEAgLTQ1LDcgKzQ1LDcgQEAgaTkxNV9nZW1f b2JqZWN0X3dhaXRfcmVzZXJ2YXRpb24oc3RydWN0IGRtYV9yZXN2ICpyZXN2LAo+Pj4+PiAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBpOwo+Pj4+PiAgICAgICAgICAgICAgaW50IHJl dDsKPj4+Pj4gLSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc19yY3UocmVzdiwg JmV4Y2wsICZjb3VudCwgJnNoYXJlZCk7Cj4+Pj4+ICsgICAgICAgICAgIHJldCA9IGRtYV9yZXN2 X2dldF9mZW5jZXNfdW5sb2NrZWQocmVzdiwgJmV4Y2wsICZjb3VudCwgJnNoYXJlZCk7Cj4+Pj4+ ICAgICAgICAgICAgICBpZiAocmV0KQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g cmV0Owo+Pj4+PiBAQCAtNzMsNyArNzMsNyBAQCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZXNlcnZh dGlvbihzdHJ1Y3QgZG1hX3Jlc3YgKnJlc3YsCj4+Pj4+ICAgICAgICAgICAgICAgKi8KPj4+Pj4g ICAgICAgICAgICAgIHBydW5lX2ZlbmNlcyA9IGNvdW50ICYmIHRpbWVvdXQgPj0gMDsKPj4+Pj4g ICAgICB9IGVsc2Ugewo+Pj4+PiAtICAgICAgICAgICBleGNsID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xf cmN1KHJlc3YpOwo+Pj4+PiArICAgICAgICAgICBleGNsID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfdW5s b2NrZWQocmVzdik7Cj4+Pj4+ICAgICAgfQo+Pj4+PiAgICAgIGlmIChleGNsICYmIHRpbWVvdXQg Pj0gMCkKPj4+Pj4gQEAgLTE1OCw4ICsxNTgsOCBAQCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9wcmlv cml0eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4+PiAgICAgICAgICAgICAg dW5zaWduZWQgaW50IGNvdW50LCBpOwo+Pj4+PiAgICAgICAgICAgICAgaW50IHJldDsKPj4+Pj4g LSAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3ZfZ2V0X2ZlbmNlc19yY3Uob2JqLT5iYXNlLnJlc3Ys Cj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNsLCAm Y291bnQsICZzaGFyZWQpOwo+Pj4+PiArICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVu Y2VzX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2LAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZleGNsLCAmY291bnQsICZzaGFyZWQpOwo+Pj4+PiAg ICAgICAgICAgICAgaWYgKHJldCkKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl dDsKPj4+Pj4gQEAgLTE3MCw3ICsxNzAsNyBAQCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9wcmlvcml0 eShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+Pj4+PiAgICAgICAgICAgICAga2Zy ZWUoc2hhcmVkKTsKPj4+Pj4gICAgICB9IGVsc2Ugewo+Pj4+PiAtICAgICAgICAgICBleGNsID0g ZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KG9iai0+YmFzZS5yZXN2KTsKPj4+Pj4gKyAgICAgICAgICAg ZXhjbCA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKG9iai0+YmFzZS5yZXN2KTsKPj4+Pj4g ICAgICB9Cj4+Pj4+ICAgICAgaWYgKGV4Y2wpIHsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZXF1ZXN0LmMKPj4+Pj4gaW5kZXggOTcwZDhmNDk4NmJiZS4uZjFlZDAzY2VkN2RkMSAxMDA2NDQK Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPj4+Pj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPj4+Pj4gQEAgLTE1OTQsOCAr MTU5NCw4IEBAIGk5MTVfcmVxdWVzdF9hd2FpdF9vYmplY3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAq dG8sCj4+Pj4+ICAgICAgICAgICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICoqc2hhcmVkOwo+Pj4+PiAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGNvdW50LCBpOwo+Pj4+PiAtICAgICAgICAgICByZXQg PSBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShvYmotPmJhc2UucmVzdiwKPj4+Pj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleGNsLCAmY291bnQs ICZzaGFyZWQpOwo+Pj4+PiArICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3Vu bG9ja2VkKG9iai0+YmFzZS5yZXN2LAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZleGNsLCAmY291bnQsICZzaGFyZWQpOwo+Pj4+PiAgICAgICAg ICAgICAgaWYgKHJldCkKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+ Pj4gQEAgLTE2MTEsNyArMTYxMSw3IEBAIGk5MTVfcmVxdWVzdF9hd2FpdF9vYmplY3Qoc3RydWN0 IGk5MTVfcmVxdWVzdCAqdG8sCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgIGRtYV9mZW5jZV9w dXQoc2hhcmVkW2ldKTsKPj4+Pj4gICAgICAgICAgICAgIGtmcmVlKHNoYXJlZCk7Cj4+Pj4+ICAg ICAgfSBlbHNlIHsKPj4+Pj4gLSAgICAgICAgICAgZXhjbCA9IGRtYV9yZXN2X2dldF9leGNsX3Jj dShvYmotPmJhc2UucmVzdik7Cj4+Pj4+ICsgICAgICAgICAgIGV4Y2wgPSBkbWFfcmVzdl9nZXRf ZXhjbF91bmxvY2tlZChvYmotPmJhc2UucmVzdik7Cj4+Pj4+ICAgICAgfQo+Pj4+PiAgICAgIGlm IChleGNsKSB7Cj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3 X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3N3X2ZlbmNlLmMKPj4+Pj4gaW5k ZXggMjc0NDU1OGYzMDUwNy4uMGJjYjdlYTQ0MjAxZSAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9zd19mZW5jZS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfc3dfZmVuY2UuYwo+Pj4+PiBAQCAtNTgyLDcgKzU4Miw3IEBAIGludCBpOTE1 X3N3X2ZlbmNlX2F3YWl0X3Jlc2VydmF0aW9uKHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSwK Pj4+Pj4gICAgICAgICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKipzaGFyZWQ7Cj4+Pj4+ICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQsIGk7Cj4+Pj4+IC0gICAgICAgICAgIHJldCA9IGRt YV9yZXN2X2dldF9mZW5jZXNfcmN1KHJlc3YsICZleGNsLCAmY291bnQsICZzaGFyZWQpOwo+Pj4+ PiArICAgICAgICAgICByZXQgPSBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHJlc3YsICZl eGNsLCAmY291bnQsICZzaGFyZWQpOwo+Pj4+PiAgICAgICAgICAgICAgaWYgKHJldCkKPj4+Pj4g ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPj4+Pj4gQEAgLTYwNiw3ICs2MDYsNyBA QCBpbnQgaTkxNV9zd19mZW5jZV9hd2FpdF9yZXNlcnZhdGlvbihzdHJ1Y3QgaTkxNV9zd19mZW5j ZSAqZmVuY2UsCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgIGRtYV9mZW5jZV9wdXQoc2hhcmVk W2ldKTsKPj4+Pj4gICAgICAgICAgICAgIGtmcmVlKHNoYXJlZCk7Cj4+Pj4+ICAgICAgfSBlbHNl IHsKPj4+Pj4gLSAgICAgICAgICAgZXhjbCA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShyZXN2KTsK Pj4+Pj4gKyAgICAgICAgICAgZXhjbCA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKHJlc3Yp Owo+Pj4+PiAgICAgIH0KPj4+Pj4gICAgICBpZiAocmV0ID49IDAgJiYgZXhjbCAmJiBleGNsLT5v cHMgIT0gZXhjbHVkZSkgewo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9t c21fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0uYwo+Pj4+PiBpbmRleCA1NmRm ODZlNWY3NDAwLi4xYWNhNjA1MDdiYjE0IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vbXNtL21zbV9nZW0uYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21zbV9nZW0u Ywo+Pj4+PiBAQCAtOTE1LDggKzkxNSw3IEBAIGludCBtc21fZ2VtX2NwdV9wcmVwKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBvcCwga3RpbWVfdCAqdGltZW91dCkKPj4+Pj4g ICAgICAgICAgICAgIG9wICYgTVNNX1BSRVBfTk9TWU5DID8gMCA6IHRpbWVvdXRfdG9famlmZmll cyh0aW1lb3V0KTsKPj4+Pj4gICAgICBsb25nIHJldDsKPj4+Pj4gLSAgIHJldCA9IGRtYV9yZXN2 X3dhaXRfdGltZW91dF9yY3Uob2JqLT5yZXN2LCB3cml0ZSwKPj4+Pj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsICByZW1haW4pOwo+Pj4+PiArICAg cmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9ja2VkKG9iai0+cmVzdiwgd3JpdGUsIHRy dWUsIHJlbWFpbik7Cj4+Pj4+ICAgICAgaWYgKHJldCA9PSAwKQo+Pj4+PiAgICAgICAgICAgICAg cmV0dXJuIHJlbWFpbiA9PSAwID8gLUVCVVNZIDogLUVUSU1FRE9VVDsKPj4+Pj4gICAgICBlbHNl IGlmIChyZXQgPCAwKQo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUv ZGlzcG52NTAvd25kdy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvd25kdy5j Cj4+Pj4+IGluZGV4IDBjYjFmOWQ4NDhkM2UuLjhkMDQ4YmFjZDZmMDIgMTAwNjQ0Cj4+Pj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUwL3duZHcuYwo+Pj4+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC93bmR3LmMKPj4+Pj4gQEAgLTU2MSw3ICs1 NjEsNyBAQCBudjUwX3duZHdfcHJlcGFyZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwgc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgIGFz eXctPmltYWdlLmhhbmRsZVswXSA9IGN0eGRtYS0+b2JqZWN0LmhhbmRsZTsKPj4+Pj4gICAgICB9 Cj4+Pj4+IC0gICBhc3l3LT5zdGF0ZS5mZW5jZSA9IGRtYV9yZXN2X2dldF9leGNsX3JjdShudmJv LT5iby5iYXNlLnJlc3YpOwo+Pj4+PiArICAgYXN5dy0+c3RhdGUuZmVuY2UgPSBkbWFfcmVzdl9n ZXRfZXhjbF91bmxvY2tlZChudmJvLT5iby5iYXNlLnJlc3YpOwo+Pj4+PiAgICAgIGFzeXctPmlt YWdlLm9mZnNldFswXSA9IG52Ym8tPm9mZnNldDsKPj4+Pj4gICAgICBpZiAod25kdy0+ZnVuYy0+ cHJlcGFyZSkgewo+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91 dmVhdV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKPj4+Pj4g aW5kZXggYTcwZTgyNDEzZmE3NS4uYmM2YjA5ZWU5YjU1MiAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwo+Pj4+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCj4+Pj4+IEBAIC05MjgsOCArOTI4LDggQEAgbm91 dmVhdV9nZW1faW9jdGxfY3B1X3ByZXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPj4+Pj4gICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOwo+Pj4+PiAgICAgIG52Ym8gPSBu b3V2ZWF1X2dlbV9vYmplY3QoZ2VtKTsKPj4+Pj4gLSAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3Rp bWVvdXRfcmN1KG52Ym8tPmJvLmJhc2UucmVzdiwgd3JpdGUsIHRydWUsCj4+Pj4+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fd2FpdCA/IDAgOiAzMCAq IEhaKTsKPj4+Pj4gKyAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfdW5sb2NrZWQobnZi by0+Ym8uYmFzZS5yZXN2LCB3cml0ZSwgdHJ1ZSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbm9fd2FpdCA/IDAgOiAzMCAqIEhaKTsKPj4+Pj4gICAgICBp ZiAoIWxyZXQpCj4+Pj4+ICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Cj4+Pj4+ICAgICAgZWxz ZSBpZiAobHJldCA+IDApCj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJv c3QvcGFuZnJvc3RfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3RfZHJ2 LmMKPj4+Pj4gaW5kZXggY2EwNzA5OGE2MTQxOS4uZWVmNWI2MzJlZTBjZSAxMDA2NDQKPj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2Rydi5jCj4+Pj4+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9kcnYuYwo+Pj4+PiBAQCAtMzExLDgg KzMxMSw4IEBAIHBhbmZyb3N0X2lvY3RsX3dhaXRfYm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKPj4+Pj4gICAgICBpZiAoIWdlbV9vYmopCj4+Pj4+ICAgICAgICAgICAgICBy ZXR1cm4gLUVOT0VOVDsKPj4+Pj4gLSAgIHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uo Z2VtX29iai0+cmVzdiwgdHJ1ZSwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRydWUsIHRpbWVvdXQpOwo+Pj4+PiArICAgcmV0ID0gZG1hX3Jlc3Zf d2FpdF90aW1lb3V0X3VubG9ja2VkKGdlbV9vYmotPnJlc3YsIHRydWUsCj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZSwgdGltZW91dCk7Cj4+Pj4+ICAg ICAgaWYgKCFyZXQpCj4+Pj4+ICAgICAgICAgICAgICByZXQgPSB0aW1lb3V0ID8gLUVUSU1FRE9V VCA6IC1FQlVTWTsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9w YW5mcm9zdF9qb2IuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5mcm9zdC9wYW5mcm9zdF9qb2IuYwo+ Pj4+PiBpbmRleCA2MDAzY2ZlYjEzMjIxLi4yZGYzZTk5OWEzOGQwIDEwMDY0NAo+Pj4+PiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vcGFuZnJvc3QvcGFuZnJvc3Rfam9iLmMKPj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL3BhbmZyb3N0L3BhbmZyb3N0X2pvYi5jCj4+Pj4+IEBAIC0yMDMsNyArMjAz LDcgQEAgc3RhdGljIHZvaWQgcGFuZnJvc3RfYWNxdWlyZV9vYmplY3RfZmVuY2VzKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqKmJvcywKPj4+Pj4gICAgICBpbnQgaTsKPj4+Pj4gICAgICBmb3IgKGkg PSAwOyBpIDwgYm9fY291bnQ7IGkrKykKPj4+Pj4gLSAgICAgICAgICAgaW1wbGljaXRfZmVuY2Vz W2ldID0gZG1hX3Jlc3ZfZ2V0X2V4Y2xfcmN1KGJvc1tpXS0+cmVzdik7Cj4+Pj4+ICsgICAgICAg ICAgIGltcGxpY2l0X2ZlbmNlc1tpXSA9IGRtYV9yZXN2X2dldF9leGNsX3VubG9ja2VkKGJvc1tp XS0+cmVzdik7Cj4+Pj4+ICAgICB9Cj4+Pj4+ICAgICBzdGF0aWMgdm9pZCBwYW5mcm9zdF9hdHRh Y2hfb2JqZWN0X2ZlbmNlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipib3MsCj4+Pj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyBiL2RyaXZlcnMvZ3B1 L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCj4+Pj4+IGluZGV4IDA1ZWEyZjM5ZjYyNjEuLjFhMzhi MGJmMzZkMTEgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9u X2dlbS5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCj4+ Pj4+IEBAIC0xMjUsNyArMTI1LDcgQEAgc3RhdGljIGludCByYWRlb25fZ2VtX3NldF9kb21haW4o c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqLAo+Pj4+PiAgICAgIH0KPj4+Pj4gICAgICBpZiAo ZG9tYWluID09IFJBREVPTl9HRU1fRE9NQUlOX0NQVSkgewo+Pj4+PiAgICAgICAgICAgICAgLyog QXNraW5nIGZvciBjcHUgYWNjZXNzIHdhaXQgZm9yIG9iamVjdCBpZGxlICovCj4+Pj4+IC0gICAg ICAgICAgIHIgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KHJvYmotPnRiby5iYXNlLnJlc3Ys IHRydWUsIHRydWUsIDMwICogSFopOwo+Pj4+PiArICAgICAgICAgICByID0gZG1hX3Jlc3Zfd2Fp dF90aW1lb3V0X3VubG9ja2VkKHJvYmotPnRiby5iYXNlLnJlc3YsIHRydWUsIHRydWUsIDMwICog SFopOwo+Pj4+PiAgICAgICAgICAgICAgaWYgKCFyKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAg ICByID0gLUVCVVNZOwo+Pj4+PiBAQCAtNDc0LDcgKzQ3NCw3IEBAIGludCByYWRlb25fZ2VtX2J1 c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4gICAgICB9 Cj4+Pj4+ICAgICAgcm9iaiA9IGdlbV90b19yYWRlb25fYm8oZ29iaik7Cj4+Pj4+IC0gICByID0g ZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3Uocm9iai0+dGJvLmJhc2UucmVzdiwgdHJ1ZSk7Cj4+ Pj4+ICsgICByID0gZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF91bmxvY2tlZChyb2JqLT50Ym8uYmFz ZS5yZXN2LCB0cnVlKTsKPj4+Pj4gICAgICBpZiAociA9PSAwKQo+Pj4+PiAgICAgICAgICAgICAg ciA9IC1FQlVTWTsKPj4+Pj4gICAgICBlbHNlCj4+Pj4+IEBAIC01MDMsNyArNTAzLDcgQEAgaW50 IHJhZGVvbl9nZW1fd2FpdF9pZGxlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsCj4+Pj4+ICAgICAgfQo+Pj4+PiAgICAgIHJvYmogPSBnZW1fdG9fcmFkZW9uX2JvKGdv YmopOwo+Pj4+PiAtICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShyb2JqLT50Ym8u YmFzZS5yZXN2LCB0cnVlLCB0cnVlLCAzMCAqIEhaKTsKPj4+Pj4gKyAgIHJldCA9IGRtYV9yZXN2 X3dhaXRfdGltZW91dF91bmxvY2tlZChyb2JqLT50Ym8uYmFzZS5yZXN2LCB0cnVlLCB0cnVlLCAz MCAqIEhaKTsKPj4+Pj4gICAgICBpZiAocmV0ID09IDApCj4+Pj4+ICAgICAgICAgICAgICByID0g LUVCVVNZOwo+Pj4+PiAgICAgIGVsc2UgaWYgKHJldCA8IDApCj4+Pj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tbi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVv bi9yYWRlb25fbW4uYwo+Pj4+PiBpbmRleCBlMzdjOWE1N2E3YzM2Li5hMTliZTNmOGEyMThjIDEw MDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tbi5jCj4+Pj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21uLmMKPj4+Pj4gQEAgLTY2LDgg KzY2LDggQEAgc3RhdGljIGJvb2wgcmFkZW9uX21uX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRl cnZhbF9ub3RpZmllciAqbW4sCj4+Pj4+ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKPj4+Pj4g ICAgICB9Cj4+Pj4+IC0gICByID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShiby0+dGJvLmJh c2UucmVzdiwgdHJ1ZSwgZmFsc2UsCj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7Cj4+Pj4+ICsgICByID0gZG1hX3Jlc3Zfd2FpdF90 aW1lb3V0X3VubG9ja2VkKGJvLT50Ym8uYmFzZS5yZXN2LCB0cnVlLCBmYWxzZSwKPj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQp Owo+Pj4+PiAgICAgIGlmIChyIDw9IDApCj4+Pj4+ICAgICAgICAgICAgICBEUk1fRVJST1IoIigl bGQpIGZhaWxlZCB0byB3YWl0IGZvciB1c2VyIGJvXG4iLCByKTsKPj4+Pj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9i by5jCj4+Pj4+IGluZGV4IGNhMWIwOThiNmE1NjEuLjIxNWNhZDMxNDk2MjEgMTAwNjQ0Cj4+Pj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPj4+Pj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm8uYwo+Pj4+PiBAQCAtMjk0LDcgKzI5NCw3IEBAIHN0YXRpYyBpbnQg dHRtX2JvX2NsZWFudXBfcmVmcyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+Pj4+PiAg ICAgIHN0cnVjdCBkbWFfcmVzdiAqcmVzdiA9ICZiby0+YmFzZS5fcmVzdjsKPj4+Pj4gICAgICBp bnQgcmV0Owo+Pj4+PiAtICAgaWYgKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KHJlc3YsIHRy dWUpKQo+Pj4+PiArICAgaWYgKGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQocmVzdiwg dHJ1ZSkpCj4+Pj4+ICAgICAgICAgICAgICByZXQgPSAwOwo+Pj4+PiAgICAgIGVsc2UKPj4+Pj4g ICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKPj4+Pj4gQEAgLTMwNiw4ICszMDYsOCBAQCBzdGF0 aWMgaW50IHR0bV9ib19jbGVhbnVwX3JlZnMoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywK Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgZG1hX3Jlc3ZfdW5sb2NrKGJvLT5iYXNlLnJlc3Yp Owo+Pj4+PiAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmJvLT5iZGV2LT5scnVfbG9jayk7Cj4+ Pj4+IC0gICAgICAgICAgIGxyZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KHJlc3YsIHRy dWUsIGludGVycnVwdGlibGUsCj4+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDMwICogSFopOwo+Pj4+PiArICAgICAgICAgICBscmV0ID0gZG1hX3Jlc3Zf d2FpdF90aW1lb3V0X3VubG9ja2VkKHJlc3YsIHRydWUsIGludGVycnVwdGlibGUsCj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAgKiBIWik7 Cj4+Pj4+ICAgICAgICAgICAgICBpZiAobHJldCA8IDApCj4+Pj4+ICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBscmV0Owo+Pj4+PiBAQCAtNDA5LDggKzQwOSw4IEBAIHN0YXRpYyB2b2lkIHR0 bV9ib19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAg ICAvKiBMYXN0IHJlc29ydCwgaWYgd2UgZmFpbCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZQo+ Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgKiBmZW5jZXMgYmxvY2sgZm9yIHRoZSBCTyB0byBi ZWNvbWUgaWRsZQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgKi8KPj4+Pj4gLSAgICAgICAg ICAgICAgICAgICBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KGJvLT5iYXNlLnJlc3YsIHRydWUs IGZhbHNlLAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMzAgKiBIWik7Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgZG1hX3Jlc3Zfd2FpdF90aW1l b3V0X3VubG9ja2VkKGJvLT5iYXNlLnJlc3YsIHRydWUsIGZhbHNlLAo+Pj4+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCAqIEhaKTsKPj4+Pj4g ICAgICAgICAgICAgIH0KPj4+Pj4gICAgICAgICAgICAgIGlmIChiby0+YmRldi0+ZnVuY3MtPnJl bGVhc2Vfbm90aWZ5KQo+Pj4+PiBAQCAtNDIwLDcgKzQyMCw3IEBAIHN0YXRpYyB2b2lkIHR0bV9i b19yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQo+Pj4+PiAgICAgICAgICAgICAgdHRtX21lbV9p b19mcmVlKGJkZXYsICZiby0+bWVtKTsKPj4+Pj4gICAgICB9Cj4+Pj4+IC0gICBpZiAoIWRtYV9y ZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KGJvLT5iYXNlLnJlc3YsIHRydWUpIHx8Cj4+Pj4+ICsgICBp ZiAoIWRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5sb2NrZWQoYm8tPmJhc2UucmVzdiwgdHJ1ZSkg fHwKPj4+Pj4gICAgICAgICAgIWRtYV9yZXN2X3RyeWxvY2soYm8tPmJhc2UucmVzdikpIHsKPj4+ Pj4gICAgICAgICAgICAgIC8qIFRoZSBCTyBpcyBub3QgaWRsZSwgcmVzdXJyZWN0IGl0IGZvciBk ZWxheWVkIGRlc3Ryb3kgKi8KPj4+Pj4gICAgICAgICAgICAgIHR0bV9ib19mbHVzaF9hbGxfZmVu Y2VzKGJvKTsKPj4+Pj4gQEAgLTExMTYsMTQgKzExMTYsMTQgQEAgaW50IHR0bV9ib193YWl0KHN0 cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4+Pj4+ICAgICAgbG9uZyB0aW1lb3V0ID0gMTUg KiBIWjsKPj4+Pj4gICAgICBpZiAobm9fd2FpdCkgewo+Pj4+PiAtICAgICAgICAgICBpZiAoZG1h X3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3UoYm8tPmJhc2UucmVzdiwgdHJ1ZSkpCj4+Pj4+ICsgICAg ICAgICAgIGlmIChkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3VubG9ja2VkKGJvLT5iYXNlLnJlc3Ys IHRydWUpKQo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPj4+Pj4gICAgICAg ICAgICAgIGVsc2UKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKPj4+ Pj4gICAgICB9Cj4+Pj4+IC0gICB0aW1lb3V0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3JjdShi by0+YmFzZS5yZXN2LCB0cnVlLAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludGVycnVwdGlibGUsIHRpbWVvdXQpOwo+Pj4+PiArICAgdGlt ZW91dCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tlZChiby0+YmFzZS5yZXN2LCB0cnVl LAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRl cnJ1cHRpYmxlLCB0aW1lb3V0KTsKPj4+Pj4gICAgICBpZiAodGltZW91dCA8IDApCj4+Pj4+ICAg ICAgICAgICAgICByZXR1cm4gdGltZW91dDsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS92Z2VtL3ZnZW1fZmVuY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS92Z2VtL3ZnZW1fZmVuY2Uu Ywo+Pj4+PiBpbmRleCAyOTAyZGM2ZTY0ZmFmLi4wMTBhODI0MDVlMzc0IDEwMDY0NAo+Pj4+PiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vdmdlbS92Z2VtX2ZlbmNlLmMKPj4+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL3ZnZW0vdmdlbV9mZW5jZS5jCj4+Pj4+IEBAIC0xNTEsOCArMTUxLDggQEAgaW50 IHZnZW1fZmVuY2VfYXR0YWNoX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4+Pj4+ICAg ICAgLyogQ2hlY2sgZm9yIGEgY29uZmxpY3RpbmcgZmVuY2UgKi8KPj4+Pj4gICAgICByZXN2ID0g b2JqLT5yZXN2Owo+Pj4+PiAtICAgaWYgKCFkbWFfcmVzdl90ZXN0X3NpZ25hbGVkX3JjdShyZXN2 LAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJn LT5mbGFncyAmIFZHRU1fRkVOQ0VfV1JJVEUpKSB7Cj4+Pj4+ICsgICBpZiAoIWRtYV9yZXN2X3Rl c3Rfc2lnbmFsZWRfdW5sb2NrZWQocmVzdiwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhcmctPmZsYWdzICYgVkdFTV9GRU5DRV9XUklURSkpIHsKPj4+Pj4g ICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKPj4+Pj4gICAgICAgICAgICAgIGdvdG8gZXJyX2Zl bmNlOwo+Pj4+PiAgICAgIH0KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aXJ0 aW8vdmlydGdwdV9pb2N0bC5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2lvY3Rs LmMKPj4+Pj4gaW5kZXggNjY5ZjJlZTM5NTE1NC4uYWIwMTBjOGUzMjgxNiAxMDA2NDQKPj4+Pj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2lvY3RsLmMKPj4+Pj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL3ZpcnRpby92aXJ0Z3B1X2lvY3RsLmMKPj4+Pj4gQEAgLTQ1MSwxMCAr NDUxLDEwIEBAIHN0YXRpYyBpbnQgdmlydGlvX2dwdV93YWl0X2lvY3RsKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4+Pj4+ICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsK Pj4+Pj4gICAgICBpZiAoYXJncy0+ZmxhZ3MgJiBWSVJUR1BVX1dBSVRfTk9XQUlUKSB7Cj4+Pj4+ IC0gICAgICAgICAgIHJldCA9IGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfcmN1KG9iai0+cmVzdiwg dHJ1ZSk7Cj4+Pj4+ICsgICAgICAgICAgIHJldCA9IGRtYV9yZXN2X3Rlc3Rfc2lnbmFsZWRfdW5s b2NrZWQob2JqLT5yZXN2LCB0cnVlKTsKPj4+Pj4gICAgICB9IGVsc2Ugewo+Pj4+PiAtICAgICAg ICAgICByZXQgPSBkbWFfcmVzdl93YWl0X3RpbWVvdXRfcmN1KG9iai0+cmVzdiwgdHJ1ZSwgdHJ1 ZSwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1l b3V0KTsKPj4+Pj4gKyAgICAgICAgICAgcmV0ID0gZG1hX3Jlc3Zfd2FpdF90aW1lb3V0X3VubG9j a2VkKG9iai0+cmVzdiwgdHJ1ZSwgdHJ1ZSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpOwo+Pj4+PiAgICAgIH0KPj4+Pj4gICAg ICBpZiAocmV0ID09IDApCj4+Pj4+ICAgICAgICAgICAgICByZXQgPSAtRUJVU1k7Cj4+Pj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9iby5jIGIvZHJpdmVycy9n cHUvZHJtL3Ztd2dmeC92bXdnZnhfYm8uYwo+Pj4+PiBpbmRleCAwNGRkNDljNGMyNTcyLi4xOWUx Y2UyMzg0MmE5IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dm eF9iby5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2JvLmMKPj4+ Pj4gQEAgLTc0Myw3ICs3NDMsNyBAQCBzdGF0aWMgaW50IHZtd191c2VyX2JvX3N5bmNjcHVfZ3Jh YihzdHJ1Y3Qgdm13X3VzZXJfYnVmZmVyX29iamVjdCAqdXNlcl9ibywKPj4+Pj4gICAgICBpZiAo ZmxhZ3MgJiBkcm1fdm13X3N5bmNjcHVfYWxsb3dfY3MpIHsKPj4+Pj4gICAgICAgICAgICAgIGxv bmcgbHJldDsKPj4+Pj4gLSAgICAgICAgICAgbHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF9y Y3UKPj4+Pj4gKyAgICAgICAgICAgbHJldCA9IGRtYV9yZXN2X3dhaXRfdGltZW91dF91bmxvY2tl ZAo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAoYm8tPmJhc2UucmVzdiwgdHJ1ZSwgdHJ1ZSwK Pj4+Pj4gICAgICAgICAgICAgICAgICAgICAgIG5vbmJsb2NrID8gMCA6IE1BWF9TQ0hFRFVMRV9U SU1FT1VUKTsKPj4+Pj4gICAgICAgICAgICAgIGlmICghbHJldCkKPj4+Pj4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvbGludXgvZG1hLXJlc3YuaCBiL2luY2x1ZGUvbGludXgvZG1hLXJlc3YuaAo+Pj4+ PiBpbmRleCBkNDRhNzdlOGE3ZTM0Li45OWNmYjdhZjk2NmI4IDEwMDY0NAo+Pj4+PiAtLS0gYS9p bmNsdWRlL2xpbnV4L2RtYS1yZXN2LmgKPj4+Pj4gKysrIGIvaW5jbHVkZS9saW51eC9kbWEtcmVz di5oCj4+Pj4+IEBAIC0yNDYsNyArMjQ2LDcgQEAgZG1hX3Jlc3ZfZ2V0X2V4Y2woc3RydWN0IGRt YV9yZXN2ICpvYmopCj4+Pj4+ICAgICB9Cj4+Pj4+ICAgICAvKioKPj4+Pj4gLSAqIGRtYV9yZXN2 X2dldF9leGNsX3JjdSAtIGdldCB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0J3MKPj4+Pj4gKyAqIGRt YV9yZXN2X2dldF9leGNsX3VubG9ja2VkIC0gZ2V0IHRoZSByZXNlcnZhdGlvbiBvYmplY3Qncwo+ Pj4+PiAgICAgICogZXhjbHVzaXZlIGZlbmNlLCB3aXRob3V0IGxvY2sgaGVsZC4KPj4+Pj4gICAg ICAqIEBvYmo6IHRoZSByZXNlcnZhdGlvbiBvYmplY3QKPj4+Pj4gICAgICAqCj4+Pj4+IEBAIC0y NTcsNyArMjU3LDcgQEAgZG1hX3Jlc3ZfZ2V0X2V4Y2woc3RydWN0IGRtYV9yZXN2ICpvYmopCj4+ Pj4+ICAgICAgKiBUaGUgZXhjbHVzaXZlIGZlbmNlIG9yIE5VTEwgaWYgbm9uZQo+Pj4+PiAgICAg ICovCj4+Pj4+ICAgICBzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfZmVuY2UgKgo+Pj4+PiAtZG1h X3Jlc3ZfZ2V0X2V4Y2xfcmN1KHN0cnVjdCBkbWFfcmVzdiAqb2JqKQo+Pj4+PiArZG1hX3Jlc3Zf Z2V0X2V4Y2xfdW5sb2NrZWQoc3RydWN0IGRtYV9yZXN2ICpvYmopCj4+Pj4+ICAgICB7Cj4+Pj4+ ICAgICAgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7Cj4+Pj4+IEBAIC0yNzgsMTYgKzI3OCwxNiBA QCB2b2lkIGRtYV9yZXN2X2FkZF9zaGFyZWRfZmVuY2Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPj4+Pj4gICAgIHZvaWQgZG1hX3Jlc3ZfYWRkX2V4Y2xf ZmVuY2Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKTsKPj4+ Pj4gLWludCBkbWFfcmVzdl9nZXRfZmVuY2VzX3JjdShzdHJ1Y3QgZG1hX3Jlc3YgKm9iaiwKPj4+ Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKnBmZW5jZV9leGNs LAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcHNoYXJlZF9jb3VudCwK Pj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRtYV9mZW5jZSAqKipwc2hhcmVk KTsKPj4+Pj4gK2ludCBkbWFfcmVzdl9nZXRfZmVuY2VzX3VubG9ja2VkKHN0cnVjdCBkbWFfcmVz diAqb2JqLAo+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbWFfZmVu Y2UgKipwZmVuY2VfZXhjbCwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCAqcHNoYXJlZF9jb3VudCwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZG1hX2ZlbmNlICoqKnBzaGFyZWQpOwo+Pj4+PiAgICAgaW50IGRtYV9yZXN2X2NvcHlf ZmVuY2VzKHN0cnVjdCBkbWFfcmVzdiAqZHN0LCBzdHJ1Y3QgZG1hX3Jlc3YgKnNyYyk7Cj4+Pj4+ IC1sb25nIGRtYV9yZXN2X3dhaXRfdGltZW91dF9yY3Uoc3RydWN0IGRtYV9yZXN2ICpvYmosIGJv b2wgd2FpdF9hbGwsIGJvb2wgaW50ciwKPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKPj4+Pj4gK2xvbmcgZG1hX3Jlc3Zfd2FpdF90aW1lb3V0 X3VubG9ja2VkKHN0cnVjdCBkbWFfcmVzdiAqb2JqLCBib29sIHdhaXRfYWxsLCBib29sIGludHIs Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0aW1l b3V0KTsKPj4+Pj4gLWJvb2wgZG1hX3Jlc3ZfdGVzdF9zaWduYWxlZF9yY3Uoc3RydWN0IGRtYV9y ZXN2ICpvYmosIGJvb2wgdGVzdF9hbGwpOwo+Pj4+PiArYm9vbCBkbWFfcmVzdl90ZXN0X3NpZ25h bGVkX3VubG9ja2VkKHN0cnVjdCBkbWFfcmVzdiAqb2JqLCBib29sIHRlc3RfYWxsKTsKPj4+Pj4g ICAgICNlbmRpZiAvKiBfTElOVVhfUkVTRVJWQVRJT05fSCAqLwo+CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK