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,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 5331AC4743C for ; Wed, 23 Jun 2021 13:45:02 +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 1227461075 for ; Wed, 23 Jun 2021 13:45:02 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1227461075 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CA0A16E8E3; Wed, 23 Jun 2021 13:44:59 +0000 (UTC) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2066.outbound.protection.outlook.com [40.107.237.66]) by gabe.freedesktop.org (Postfix) with ESMTPS id 980A56E8E3; Wed, 23 Jun 2021 13:44:58 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eQKuueSxNykalO8ZWOYl8kVxgN1kEvJ9SLqb46bNJrWSdCJrmpm24Jj1Cf3xzx9BsIPXxnx//FHTJHq/Scd/yYfxmTNXEkU2a1FDheyoEZm7Rtl4m89RCdXptKOscox5UlNbagvOie84390wXLf7ekOYV1oUNZCXoV0m33ZZlH83IvfhfTwZc6cCLKOeGdQKAKmaX+VLoaS01kFDkt3QJGD6GaAEbT43NoltE5zLocS46Id3OqbOu3lKmaCdDNZjTQSVjpyIwZh071Ey2GFj50fxMKi2P1uA53YJrbliANgMZbYz6n+xYd+fTQTsFkMfKMqH2hJEXckn+TkgdjR7qg== 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=PTkoOBivQfvNAjKtkSD/Lji4kNo8/rWRMZi+Y8oL5ko=; b=bOfkDAY4AzFOKwJUNkw/Wm3I8qOPKr0UBgI5lo6UZ2vmszRBxGms66f1j8VUQba60o0NOL+X31GCwpp/fOvs4K6CSpqU8tK3iecyDPtPW9g7MDBUdxyvYuWYosJh/+9/nCfR5OaNK9uu2dsDqnkXsXty1RCxQjQiiwLT8gCBY2JJfzGXNbYehAZ2ft3M1iMN3yebYeq/OVI2ndSQzdSb3CpkRxD4oJ3JpOrmfyASrl+643bYYoFeGKVFbUgWAHdl74FiVr0+07raQkX0cbbDZSZE1X23aZ3z38Xsf+hukWqV6ifD9TGyQKPAAMFzqfjfrymdWTfNtnO6BtUW59F6ug== 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=PTkoOBivQfvNAjKtkSD/Lji4kNo8/rWRMZi+Y8oL5ko=; b=hiouip++u9WypzR0a0kIuNnCAOURKX2wl3z7LyyHc7Dx2/LizF1GOlDqis/xr9n4YIr1IQH0c3cpceYvjOUdiRejbGd3nZMxDwiKX7eChmWTAzTnc4pwBz6NVKgpy4iq+xlIxFCXriAm5TN47QFkswmYhEFDIOdv59MIU3Ms3/A= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by MN2PR12MB4440.namprd12.prod.outlook.com (2603:10b6:208:26e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Wed, 23 Jun 2021 13:44:56 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6c9e:1e08:7617:f756]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6c9e:1e08:7617:f756%5]) with mapi id 15.20.4242.024; Wed, 23 Jun 2021 13:44:56 +0000 Subject: Re: [PATCH 15/15] RFC: drm/amdgpu: Implement a proper implicit fencing uapi To: Bas Nieuwenhuizen References: <20210622165511.3169559-1-daniel.vetter@ffwll.ch> <20210622165511.3169559-16-daniel.vetter@ffwll.ch> <3bf45006-4256-763d-601b-3a25a7057820@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <421cb10d-92a7-0780-3d38-d4cabd008c0c@amd.com> Date: Wed, 23 Jun 2021 15:44:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 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:871f:87e2:f394:e667] X-ClientProxiedBy: PR0P264CA0280.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::28) 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:871f:87e2:f394:e667] (2a02:908:1252:fb60:871f:87e2:f394:e667) by PR0P264CA0280.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Wed, 23 Jun 2021 13:44:53 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4b2ff45a-813e-4872-d891-08d9364d15ef X-MS-TrafficTypeDiagnostic: MN2PR12MB4440: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5bpZZihSpZxXGsc7/hRHPOjHItC26w293DSs/ZCctxV7JuVIhVD74VprVpepMbzp0NSDN2AdBpVhP+ARr5KbbeUk8enkhM9MczhmNPl+U5r6eFGuElZPShzngEoE8OzTD20W0ixZvNz3z5X0wqokHHcuI/mif8Jh7UleqmW8i587bFND16XscBmrs/+qeHqeaJE3EvBuCBFjClDTZ7OsK014eZAJgDGK/dbpIblWBobZtI18SlQAkWYn7tRMvRUIVW5t8qEMNoimhteY2XBZ19TSz19ezwChKsRCwcCgOmblsJWL0P0SFhYZXEgiq9xYnAUxnnebNITaAqc+yYH7xuwaKy3mLUq4JnamVhjblsF85zxeAYG6lOGbSwQD2vux2xmn2InZj05SR3JWLe8Y23ZyFOSALBeuHflfJD60jZCpZC/HyjG0nEAVbly/quaGOWlVeEJDG/omf20iYADY2a1H6292JEuRKx9Ulwi1VigVAqTcVAdULu+DYQFhU7dF2CF1qk4awTRKDeIMH6s0dzr+fghbESO0Q2UzgGbPhL967tW5jlSpAh0rECQKWqYI8wFnl4HsKbCKK+G+qfenerJ6NdmQ/+b7PndcdQBFQlTn0bd9EJ+3Bafa9DOJlggxwlbAqEFu5FpmEY+/RPSBwQyD7Z2Pe/bDiTJMn8MLzT7RpQmdLCyAQeluOLHOmRwDVe2+7FKN1fm1oBMid+/zKYOwBpuPg0Z2zGYI+yNuodegi5tWFxYKJbs8S3wfsnI1CvK23u56SDZ39mTZLlNLRsv2yXD5U8qEb0xUF184jhVgKX86vY4nD92PetBNv39wL31WJ7vfm+xCrg16fyew++bVn4fkWCzAuPqG+UKB7Cg4fXilSsoRGczL+TROSPEpuhpm9eVAkkrR5PBjpYivEw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(39860400002)(136003)(376002)(346002)(366004)(45080400002)(478600001)(6916009)(66476007)(66946007)(66556008)(966005)(30864003)(31686004)(54906003)(83380400001)(66574015)(36756003)(316002)(7416002)(5660300002)(38100700002)(31696002)(86362001)(186003)(53546011)(16526019)(2616005)(2906002)(8936002)(6666004)(8676002)(6486002)(4326008)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MlZLZ01FQlJycUNCNk9BWG51OXlKd1Q1OG5XMUZCTnF2TkVNVFNjV2xHbXc0?= =?utf-8?B?ZSttenNrbm9hMWp5TE1mL1ZGQVlMTTBCOVdoVDlVa0s4QlQ1VEo2RE0vdnlX?= =?utf-8?B?Vm5BQ3ZiTmhEQlVORDhMT2lDODNqc1JxcTBZaHpja3RkK0pRakNNclNyb05n?= =?utf-8?B?WC9JNFRhTElxS216QktRYzBScFArUVFJTGE3NERaSXQ3cUdFOGE5akFUamFB?= =?utf-8?B?SjhEOXdIeXI4dXNZRzh5cmZuSDhza1hBQWR3dnVPOGJ3STBzcDNmeU9xN3g5?= =?utf-8?B?eTVtdWpBek5IZ2dmREZLWElsSWszY2RZdUFvU05XVDdXK1BkT0JQRFFKV0h1?= =?utf-8?B?VFZyTlVPc00zYkRmNVFXcmFheVBJMUx2QXpqRm5qclBLVGx3allwL2lDZUlx?= =?utf-8?B?RExyNFpoOXJEUTBUaUNPdndPSTllOEhpbUZlc2I4R084d0wyNStHQzBkZzd3?= =?utf-8?B?eTRxV3lobVIwYzlTWFJZNGRrdjZuRnpCWkR3WnZwOGlNL2lPZ0lta05wNFhz?= =?utf-8?B?Qnd2ZE9BNlkyeGtEcEhxS0dmMTFxK2xsbzdHeDJzT1o2OUMxUzNhSGdvSEJ0?= =?utf-8?B?elRRRFdWemZneERoNytndWdueUdLS3FoTGZZM0hnUWt2OU5WdzIxd0hSWkZi?= =?utf-8?B?UDVxMExLZWRHTko2c3F1OHNGVkdRQUFTWlJTcDN2QlFkSGxPS1JWcndjc2Vv?= =?utf-8?B?bVdLT3lINFZzQnN3V2VnM3JkZXdDc1VvVWU3M2Q4Q0VGaStwbzBkaTkzelJY?= =?utf-8?B?YWIyTnJPRkFSdU1GaUpLMDMvUVV5WVh3SnJZMHdjSHNWK21Qa0dEeFQvUDlV?= =?utf-8?B?SGFGZC9PWVo3NWVHazE5VnE0UklYd3dzdS9HZnRBTGhrMjhVK2NmaVp4dld4?= =?utf-8?B?R1ZmVjFzL2tuOFhYOERTWlM3YTNrNU55Vnl2eXNRcStPV0Z5Vm01RVVTZU1G?= =?utf-8?B?cUh0cVUvcit5WFc3ZjkwTXFZR1FqbWhJN2ZCVzAwSGZUT3FEQ1d5R2JzeG1y?= =?utf-8?B?M3M0R1hieW9CUS9oTm0xdm9TbGZ1eFBXNndaZFhPZWFUajl2bytXSGw4SWFJ?= =?utf-8?B?czBEcE00ZStZTnBUNHUvWkFKR0xwS3lCZ2FFS0d5UWpOWHMxMnFLVWlhbkFx?= =?utf-8?B?YnJlQjNuM3NjclFZNTB4TE85ejZYY0RMR2RkZms4SHgydTgxYnpEckkyRjJ5?= =?utf-8?B?Z2tJcHZiblZuUnpkQjdoc1FURFA3bGRUNk5GcWtVclZzOUZWK1hWd0d4alFK?= =?utf-8?B?dnlHVERYK3FVcHNscmNjOWNTcldtUGpsdXhtbzEweWc1MkhDeGM2cDhkd3JN?= =?utf-8?B?ZlZlNkN1bjFOOGw5MVJiYnE5TWd5MXkxdFcxeTZhZFpLc2kwYVZOMlFWMnFj?= =?utf-8?B?ak82U0RtQ05GaW83Ylp1N1RhaG9nUmpwK3Q2VVFRTGxiUVVQeDhFc3hGUnNt?= =?utf-8?B?ZDR6T05jbWpHUzhQWldFSjBacWluWGlENDhqUFp3VXN1Z3dFRTRubWxWcjd4?= =?utf-8?B?ZFBTMDliVHZsZE9Yem1JMjlYY29Idm9GMGErSzVtTUp0MmR4MzJUU25EcEFo?= =?utf-8?B?bnZwYzhqMW0wZTltT1hMeC94dlluZndaSmV1WUk5SzkrQjdNTnU2aGdXR2ln?= =?utf-8?B?VmdMdUtnRG5MM3NLMVhGS3R6USs3MGRwWG5nK0E3ZFJkVkoyam5waXZQdGwy?= =?utf-8?B?T3RYNXNWVk9hdUxKbmV3MlRlVDFaVm12Wk45Z2d1VW05SnhwOEZQdlIxN2Zi?= =?utf-8?B?N2t2K1BKSis4eGJFdllDUk90NzB6VU9lcnNBTzE5SXBFZWo0a1prekQreFZy?= =?utf-8?B?TnFXODhqNm1ydXNQc3JMdzJwT2FvSlVqTythT3JGSEdmOCtmK2RXdmdnRmh0?= =?utf-8?Q?lcaEs8tuf+3VX?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b2ff45a-813e-4872-d891-08d9364d15ef X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2021 13:44:56.1895 (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: C9Dod5at7AGAYimwvik6fw2obQ8L1MnQGS91edbSCLH6gYnAe2kz773VKloo+CHU X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4440 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: Rob Clark , Daniel Stone , Daniel Vetter , Intel Graphics Development , Kevin Wang , DRI Development , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Luben Tuikov , "Kristian H . Kristensen" , Chen Li , Daniel Vetter , Alex Deucher , mesa-dev , =?UTF-8?Q?Michel_D=c3=a4nzer?= , Dennis Li , Deepak R Varma Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Am 23.06.21 um 15:38 schrieb Bas Nieuwenhuizen: > On Wed, Jun 23, 2021 at 2:59 PM Christian König > wrote: >> Am 23.06.21 um 14:18 schrieb Daniel Vetter: >>> On Wed, Jun 23, 2021 at 11:45 AM Bas Nieuwenhuizen >>> wrote: >>>> On Tue, Jun 22, 2021 at 6:55 PM Daniel Vetter wrote: >>>>> WARNING: Absolutely untested beyond "gcc isn't dying in agony". >>>>> >>>>> Implicit fencing done properly needs to treat the implicit fencing >>>>> slots like a funny kind of IPC mailbox. In other words it needs to be >>>>> explicitly. This is the only way it will mesh well with explicit >>>>> fencing userspace like vk, and it's also the bare minimum required to >>>>> be able to manage anything else that wants to use the same buffer on >>>>> multiple engines in parallel, and still be able to share it through >>>>> implicit sync. >>>>> >>>>> amdgpu completely lacks such an uapi. Fix this. >>>>> >>>>> Luckily the concept of ignoring implicit fences exists already, and >>>>> takes care of all the complexities of making sure that non-optional >>>>> fences (like bo moves) are not ignored. This support was added in >>>>> >>>>> commit 177ae09b5d699a5ebd1cafcee78889db968abf54 >>>>> Author: Andres Rodriguez >>>>> Date: Fri Sep 15 20:44:06 2017 -0400 >>>>> >>>>> drm/amdgpu: introduce AMDGPU_GEM_CREATE_EXPLICIT_SYNC v2 >>>>> >>>>> Unfortuantely it's the wrong semantics, because it's a bo flag and >>>>> disables implicit sync on an allocated buffer completely. >>>>> >>>>> We _do_ want implicit sync, but control it explicitly. For this we >>>>> need a flag on the drm_file, so that a given userspace (like vulkan) >>>>> can manage the implicit sync slots explicitly. The other side of the >>>>> pipeline (compositor, other process or just different stage in a media >>>>> pipeline in the same process) can then either do the same, or fully >>>>> participate in the implicit sync as implemented by the kernel by >>>>> default. >>>>> >>>>> By building on the existing flag for buffers we avoid any issues with >>>>> opening up additional security concerns - anything this new flag here >>>>> allows is already. >>>>> >>>>> All drivers which supports this concept of a userspace-specific >>>>> opt-out of implicit sync have a flag in their CS ioctl, but in reality >>>>> that turned out to be a bit too inflexible. See the discussion below, >>>>> let's try to do a bit better for amdgpu. >>>>> >>>>> This alone only allows us to completely avoid any stalls due to >>>>> implicit sync, it does not yet allow us to use implicit sync as a >>>>> strange form of IPC for sync_file. >>>>> >>>>> For that we need two more pieces: >>>>> >>>>> - a way to get the current implicit sync fences out of a buffer. Could >>>>> be done in a driver ioctl, but everyone needs this, and generally a >>>>> dma-buf is involved anyway to establish the sharing. So an ioctl on >>>>> the dma-buf makes a ton more sense: >>>>> >>>>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore.kernel.org%2Fdri-devel%2F20210520190007.534046-4-jason%40jlekstrand.net%2F&data=04%7C01%7Cchristian.koenig%40amd.com%7Ca401fc4551f045c95d8808d9364c38f6%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637600523287217723%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=L8KCz8711Y2qZx0%2FJWT6HSg4o6OMhn%2BC4U2IR06nViE%3D&reserved=0 >>>>> >>>>> Current drivers in upstream solves this by having the opt-out flag >>>>> on their CS ioctl. This has the downside that very often the CS >>>>> which must actually stall for the implicit fence is run a while >>>>> after the implicit fence point was logically sampled per the api >>>>> spec (vk passes an explicit syncobj around for that afaiui), and so >>>>> results in oversync. Converting the implicit sync fences into a >>>>> snap-shot sync_file is actually accurate. >>>>> >>>>> - Simillar we need to be able to set the exclusive implicit fence. >>>>> Current drivers again do this with a CS ioctl flag, with again the >>>>> same problems that the time the CS happens additional dependencies >>>>> have been added. An explicit ioctl to only insert a sync_file (while >>>>> respecting the rules for how exclusive and shared fence slots must >>>>> be update in struct dma_resv) is much better. This is proposed here: >>>>> >>>>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore.kernel.org%2Fdri-devel%2F20210520190007.534046-5-jason%40jlekstrand.net%2F&data=04%7C01%7Cchristian.koenig%40amd.com%7Ca401fc4551f045c95d8808d9364c38f6%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637600523287227719%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=8Ws%2B573T5rj9Bs08%2BQB5CbIAsWgo36hYiH%2Fd0dPcJeg%3D&reserved=0 >>>>> >>>>> These three pieces together allow userspace to fully control implicit >>>>> fencing and remove all unecessary stall points due to them. >>>>> >>>>> Well, as much as the implicit fencing model fundamentally allows: >>>>> There is only one set of fences, you can only choose to sync against >>>>> only writers (exclusive slot), or everyone. Hence suballocating >>>>> multiple buffers or anything else like this is fundamentally not >>>>> possible, and can only be fixed by a proper explicit fencing model. >>>>> >>>>> Aside from that caveat this model gets implicit fencing as closely to >>>>> explicit fencing semantics as possible: >>>>> >>>>> On the actual implementation I opted for a simple setparam ioctl, no >>>>> locking (just atomic reads/writes) for simplicity. There is a nice >>>>> flag parameter in the VM ioctl which we could use, except: >>>>> - it's not checked, so userspace likely passes garbage >>>>> - there's already a comment that userspace _does_ pass garbage in the >>>>> priority field >>>>> So yeah unfortunately this flag parameter for setting vm flags is >>>>> useless, and we need to hack up a new one. >>>>> >>>>> v2: Explain why a new SETPARAM (Jason) >>>>> >>>>> v3: Bas noticed I forgot to hook up the dependency-side shortcut. We >>>>> need both, or this doesn't do much. >>>>> >>>>> v4: Rebase over the amdgpu patch to always set the implicit sync >>>>> fences. >>>> So I think there is still a case missing in this implementation. >>>> Consider these 3 cases >>>> >>>> (format: a->b: b waits on a. Yes, I know arrows are hard) >>>> >>>> explicit->explicit: This doesn't wait now, which is good >>>> Implicit->explicit: This doesn't wait now, which is good >>>> explicit->implicit : This still waits as the explicit submission still >>>> adds shared fences and most things that set an exclusive fence for >>>> implicit sync will hence wait on it. >>>> >>>> This is probably good enough for what radv needs now but also sounds >>>> like a risk wrt baking in new uapi behavior that we don't want to be >>>> the end result. >>>> >>>> Within AMDGPU this is probably solvable in two ways: >>>> >>>> 1) Downgrade AMDGPU_SYNC_NE_OWNER to AMDGPU_SYNC_EXPLICIT for shared fences. >>> I'm not sure that works. I think the right fix is that radeonsi also >>> switches to this model, with maybe a per-bo CS flag to set indicate >>> write access, to cut down on the number of ioctls that are needed >>> otherwise on shared buffers. This per-bo flag would essentially select >>> between SYNC_NE_OWNER and SYNC_EXPLICIT on a per-buffer basis. >> Yeah, but I'm still not entirely sure why that approach isn't sufficient? >> >> Problem with the per context or per vm flag is that you then don't get >> any implicit synchronization any more when another process starts using >> the buffer. > That is exactly what I want for Vulkan :) Yeah, but as far as I know this is not something we can do. See we have use cases like screen capture and debug which rely on that behavior. The only thing we can do is to say on a per buffer flag that a buffer should not participate in implicit sync at all. Regards, Christian. >>> The current amdgpu uapi just doesn't allow any other model without an >>> explicit opt-in. So current implicit sync userspace just has to >>> oversync, there's not much choice. >>> >>>> 2) Have an EXPLICIT fence owner that is used for explicit submissions >>>> that is ignored by AMDGPU_SYNC_NE_OWNER. >>>> >>>> But this doesn't solve cross-driver interactions here. >>> Yeah cross-driver is still entirely unsolved, because >>> amdgpu_bo_explicit_sync() on the bo didn't solve that either. >> Hui? You have lost me. Why is that still unsolved? > The part we're trying to solve with this patch is Vulkan should not > participate in any implicit sync at all wrt submissions (and then > handle the implicit sync for WSI explicitly using the fence > import/export stuff that Jason wrote). As long we add shared fences to > the dma_resv we participate in implicit sync (at the level of an > implicit sync read) still, at least from the perspective of later jobs > waiting on these fences. > >> Regards, >> Christian. >> >>> -Daniel >>> >>>>> Cc: mesa-dev@lists.freedesktop.org >>>>> Cc: Bas Nieuwenhuizen >>>>> Cc: Dave Airlie >>>>> Cc: Rob Clark >>>>> Cc: Kristian H. Kristensen >>>>> Cc: Michel Dänzer >>>>> Cc: Daniel Stone >>>>> Cc: Sumit Semwal >>>>> Cc: "Christian König" >>>>> Cc: Alex Deucher >>>>> Cc: Daniel Vetter >>>>> Cc: Deepak R Varma >>>>> Cc: Chen Li >>>>> Cc: Kevin Wang >>>>> Cc: Dennis Li >>>>> Cc: Luben Tuikov >>>>> Cc: linaro-mm-sig@lists.linaro.org >>>>> Signed-off-by: Daniel Vetter >>>>> --- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 7 +++++-- >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 21 +++++++++++++++++++++ >>>>> drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h | 6 ++++++ >>>>> include/uapi/drm/amdgpu_drm.h | 10 ++++++++++ >>>>> 4 files changed, 42 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c >>>>> index 65df34c17264..c5386d13eb4a 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c >>>>> @@ -498,6 +498,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, >>>>> struct amdgpu_bo *gds; >>>>> struct amdgpu_bo *gws; >>>>> struct amdgpu_bo *oa; >>>>> + bool no_implicit_sync = READ_ONCE(fpriv->vm.no_implicit_sync); >>>>> int r; >>>>> >>>>> INIT_LIST_HEAD(&p->validated); >>>>> @@ -577,7 +578,8 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p, >>>>> >>>>> e->bo_va = amdgpu_vm_bo_find(vm, bo); >>>>> >>>>> - if (bo->tbo.base.dma_buf && !amdgpu_bo_explicit_sync(bo)) { >>>>> + if (bo->tbo.base.dma_buf && >>>>> + !(no_implicit_sync || amdgpu_bo_explicit_sync(bo))) { >>>>> e->chain = dma_fence_chain_alloc(); >>>>> if (!e->chain) { >>>>> r = -ENOMEM; >>>>> @@ -649,6 +651,7 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p) >>>>> { >>>>> struct amdgpu_fpriv *fpriv = p->filp->driver_priv; >>>>> struct amdgpu_bo_list_entry *e; >>>>> + bool no_implicit_sync = READ_ONCE(fpriv->vm.no_implicit_sync); >>>>> int r; >>>>> >>>>> list_for_each_entry(e, &p->validated, tv.head) { >>>>> @@ -656,7 +659,7 @@ static int amdgpu_cs_sync_rings(struct amdgpu_cs_parser *p) >>>>> struct dma_resv *resv = bo->tbo.base.resv; >>>>> enum amdgpu_sync_mode sync_mode; >>>>> >>>>> - sync_mode = amdgpu_bo_explicit_sync(bo) ? >>>>> + sync_mode = no_implicit_sync || amdgpu_bo_explicit_sync(bo) ? >>>>> AMDGPU_SYNC_EXPLICIT : AMDGPU_SYNC_NE_OWNER; >>>>> r = amdgpu_sync_resv(p->adev, &p->job->sync, resv, sync_mode, >>>>> &fpriv->vm); >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >>>>> index c080ba15ae77..f982626b5328 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >>>>> @@ -1724,6 +1724,26 @@ int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv) >>>>> return 0; >>>>> } >>>>> >>>>> +int amdgpu_setparam_ioctl(struct drm_device *dev, void *data, >>>>> + struct drm_file *filp) >>>>> +{ >>>>> + struct drm_amdgpu_setparam *setparam = data; >>>>> + struct amdgpu_fpriv *fpriv = filp->driver_priv; >>>>> + >>>>> + switch (setparam->param) { >>>>> + case AMDGPU_SETPARAM_NO_IMPLICIT_SYNC: >>>>> + if (setparam->value) >>>>> + WRITE_ONCE(fpriv->vm.no_implicit_sync, true); >>>>> + else >>>>> + WRITE_ONCE(fpriv->vm.no_implicit_sync, false); >>>>> + break; >>>>> + default: >>>>> + return -EINVAL; >>>>> + } >>>>> + >>>>> + return 0; >>>>> +} >>>>> + >>>>> const struct drm_ioctl_desc amdgpu_ioctls_kms[] = { >>>>> DRM_IOCTL_DEF_DRV(AMDGPU_GEM_CREATE, amdgpu_gem_create_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), >>>>> DRM_IOCTL_DEF_DRV(AMDGPU_CTX, amdgpu_ctx_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), >>>>> @@ -1742,6 +1762,7 @@ const struct drm_ioctl_desc amdgpu_ioctls_kms[] = { >>>>> DRM_IOCTL_DEF_DRV(AMDGPU_GEM_VA, amdgpu_gem_va_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), >>>>> DRM_IOCTL_DEF_DRV(AMDGPU_GEM_OP, amdgpu_gem_op_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), >>>>> DRM_IOCTL_DEF_DRV(AMDGPU_GEM_USERPTR, amdgpu_gem_userptr_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), >>>>> + DRM_IOCTL_DEF_DRV(AMDGPU_SETPARAM, amdgpu_setparam_ioctl, DRM_AUTH|DRM_RENDER_ALLOW), >>>>> }; >>>>> >>>>> static const struct drm_driver amdgpu_kms_driver = { >>>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h >>>>> index ddb85a85cbba..0e8c440c6303 100644 >>>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h >>>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h >>>>> @@ -321,6 +321,12 @@ struct amdgpu_vm { >>>>> bool bulk_moveable; >>>>> /* Flag to indicate if VM is used for compute */ >>>>> bool is_compute_context; >>>>> + /* >>>>> + * Flag to indicate whether implicit sync should always be skipped on >>>>> + * this context. We do not care about races at all, userspace is allowed >>>>> + * to shoot itself with implicit sync to its fullest liking. >>>>> + */ >>>>> + bool no_implicit_sync; >>>>> }; >>>>> >>>>> struct amdgpu_vm_manager { >>>>> diff --git a/include/uapi/drm/amdgpu_drm.h b/include/uapi/drm/amdgpu_drm.h >>>>> index 0cbd1540aeac..9eae245c14d6 100644 >>>>> --- a/include/uapi/drm/amdgpu_drm.h >>>>> +++ b/include/uapi/drm/amdgpu_drm.h >>>>> @@ -54,6 +54,7 @@ extern "C" { >>>>> #define DRM_AMDGPU_VM 0x13 >>>>> #define DRM_AMDGPU_FENCE_TO_HANDLE 0x14 >>>>> #define DRM_AMDGPU_SCHED 0x15 >>>>> +#define DRM_AMDGPU_SETPARAM 0x16 >>>>> >>>>> #define DRM_IOCTL_AMDGPU_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_CREATE, union drm_amdgpu_gem_create) >>>>> #define DRM_IOCTL_AMDGPU_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_MMAP, union drm_amdgpu_gem_mmap) >>>>> @@ -71,6 +72,7 @@ extern "C" { >>>>> #define DRM_IOCTL_AMDGPU_VM DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_VM, union drm_amdgpu_vm) >>>>> #define DRM_IOCTL_AMDGPU_FENCE_TO_HANDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FENCE_TO_HANDLE, union drm_amdgpu_fence_to_handle) >>>>> #define DRM_IOCTL_AMDGPU_SCHED DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SCHED, union drm_amdgpu_sched) >>>>> +#define DRM_IOCTL_AMDGPU_SETPARAM DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SETPARAM, struct drm_amdgpu_setparam) >>>>> >>>>> /** >>>>> * DOC: memory domains >>>>> @@ -306,6 +308,14 @@ union drm_amdgpu_sched { >>>>> struct drm_amdgpu_sched_in in; >>>>> }; >>>>> >>>>> +#define AMDGPU_SETPARAM_NO_IMPLICIT_SYNC 1 >>>>> + >>>>> +struct drm_amdgpu_setparam { >>>>> + /* AMDGPU_SETPARAM_* */ >>>>> + __u32 param; >>>>> + __u32 value; >>>>> +}; >>>>> + >>>>> /* >>>>> * This is not a reliable API and you should expect it to fail for any >>>>> * number of reasons and have fallback path that do not use userptr to >>>>> -- >>>>> 2.32.0.rc2 >>>>> >>> 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.1 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0C53AC4743C for ; Wed, 23 Jun 2021 13:45:07 +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 A2B7860720 for ; Wed, 23 Jun 2021 13:45:06 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A2B7860720 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 556FB6E8EB; Wed, 23 Jun 2021 13:45:00 +0000 (UTC) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2066.outbound.protection.outlook.com [40.107.237.66]) by gabe.freedesktop.org (Postfix) with ESMTPS id 980A56E8E3; Wed, 23 Jun 2021 13:44:58 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eQKuueSxNykalO8ZWOYl8kVxgN1kEvJ9SLqb46bNJrWSdCJrmpm24Jj1Cf3xzx9BsIPXxnx//FHTJHq/Scd/yYfxmTNXEkU2a1FDheyoEZm7Rtl4m89RCdXptKOscox5UlNbagvOie84390wXLf7ekOYV1oUNZCXoV0m33ZZlH83IvfhfTwZc6cCLKOeGdQKAKmaX+VLoaS01kFDkt3QJGD6GaAEbT43NoltE5zLocS46Id3OqbOu3lKmaCdDNZjTQSVjpyIwZh071Ey2GFj50fxMKi2P1uA53YJrbliANgMZbYz6n+xYd+fTQTsFkMfKMqH2hJEXckn+TkgdjR7qg== 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=PTkoOBivQfvNAjKtkSD/Lji4kNo8/rWRMZi+Y8oL5ko=; b=bOfkDAY4AzFOKwJUNkw/Wm3I8qOPKr0UBgI5lo6UZ2vmszRBxGms66f1j8VUQba60o0NOL+X31GCwpp/fOvs4K6CSpqU8tK3iecyDPtPW9g7MDBUdxyvYuWYosJh/+9/nCfR5OaNK9uu2dsDqnkXsXty1RCxQjQiiwLT8gCBY2JJfzGXNbYehAZ2ft3M1iMN3yebYeq/OVI2ndSQzdSb3CpkRxD4oJ3JpOrmfyASrl+643bYYoFeGKVFbUgWAHdl74FiVr0+07raQkX0cbbDZSZE1X23aZ3z38Xsf+hukWqV6ifD9TGyQKPAAMFzqfjfrymdWTfNtnO6BtUW59F6ug== 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=PTkoOBivQfvNAjKtkSD/Lji4kNo8/rWRMZi+Y8oL5ko=; b=hiouip++u9WypzR0a0kIuNnCAOURKX2wl3z7LyyHc7Dx2/LizF1GOlDqis/xr9n4YIr1IQH0c3cpceYvjOUdiRejbGd3nZMxDwiKX7eChmWTAzTnc4pwBz6NVKgpy4iq+xlIxFCXriAm5TN47QFkswmYhEFDIOdv59MIU3Ms3/A= Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=amd.com; Received: from MN2PR12MB3775.namprd12.prod.outlook.com (2603:10b6:208:159::19) by MN2PR12MB4440.namprd12.prod.outlook.com (2603:10b6:208:26e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.19; Wed, 23 Jun 2021 13:44:56 +0000 Received: from MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6c9e:1e08:7617:f756]) by MN2PR12MB3775.namprd12.prod.outlook.com ([fe80::6c9e:1e08:7617:f756%5]) with mapi id 15.20.4242.024; Wed, 23 Jun 2021 13:44:56 +0000 To: Bas Nieuwenhuizen References: <20210622165511.3169559-1-daniel.vetter@ffwll.ch> <20210622165511.3169559-16-daniel.vetter@ffwll.ch> <3bf45006-4256-763d-601b-3a25a7057820@amd.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <421cb10d-92a7-0780-3d38-d4cabd008c0c@amd.com> Date: Wed, 23 Jun 2021 15:44:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 In-Reply-To: Content-Language: en-US X-Originating-IP: [2a02:908:1252:fb60:871f:87e2:f394:e667] X-ClientProxiedBy: PR0P264CA0280.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::28) 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:871f:87e2:f394:e667] (2a02:908:1252:fb60:871f:87e2:f394:e667) by PR0P264CA0280.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1::28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Wed, 23 Jun 2021 13:44:53 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4b2ff45a-813e-4872-d891-08d9364d15ef X-MS-TrafficTypeDiagnostic: MN2PR12MB4440: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:10000; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5bpZZihSpZxXGsc7/hRHPOjHItC26w293DSs/ZCctxV7JuVIhVD74VprVpepMbzp0NSDN2AdBpVhP+ARr5KbbeUk8enkhM9MczhmNPl+U5r6eFGuElZPShzngEoE8OzTD20W0ixZvNz3z5X0wqokHHcuI/mif8Jh7UleqmW8i587bFND16XscBmrs/+qeHqeaJE3EvBuCBFjClDTZ7OsK014eZAJgDGK/dbpIblWBobZtI18SlQAkWYn7tRMvRUIVW5t8qEMNoimhteY2XBZ19TSz19ezwChKsRCwcCgOmblsJWL0P0SFhYZXEgiq9xYnAUxnnebNITaAqc+yYH7xuwaKy3mLUq4JnamVhjblsF85zxeAYG6lOGbSwQD2vux2xmn2InZj05SR3JWLe8Y23ZyFOSALBeuHflfJD60jZCpZC/HyjG0nEAVbly/quaGOWlVeEJDG/omf20iYADY2a1H6292JEuRKx9Ulwi1VigVAqTcVAdULu+DYQFhU7dF2CF1qk4awTRKDeIMH6s0dzr+fghbESO0Q2UzgGbPhL967tW5jlSpAh0rECQKWqYI8wFnl4HsKbCKK+G+qfenerJ6NdmQ/+b7PndcdQBFQlTn0bd9EJ+3Bafa9DOJlggxwlbAqEFu5FpmEY+/RPSBwQyD7Z2Pe/bDiTJMn8MLzT7RpQmdLCyAQeluOLHOmRwDVe2+7FKN1fm1oBMid+/zKYOwBpuPg0Z2zGYI+yNuodegi5tWFxYKJbs8S3wfsnI1CvK23u56SDZ39mTZLlNLRsv2yXD5U8qEb0xUF184jhVgKX86vY4nD92PetBNv39wL31WJ7vfm+xCrg16fyew++bVn4fkWCzAuPqG+UKB7Cg4fXilSsoRGczL+TROSPEpuhpm9eVAkkrR5PBjpYivEw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR12MB3775.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(39860400002)(136003)(376002)(346002)(366004)(45080400002)(478600001)(6916009)(66476007)(66946007)(66556008)(966005)(30864003)(31686004)(54906003)(83380400001)(66574015)(36756003)(316002)(7416002)(5660300002)(38100700002)(31696002)(86362001)(186003)(53546011)(16526019)(2616005)(2906002)(8936002)(6666004)(8676002)(6486002)(4326008)(45980500001)(43740500002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MlZLZ01FQlJycUNCNk9BWG51OXlKd1Q1OG5XMUZCTnF2TkVNVFNjV2xHbXc0?= =?utf-8?B?ZSttenNrbm9hMWp5TE1mL1ZGQVlMTTBCOVdoVDlVa0s4QlQ1VEo2RE0vdnlX?= =?utf-8?B?Vm5BQ3ZiTmhEQlVORDhMT2lDODNqc1JxcTBZaHpja3RkK0pRakNNclNyb05n?= =?utf-8?B?WC9JNFRhTElxS216QktRYzBScFArUVFJTGE3NERaSXQ3cUdFOGE5akFUamFB?= =?utf-8?B?SjhEOXdIeXI4dXNZRzh5cmZuSDhza1hBQWR3dnVPOGJ3STBzcDNmeU9xN3g5?= =?utf-8?B?eTVtdWpBek5IZ2dmREZLWElsSWszY2RZdUFvU05XVDdXK1BkT0JQRFFKV0h1?= =?utf-8?B?VFZyTlVPc00zYkRmNVFXcmFheVBJMUx2QXpqRm5qclBLVGx3allwL2lDZUlx?= =?utf-8?B?RExyNFpoOXJEUTBUaUNPdndPSTllOEhpbUZlc2I4R084d0wyNStHQzBkZzd3?= =?utf-8?B?eTRxV3lobVIwYzlTWFJZNGRrdjZuRnpCWkR3WnZwOGlNL2lPZ0lta05wNFhz?= =?utf-8?B?Qnd2ZE9BNlkyeGtEcEhxS0dmMTFxK2xsbzdHeDJzT1o2OUMxUzNhSGdvSEJ0?= =?utf-8?B?elRRRFdWemZneERoNytndWdueUdLS3FoTGZZM0hnUWt2OU5WdzIxd0hSWkZi?= =?utf-8?B?UDVxMExLZWRHTko2c3F1OHNGVkdRQUFTWlJTcDN2QlFkSGxPS1JWcndjc2Vv?= =?utf-8?B?bVdLT3lINFZzQnN3V2VnM3JkZXdDc1VvVWU3M2Q4Q0VGaStwbzBkaTkzelJY?= =?utf-8?B?YWIyTnJPRkFSdU1GaUpLMDMvUVV5WVh3SnJZMHdjSHNWK21Qa0dEeFQvUDlV?= =?utf-8?B?SGFGZC9PWVo3NWVHazE5VnE0UklYd3dzdS9HZnRBTGhrMjhVK2NmaVp4dld4?= =?utf-8?B?R1ZmVjFzL2tuOFhYOERTWlM3YTNrNU55Vnl2eXNRcStPV0Z5Vm01RVVTZU1G?= =?utf-8?B?cUh0cVUvcit5WFc3ZjkwTXFZR1FqbWhJN2ZCVzAwSGZUT3FEQ1d5R2JzeG1y?= =?utf-8?B?M3M0R1hieW9CUS9oTm0xdm9TbGZ1eFBXNndaZFhPZWFUajl2bytXSGw4SWFJ?= =?utf-8?B?czBEcE00ZStZTnBUNHUvWkFKR0xwS3lCZ2FFS0d5UWpOWHMxMnFLVWlhbkFx?= =?utf-8?B?YnJlQjNuM3NjclFZNTB4TE85ejZYY0RMR2RkZms4SHgydTgxYnpEckkyRjJ5?= =?utf-8?B?Z2tJcHZiblZuUnpkQjdoc1FURFA3bGRUNk5GcWtVclZzOUZWK1hWd0d4alFK?= =?utf-8?B?dnlHVERYK3FVcHNscmNjOWNTcldtUGpsdXhtbzEweWc1MkhDeGM2cDhkd3JN?= =?utf-8?B?ZlZlNkN1bjFOOGw5MVJiYnE5TWd5MXkxdFcxeTZhZFpLc2kwYVZOMlFWMnFj?= =?utf-8?B?ak82U0RtQ05GaW83Ylp1N1RhaG9nUmpwK3Q2VVFRTGxiUVVQeDhFc3hGUnNt?= =?utf-8?B?ZDR6T05jbWpHUzhQWldFSjBacWluWGlENDhqUFp3VXN1Z3dFRTRubWxWcjd4?= =?utf-8?B?ZFBTMDliVHZsZE9Yem1JMjlYY29Idm9GMGErSzVtTUp0MmR4MzJUU25EcEFo?= =?utf-8?B?bnZwYzhqMW0wZTltT1hMeC94dlluZndaSmV1WUk5SzkrQjdNTnU2aGdXR2ln?= =?utf-8?B?VmdMdUtnRG5MM3NLMVhGS3R6USs3MGRwWG5nK0E3ZFJkVkoyam5waXZQdGwy?= =?utf-8?B?T3RYNXNWVk9hdUxKbmV3MlRlVDFaVm12Wk45Z2d1VW05SnhwOEZQdlIxN2Zi?= =?utf-8?B?N2t2K1BKSis4eGJFdllDUk90NzB6VU9lcnNBTzE5SXBFZWo0a1prekQreFZy?= =?utf-8?B?TnFXODhqNm1ydXNQc3JMdzJwT2FvSlVqTythT3JGSEdmOCtmK2RXdmdnRmh0?= =?utf-8?Q?lcaEs8tuf+3VX?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b2ff45a-813e-4872-d891-08d9364d15ef X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2021 13:44:56.1895 (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: C9Dod5at7AGAYimwvik6fw2obQ8L1MnQGS91edbSCLH6gYnAe2kz773VKloo+CHU X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4440 Subject: Re: [Intel-gfx] [PATCH 15/15] RFC: drm/amdgpu: Implement a proper implicit fencing uapi 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: Rob Clark , Daniel Stone , Daniel Vetter , Intel Graphics Development , Kevin Wang , DRI Development , Sumit Semwal , "moderated list:DMA BUFFER SHARING FRAMEWORK" , Luben Tuikov , "Kristian H . Kristensen" , Chen Li , Daniel Vetter , Alex Deucher , mesa-dev , Dave Airlie , =?UTF-8?Q?Michel_D=c3=a4nzer?= , Dennis Li , Deepak R Varma Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QW0gMjMuMDYuMjEgdW0gMTU6Mzggc2NocmllYiBCYXMgTmlldXdlbmh1aXplbjoKPiBPbiBXZWQs IEp1biAyMywgMjAyMSBhdCAyOjU5IFBNIENocmlzdGlhbiBLw7ZuaWcKPiA8Y2hyaXN0aWFuLmtv ZW5pZ0BhbWQuY29tPiB3cm90ZToKPj4gQW0gMjMuMDYuMjEgdW0gMTQ6MTggc2NocmllYiBEYW5p ZWwgVmV0dGVyOgo+Pj4gT24gV2VkLCBKdW4gMjMsIDIwMjEgYXQgMTE6NDUgQU0gQmFzIE5pZXV3 ZW5odWl6ZW4KPj4+IDxiYXNAYmFzbmlldXdlbmh1aXplbi5ubD4gd3JvdGU6Cj4+Pj4gT24gVHVl LCBKdW4gMjIsIDIwMjEgYXQgNjo1NSBQTSBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZm d2xsLmNoPiB3cm90ZToKPj4+Pj4gV0FSTklORzogQWJzb2x1dGVseSB1bnRlc3RlZCBiZXlvbmQg ImdjYyBpc24ndCBkeWluZyBpbiBhZ29ueSIuCj4+Pj4+Cj4+Pj4+IEltcGxpY2l0IGZlbmNpbmcg ZG9uZSBwcm9wZXJseSBuZWVkcyB0byB0cmVhdCB0aGUgaW1wbGljaXQgZmVuY2luZwo+Pj4+PiBz bG90cyBsaWtlIGEgZnVubnkga2luZCBvZiBJUEMgbWFpbGJveC4gSW4gb3RoZXIgd29yZHMgaXQg bmVlZHMgdG8gYmUKPj4+Pj4gZXhwbGljaXRseS4gVGhpcyBpcyB0aGUgb25seSB3YXkgaXQgd2ls bCBtZXNoIHdlbGwgd2l0aCBleHBsaWNpdAo+Pj4+PiBmZW5jaW5nIHVzZXJzcGFjZSBsaWtlIHZr LCBhbmQgaXQncyBhbHNvIHRoZSBiYXJlIG1pbmltdW0gcmVxdWlyZWQgdG8KPj4+Pj4gYmUgYWJs ZSB0byBtYW5hZ2UgYW55dGhpbmcgZWxzZSB0aGF0IHdhbnRzIHRvIHVzZSB0aGUgc2FtZSBidWZm ZXIgb24KPj4+Pj4gbXVsdGlwbGUgZW5naW5lcyBpbiBwYXJhbGxlbCwgYW5kIHN0aWxsIGJlIGFi bGUgdG8gc2hhcmUgaXQgdGhyb3VnaAo+Pj4+PiBpbXBsaWNpdCBzeW5jLgo+Pj4+Pgo+Pj4+PiBh bWRncHUgY29tcGxldGVseSBsYWNrcyBzdWNoIGFuIHVhcGkuIEZpeCB0aGlzLgo+Pj4+Pgo+Pj4+ PiBMdWNraWx5IHRoZSBjb25jZXB0IG9mIGlnbm9yaW5nIGltcGxpY2l0IGZlbmNlcyBleGlzdHMg YWxyZWFkeSwgYW5kCj4+Pj4+IHRha2VzIGNhcmUgb2YgYWxsIHRoZSBjb21wbGV4aXRpZXMgb2Yg bWFraW5nIHN1cmUgdGhhdCBub24tb3B0aW9uYWwKPj4+Pj4gZmVuY2VzIChsaWtlIGJvIG1vdmVz KSBhcmUgbm90IGlnbm9yZWQuIFRoaXMgc3VwcG9ydCB3YXMgYWRkZWQgaW4KPj4+Pj4KPj4+Pj4g Y29tbWl0IDE3N2FlMDliNWQ2OTlhNWViZDFjYWZjZWU3ODg4OWRiOTY4YWJmNTQKPj4+Pj4gQXV0 aG9yOiBBbmRyZXMgUm9kcmlndWV6IDxhbmRyZXN4N0BnbWFpbC5jb20+Cj4+Pj4+IERhdGU6ICAg RnJpIFNlcCAxNSAyMDo0NDowNiAyMDE3IC0wNDAwCj4+Pj4+Cj4+Pj4+ICAgICAgIGRybS9hbWRn cHU6IGludHJvZHVjZSBBTURHUFVfR0VNX0NSRUFURV9FWFBMSUNJVF9TWU5DIHYyCj4+Pj4+Cj4+ Pj4+IFVuZm9ydHVhbnRlbHkgaXQncyB0aGUgd3Jvbmcgc2VtYW50aWNzLCBiZWNhdXNlIGl0J3Mg YSBibyBmbGFnIGFuZAo+Pj4+PiBkaXNhYmxlcyBpbXBsaWNpdCBzeW5jIG9uIGFuIGFsbG9jYXRl ZCBidWZmZXIgY29tcGxldGVseS4KPj4+Pj4KPj4+Pj4gV2UgX2RvXyB3YW50IGltcGxpY2l0IHN5 bmMsIGJ1dCBjb250cm9sIGl0IGV4cGxpY2l0bHkuIEZvciB0aGlzIHdlCj4+Pj4+IG5lZWQgYSBm bGFnIG9uIHRoZSBkcm1fZmlsZSwgc28gdGhhdCBhIGdpdmVuIHVzZXJzcGFjZSAobGlrZSB2dWxr YW4pCj4+Pj4+IGNhbiBtYW5hZ2UgdGhlIGltcGxpY2l0IHN5bmMgc2xvdHMgZXhwbGljaXRseS4g VGhlIG90aGVyIHNpZGUgb2YgdGhlCj4+Pj4+IHBpcGVsaW5lIChjb21wb3NpdG9yLCBvdGhlciBw cm9jZXNzIG9yIGp1c3QgZGlmZmVyZW50IHN0YWdlIGluIGEgbWVkaWEKPj4+Pj4gcGlwZWxpbmUg aW4gdGhlIHNhbWUgcHJvY2VzcykgY2FuIHRoZW4gZWl0aGVyIGRvIHRoZSBzYW1lLCBvciBmdWxs eQo+Pj4+PiBwYXJ0aWNpcGF0ZSBpbiB0aGUgaW1wbGljaXQgc3luYyBhcyBpbXBsZW1lbnRlZCBi eSB0aGUga2VybmVsIGJ5Cj4+Pj4+IGRlZmF1bHQuCj4+Pj4+Cj4+Pj4+IEJ5IGJ1aWxkaW5nIG9u IHRoZSBleGlzdGluZyBmbGFnIGZvciBidWZmZXJzIHdlIGF2b2lkIGFueSBpc3N1ZXMgd2l0aAo+ Pj4+PiBvcGVuaW5nIHVwIGFkZGl0aW9uYWwgc2VjdXJpdHkgY29uY2VybnMgLSBhbnl0aGluZyB0 aGlzIG5ldyBmbGFnIGhlcmUKPj4+Pj4gYWxsb3dzIGlzIGFscmVhZHkuCj4+Pj4+Cj4+Pj4+IEFs bCBkcml2ZXJzIHdoaWNoIHN1cHBvcnRzIHRoaXMgY29uY2VwdCBvZiBhIHVzZXJzcGFjZS1zcGVj aWZpYwo+Pj4+PiBvcHQtb3V0IG9mIGltcGxpY2l0IHN5bmMgaGF2ZSBhIGZsYWcgaW4gdGhlaXIg Q1MgaW9jdGwsIGJ1dCBpbiByZWFsaXR5Cj4+Pj4+IHRoYXQgdHVybmVkIG91dCB0byBiZSBhIGJp dCB0b28gaW5mbGV4aWJsZS4gU2VlIHRoZSBkaXNjdXNzaW9uIGJlbG93LAo+Pj4+PiBsZXQncyB0 cnkgdG8gZG8gYSBiaXQgYmV0dGVyIGZvciBhbWRncHUuCj4+Pj4+Cj4+Pj4+IFRoaXMgYWxvbmUg b25seSBhbGxvd3MgdXMgdG8gY29tcGxldGVseSBhdm9pZCBhbnkgc3RhbGxzIGR1ZSB0bwo+Pj4+ PiBpbXBsaWNpdCBzeW5jLCBpdCBkb2VzIG5vdCB5ZXQgYWxsb3cgdXMgdG8gdXNlIGltcGxpY2l0 IHN5bmMgYXMgYQo+Pj4+PiBzdHJhbmdlIGZvcm0gb2YgSVBDIGZvciBzeW5jX2ZpbGUuCj4+Pj4+ Cj4+Pj4+IEZvciB0aGF0IHdlIG5lZWQgdHdvIG1vcmUgcGllY2VzOgo+Pj4+Pgo+Pj4+PiAtIGEg d2F5IHRvIGdldCB0aGUgY3VycmVudCBpbXBsaWNpdCBzeW5jIGZlbmNlcyBvdXQgb2YgYSBidWZm ZXIuIENvdWxkCj4+Pj4+ICAgICBiZSBkb25lIGluIGEgZHJpdmVyIGlvY3RsLCBidXQgZXZlcnlv bmUgbmVlZHMgdGhpcywgYW5kIGdlbmVyYWxseSBhCj4+Pj4+ICAgICBkbWEtYnVmIGlzIGludm9s dmVkIGFueXdheSB0byBlc3RhYmxpc2ggdGhlIHNoYXJpbmcuIFNvIGFuIGlvY3RsIG9uCj4+Pj4+ ICAgICB0aGUgZG1hLWJ1ZiBtYWtlcyBhIHRvbiBtb3JlIHNlbnNlOgo+Pj4+Pgo+Pj4+PiAgICAg aHR0cHM6Ly9uYW0xMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBz JTNBJTJGJTJGbG9yZS5rZXJuZWwub3JnJTJGZHJpLWRldmVsJTJGMjAyMTA1MjAxOTAwMDcuNTM0 MDQ2LTQtamFzb24lNDBqbGVrc3RyYW5kLm5ldCUyRiZhbXA7ZGF0YT0wNCU3QzAxJTdDY2hyaXN0 aWFuLmtvZW5pZyU0MGFtZC5jb20lN0NhNDAxZmM0NTUxZjA0NWM5NWQ4ODA4ZDkzNjRjMzhmNiU3 QzNkZDg5NjFmZTQ4ODRlNjA4ZTExYTgyZDk5NGUxODNkJTdDMCU3QzAlN0M2Mzc2MDA1MjMyODcy MTc3MjMlN0NVbmtub3duJTdDVFdGcGJHWnNiM2Q4ZXlKV0lqb2lNQzR3TGpBd01EQWlMQ0pRSWpv aVYybHVNeklpTENKQlRpSTZJazFoYVd3aUxDSlhWQ0k2TW4wJTNEJTdDMTAwMCZhbXA7c2RhdGE9 TDhLQ3o4NzExWTJxWngwJTJGSldUNkhTZzRvNk9NaG4lMkJDNFUySVIwNm5WaUUlM0QmYW1wO3Jl c2VydmVkPTAKPj4+Pj4KPj4+Pj4gICAgIEN1cnJlbnQgZHJpdmVycyBpbiB1cHN0cmVhbSBzb2x2 ZXMgdGhpcyBieSBoYXZpbmcgdGhlIG9wdC1vdXQgZmxhZwo+Pj4+PiAgICAgb24gdGhlaXIgQ1Mg aW9jdGwuIFRoaXMgaGFzIHRoZSBkb3duc2lkZSB0aGF0IHZlcnkgb2Z0ZW4gdGhlIENTCj4+Pj4+ ICAgICB3aGljaCBtdXN0IGFjdHVhbGx5IHN0YWxsIGZvciB0aGUgaW1wbGljaXQgZmVuY2UgaXMg cnVuIGEgd2hpbGUKPj4+Pj4gICAgIGFmdGVyIHRoZSBpbXBsaWNpdCBmZW5jZSBwb2ludCB3YXMg bG9naWNhbGx5IHNhbXBsZWQgcGVyIHRoZSBhcGkKPj4+Pj4gICAgIHNwZWMgKHZrIHBhc3NlcyBh biBleHBsaWNpdCBzeW5jb2JqIGFyb3VuZCBmb3IgdGhhdCBhZmFpdWkpLCBhbmQgc28KPj4+Pj4g ICAgIHJlc3VsdHMgaW4gb3ZlcnN5bmMuIENvbnZlcnRpbmcgdGhlIGltcGxpY2l0IHN5bmMgZmVu Y2VzIGludG8gYQo+Pj4+PiAgICAgc25hcC1zaG90IHN5bmNfZmlsZSBpcyBhY3R1YWxseSBhY2N1 cmF0ZS4KPj4+Pj4KPj4+Pj4gLSBTaW1pbGxhciB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gc2V0IHRo ZSBleGNsdXNpdmUgaW1wbGljaXQgZmVuY2UuCj4+Pj4+ICAgICBDdXJyZW50IGRyaXZlcnMgYWdh aW4gZG8gdGhpcyB3aXRoIGEgQ1MgaW9jdGwgZmxhZywgd2l0aCBhZ2FpbiB0aGUKPj4+Pj4gICAg IHNhbWUgcHJvYmxlbXMgdGhhdCB0aGUgdGltZSB0aGUgQ1MgaGFwcGVucyBhZGRpdGlvbmFsIGRl cGVuZGVuY2llcwo+Pj4+PiAgICAgaGF2ZSBiZWVuIGFkZGVkLiBBbiBleHBsaWNpdCBpb2N0bCB0 byBvbmx5IGluc2VydCBhIHN5bmNfZmlsZSAod2hpbGUKPj4+Pj4gICAgIHJlc3BlY3RpbmcgdGhl IHJ1bGVzIGZvciBob3cgZXhjbHVzaXZlIGFuZCBzaGFyZWQgZmVuY2Ugc2xvdHMgbXVzdAo+Pj4+ PiAgICAgYmUgdXBkYXRlIGluIHN0cnVjdCBkbWFfcmVzdikgaXMgbXVjaCBiZXR0ZXIuIFRoaXMg aXMgcHJvcG9zZWQgaGVyZToKPj4+Pj4KPj4+Pj4gICAgIGh0dHBzOi8vbmFtMTEuc2FmZWxpbmtz LnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmxvcmUua2VybmVsLm9y ZyUyRmRyaS1kZXZlbCUyRjIwMjEwNTIwMTkwMDA3LjUzNDA0Ni01LWphc29uJTQwamxla3N0cmFu ZC5uZXQlMkYmYW1wO2RhdGE9MDQlN0MwMSU3Q2NocmlzdGlhbi5rb2VuaWclNDBhbWQuY29tJTdD YTQwMWZjNDU1MWYwNDVjOTVkODgwOGQ5MzY0YzM4ZjYlN0MzZGQ4OTYxZmU0ODg0ZTYwOGUxMWE4 MmQ5OTRlMTgzZCU3QzAlN0MwJTdDNjM3NjAwNTIzMjg3MjI3NzE5JTdDVW5rbm93biU3Q1RXRnBi R1pzYjNkOGV5SldJam9pTUM0d0xqQXdNREFpTENKUUlqb2lWMmx1TXpJaUxDSkJUaUk2SWsxaGFX d2lMQ0pYVkNJNk1uMCUzRCU3QzEwMDAmYW1wO3NkYXRhPThXcyUyQjU3M1Q1cmo5QnMwOCUyQlFC NUNiSUFzV2dvMzZoWWlIJTJGZDBkUGNKZWclM0QmYW1wO3Jlc2VydmVkPTAKPj4+Pj4KPj4+Pj4g VGhlc2UgdGhyZWUgcGllY2VzIHRvZ2V0aGVyIGFsbG93IHVzZXJzcGFjZSB0byBmdWxseSBjb250 cm9sIGltcGxpY2l0Cj4+Pj4+IGZlbmNpbmcgYW5kIHJlbW92ZSBhbGwgdW5lY2Vzc2FyeSBzdGFs bCBwb2ludHMgZHVlIHRvIHRoZW0uCj4+Pj4+Cj4+Pj4+IFdlbGwsIGFzIG11Y2ggYXMgdGhlIGlt cGxpY2l0IGZlbmNpbmcgbW9kZWwgZnVuZGFtZW50YWxseSBhbGxvd3M6Cj4+Pj4+IFRoZXJlIGlz IG9ubHkgb25lIHNldCBvZiBmZW5jZXMsIHlvdSBjYW4gb25seSBjaG9vc2UgdG8gc3luYyBhZ2Fp bnN0Cj4+Pj4+IG9ubHkgd3JpdGVycyAoZXhjbHVzaXZlIHNsb3QpLCBvciBldmVyeW9uZS4gSGVu Y2Ugc3ViYWxsb2NhdGluZwo+Pj4+PiBtdWx0aXBsZSBidWZmZXJzIG9yIGFueXRoaW5nIGVsc2Ug bGlrZSB0aGlzIGlzIGZ1bmRhbWVudGFsbHkgbm90Cj4+Pj4+IHBvc3NpYmxlLCBhbmQgY2FuIG9u bHkgYmUgZml4ZWQgYnkgYSBwcm9wZXIgZXhwbGljaXQgZmVuY2luZyBtb2RlbC4KPj4+Pj4KPj4+ Pj4gQXNpZGUgZnJvbSB0aGF0IGNhdmVhdCB0aGlzIG1vZGVsIGdldHMgaW1wbGljaXQgZmVuY2lu ZyBhcyBjbG9zZWx5IHRvCj4+Pj4+IGV4cGxpY2l0IGZlbmNpbmcgc2VtYW50aWNzIGFzIHBvc3Np YmxlOgo+Pj4+Pgo+Pj4+PiBPbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIEkgb3B0ZWQgZm9y IGEgc2ltcGxlIHNldHBhcmFtIGlvY3RsLCBubwo+Pj4+PiBsb2NraW5nIChqdXN0IGF0b21pYyBy ZWFkcy93cml0ZXMpIGZvciBzaW1wbGljaXR5LiBUaGVyZSBpcyBhIG5pY2UKPj4+Pj4gZmxhZyBw YXJhbWV0ZXIgaW4gdGhlIFZNIGlvY3RsIHdoaWNoIHdlIGNvdWxkIHVzZSwgZXhjZXB0Ogo+Pj4+ PiAtIGl0J3Mgbm90IGNoZWNrZWQsIHNvIHVzZXJzcGFjZSBsaWtlbHkgcGFzc2VzIGdhcmJhZ2UK Pj4+Pj4gLSB0aGVyZSdzIGFscmVhZHkgYSBjb21tZW50IHRoYXQgdXNlcnNwYWNlIF9kb2VzXyBw YXNzIGdhcmJhZ2UgaW4gdGhlCj4+Pj4+ICAgICBwcmlvcml0eSBmaWVsZAo+Pj4+PiBTbyB5ZWFo IHVuZm9ydHVuYXRlbHkgdGhpcyBmbGFnIHBhcmFtZXRlciBmb3Igc2V0dGluZyB2bSBmbGFncyBp cwo+Pj4+PiB1c2VsZXNzLCBhbmQgd2UgbmVlZCB0byBoYWNrIHVwIGEgbmV3IG9uZS4KPj4+Pj4K Pj4+Pj4gdjI6IEV4cGxhaW4gd2h5IGEgbmV3IFNFVFBBUkFNIChKYXNvbikKPj4+Pj4KPj4+Pj4g djM6IEJhcyBub3RpY2VkIEkgZm9yZ290IHRvIGhvb2sgdXAgdGhlIGRlcGVuZGVuY3ktc2lkZSBz aG9ydGN1dC4gV2UKPj4+Pj4gbmVlZCBib3RoLCBvciB0aGlzIGRvZXNuJ3QgZG8gbXVjaC4KPj4+ Pj4KPj4+Pj4gdjQ6IFJlYmFzZSBvdmVyIHRoZSBhbWRncHUgcGF0Y2ggdG8gYWx3YXlzIHNldCB0 aGUgaW1wbGljaXQgc3luYwo+Pj4+PiBmZW5jZXMuCj4+Pj4gU28gSSB0aGluayB0aGVyZSBpcyBz dGlsbCBhIGNhc2UgbWlzc2luZyBpbiB0aGlzIGltcGxlbWVudGF0aW9uLgo+Pj4+IENvbnNpZGVy IHRoZXNlIDMgY2FzZXMKPj4+Pgo+Pj4+IChmb3JtYXQ6IGEtPmI6IGIgd2FpdHMgb24gYS4gWWVz LCBJIGtub3cgYXJyb3dzIGFyZSBoYXJkKQo+Pj4+Cj4+Pj4gZXhwbGljaXQtPmV4cGxpY2l0OiBU aGlzIGRvZXNuJ3Qgd2FpdCBub3csIHdoaWNoIGlzIGdvb2QKPj4+PiBJbXBsaWNpdC0+ZXhwbGlj aXQ6IFRoaXMgZG9lc24ndCB3YWl0IG5vdywgd2hpY2ggaXMgZ29vZAo+Pj4+IGV4cGxpY2l0LT5p bXBsaWNpdCA6IFRoaXMgc3RpbGwgd2FpdHMgYXMgdGhlIGV4cGxpY2l0IHN1Ym1pc3Npb24gc3Rp bGwKPj4+PiBhZGRzIHNoYXJlZCBmZW5jZXMgYW5kIG1vc3QgdGhpbmdzIHRoYXQgc2V0IGFuIGV4 Y2x1c2l2ZSBmZW5jZSBmb3IKPj4+PiBpbXBsaWNpdCBzeW5jIHdpbGwgaGVuY2Ugd2FpdCBvbiBp dC4KPj4+Pgo+Pj4+IFRoaXMgaXMgcHJvYmFibHkgZ29vZCBlbm91Z2ggZm9yIHdoYXQgcmFkdiBu ZWVkcyBub3cgYnV0IGFsc28gc291bmRzCj4+Pj4gbGlrZSBhIHJpc2sgd3J0IGJha2luZyBpbiBu ZXcgdWFwaSBiZWhhdmlvciB0aGF0IHdlIGRvbid0IHdhbnQgdG8gYmUKPj4+PiB0aGUgZW5kIHJl c3VsdC4KPj4+Pgo+Pj4+IFdpdGhpbiBBTURHUFUgdGhpcyBpcyBwcm9iYWJseSBzb2x2YWJsZSBp biB0d28gd2F5czoKPj4+Pgo+Pj4+IDEpIERvd25ncmFkZSBBTURHUFVfU1lOQ19ORV9PV05FUiB0 byBBTURHUFVfU1lOQ19FWFBMSUNJVCBmb3Igc2hhcmVkIGZlbmNlcy4KPj4+IEknbSBub3Qgc3Vy ZSB0aGF0IHdvcmtzLiBJIHRoaW5rIHRoZSByaWdodCBmaXggaXMgdGhhdCByYWRlb25zaSBhbHNv Cj4+PiBzd2l0Y2hlcyB0byB0aGlzIG1vZGVsLCB3aXRoIG1heWJlIGEgcGVyLWJvIENTIGZsYWcg dG8gc2V0IGluZGljYXRlCj4+PiB3cml0ZSBhY2Nlc3MsIHRvIGN1dCBkb3duIG9uIHRoZSBudW1i ZXIgb2YgaW9jdGxzIHRoYXQgYXJlIG5lZWRlZAo+Pj4gb3RoZXJ3aXNlIG9uIHNoYXJlZCBidWZm ZXJzLiBUaGlzIHBlci1ibyBmbGFnIHdvdWxkIGVzc2VudGlhbGx5IHNlbGVjdAo+Pj4gYmV0d2Vl biBTWU5DX05FX09XTkVSIGFuZCBTWU5DX0VYUExJQ0lUIG9uIGEgcGVyLWJ1ZmZlciBiYXNpcy4K Pj4gWWVhaCwgYnV0IEknbSBzdGlsbCBub3QgZW50aXJlbHkgc3VyZSB3aHkgdGhhdCBhcHByb2Fj aCBpc24ndCBzdWZmaWNpZW50Pwo+Pgo+PiBQcm9ibGVtIHdpdGggdGhlIHBlciBjb250ZXh0IG9y IHBlciB2bSBmbGFnIGlzIHRoYXQgeW91IHRoZW4gZG9uJ3QgZ2V0Cj4+IGFueSBpbXBsaWNpdCBz eW5jaHJvbml6YXRpb24gYW55IG1vcmUgd2hlbiBhbm90aGVyIHByb2Nlc3Mgc3RhcnRzIHVzaW5n Cj4+IHRoZSBidWZmZXIuCj4gVGhhdCBpcyBleGFjdGx5IHdoYXQgSSB3YW50IGZvciBWdWxrYW4g OikKClllYWgsIGJ1dCBhcyBmYXIgYXMgSSBrbm93IHRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSBj YW4gZG8uCgpTZWUgd2UgaGF2ZSB1c2UgY2FzZXMgbGlrZSBzY3JlZW4gY2FwdHVyZSBhbmQgZGVi dWcgd2hpY2ggcmVseSBvbiB0aGF0IApiZWhhdmlvci4KClRoZSBvbmx5IHRoaW5nIHdlIGNhbiBk byBpcyB0byBzYXkgb24gYSBwZXIgYnVmZmVyIGZsYWcgdGhhdCBhIGJ1ZmZlciAKc2hvdWxkIG5v dCBwYXJ0aWNpcGF0ZSBpbiBpbXBsaWNpdCBzeW5jIGF0IGFsbC4KClJlZ2FyZHMsCkNocmlzdGlh bi4KCj4+PiBUaGUgY3VycmVudCBhbWRncHUgdWFwaSBqdXN0IGRvZXNuJ3QgYWxsb3cgYW55IG90 aGVyIG1vZGVsIHdpdGhvdXQgYW4KPj4+IGV4cGxpY2l0IG9wdC1pbi4gU28gY3VycmVudCBpbXBs aWNpdCBzeW5jIHVzZXJzcGFjZSBqdXN0IGhhcyB0bwo+Pj4gb3ZlcnN5bmMsIHRoZXJlJ3Mgbm90 IG11Y2ggY2hvaWNlLgo+Pj4KPj4+PiAyKSBIYXZlIGFuIEVYUExJQ0lUIGZlbmNlIG93bmVyIHRo YXQgaXMgdXNlZCBmb3IgZXhwbGljaXQgc3VibWlzc2lvbnMKPj4+PiB0aGF0IGlzIGlnbm9yZWQg YnkgQU1ER1BVX1NZTkNfTkVfT1dORVIuCj4+Pj4KPj4+PiBCdXQgdGhpcyBkb2Vzbid0IHNvbHZl IGNyb3NzLWRyaXZlciBpbnRlcmFjdGlvbnMgaGVyZS4KPj4+IFllYWggY3Jvc3MtZHJpdmVyIGlz IHN0aWxsIGVudGlyZWx5IHVuc29sdmVkLCBiZWNhdXNlCj4+PiBhbWRncHVfYm9fZXhwbGljaXRf c3luYygpIG9uIHRoZSBibyBkaWRuJ3Qgc29sdmUgdGhhdCBlaXRoZXIuCj4+IEh1aT8gWW91IGhh dmUgbG9zdCBtZS4gV2h5IGlzIHRoYXQgc3RpbGwgdW5zb2x2ZWQ/Cj4gVGhlIHBhcnQgd2UncmUg dHJ5aW5nIHRvIHNvbHZlIHdpdGggdGhpcyBwYXRjaCBpcyBWdWxrYW4gc2hvdWxkIG5vdAo+IHBh cnRpY2lwYXRlIGluIGFueSBpbXBsaWNpdCBzeW5jIGF0IGFsbCB3cnQgc3VibWlzc2lvbnMgKGFu ZCB0aGVuCj4gaGFuZGxlIHRoZSBpbXBsaWNpdCBzeW5jIGZvciBXU0kgZXhwbGljaXRseSB1c2lu ZyB0aGUgZmVuY2UKPiBpbXBvcnQvZXhwb3J0IHN0dWZmIHRoYXQgSmFzb24gd3JvdGUpLiBBcyBs b25nIHdlIGFkZCBzaGFyZWQgZmVuY2VzIHRvCj4gdGhlIGRtYV9yZXN2IHdlIHBhcnRpY2lwYXRl IGluIGltcGxpY2l0IHN5bmMgKGF0IHRoZSBsZXZlbCBvZiBhbgo+IGltcGxpY2l0IHN5bmMgcmVh ZCkgc3RpbGwsIGF0IGxlYXN0IGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGxhdGVyIGpvYnMKPiB3 YWl0aW5nIG9uIHRoZXNlIGZlbmNlcy4KPgo+PiBSZWdhcmRzLAo+PiBDaHJpc3RpYW4uCj4+Cj4+ PiAtRGFuaWVsCj4+Pgo+Pj4+PiBDYzogbWVzYS1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+ Pj4+IENjOiBCYXMgTmlldXdlbmh1aXplbiA8YmFzQGJhc25pZXV3ZW5odWl6ZW4ubmw+Cj4+Pj4+ IENjOiBEYXZlIEFpcmxpZSA8YWlybGllZEBnbWFpbC5jb20+Cj4+Pj4+IENjOiBSb2IgQ2xhcmsg PHJvYmRjbGFya0BjaHJvbWl1bS5vcmc+Cj4+Pj4+IENjOiBLcmlzdGlhbiBILiBLcmlzdGVuc2Vu IDxob2Vnc2JlcmdAZ29vZ2xlLmNvbT4KPj4+Pj4gQ2M6IE1pY2hlbCBEw6RuemVyIDxtaWNoZWxA ZGFlbnplci5uZXQ+Cj4+Pj4+IENjOiBEYW5pZWwgU3RvbmUgPGRhbmllbHNAY29sbGFib3JhLmNv bT4KPj4+Pj4gQ2M6IFN1bWl0IFNlbXdhbCA8c3VtaXQuc2Vtd2FsQGxpbmFyby5vcmc+Cj4+Pj4+ IENjOiAiQ2hyaXN0aWFuIEvDtm5pZyIgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KPj4+Pj4g Q2M6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KPj4+Pj4gQ2M6IERh bmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4+Pj4+IENjOiBEZWVwYWsgUiBW YXJtYSA8bWgxMmd4MjgyNUBnbWFpbC5jb20+Cj4+Pj4+IENjOiBDaGVuIExpIDxjaGVubGlAdW5p b250ZWNoLmNvbT4KPj4+Pj4gQ2M6IEtldmluIFdhbmcgPGtldmluMS53YW5nQGFtZC5jb20+Cj4+ Pj4+IENjOiBEZW5uaXMgTGkgPERlbm5pcy5MaUBhbWQuY29tPgo+Pj4+PiBDYzogTHViZW4gVHVp a292IDxsdWJlbi50dWlrb3ZAYW1kLmNvbT4KPj4+Pj4gQ2M6IGxpbmFyby1tbS1zaWdAbGlzdHMu bGluYXJvLm9yZwo+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0 dGVyQGludGVsLmNvbT4KPj4+Pj4gLS0tCj4+Pj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9jcy5jICB8ICA3ICsrKysrLS0KPj4+Pj4gICAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2Rydi5jIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+ICAg IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oICB8ICA2ICsrKysrKwo+Pj4+ PiAgICBpbmNsdWRlL3VhcGkvZHJtL2FtZGdwdV9kcm0uaCAgICAgICAgICAgfCAxMCArKysrKysr KysrCj4+Pj4+ICAgIDQgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv bnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMKPj4+ Pj4gaW5kZXggNjVkZjM0YzE3MjY0Li5jNTM4NmQxM2ViNGEgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCj4+Pj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9jcy5jCj4+Pj4+IEBAIC00OTgsNiArNDk4LDcgQEAg c3RhdGljIGludCBhbWRncHVfY3NfcGFyc2VyX2JvcyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAq cCwKPj4+Pj4gICAgICAgICAgIHN0cnVjdCBhbWRncHVfYm8gKmdkczsKPj4+Pj4gICAgICAgICAg IHN0cnVjdCBhbWRncHVfYm8gKmd3czsKPj4+Pj4gICAgICAgICAgIHN0cnVjdCBhbWRncHVfYm8g Km9hOwo+Pj4+PiArICAgICAgIGJvb2wgbm9faW1wbGljaXRfc3luYyA9IFJFQURfT05DRShmcHJp di0+dm0ubm9faW1wbGljaXRfc3luYyk7Cj4+Pj4+ICAgICAgICAgICBpbnQgcjsKPj4+Pj4KPj4+ Pj4gICAgICAgICAgIElOSVRfTElTVF9IRUFEKCZwLT52YWxpZGF0ZWQpOwo+Pj4+PiBAQCAtNTc3 LDcgKzU3OCw4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2NzX3BhcnNlcl9ib3Moc3RydWN0IGFtZGdw dV9jc19wYXJzZXIgKnAsCj4+Pj4+Cj4+Pj4+ICAgICAgICAgICAgICAgICAgIGUtPmJvX3ZhID0g YW1kZ3B1X3ZtX2JvX2ZpbmQodm0sIGJvKTsKPj4+Pj4KPj4+Pj4gLSAgICAgICAgICAgICAgIGlm IChiby0+dGJvLmJhc2UuZG1hX2J1ZiAmJiAhYW1kZ3B1X2JvX2V4cGxpY2l0X3N5bmMoYm8pKSB7 Cj4+Pj4+ICsgICAgICAgICAgICAgICBpZiAoYm8tPnRiby5iYXNlLmRtYV9idWYgJiYKPj4+Pj4g KyAgICAgICAgICAgICAgICAgICAhKG5vX2ltcGxpY2l0X3N5bmMgfHwgYW1kZ3B1X2JvX2V4cGxp Y2l0X3N5bmMoYm8pKSkgewo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPmNoYWlu ID0gZG1hX2ZlbmNlX2NoYWluX2FsbG9jKCk7Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCFlLT5jaGFpbikgewo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgciA9IC1FTk9NRU07Cj4+Pj4+IEBAIC02NDksNiArNjUxLDcgQEAgc3RhdGljIGludCBhbWRn cHVfY3Nfc3luY19yaW5ncyhzdHJ1Y3QgYW1kZ3B1X2NzX3BhcnNlciAqcCkKPj4+Pj4gICAgewo+ Pj4+PiAgICAgICAgICAgc3RydWN0IGFtZGdwdV9mcHJpdiAqZnByaXYgPSBwLT5maWxwLT5kcml2 ZXJfcHJpdjsKPj4+Pj4gICAgICAgICAgIHN0cnVjdCBhbWRncHVfYm9fbGlzdF9lbnRyeSAqZTsK Pj4+Pj4gKyAgICAgICBib29sIG5vX2ltcGxpY2l0X3N5bmMgPSBSRUFEX09OQ0UoZnByaXYtPnZt Lm5vX2ltcGxpY2l0X3N5bmMpOwo+Pj4+PiAgICAgICAgICAgaW50IHI7Cj4+Pj4+Cj4+Pj4+ICAg ICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZwLT52YWxpZGF0ZWQsIHR2LmhlYWQpIHsK Pj4+Pj4gQEAgLTY1Niw3ICs2NTksNyBAQCBzdGF0aWMgaW50IGFtZGdwdV9jc19zeW5jX3Jpbmdz KHN0cnVjdCBhbWRncHVfY3NfcGFyc2VyICpwKQo+Pj4+PiAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZG1hX3Jlc3YgKnJlc3YgPSBiby0+dGJvLmJhc2UucmVzdjsKPj4+Pj4gICAgICAgICAgICAg ICAgICAgZW51bSBhbWRncHVfc3luY19tb2RlIHN5bmNfbW9kZTsKPj4+Pj4KPj4+Pj4gLSAgICAg ICAgICAgICAgIHN5bmNfbW9kZSA9IGFtZGdwdV9ib19leHBsaWNpdF9zeW5jKGJvKSA/Cj4+Pj4+ ICsgICAgICAgICAgICAgICBzeW5jX21vZGUgPSBub19pbXBsaWNpdF9zeW5jIHx8IGFtZGdwdV9i b19leHBsaWNpdF9zeW5jKGJvKSA/Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1E R1BVX1NZTkNfRVhQTElDSVQgOiBBTURHUFVfU1lOQ19ORV9PV05FUjsKPj4+Pj4gICAgICAgICAg ICAgICAgICAgciA9IGFtZGdwdV9zeW5jX3Jlc3YocC0+YWRldiwgJnAtPmpvYi0+c3luYywgcmVz diwgc3luY19tb2RlLAo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZnByaXYtPnZtKTsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYu Ywo+Pj4+PiBpbmRleCBjMDgwYmExNWFlNzcuLmY5ODI2MjZiNTMyOCAxMDA2NDQKPj4+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCj4+Pj4+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYwo+Pj4+PiBAQCAtMTcyNCw2ICsx NzI0LDI2IEBAIGludCBhbWRncHVfZmlsZV90b19mcHJpdihzdHJ1Y3QgZmlsZSAqZmlscCwgc3Ry dWN0IGFtZGdwdV9mcHJpdiAqKmZwcml2KQo+Pj4+PiAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+ ICAgIH0KPj4+Pj4KPj4+Pj4gK2ludCBhbWRncHVfc2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbHApCj4+Pj4+ICt7Cj4+Pj4+ICsgICAgICAgc3RydWN0IGRybV9h bWRncHVfc2V0cGFyYW0gKnNldHBhcmFtID0gZGF0YTsKPj4+Pj4gKyAgICAgICBzdHJ1Y3QgYW1k Z3B1X2Zwcml2ICpmcHJpdiA9IGZpbHAtPmRyaXZlcl9wcml2Owo+Pj4+PiArCj4+Pj4+ICsgICAg ICAgc3dpdGNoIChzZXRwYXJhbS0+cGFyYW0pIHsKPj4+Pj4gKyAgICAgICBjYXNlIEFNREdQVV9T RVRQQVJBTV9OT19JTVBMSUNJVF9TWU5DOgo+Pj4+PiArICAgICAgICAgICAgICAgaWYgKHNldHBh cmFtLT52YWx1ZSkKPj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgV1JJVEVfT05DRShmcHJp di0+dm0ubm9faW1wbGljaXRfc3luYywgdHJ1ZSk7Cj4+Pj4+ICsgICAgICAgICAgICAgICBlbHNl Cj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX09OQ0UoZnByaXYtPnZtLm5vX2lt cGxpY2l0X3N5bmMsIGZhbHNlKTsKPj4+Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4+PiAr ICAgICAgIGRlZmF1bHQ6Cj4+Pj4+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ Pj4gKyAgICAgICB9Cj4+Pj4+ICsKPj4+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+Pj4gK30KPj4+ Pj4gKwo+Pj4+PiAgICBjb25zdCBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgYW1kZ3B1X2lvY3Rsc19r bXNbXSA9IHsKPj4+Pj4gICAgICAgICAgIERSTV9JT0NUTF9ERUZfRFJWKEFNREdQVV9HRU1fQ1JF QVRFLCBhbWRncHVfZ2VtX2NyZWF0ZV9pb2N0bCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyks Cj4+Pj4+ICAgICAgICAgICBEUk1fSU9DVExfREVGX0RSVihBTURHUFVfQ1RYLCBhbWRncHVfY3R4 X2lvY3RsLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKPj4+Pj4gQEAgLTE3NDIsNiArMTc2 Miw3IEBAIGNvbnN0IHN0cnVjdCBkcm1faW9jdGxfZGVzYyBhbWRncHVfaW9jdGxzX2ttc1tdID0g ewo+Pj4+PiAgICAgICAgICAgRFJNX0lPQ1RMX0RFRl9EUlYoQU1ER1BVX0dFTV9WQSwgYW1kZ3B1 X2dlbV92YV9pb2N0bCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCj4+Pj4+ICAgICAgICAg ICBEUk1fSU9DVExfREVGX0RSVihBTURHUFVfR0VNX09QLCBhbWRncHVfZ2VtX29wX2lvY3RsLCBE Uk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKPj4+Pj4gICAgICAgICAgIERSTV9JT0NUTF9ERUZf RFJWKEFNREdQVV9HRU1fVVNFUlBUUiwgYW1kZ3B1X2dlbV91c2VycHRyX2lvY3RsLCBEUk1fQVVU SHxEUk1fUkVOREVSX0FMTE9XKSwKPj4+Pj4gKyAgICAgICBEUk1fSU9DVExfREVGX0RSVihBTURH UFVfU0VUUEFSQU0sIGFtZGdwdV9zZXRwYXJhbV9pb2N0bCwgRFJNX0FVVEh8RFJNX1JFTkRFUl9B TExPVyksCj4+Pj4+ICAgIH07Cj4+Pj4+Cj4+Pj4+ICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2RyaXZlciBhbWRncHVfa21zX2RyaXZlciA9IHsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZtLmgKPj4+Pj4gaW5kZXggZGRiODVhODVjYmJhLi4wZThjNDQwYzYzMDMgMTAw NjQ0Cj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oCj4+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5oCj4+Pj4+IEBA IC0zMjEsNiArMzIxLDEyIEBAIHN0cnVjdCBhbWRncHVfdm0gewo+Pj4+PiAgICAgICAgICAgYm9v bCAgICAgICAgICAgICAgICAgICAgYnVsa19tb3ZlYWJsZTsKPj4+Pj4gICAgICAgICAgIC8qIEZs YWcgdG8gaW5kaWNhdGUgaWYgVk0gaXMgdXNlZCBmb3IgY29tcHV0ZSAqLwo+Pj4+PiAgICAgICAg ICAgYm9vbCAgICAgICAgICAgICAgICAgICAgaXNfY29tcHV0ZV9jb250ZXh0Owo+Pj4+PiArICAg ICAgIC8qCj4+Pj4+ICsgICAgICAgICogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGltcGxpY2l0 IHN5bmMgc2hvdWxkIGFsd2F5cyBiZSBza2lwcGVkIG9uCj4+Pj4+ICsgICAgICAgICogdGhpcyBj b250ZXh0LiBXZSBkbyBub3QgY2FyZSBhYm91dCByYWNlcyBhdCBhbGwsIHVzZXJzcGFjZSBpcyBh bGxvd2VkCj4+Pj4+ICsgICAgICAgICogdG8gc2hvb3QgaXRzZWxmIHdpdGggaW1wbGljaXQgc3lu YyB0byBpdHMgZnVsbGVzdCBsaWtpbmcuCj4+Pj4+ICsgICAgICAgICovCj4+Pj4+ICsgICAgICAg Ym9vbCBub19pbXBsaWNpdF9zeW5jOwo+Pj4+PiAgICB9Owo+Pj4+Pgo+Pj4+PiAgICBzdHJ1Y3Qg YW1kZ3B1X3ZtX21hbmFnZXIgewo+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9h bWRncHVfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2FtZGdwdV9kcm0uaAo+Pj4+PiBpbmRleCAw Y2JkMTU0MGFlYWMuLjllYWUyNDVjMTRkNiAxMDA2NDQKPj4+Pj4gLS0tIGEvaW5jbHVkZS91YXBp L2RybS9hbWRncHVfZHJtLmgKPj4+Pj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9hbWRncHVfZHJt LmgKPj4+Pj4gQEAgLTU0LDYgKzU0LDcgQEAgZXh0ZXJuICJDIiB7Cj4+Pj4+ICAgICNkZWZpbmUg RFJNX0FNREdQVV9WTSAgICAgICAgICAgICAgICAgIDB4MTMKPj4+Pj4gICAgI2RlZmluZSBEUk1f QU1ER1BVX0ZFTkNFX1RPX0hBTkRMRSAgICAgMHgxNAo+Pj4+PiAgICAjZGVmaW5lIERSTV9BTURH UFVfU0NIRUQgICAgICAgICAgICAgICAweDE1Cj4+Pj4+ICsjZGVmaW5lIERSTV9BTURHUFVfU0VU UEFSQU0gICAgICAgICAgICAweDE2Cj4+Pj4+Cj4+Pj4+ICAgICNkZWZpbmUgRFJNX0lPQ1RMX0FN REdQVV9HRU1fQ1JFQVRFICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fQU1ER1BV X0dFTV9DUkVBVEUsIHVuaW9uIGRybV9hbWRncHVfZ2VtX2NyZWF0ZSkKPj4+Pj4gICAgI2RlZmlu ZSBEUk1fSU9DVExfQU1ER1BVX0dFTV9NTUFQICAgICAgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFT RSArIERSTV9BTURHUFVfR0VNX01NQVAsIHVuaW9uIGRybV9hbWRncHVfZ2VtX21tYXApCj4+Pj4+ IEBAIC03MSw2ICs3Miw3IEBAIGV4dGVybiAiQyIgewo+Pj4+PiAgICAjZGVmaW5lIERSTV9JT0NU TF9BTURHUFVfVk0gICAgICAgICAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FN REdQVV9WTSwgdW5pb24gZHJtX2FtZGdwdV92bSkKPj4+Pj4gICAgI2RlZmluZSBEUk1fSU9DVExf QU1ER1BVX0ZFTkNFX1RPX0hBTkRMRSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0FN REdQVV9GRU5DRV9UT19IQU5ETEUsIHVuaW9uIGRybV9hbWRncHVfZmVuY2VfdG9faGFuZGxlKQo+ Pj4+PiAgICAjZGVmaW5lIERSTV9JT0NUTF9BTURHUFVfU0NIRUQgICAgICAgICBEUk1fSU9XKERS TV9DT01NQU5EX0JBU0UgKyBEUk1fQU1ER1BVX1NDSEVELCB1bmlvbiBkcm1fYW1kZ3B1X3NjaGVk KQo+Pj4+PiArI2RlZmluZSBEUk1fSU9DVExfQU1ER1BVX1NFVFBBUkFNICAgICAgRFJNX0lPVyhE Uk1fQ09NTUFORF9CQVNFICsgRFJNX0FNREdQVV9TRVRQQVJBTSwgc3RydWN0IGRybV9hbWRncHVf c2V0cGFyYW0pCj4+Pj4+Cj4+Pj4+ICAgIC8qKgo+Pj4+PiAgICAgKiBET0M6IG1lbW9yeSBkb21h aW5zCj4+Pj4+IEBAIC0zMDYsNiArMzA4LDE0IEBAIHVuaW9uIGRybV9hbWRncHVfc2NoZWQgewo+ Pj4+PiAgICAgICAgICAgc3RydWN0IGRybV9hbWRncHVfc2NoZWRfaW4gaW47Cj4+Pj4+ICAgIH07 Cj4+Pj4+Cj4+Pj4+ICsjZGVmaW5lIEFNREdQVV9TRVRQQVJBTV9OT19JTVBMSUNJVF9TWU5DICAg ICAgIDEKPj4+Pj4gKwo+Pj4+PiArc3RydWN0IGRybV9hbWRncHVfc2V0cGFyYW0gewo+Pj4+PiAr ICAgICAgIC8qIEFNREdQVV9TRVRQQVJBTV8qICovCj4+Pj4+ICsgICAgICAgX191MzIgICBwYXJh bTsKPj4+Pj4gKyAgICAgICBfX3UzMiAgIHZhbHVlOwo+Pj4+PiArfTsKPj4+Pj4gKwo+Pj4+PiAg ICAvKgo+Pj4+PiAgICAgKiBUaGlzIGlzIG5vdCBhIHJlbGlhYmxlIEFQSSBhbmQgeW91IHNob3Vs ZCBleHBlY3QgaXQgdG8gZmFpbCBmb3IgYW55Cj4+Pj4+ICAgICAqIG51bWJlciBvZiByZWFzb25z IGFuZCBoYXZlIGZhbGxiYWNrIHBhdGggdGhhdCBkbyBub3QgdXNlIHVzZXJwdHIgdG8KPj4+Pj4g LS0KPj4+Pj4gMi4zMi4wLnJjMgo+Pj4+Pgo+Pj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=