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.3 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 C608FC47089 for ; Wed, 26 May 2021 14:27:54 +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 90DAE613D3 for ; Wed, 26 May 2021 14:27:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 90DAE613D3 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 91BC26ED8E; Wed, 26 May 2021 14:27:53 +0000 (UTC) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2056.outbound.protection.outlook.com [40.107.92.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id F21066ED88; Wed, 26 May 2021 14:27:51 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KCBDA85z+9sGfEu+sstvUa7BBmWM5GVQubQwFAjrb6wE3mUT+UDmAKrQfbJXJWYBO9493ySeuB239dmok1AKvMKLDXmjA0pJdNSjXCHZpFpawM7MHLDIbj7S89SiFdFRQOJ7HJkLpNBvR8lT+Ig8AYAmLiuDmYtF9qe+KCbi1yt6LDuWTHgkbYGqg4+DusIZAgVT7B2yrqHfcjNuVCb7UiGO0/tWRkB5+CkUccHG1qUQFissMrXlTa5+KsokHPRiQqCt3374BvVN7DK8fN70YR55Pm0a9ySH/pZge4oVnKGuJU+1Rk3pSvg+e7ARdgdnnSEXPfaORGqq1zSznB4X5A== 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=KR8KA4RdC2b5eQe+/I9uhspP2vn8Ld8/UzzP4UGlE8A=; b=Cayg+rLornlPGggwuveD2zb6xrmKirInHc2s+vPpJZ2xqsQTf+xbdCvOB4uwzChSwyXUpRHIGuFCC4qQfeLLYj1Y2MEoiUKcK2nXBQheNfcOsKmEwSkFPxysV3WAyDYlKXoaOwQaiTtxLfZl1PdNA31/yLV9n+eYX09Sjk+FhvGfJXMFLb4QvXp/Q02GYAErzr9AcuDKXu631+s9EqmeJqBrz/4thN6krYvb3kQB3tJ2ImjoAmiU1+hn/hfMTcF5ayW7EslnZ16rwkyKyMJewYvVMkIo4mDWkyLbbooXeDsuW9iC3RtIOLQO8d54akXNtbMPc7hSsYmZr6gfhfSyzg== 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=KR8KA4RdC2b5eQe+/I9uhspP2vn8Ld8/UzzP4UGlE8A=; b=yzlrjZC8yAb4Rf3m5wuJaZtpLHGHKRPBpRaAk9tQ9CaxS0mdveLtBuT7tNvE3Mp+xgD12VoHzUeBVOk7DXlfpgSwfEfD6l6HknQU7zpI1c6xGbYZZeEb+qcu1Fyz4VeR4dDJvyfxnwiZmIGBIQXLUcYStKROLxxMH3eMajprwmU= 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 MN2PR12MB4303.namprd12.prod.outlook.com (2603:10b6:208:198::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.25; Wed, 26 May 2021 14:27:50 +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.4150.027; Wed, 26 May 2021 14:27:49 +0000 Subject: Re: [PATCH v4 07/15] drm, drm/i915: Move the memcpy_from_wc functionality to core drm To: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210526113259.1661914-1-thomas.hellstrom@linux.intel.com> <20210526113259.1661914-8-thomas.hellstrom@linux.intel.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: Date: Wed, 26 May 2021 16:27:44 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 In-Reply-To: <20210526113259.1661914-8-thomas.hellstrom@linux.intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Originating-IP: [2a02:908:1252:fb60:1950:35e:cae9:5bed] X-ClientProxiedBy: PR0P264CA0218.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::14) 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:1950:35e:cae9:5bed] (2a02:908:1252:fb60:1950:35e:cae9:5bed) by PR0P264CA0218.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Wed, 26 May 2021 14:27:48 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: df03eab4-bb63-43a3-c5c6-08d920527071 X-MS-TrafficTypeDiagnostic: MN2PR12MB4303: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:519; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EyywgeZ0tFmoqw4M4k86SjmbSri7kSSRo9DUfJnTRr+KpxVJPlvDTX0AtaqhrUx9Cvv8rfjFB1PV8u+A22i9lzJnoBYPknPKDUwI+62aAWCtEmgu/oIPMEzaDvdflDA8yR5TLFLr6tJkUwnzNdvhPdciUyTYLus7PwC1EeOrV0OJYGDrq/B254bvVhGdOVedI9RIOMBwcY+VTgDb9TUMYJrZH1DKFZXV4cad0+9usaEUwjEdK6Kf3OQ0iS1sFMeyLEgyVNtP/71TZkoaJmKvTCKFlcjBDDxMRyhclD0RLjvUsyTy40Hc62DP+u0NAbSEwj6w5NoMsHkj5a1cN4FKx1nV3aTnENhaCmIzU+GID5LETy4a9QuNsIYMVc5xdR3H/B5BP1nXFAAzXdIuy/Sg1oz/NOC8Pon1yn4UekUDxyZSmaWdjKcrGye/T9DoZmww+7Kv37zIe/5fnO5CKaDJrsbE0VdH3NZIlLjjI+fwaZ+Md7dC+QbaFLFeXygzqnJUk7lkODg2lQh3wbSffL1duLOEklSSs4gSLV2C/xP3ib5BEbwdwT83dimXCqbGaROY73k/iPiSbgpv1eplsbi+7dGYsGVVGo0+c04W4qz0YlllwsG9+fh6/U3izB6Q9uh+szfZ7A2K//B2+tHWYTiIXhVegU0Q2IblQ1ZwJIyR+cSCI4s+I0vZY3HBtc8g79sg 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)(346002)(366004)(39850400004)(396003)(376002)(136003)(38100700002)(8676002)(31696002)(86362001)(2906002)(316002)(5660300002)(66574015)(478600001)(6486002)(30864003)(186003)(16526019)(36756003)(83380400001)(54906003)(52116002)(6666004)(2616005)(31686004)(66476007)(8936002)(66946007)(66556008)(4326008)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?eVU1RFZCZzhTV281SzdneHRZNFByWnAxemJrQXBuN3ErMFlqMHFyb3lKQy9v?= =?utf-8?B?WnVJYkdQRXJhVjlqTlZCV3h2c3VBZ3VtUjYwYmtxNHBRWFpJVjZzeG14enNN?= =?utf-8?B?MVBYZkpsQjZMNEVDMWlJZXg0elFvZ2xlN1FPaHluN1dkN1RndmcvTk1IRHFy?= =?utf-8?B?VFRhZ0tpVGRsbExlNlRzdlg4QzVMYktJODdUZGZNZlFZZVBFNm9xZ0QzYTBO?= =?utf-8?B?VXhEa2xKc2VXM2MvdWhTVmlLcW9rQmJpd2FzOFBCMWdiY04rUGFTTE51WkVx?= =?utf-8?B?bks3RzJtTENKOFdiV3hYMjFPRG5DbmFidmtSaXp5MmdTU0ZHMDNCakxLV0xY?= =?utf-8?B?L3JnQUxRV1paNGt2MG9ZeFd6WlFrNFBUZVRnZW95NjhYK1RYUFhwMm9ReVAy?= =?utf-8?B?emVCMEg5aVNMamtLVWR3cDg2d1ZObmN1dHA1V0ltcFFnMVh1cHZQYlV4TGdY?= =?utf-8?B?YjRqWnpiSU9WcnhPcnpSYnBlMDlGUU51YmxSWXhvbkRRV3NqTVRsQ1lTcDYr?= =?utf-8?B?YjlwRmRvdkc0RWZBWWRpdDZDYUZVUGZLQVl2ZE81aXd1WCt1eGZRMzQ4SEd2?= =?utf-8?B?U2M2VGNzWWJzelhzU2tkYWN6S3lHeEdLcjd3RktEWkU2MVJpSTRZbDVwa3U2?= =?utf-8?B?VElYL2wvdXVTTDBZUWZiRFIrTThYVnZDNVJFMS92SWIvekprWnNNcTdxbEFQ?= =?utf-8?B?b0pZVDhGMmVVNTVmTTI3LzBJMGovR3Z0SjVXeXlndzJ5TkVuc0R2RVR6ZDFB?= =?utf-8?B?Z1dMcjJ2S1lBL1UrWWZpWkxUYXZRcllmRjF5YVoxMnZTcXFLQnJSVHUrZW5y?= =?utf-8?B?OVVKNDZqZjZHYXVUTURJZ1d5UE5GUzZ4SDlEZDlXdEoxK2E4a0VVNkk4N3FE?= =?utf-8?B?eFlVYVl5UzI4WUVyMVR0QUh5N1NmRmduMGRsbUx1OW40SlptK2F1TWR2U0tG?= =?utf-8?B?MEFoZjFKS1JsYmdscHhEVjNqbjQyTm9VL25SQ2FpVWpRbE5TWU1XV1pyNisv?= =?utf-8?B?TGJrRG9HZXM4QlR4cG1ZRWVDWnU1MlhnSmpoUTAvWUk4WUl4N0ZIMjFITXRn?= =?utf-8?B?b2hFOEFMZ3BvbURid1dqZG5OakJGNzcySFF4eW1raWFzZWgvb0FzUksxQ1Qv?= =?utf-8?B?YVJrY3FjYStWdkdTQWg1ZWEwMzJkM3pkaUF1V2VTQTRrcDh0QVdESFViUFBx?= =?utf-8?B?VVdzQnVIY0VUNTdwM0lTc004YWNpcTF1TzdMSEpodjhWamRvdFhjUFhWcXd3?= =?utf-8?B?NkVWaytQbllIaDdyckRaN1Jjd3Z1Vm1RV2s0c0pmRmYydDk1eWJmNVcvSno2?= =?utf-8?B?azd4T0xpamJpVUVyRDcxclI1cDFZL0lFekEwbkhCcjJ2eXlJY29Ram0vVGt3?= =?utf-8?B?SmRVcENzakFWdGZUWE5IRVJ6SmdUUjA3WEdGeVBXYkJuRG1IVHJrNmpicFZJ?= =?utf-8?B?RWpxK3dxaTcvNWNtTlFzT1c2Nlczek1uSE4xcnFiVndhM1lRdjRPWkUrOVo1?= =?utf-8?B?NnVnOXE0ZWVyTEtuOW1abDdNQUxDMm53V2xMdXliNUxnZ3VqcFhxYVl0eUFT?= =?utf-8?B?MHZveGZTMGRBOHE3SjNzajF4YnA4NXVxSlNtbnhtNHJ6Ty9pd3hvVzJ1SS9v?= =?utf-8?B?bVpjTVl2c3FlblpHY09vSzh4RmdtOFBxMk1aRWxHQXVtSE1JV1ZGck5sZVhi?= =?utf-8?B?Sm1sVWEzN2cvT2lhakllSWU2QnBkaytjRVRqZlVWY2NLbzcveXRxTTZGM3FV?= =?utf-8?B?K1ZQcExKc2FtUE1QTUZzNGh2eGpzU2VRZEVQT3I4R0tsRnR1RFdTWUJJcndL?= =?utf-8?B?TkZPalIyN3A1S1BtSTZpTWdGUU9teWY4L2pWV2RYc29wV24vYmZuc2VmeE16?= =?utf-8?Q?ZfP+xaRxggILl?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: df03eab4-bb63-43a3-c5c6-08d920527071 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2021 14:27:49.9065 (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: YnyXhjd/XGTFEW97z1Kdb8l17BzVb+HKlI5Kp3CFdF9Q8LYNOdCtG4w+ZNxoJOdy X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4303 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: Daniel Vetter , Matthew Auld Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Am 26.05.21 um 13:32 schrieb Thomas Hellström: > Memcpy from wc will be used as well by TTM memcpy. > Move it to core drm, and make the interface do the right thing > even on !X86. > > Cc: Christian König > Cc: Daniel Vetter > Cc: Dave Airlie > Signed-off-by: Thomas Hellström > Reviewed-by: Matthew Auld Acked-by: Christian König > --- > v4: > - Fix !X86 path (Reported by Matthew Auld) > --- > drivers/gpu/drm/Makefile | 2 +- > drivers/gpu/drm/drm_drv.c | 2 + > .../drm/{i915/i915_memcpy.c => drm_memcpy.c} | 63 ++++++++++++----- > drivers/gpu/drm/i915/Makefile | 1 - > .../gpu/drm/i915/gem/i915_gem_execbuffer.c | 4 +- > drivers/gpu/drm/i915/gem/i915_gem_object.c | 5 +- > drivers/gpu/drm/i915/gt/selftest_reset.c | 7 +- > drivers/gpu/drm/i915/gt/uc/intel_guc_log.c | 11 +-- > drivers/gpu/drm/i915/i915_cmd_parser.c | 4 +- > drivers/gpu/drm/i915/i915_drv.c | 2 - > drivers/gpu/drm/i915/i915_gpu_error.c | 8 +-- > drivers/gpu/drm/i915/i915_memcpy.h | 34 ---------- > .../drm/i915/selftests/intel_memory_region.c | 7 +- > include/drm/drm_memcpy.h | 68 +++++++++++++++++++ > 14 files changed, 142 insertions(+), 76 deletions(-) > rename drivers/gpu/drm/{i915/i915_memcpy.c => drm_memcpy.c} (70%) > delete mode 100644 drivers/gpu/drm/i915/i915_memcpy.h > create mode 100644 include/drm/drm_memcpy.h > > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > index a91cc7684904..f3ab8586c3d7 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -18,7 +18,7 @@ drm-y := drm_aperture.o drm_auth.o drm_cache.o \ > drm_dumb_buffers.o drm_mode_config.o drm_vblank.o \ > drm_syncobj.o drm_lease.o drm_writeback.o drm_client.o \ > drm_client_modeset.o drm_atomic_uapi.o drm_hdcp.o \ > - drm_managed.o drm_vblank_work.o > + drm_managed.o drm_vblank_work.o drm_memcpy.o \ > > drm-$(CONFIG_DRM_LEGACY) += drm_agpsupport.o drm_bufs.o drm_context.o drm_dma.o \ > drm_legacy_misc.o drm_lock.o drm_memory.o drm_scatter.o \ > diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c > index 3d8d68a98b95..351cc2900cf1 100644 > --- a/drivers/gpu/drm/drm_drv.c > +++ b/drivers/gpu/drm/drm_drv.c > @@ -40,6 +40,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -1041,6 +1042,7 @@ static int __init drm_core_init(void) > > drm_connector_ida_init(); > idr_init(&drm_minors_idr); > + drm_memcpy_init_early(); > > ret = drm_sysfs_init(); > if (ret < 0) { > diff --git a/drivers/gpu/drm/i915/i915_memcpy.c b/drivers/gpu/drm/drm_memcpy.c > similarity index 70% > rename from drivers/gpu/drm/i915/i915_memcpy.c > rename to drivers/gpu/drm/drm_memcpy.c > index 1b021a4902de..740377749caa 100644 > --- a/drivers/gpu/drm/i915/i915_memcpy.c > +++ b/drivers/gpu/drm/drm_memcpy.c > @@ -1,3 +1,4 @@ > +// SPDX-License-Identifier: MIT > /* > * Copyright © 2016 Intel Corporation > * > @@ -22,16 +23,12 @@ > * > */ > > +#ifdef CONFIG_X86 > +#include > #include > #include > > -#include "i915_memcpy.h" > - > -#if IS_ENABLED(CONFIG_DRM_I915_DEBUG) > -#define CI_BUG_ON(expr) BUG_ON(expr) > -#else > -#define CI_BUG_ON(expr) BUILD_BUG_ON_INVALID(expr) > -#endif > +#include "drm/drm_memcpy.h" > > static DEFINE_STATIC_KEY_FALSE(has_movntdqa); > > @@ -94,23 +91,24 @@ static void __memcpy_ntdqu(void *dst, const void *src, unsigned long len) > } > > /** > - * i915_memcpy_from_wc: perform an accelerated *aligned* read from WC > + * drm_memcpy_from_wc: perform an accelerated *aligned* read from WC > * @dst: destination pointer > * @src: source pointer > * @len: how many bytes to copy > * > - * i915_memcpy_from_wc copies @len bytes from @src to @dst using > + * drm_memcpy_from_wc copies @len bytes from @src to @dst using > * non-temporal instructions where available. Note that all arguments > * (@src, @dst) must be aligned to 16 bytes and @len must be a multiple > * of 16. > * > * To test whether accelerated reads from WC are supported, use > - * i915_memcpy_from_wc(NULL, NULL, 0); > + * drm_memcpy_from_wc(NULL, NULL, 0); > + * This interface is intended for memremapped memory without the __iomem tag. > * > * Returns true if the copy was successful, false if the preconditions > * are not met. > */ > -bool i915_memcpy_from_wc(void *dst, const void *src, unsigned long len) > +bool drm_memcpy_from_wc(void *dst, const void *src, unsigned long len) > { > if (unlikely(((unsigned long)dst | (unsigned long)src | len) & 15)) > return false; > @@ -123,24 +121,53 @@ bool i915_memcpy_from_wc(void *dst, const void *src, unsigned long len) > > return false; > } > +EXPORT_SYMBOL(drm_memcpy_from_wc); > > /** > - * i915_unaligned_memcpy_from_wc: perform a mostly accelerated read from WC > + * drm_memcpy_from_wc_dbm: perform an accelerated *aligned* read from WC with > + * struct dma_buf_map arguments. > + * @dst: destination map > + * @src: source map > + * @len: how many bytes to copy > + * > + * This is identical to drm_memcpy_from_wc, except it's intended for > + * potentially ioremapped memory rather than memremapped memory. > + * > + * Returns true if the copy was successful, false if the preconditions > + * are not met. > + */ > +bool drm_memcpy_from_wc_dbm(struct dma_buf_map *dst, > + const struct dma_buf_map *src, > + unsigned long len) > +{ > + /* For X86 we can safely drop __iomem */ > + return drm_memcpy_from_wc(dst->is_iomem ? > + (void __force *)dst->vaddr_iomem : > + dst->vaddr, > + src->is_iomem ? > + (void const __force *)src->vaddr_iomem : > + src->vaddr, > + len); > +} > +EXPORT_SYMBOL(drm_memcpy_from_wc_dbm); > + > +/** > + * drm_unaligned_memcpy_from_wc: perform a mostly accelerated read from WC > * @dst: destination pointer > * @src: source pointer > * @len: how many bytes to copy > * > - * Like i915_memcpy_from_wc(), the unaligned variant copies @len bytes from > + * Like drm_memcpy_from_wc(), the unaligned variant copies @len bytes from > * @src to @dst using * non-temporal instructions where available, but > * accepts that its arguments may not be aligned, but are valid for the > * potential 16-byte read past the end. > + * > + * This interface is intended for mremapped memory without the __iomem tag. > */ > -void i915_unaligned_memcpy_from_wc(void *dst, const void *src, unsigned long len) > +void drm_unaligned_memcpy_from_wc(void *dst, const void *src, unsigned long len) > { > unsigned long addr; > > - CI_BUG_ON(!i915_has_memcpy_from_wc()); > - > addr = (unsigned long)src; > if (!IS_ALIGNED(addr, 16)) { > unsigned long x = min(ALIGN(addr, 16) - addr, len); > @@ -155,8 +182,9 @@ void i915_unaligned_memcpy_from_wc(void *dst, const void *src, unsigned long len > if (likely(len)) > __memcpy_ntdqu(dst, src, DIV_ROUND_UP(len, 16)); > } > +EXPORT_SYMBOL(drm_unaligned_memcpy_from_wc); > > -void i915_memcpy_init_early(struct drm_i915_private *dev_priv) > +void drm_memcpy_init_early(void) > { > /* > * Some hypervisors (e.g. KVM) don't support VEX-prefix instructions > @@ -166,3 +194,4 @@ void i915_memcpy_init_early(struct drm_i915_private *dev_priv) > !boot_cpu_has(X86_FEATURE_HYPERVISOR)) > static_branch_enable(&has_movntdqa); > } > +#endif > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index 4f22cac1c49b..ebc19bd5fff4 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -61,7 +61,6 @@ i915-y += i915_drv.o \ > # core library code > i915-y += \ > dma_resv_utils.o \ > - i915_memcpy.o \ > i915_mm.o \ > i915_sw_fence.o \ > i915_sw_fence_work.o \ > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > index 297143511f99..77285e421fb8 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c > @@ -10,6 +10,7 @@ > #include > > #include > +#include > > #include "display/intel_frontbuffer.h" > > @@ -28,7 +29,6 @@ > #include "i915_sw_fence_work.h" > #include "i915_trace.h" > #include "i915_user_extensions.h" > -#include "i915_memcpy.h" > > struct eb_vma { > struct i915_vma *vma; > @@ -2503,7 +2503,7 @@ static int eb_parse_pipeline(struct i915_execbuffer *eb, > !(batch->cache_coherent & I915_BO_CACHE_COHERENT_FOR_READ); > > pw->batch_map = ERR_PTR(-ENODEV); > - if (needs_clflush && i915_has_memcpy_from_wc()) > + if (needs_clflush && drm_has_memcpy_from_wc()) > pw->batch_map = i915_gem_object_pin_map(batch, I915_MAP_WC); > > if (IS_ERR(pw->batch_map)) { > diff --git a/drivers/gpu/drm/i915/gem/i915_gem_object.c b/drivers/gpu/drm/i915/gem/i915_gem_object.c > index 5706d471692d..e9247afb0320 100644 > --- a/drivers/gpu/drm/i915/gem/i915_gem_object.c > +++ b/drivers/gpu/drm/i915/gem/i915_gem_object.c > @@ -24,6 +24,8 @@ > > #include > > +#include > + > #include "display/intel_frontbuffer.h" > #include "i915_drv.h" > #include "i915_gem_clflush.h" > @@ -31,7 +33,6 @@ > #include "i915_gem_mman.h" > #include "i915_gem_object.h" > #include "i915_globals.h" > -#include "i915_memcpy.h" > #include "i915_trace.h" > > static struct i915_global_object { > @@ -374,7 +375,7 @@ i915_gem_object_read_from_page_iomap(struct drm_i915_gem_object *obj, u64 offset > PAGE_SIZE); > > src_ptr = src_map + offset_in_page(offset); > - if (!i915_memcpy_from_wc(dst, (void __force *)src_ptr, size)) > + if (!drm_memcpy_from_wc(dst, (void __force *)src_ptr, size)) > memcpy_fromio(dst, src_ptr, size); > > io_mapping_unmap(src_map); > diff --git a/drivers/gpu/drm/i915/gt/selftest_reset.c b/drivers/gpu/drm/i915/gt/selftest_reset.c > index 8784257ec808..92ada67a3835 100644 > --- a/drivers/gpu/drm/i915/gt/selftest_reset.c > +++ b/drivers/gpu/drm/i915/gt/selftest_reset.c > @@ -5,9 +5,10 @@ > > #include > > +#include > + > #include "gem/i915_gem_stolen.h" > > -#include "i915_memcpy.h" > #include "i915_selftest.h" > #include "intel_gpu_commands.h" > #include "selftests/igt_reset.h" > @@ -99,7 +100,7 @@ __igt_reset_stolen(struct intel_gt *gt, > memset_io(s, STACK_MAGIC, PAGE_SIZE); > > in = (void __force *)s; > - if (i915_memcpy_from_wc(tmp, in, PAGE_SIZE)) > + if (drm_memcpy_from_wc(tmp, in, PAGE_SIZE)) > in = tmp; > crc[page] = crc32_le(0, in, PAGE_SIZE); > > @@ -135,7 +136,7 @@ __igt_reset_stolen(struct intel_gt *gt, > PAGE_SIZE); > > in = (void __force *)s; > - if (i915_memcpy_from_wc(tmp, in, PAGE_SIZE)) > + if (drm_memcpy_from_wc(tmp, in, PAGE_SIZE)) > in = tmp; > x = crc32_le(0, in, PAGE_SIZE); > > diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c > index c36d5eb5bbb9..f045e42be6ca 100644 > --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c > +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c > @@ -5,9 +5,10 @@ > > #include > > +#include > + > #include "gt/intel_gt.h" > #include "i915_drv.h" > -#include "i915_memcpy.h" > #include "intel_guc_log.h" > > static void guc_log_capture_logs(struct intel_guc_log *log); > @@ -295,13 +296,13 @@ static void guc_read_update_log_buffer(struct intel_guc_log *log) > > /* Just copy the newly written data */ > if (read_offset > write_offset) { > - i915_memcpy_from_wc(dst_data, src_data, write_offset); > + drm_memcpy_from_wc(dst_data, src_data, write_offset); > bytes_to_copy = buffer_size - read_offset; > } else { > bytes_to_copy = write_offset - read_offset; > } > - i915_memcpy_from_wc(dst_data + read_offset, > - src_data + read_offset, bytes_to_copy); > + drm_memcpy_from_wc(dst_data + read_offset, > + src_data + read_offset, bytes_to_copy); > > src_data += buffer_size; > dst_data += buffer_size; > @@ -569,7 +570,7 @@ int intel_guc_log_relay_open(struct intel_guc_log *log) > * it should be present on the chipsets supporting GuC based > * submisssions. > */ > - if (!i915_has_memcpy_from_wc()) { > + if (!drm_has_memcpy_from_wc()) { > ret = -ENXIO; > goto out_unlock; > } > diff --git a/drivers/gpu/drm/i915/i915_cmd_parser.c b/drivers/gpu/drm/i915/i915_cmd_parser.c > index 5b4b2bd46e7c..98653f1a2b1d 100644 > --- a/drivers/gpu/drm/i915/i915_cmd_parser.c > +++ b/drivers/gpu/drm/i915/i915_cmd_parser.c > @@ -24,12 +24,12 @@ > * Brad Volkin > * > */ > +#include > > #include "gt/intel_engine.h" > #include "gt/intel_gpu_commands.h" > > #include "i915_drv.h" > -#include "i915_memcpy.h" > > /** > * DOC: batch buffer command parser > @@ -1152,7 +1152,7 @@ static u32 *copy_batch(struct drm_i915_gem_object *dst_obj, > > if (src) { > GEM_BUG_ON(!needs_clflush); > - i915_unaligned_memcpy_from_wc(dst, src + offset, length); > + drm_unaligned_memcpy_from_wc(dst, src + offset, length); > } else { > struct scatterlist *sg; > void *ptr; > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index 30c349137be2..68639ed0bdec 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -72,7 +72,6 @@ > #include "i915_drv.h" > #include "i915_ioc32.h" > #include "i915_irq.h" > -#include "i915_memcpy.h" > #include "i915_perf.h" > #include "i915_query.h" > #include "i915_suspend.h" > @@ -325,7 +324,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv) > mutex_init(&dev_priv->pps_mutex); > mutex_init(&dev_priv->hdcp_comp_mutex); > > - i915_memcpy_init_early(dev_priv); > intel_runtime_pm_init_early(&dev_priv->runtime_pm); > > ret = i915_workqueues_init(dev_priv); > diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c > index 8b964e355cb5..7c1b44545bab 100644 > --- a/drivers/gpu/drm/i915/i915_gpu_error.c > +++ b/drivers/gpu/drm/i915/i915_gpu_error.c > @@ -34,6 +34,7 @@ > #include > #include > > +#include > #include > > #include "display/intel_dmc.h" > @@ -46,7 +47,6 @@ > > #include "i915_drv.h" > #include "i915_gpu_error.h" > -#include "i915_memcpy.h" > #include "i915_scatterlist.h" > > #define ALLOW_FAIL (GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN) > @@ -255,7 +255,7 @@ static bool compress_init(struct i915_vma_compress *c) > } > > c->tmp = NULL; > - if (i915_has_memcpy_from_wc()) > + if (drm_has_memcpy_from_wc()) > c->tmp = pool_alloc(&c->pool, ALLOW_FAIL); > > return true; > @@ -295,7 +295,7 @@ static int compress_page(struct i915_vma_compress *c, > struct z_stream_s *zstream = &c->zstream; > > zstream->next_in = src; > - if (wc && c->tmp && i915_memcpy_from_wc(c->tmp, src, PAGE_SIZE)) > + if (wc && c->tmp && drm_memcpy_from_wc(c->tmp, src, PAGE_SIZE)) > zstream->next_in = c->tmp; > zstream->avail_in = PAGE_SIZE; > > @@ -395,7 +395,7 @@ static int compress_page(struct i915_vma_compress *c, > if (!ptr) > return -ENOMEM; > > - if (!(wc && i915_memcpy_from_wc(ptr, src, PAGE_SIZE))) > + if (!(wc && drm_memcpy_from_wc(ptr, src, PAGE_SIZE))) > memcpy(ptr, src, PAGE_SIZE); > dst->pages[dst->page_count++] = ptr; > cond_resched(); > diff --git a/drivers/gpu/drm/i915/i915_memcpy.h b/drivers/gpu/drm/i915/i915_memcpy.h > deleted file mode 100644 > index 3df063a3293b..000000000000 > --- a/drivers/gpu/drm/i915/i915_memcpy.h > +++ /dev/null > @@ -1,34 +0,0 @@ > -/* SPDX-License-Identifier: MIT */ > -/* > - * Copyright © 2019 Intel Corporation > - */ > - > -#ifndef __I915_MEMCPY_H__ > -#define __I915_MEMCPY_H__ > - > -#include > - > -struct drm_i915_private; > - > -void i915_memcpy_init_early(struct drm_i915_private *i915); > - > -bool i915_memcpy_from_wc(void *dst, const void *src, unsigned long len); > -void i915_unaligned_memcpy_from_wc(void *dst, const void *src, unsigned long len); > - > -/* The movntdqa instructions used for memcpy-from-wc require 16-byte alignment, > - * as well as SSE4.1 support. i915_memcpy_from_wc() will report if it cannot > - * perform the operation. To check beforehand, pass in the parameters to > - * to i915_can_memcpy_from_wc() - since we only care about the low 4 bits, > - * you only need to pass in the minor offsets, page-aligned pointers are > - * always valid. > - * > - * For just checking for SSE4.1, in the foreknowledge that the future use > - * will be correctly aligned, just use i915_has_memcpy_from_wc(). > - */ > -#define i915_can_memcpy_from_wc(dst, src, len) \ > - i915_memcpy_from_wc((void *)((unsigned long)(dst) | (unsigned long)(src) | (len)), NULL, 0) > - > -#define i915_has_memcpy_from_wc() \ > - i915_memcpy_from_wc(NULL, NULL, 0) > - > -#endif /* __I915_MEMCPY_H__ */ > diff --git a/drivers/gpu/drm/i915/selftests/intel_memory_region.c b/drivers/gpu/drm/i915/selftests/intel_memory_region.c > index c85d516b85cd..6bb399e9be78 100644 > --- a/drivers/gpu/drm/i915/selftests/intel_memory_region.c > +++ b/drivers/gpu/drm/i915/selftests/intel_memory_region.c > @@ -6,6 +6,8 @@ > #include > #include > > +#include > + > #include "../i915_selftest.h" > > #include "mock_drm.h" > @@ -20,7 +22,6 @@ > #include "gem/selftests/mock_context.h" > #include "gt/intel_engine_user.h" > #include "gt/intel_gt.h" > -#include "i915_memcpy.h" > #include "selftests/igt_flush_test.h" > #include "selftests/i915_random.h" > > @@ -901,7 +902,7 @@ static inline void igt_memcpy(void *dst, const void *src, size_t size) > > static inline void igt_memcpy_from_wc(void *dst, const void *src, size_t size) > { > - i915_memcpy_from_wc(dst, src, size); > + drm_memcpy_from_wc(dst, src, size); > } > > static int _perf_memcpy(struct intel_memory_region *src_mr, > @@ -925,7 +926,7 @@ static int _perf_memcpy(struct intel_memory_region *src_mr, > { > "memcpy_from_wc", > igt_memcpy_from_wc, > - !i915_has_memcpy_from_wc(), > + !drm_has_memcpy_from_wc(), > }, > }; > struct drm_i915_gem_object *src, *dst; > diff --git a/include/drm/drm_memcpy.h b/include/drm/drm_memcpy.h > new file mode 100644 > index 000000000000..fe5ed1e89ce6 > --- /dev/null > +++ b/include/drm/drm_memcpy.h > @@ -0,0 +1,68 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2019 Intel Corporation > + */ > + > +#ifndef __DRM_MEMCPY_H__ > +#define __DRM_MEMCPY_H__ > + > +#include > + > +struct dma_buf_map; > + > +#ifdef CONFIG_X86 > +bool drm_memcpy_from_wc(void *dst, const void *src, unsigned long len); > +bool drm_memcpy_from_wc_dbm(struct dma_buf_map *dst, > + const struct dma_buf_map *src, > + unsigned long len); > +void drm_unaligned_memcpy_from_wc(void *dst, const void *src, unsigned long len); > + > +/* The movntdqa instructions used for memcpy-from-wc require 16-byte alignment, > + * as well as SSE4.1 support. drm_memcpy_from_wc() will report if it cannot > + * perform the operation. To check beforehand, pass in the parameters to > + * drm_can_memcpy_from_wc() - since we only care about the low 4 bits, > + * you only need to pass in the minor offsets, page-aligned pointers are > + * always valid. > + * > + * For just checking for SSE4.1, in the foreknowledge that the future use > + * will be correctly aligned, just use drm_has_memcpy_from_wc(). > + */ > +#define drm_can_memcpy_from_wc(dst, src, len) \ > + drm_memcpy_from_wc((void *)((unsigned long)(dst) | (unsigned long)(src) | (len)), NULL, 0) > + > +#define drm_has_memcpy_from_wc() \ > + drm_memcpy_from_wc(NULL, NULL, 0) > + > +void drm_memcpy_init_early(void); > + > +#else > + > +static inline > +bool drm_memcpy_from_wc(void *dst, const void *src, unsigned long len) > +{ > + return false; > +} > + > +static inline > +bool drm_memcpy_from_wc_dbm(void *dst, const void *src, unsigned long len) > +{ > + return false; > +} > + > +static inline > +bool drm_can_memcpy_from_wc_dbm(void *dst, const void *src, unsigned long len) > +{ > + return false; > +} > + > +static inline > +bool drm_has_memcpy_from_wc(void) > +{ > + return false; > +} > + > +#define drm_has_memcpy_from_wc() (false) > +#define drm_unaligned_memcpy_from_wc(_dst, _src, _len) WARN_ON(1) > +#define drm_memcpy_init_early() do {} while (0) > +#endif /* CONFIG_X86 */ > +#endif /* __DRM_MEMCPY_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.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 50762C47082 for ; Wed, 26 May 2021 14:27:53 +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 06B5061028 for ; Wed, 26 May 2021 14:27:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 06B5061028 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 98E2D6ED88; Wed, 26 May 2021 14:27:52 +0000 (UTC) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2056.outbound.protection.outlook.com [40.107.92.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id F21066ED88; Wed, 26 May 2021 14:27:51 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KCBDA85z+9sGfEu+sstvUa7BBmWM5GVQubQwFAjrb6wE3mUT+UDmAKrQfbJXJWYBO9493ySeuB239dmok1AKvMKLDXmjA0pJdNSjXCHZpFpawM7MHLDIbj7S89SiFdFRQOJ7HJkLpNBvR8lT+Ig8AYAmLiuDmYtF9qe+KCbi1yt6LDuWTHgkbYGqg4+DusIZAgVT7B2yrqHfcjNuVCb7UiGO0/tWRkB5+CkUccHG1qUQFissMrXlTa5+KsokHPRiQqCt3374BvVN7DK8fN70YR55Pm0a9ySH/pZge4oVnKGuJU+1Rk3pSvg+e7ARdgdnnSEXPfaORGqq1zSznB4X5A== 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=KR8KA4RdC2b5eQe+/I9uhspP2vn8Ld8/UzzP4UGlE8A=; b=Cayg+rLornlPGggwuveD2zb6xrmKirInHc2s+vPpJZ2xqsQTf+xbdCvOB4uwzChSwyXUpRHIGuFCC4qQfeLLYj1Y2MEoiUKcK2nXBQheNfcOsKmEwSkFPxysV3WAyDYlKXoaOwQaiTtxLfZl1PdNA31/yLV9n+eYX09Sjk+FhvGfJXMFLb4QvXp/Q02GYAErzr9AcuDKXu631+s9EqmeJqBrz/4thN6krYvb3kQB3tJ2ImjoAmiU1+hn/hfMTcF5ayW7EslnZ16rwkyKyMJewYvVMkIo4mDWkyLbbooXeDsuW9iC3RtIOLQO8d54akXNtbMPc7hSsYmZr6gfhfSyzg== 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=KR8KA4RdC2b5eQe+/I9uhspP2vn8Ld8/UzzP4UGlE8A=; b=yzlrjZC8yAb4Rf3m5wuJaZtpLHGHKRPBpRaAk9tQ9CaxS0mdveLtBuT7tNvE3Mp+xgD12VoHzUeBVOk7DXlfpgSwfEfD6l6HknQU7zpI1c6xGbYZZeEb+qcu1Fyz4VeR4dDJvyfxnwiZmIGBIQXLUcYStKROLxxMH3eMajprwmU= 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 MN2PR12MB4303.namprd12.prod.outlook.com (2603:10b6:208:198::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4150.25; Wed, 26 May 2021 14:27:50 +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.4150.027; Wed, 26 May 2021 14:27:49 +0000 To: =?UTF-8?Q?Thomas_Hellstr=c3=b6m?= , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210526113259.1661914-1-thomas.hellstrom@linux.intel.com> <20210526113259.1661914-8-thomas.hellstrom@linux.intel.com> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: Date: Wed, 26 May 2021 16:27:44 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 In-Reply-To: <20210526113259.1661914-8-thomas.hellstrom@linux.intel.com> Content-Language: en-US X-Originating-IP: [2a02:908:1252:fb60:1950:35e:cae9:5bed] X-ClientProxiedBy: PR0P264CA0218.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::14) 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:1950:35e:cae9:5bed] (2a02:908:1252:fb60:1950:35e:cae9:5bed) by PR0P264CA0218.FRAP264.PROD.OUTLOOK.COM (2603:10a6:100:1e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4173.20 via Frontend Transport; Wed, 26 May 2021 14:27:48 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: df03eab4-bb63-43a3-c5c6-08d920527071 X-MS-TrafficTypeDiagnostic: MN2PR12MB4303: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:519; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EyywgeZ0tFmoqw4M4k86SjmbSri7kSSRo9DUfJnTRr+KpxVJPlvDTX0AtaqhrUx9Cvv8rfjFB1PV8u+A22i9lzJnoBYPknPKDUwI+62aAWCtEmgu/oIPMEzaDvdflDA8yR5TLFLr6tJkUwnzNdvhPdciUyTYLus7PwC1EeOrV0OJYGDrq/B254bvVhGdOVedI9RIOMBwcY+VTgDb9TUMYJrZH1DKFZXV4cad0+9usaEUwjEdK6Kf3OQ0iS1sFMeyLEgyVNtP/71TZkoaJmKvTCKFlcjBDDxMRyhclD0RLjvUsyTy40Hc62DP+u0NAbSEwj6w5NoMsHkj5a1cN4FKx1nV3aTnENhaCmIzU+GID5LETy4a9QuNsIYMVc5xdR3H/B5BP1nXFAAzXdIuy/Sg1oz/NOC8Pon1yn4UekUDxyZSmaWdjKcrGye/T9DoZmww+7Kv37zIe/5fnO5CKaDJrsbE0VdH3NZIlLjjI+fwaZ+Md7dC+QbaFLFeXygzqnJUk7lkODg2lQh3wbSffL1duLOEklSSs4gSLV2C/xP3ib5BEbwdwT83dimXCqbGaROY73k/iPiSbgpv1eplsbi+7dGYsGVVGo0+c04W4qz0YlllwsG9+fh6/U3izB6Q9uh+szfZ7A2K//B2+tHWYTiIXhVegU0Q2IblQ1ZwJIyR+cSCI4s+I0vZY3HBtc8g79sg 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)(346002)(366004)(39850400004)(396003)(376002)(136003)(38100700002)(8676002)(31696002)(86362001)(2906002)(316002)(5660300002)(66574015)(478600001)(6486002)(30864003)(186003)(16526019)(36756003)(83380400001)(54906003)(52116002)(6666004)(2616005)(31686004)(66476007)(8936002)(66946007)(66556008)(4326008)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?eVU1RFZCZzhTV281SzdneHRZNFByWnAxemJrQXBuN3ErMFlqMHFyb3lKQy9v?= =?utf-8?B?WnVJYkdQRXJhVjlqTlZCV3h2c3VBZ3VtUjYwYmtxNHBRWFpJVjZzeG14enNN?= =?utf-8?B?MVBYZkpsQjZMNEVDMWlJZXg0elFvZ2xlN1FPaHluN1dkN1RndmcvTk1IRHFy?= =?utf-8?B?VFRhZ0tpVGRsbExlNlRzdlg4QzVMYktJODdUZGZNZlFZZVBFNm9xZ0QzYTBO?= =?utf-8?B?VXhEa2xKc2VXM2MvdWhTVmlLcW9rQmJpd2FzOFBCMWdiY04rUGFTTE51WkVx?= =?utf-8?B?bks3RzJtTENKOFdiV3hYMjFPRG5DbmFidmtSaXp5MmdTU0ZHMDNCakxLV0xY?= =?utf-8?B?L3JnQUxRV1paNGt2MG9ZeFd6WlFrNFBUZVRnZW95NjhYK1RYUFhwMm9ReVAy?= =?utf-8?B?emVCMEg5aVNMamtLVWR3cDg2d1ZObmN1dHA1V0ltcFFnMVh1cHZQYlV4TGdY?= =?utf-8?B?YjRqWnpiSU9WcnhPcnpSYnBlMDlGUU51YmxSWXhvbkRRV3NqTVRsQ1lTcDYr?= =?utf-8?B?YjlwRmRvdkc0RWZBWWRpdDZDYUZVUGZLQVl2ZE81aXd1WCt1eGZRMzQ4SEd2?= =?utf-8?B?U2M2VGNzWWJzelhzU2tkYWN6S3lHeEdLcjd3RktEWkU2MVJpSTRZbDVwa3U2?= =?utf-8?B?VElYL2wvdXVTTDBZUWZiRFIrTThYVnZDNVJFMS92SWIvekprWnNNcTdxbEFQ?= =?utf-8?B?b0pZVDhGMmVVNTVmTTI3LzBJMGovR3Z0SjVXeXlndzJ5TkVuc0R2RVR6ZDFB?= =?utf-8?B?Z1dMcjJ2S1lBL1UrWWZpWkxUYXZRcllmRjF5YVoxMnZTcXFLQnJSVHUrZW5y?= =?utf-8?B?OVVKNDZqZjZHYXVUTURJZ1d5UE5GUzZ4SDlEZDlXdEoxK2E4a0VVNkk4N3FE?= =?utf-8?B?eFlVYVl5UzI4WUVyMVR0QUh5N1NmRmduMGRsbUx1OW40SlptK2F1TWR2U0tG?= =?utf-8?B?MEFoZjFKS1JsYmdscHhEVjNqbjQyTm9VL25SQ2FpVWpRbE5TWU1XV1pyNisv?= =?utf-8?B?TGJrRG9HZXM4QlR4cG1ZRWVDWnU1MlhnSmpoUTAvWUk4WUl4N0ZIMjFITXRn?= =?utf-8?B?b2hFOEFMZ3BvbURid1dqZG5OakJGNzcySFF4eW1raWFzZWgvb0FzUksxQ1Qv?= =?utf-8?B?YVJrY3FjYStWdkdTQWg1ZWEwMzJkM3pkaUF1V2VTQTRrcDh0QVdESFViUFBx?= =?utf-8?B?VVdzQnVIY0VUNTdwM0lTc004YWNpcTF1TzdMSEpodjhWamRvdFhjUFhWcXd3?= =?utf-8?B?NkVWaytQbllIaDdyckRaN1Jjd3Z1Vm1RV2s0c0pmRmYydDk1eWJmNVcvSno2?= =?utf-8?B?azd4T0xpamJpVUVyRDcxclI1cDFZL0lFekEwbkhCcjJ2eXlJY29Ram0vVGt3?= =?utf-8?B?SmRVcENzakFWdGZUWE5IRVJ6SmdUUjA3WEdGeVBXYkJuRG1IVHJrNmpicFZJ?= =?utf-8?B?RWpxK3dxaTcvNWNtTlFzT1c2Nlczek1uSE4xcnFiVndhM1lRdjRPWkUrOVo1?= =?utf-8?B?NnVnOXE0ZWVyTEtuOW1abDdNQUxDMm53V2xMdXliNUxnZ3VqcFhxYVl0eUFT?= =?utf-8?B?MHZveGZTMGRBOHE3SjNzajF4YnA4NXVxSlNtbnhtNHJ6Ty9pd3hvVzJ1SS9v?= =?utf-8?B?bVpjTVl2c3FlblpHY09vSzh4RmdtOFBxMk1aRWxHQXVtSE1JV1ZGck5sZVhi?= =?utf-8?B?Sm1sVWEzN2cvT2lhakllSWU2QnBkaytjRVRqZlVWY2NLbzcveXRxTTZGM3FV?= =?utf-8?B?K1ZQcExKc2FtUE1QTUZzNGh2eGpzU2VRZEVQT3I4R0tsRnR1RFdTWUJJcndL?= =?utf-8?B?TkZPalIyN3A1S1BtSTZpTWdGUU9teWY4L2pWV2RYc29wV24vYmZuc2VmeE16?= =?utf-8?Q?ZfP+xaRxggILl?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: df03eab4-bb63-43a3-c5c6-08d920527071 X-MS-Exchange-CrossTenant-AuthSource: MN2PR12MB3775.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 May 2021 14:27:49.9065 (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: YnyXhjd/XGTFEW97z1Kdb8l17BzVb+HKlI5Kp3CFdF9Q8LYNOdCtG4w+ZNxoJOdy X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4303 Subject: Re: [Intel-gfx] [PATCH v4 07/15] drm, drm/i915: Move the memcpy_from_wc functionality to core drm 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: Daniel Vetter , Matthew Auld Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" QW0gMjYuMDUuMjEgdW0gMTM6MzIgc2NocmllYiBUaG9tYXMgSGVsbHN0csO2bToKPiBNZW1jcHkg ZnJvbSB3YyB3aWxsIGJlIHVzZWQgYXMgd2VsbCBieSBUVE0gbWVtY3B5Lgo+IE1vdmUgaXQgdG8g Y29yZSBkcm0sIGFuZCBtYWtlIHRoZSBpbnRlcmZhY2UgZG8gdGhlIHJpZ2h0IHRoaW5nCj4gZXZl biBvbiAhWDg2Lgo+Cj4gQ2M6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1k LmNvbT4KPiBDYzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzog RGF2ZSBBaXJsaWUgPGFpcmxpZWRAZ21haWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBI ZWxsc3Ryw7ZtIDx0aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KPiBSZXZpZXdlZC1i eTogTWF0dGhldyBBdWxkIDxtYXR0aGV3LmF1bGRAaW50ZWwuY29tPgoKQWNrZWQtYnk6IENocmlz dGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2VuaWdAYW1kLmNvbT4KCj4gLS0tCj4gdjQ6Cj4gLSBG aXggIVg4NiBwYXRoIChSZXBvcnRlZCBieSBNYXR0aGV3IEF1bGQpCj4gLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQo+ICAgZHJpdmVy cy9ncHUvZHJtL2RybV9kcnYuYyAgICAgICAgICAgICAgICAgICAgIHwgIDIgKwo+ICAgLi4uL2Ry bS97aTkxNS9pOTE1X21lbWNweS5jID0+IGRybV9tZW1jcHkuY30gIHwgNjMgKysrKysrKysrKysr LS0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8 ICAxIC0KPiAgIC4uLi9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyAgICB8 ICA0ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fb2JqZWN0LmMgICAg fCAgNSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYyAgICAg IHwgIDcgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYyAg ICB8IDExICstLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMgICAg ICAgIHwgIDQgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAgICAg ICAgICB8ICAyIC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICAg ICAgICB8ICA4ICstLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9tZW1jcHkuaCAgICAg ICAgICAgIHwgMzQgLS0tLS0tLS0tLQo+ICAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9t ZW1vcnlfcmVnaW9uLmMgIHwgIDcgKy0KPiAgIGluY2x1ZGUvZHJtL2RybV9tZW1jcHkuaCAgICAg ICAgICAgICAgICAgICAgICB8IDY4ICsrKysrKysrKysrKysrKysrKysKPiAgIDE0IGZpbGVzIGNo YW5nZWQsIDE0MiBpbnNlcnRpb25zKCspLCA3NiBkZWxldGlvbnMoLSkKPiAgIHJlbmFtZSBkcml2 ZXJzL2dwdS9kcm0ve2k5MTUvaTkxNV9tZW1jcHkuYyA9PiBkcm1fbWVtY3B5LmN9ICg3MCUpCj4g ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9tZW1jcHkuaAo+ ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9tZW1jcHkuaAo+Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmls ZQo+IGluZGV4IGE5MWNjNzY4NDkwNC4uZjNhYjg1ODZjM2Q3IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+IEBA IC0xOCw3ICsxOCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hcGVydHVyZS5vIGRybV9hdXRoLm8g ZHJtX2NhY2hlLm8gXAo+ICAgCQlkcm1fZHVtYl9idWZmZXJzLm8gZHJtX21vZGVfY29uZmlnLm8g ZHJtX3ZibGFuay5vIFwKPiAgIAkJZHJtX3N5bmNvYmoubyBkcm1fbGVhc2UubyBkcm1fd3JpdGVi YWNrLm8gZHJtX2NsaWVudC5vIFwKPiAgIAkJZHJtX2NsaWVudF9tb2Rlc2V0Lm8gZHJtX2F0b21p Y191YXBpLm8gZHJtX2hkY3AubyBcCj4gLQkJZHJtX21hbmFnZWQubyBkcm1fdmJsYW5rX3dvcmsu bwo+ICsJCWRybV9tYW5hZ2VkLm8gZHJtX3ZibGFua193b3JrLm8gZHJtX21lbWNweS5vIFwKPiAg IAo+ICAgZHJtLSQoQ09ORklHX0RSTV9MRUdBQ1kpICs9IGRybV9hZ3BzdXBwb3J0Lm8gZHJtX2J1 ZnMubyBkcm1fY29udGV4dC5vIGRybV9kbWEubyBcCj4gICAJCQkgICAgZHJtX2xlZ2FjeV9taXNj Lm8gZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3NjYXR0ZXIubyBcCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4g aW5kZXggM2Q4ZDY4YTk4Yjk1Li4zNTFjYzI5MDBjZjEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiBAQCAt NDAsNiArNDAsNyBAQAo+ICAgI2luY2x1ZGUgPGRybS9kcm1fZHJ2Lmg+Cj4gICAjaW5jbHVkZSA8 ZHJtL2RybV9maWxlLmg+Cj4gICAjaW5jbHVkZSA8ZHJtL2RybV9tYW5hZ2VkLmg+Cj4gKyNpbmNs dWRlIDxkcm0vZHJtX21lbWNweS5oPgo+ICAgI2luY2x1ZGUgPGRybS9kcm1fbW9kZV9vYmplY3Qu aD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gICAKPiBAQCAtMTA0MSw2ICsxMDQy LDcgQEAgc3RhdGljIGludCBfX2luaXQgZHJtX2NvcmVfaW5pdCh2b2lkKQo+ICAgCj4gICAJZHJt X2Nvbm5lY3Rvcl9pZGFfaW5pdCgpOwo+ICAgCWlkcl9pbml0KCZkcm1fbWlub3JzX2lkcik7Cj4g Kwlkcm1fbWVtY3B5X2luaXRfZWFybHkoKTsKPiAgIAo+ICAgCXJldCA9IGRybV9zeXNmc19pbml0 KCk7Cj4gICAJaWYgKHJldCA8IDApIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9tZW1jcHkuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtY3B5LmMKPiBzaW1pbGFy aXR5IGluZGV4IDcwJQo+IHJlbmFtZSBmcm9tIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfbWVt Y3B5LmMKPiByZW5hbWUgdG8gZHJpdmVycy9ncHUvZHJtL2RybV9tZW1jcHkuYwo+IGluZGV4IDFi MDIxYTQ5MDJkZS4uNzQwMzc3NzQ5Y2FhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfbWVtY3B5LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbWNweS5jCj4g QEAgLTEsMyArMSw0IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQKPiAgIC8q Cj4gICAgKiBDb3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ICAgICoKPiBAQCAt MjIsMTYgKzIzLDEyIEBACj4gICAgKgo+ICAgICovCj4gICAKPiArI2lmZGVmIENPTkZJR19YODYK PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYtbWFwLmg+Cj4gICAjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Cj4gICAjaW5jbHVkZSA8YXNtL2ZwdS9hcGkuaD4KPiAgIAo+IC0jaW5jbHVkZSAiaTkx NV9tZW1jcHkuaCIKPiAtCj4gLSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVRykK PiAtI2RlZmluZSBDSV9CVUdfT04oZXhwcikgQlVHX09OKGV4cHIpCj4gLSNlbHNlCj4gLSNkZWZp bmUgQ0lfQlVHX09OKGV4cHIpIEJVSUxEX0JVR19PTl9JTlZBTElEKGV4cHIpCj4gLSNlbmRpZgo+ ICsjaW5jbHVkZSAiZHJtL2RybV9tZW1jcHkuaCIKPiAgIAo+ICAgc3RhdGljIERFRklORV9TVEFU SUNfS0VZX0ZBTFNFKGhhc19tb3ZudGRxYSk7Cj4gICAKPiBAQCAtOTQsMjMgKzkxLDI0IEBAIHN0 YXRpYyB2b2lkIF9fbWVtY3B5X250ZHF1KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNp Z25lZCBsb25nIGxlbikKPiAgIH0KPiAgIAo+ICAgLyoqCj4gLSAqIGk5MTVfbWVtY3B5X2Zyb21f d2M6IHBlcmZvcm0gYW4gYWNjZWxlcmF0ZWQgKmFsaWduZWQqIHJlYWQgZnJvbSBXQwo+ICsgKiBk cm1fbWVtY3B5X2Zyb21fd2M6IHBlcmZvcm0gYW4gYWNjZWxlcmF0ZWQgKmFsaWduZWQqIHJlYWQg ZnJvbSBXQwo+ICAgICogQGRzdDogZGVzdGluYXRpb24gcG9pbnRlcgo+ICAgICogQHNyYzogc291 cmNlIHBvaW50ZXIKPiAgICAqIEBsZW46IGhvdyBtYW55IGJ5dGVzIHRvIGNvcHkKPiAgICAqCj4g LSAqIGk5MTVfbWVtY3B5X2Zyb21fd2MgY29waWVzIEBsZW4gYnl0ZXMgZnJvbSBAc3JjIHRvIEBk c3QgdXNpbmcKPiArICogZHJtX21lbWNweV9mcm9tX3djIGNvcGllcyBAbGVuIGJ5dGVzIGZyb20g QHNyYyB0byBAZHN0IHVzaW5nCj4gICAgKiBub24tdGVtcG9yYWwgaW5zdHJ1Y3Rpb25zIHdoZXJl IGF2YWlsYWJsZS4gTm90ZSB0aGF0IGFsbCBhcmd1bWVudHMKPiAgICAqIChAc3JjLCBAZHN0KSBt dXN0IGJlIGFsaWduZWQgdG8gMTYgYnl0ZXMgYW5kIEBsZW4gbXVzdCBiZSBhIG11bHRpcGxlCj4g ICAgKiBvZiAxNi4KPiAgICAqCj4gICAgKiBUbyB0ZXN0IHdoZXRoZXIgYWNjZWxlcmF0ZWQgcmVh ZHMgZnJvbSBXQyBhcmUgc3VwcG9ydGVkLCB1c2UKPiAtICogaTkxNV9tZW1jcHlfZnJvbV93YyhO VUxMLCBOVUxMLCAwKTsKPiArICogZHJtX21lbWNweV9mcm9tX3djKE5VTEwsIE5VTEwsIDApOwo+ ICsgKiBUaGlzIGludGVyZmFjZSBpcyBpbnRlbmRlZCBmb3IgbWVtcmVtYXBwZWQgbWVtb3J5IHdp dGhvdXQgdGhlIF9faW9tZW0gdGFnLgo+ICAgICoKPiAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUg Y29weSB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgdGhlIHByZWNvbmRpdGlvbnMKPiAgICAqIGFy ZSBub3QgbWV0Lgo+ICAgICovCj4gLWJvb2wgaTkxNV9tZW1jcHlfZnJvbV93Yyh2b2lkICpkc3Qs IGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pCj4gK2Jvb2wgZHJtX21lbWNweV9m cm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbikKPiAg IHsKPiAgIAlpZiAodW5saWtlbHkoKCh1bnNpZ25lZCBsb25nKWRzdCB8ICh1bnNpZ25lZCBsb25n KXNyYyB8IGxlbikgJiAxNSkpCj4gICAJCXJldHVybiBmYWxzZTsKPiBAQCAtMTIzLDI0ICsxMjEs NTMgQEAgYm9vbCBpOTE1X21lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3Jj LCB1bnNpZ25lZCBsb25nIGxlbikKPiAgIAo+ICAgCXJldHVybiBmYWxzZTsKPiAgIH0KPiArRVhQ T1JUX1NZTUJPTChkcm1fbWVtY3B5X2Zyb21fd2MpOwo+ICAgCj4gICAvKioKPiAtICogaTkxNV91 bmFsaWduZWRfbWVtY3B5X2Zyb21fd2M6IHBlcmZvcm0gYSBtb3N0bHkgYWNjZWxlcmF0ZWQgcmVh ZCBmcm9tIFdDCj4gKyAqIGRybV9tZW1jcHlfZnJvbV93Y19kYm06IHBlcmZvcm0gYW4gYWNjZWxl cmF0ZWQgKmFsaWduZWQqIHJlYWQgZnJvbSBXQyB3aXRoCj4gKyAqIHN0cnVjdCBkbWFfYnVmX21h cCBhcmd1bWVudHMuCj4gKyAqIEBkc3Q6IGRlc3RpbmF0aW9uIG1hcAo+ICsgKiBAc3JjOiBzb3Vy Y2UgbWFwCj4gKyAqIEBsZW46IGhvdyBtYW55IGJ5dGVzIHRvIGNvcHkKPiArICoKPiArICogVGhp cyBpcyBpZGVudGljYWwgdG8gZHJtX21lbWNweV9mcm9tX3djLCBleGNlcHQgaXQncyBpbnRlbmRl ZCBmb3IKPiArICogcG90ZW50aWFsbHkgaW9yZW1hcHBlZCBtZW1vcnkgcmF0aGVyIHRoYW4gbWVt cmVtYXBwZWQgbWVtb3J5Lgo+ICsgKgo+ICsgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvcHkgd2Fz IHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIHRoZSBwcmVjb25kaXRpb25zCj4gKyAqIGFyZSBub3QgbWV0 Lgo+ICsgKi8KPiArYm9vbCBkcm1fbWVtY3B5X2Zyb21fd2NfZGJtKHN0cnVjdCBkbWFfYnVmX21h cCAqZHN0LAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IGRtYV9idWZfbWFwICpzcmMsCj4gKwkJCSAg ICB1bnNpZ25lZCBsb25nIGxlbikKPiArewo+ICsJLyogRm9yIFg4NiB3ZSBjYW4gc2FmZWx5IGRy b3AgX19pb21lbSAqLwo+ICsJcmV0dXJuIGRybV9tZW1jcHlfZnJvbV93Yyhkc3QtPmlzX2lvbWVt ID8KPiArCQkJCSAgKHZvaWQgX19mb3JjZSAqKWRzdC0+dmFkZHJfaW9tZW0gOgo+ICsJCQkJICBk c3QtPnZhZGRyLAo+ICsJCQkJICBzcmMtPmlzX2lvbWVtID8KPiArCQkJCSAgKHZvaWQgY29uc3Qg X19mb3JjZSAqKXNyYy0+dmFkZHJfaW9tZW0gOgo+ICsJCQkJICBzcmMtPnZhZGRyLAo+ICsJCQkJ ICBsZW4pOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX21lbWNweV9mcm9tX3djX2RibSk7Cj4g Kwo+ICsvKioKPiArICogZHJtX3VuYWxpZ25lZF9tZW1jcHlfZnJvbV93YzogcGVyZm9ybSBhIG1v c3RseSBhY2NlbGVyYXRlZCByZWFkIGZyb20gV0MKPiAgICAqIEBkc3Q6IGRlc3RpbmF0aW9uIHBv aW50ZXIKPiAgICAqIEBzcmM6IHNvdXJjZSBwb2ludGVyCj4gICAgKiBAbGVuOiBob3cgbWFueSBi eXRlcyB0byBjb3B5Cj4gICAgKgo+IC0gKiBMaWtlIGk5MTVfbWVtY3B5X2Zyb21fd2MoKSwgdGhl IHVuYWxpZ25lZCB2YXJpYW50IGNvcGllcyBAbGVuIGJ5dGVzIGZyb20KPiArICogTGlrZSBkcm1f bWVtY3B5X2Zyb21fd2MoKSwgdGhlIHVuYWxpZ25lZCB2YXJpYW50IGNvcGllcyBAbGVuIGJ5dGVz IGZyb20KPiAgICAqIEBzcmMgdG8gQGRzdCB1c2luZyAqIG5vbi10ZW1wb3JhbCBpbnN0cnVjdGlv bnMgd2hlcmUgYXZhaWxhYmxlLCBidXQKPiAgICAqIGFjY2VwdHMgdGhhdCBpdHMgYXJndW1lbnRz IG1heSBub3QgYmUgYWxpZ25lZCwgYnV0IGFyZSB2YWxpZCBmb3IgdGhlCj4gICAgKiBwb3RlbnRp YWwgMTYtYnl0ZSByZWFkIHBhc3QgdGhlIGVuZC4KPiArICoKPiArICogVGhpcyBpbnRlcmZhY2Ug aXMgaW50ZW5kZWQgZm9yIG1yZW1hcHBlZCBtZW1vcnkgd2l0aG91dCB0aGUgX19pb21lbSB0YWcu Cj4gICAgKi8KPiAtdm9pZCBpOTE1X3VuYWxpZ25lZF9tZW1jcHlfZnJvbV93Yyh2b2lkICpkc3Qs IGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pCj4gK3ZvaWQgZHJtX3VuYWxpZ25l ZF9tZW1jcHlfZnJvbV93Yyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9u ZyBsZW4pCj4gICB7Cj4gICAJdW5zaWduZWQgbG9uZyBhZGRyOwo+ICAgCj4gLQlDSV9CVUdfT04o IWk5MTVfaGFzX21lbWNweV9mcm9tX3djKCkpOwo+IC0KPiAgIAlhZGRyID0gKHVuc2lnbmVkIGxv bmcpc3JjOwo+ICAgCWlmICghSVNfQUxJR05FRChhZGRyLCAxNikpIHsKPiAgIAkJdW5zaWduZWQg bG9uZyB4ID0gbWluKEFMSUdOKGFkZHIsIDE2KSAtIGFkZHIsIGxlbik7Cj4gQEAgLTE1NSw4ICsx ODIsOSBAQCB2b2lkIGk5MTVfdW5hbGlnbmVkX21lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29u c3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbgo+ICAgCWlmIChsaWtlbHkobGVuKSkKPiAg IAkJX19tZW1jcHlfbnRkcXUoZHN0LCBzcmMsIERJVl9ST1VORF9VUChsZW4sIDE2KSk7Cj4gICB9 Cj4gK0VYUE9SVF9TWU1CT0woZHJtX3VuYWxpZ25lZF9tZW1jcHlfZnJvbV93Yyk7Cj4gICAKPiAt dm9pZCBpOTE1X21lbWNweV9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdikKPiArdm9pZCBkcm1fbWVtY3B5X2luaXRfZWFybHkodm9pZCkKPiAgIHsKPiAgIAkvKgo+ ICAgCSAqIFNvbWUgaHlwZXJ2aXNvcnMgKGUuZy4gS1ZNKSBkb24ndCBzdXBwb3J0IFZFWC1wcmVm aXggaW5zdHJ1Y3Rpb25zCj4gQEAgLTE2NiwzICsxOTQsNCBAQCB2b2lkIGk5MTVfbWVtY3B5X2lu aXRfZWFybHkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICAgCSAgICAhYm9v dF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0hZUEVSVklTT1IpKQo+ICAgCQlzdGF0aWNfYnJhbmNoX2Vu YWJsZSgmaGFzX21vdm50ZHFhKTsKPiAgIH0KPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK PiBpbmRleCA0ZjIyY2FjMWM0OWIuLmViYzE5YmQ1ZmZmNCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCj4gQEAgLTYxLDcgKzYxLDYgQEAgaTkxNS15ICs9IGk5MTVfZHJ2Lm8gXAo+ICAgIyBjb3Jl IGxpYnJhcnkgY29kZQo+ICAgaTkxNS15ICs9IFwKPiAgIAlkbWFfcmVzdl91dGlscy5vIFwKPiAt CWk5MTVfbWVtY3B5Lm8gXAo+ICAgCWk5MTVfbW0ubyBcCj4gICAJaTkxNV9zd19mZW5jZS5vIFwK PiAgIAlpOTE1X3N3X2ZlbmNlX3dvcmsubyBcCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n ZW0vaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4gaW5kZXggMjk3MTQzNTExZjk5Li43NzI4NWU0MjFm YjggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2V4ZWNi dWZmZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMKPiBAQCAtMTAsNiArMTAsNyBAQAo+ICAgI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4K PiAgIAo+ICAgI2luY2x1ZGUgPGRybS9kcm1fc3luY29iai5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9tZW1jcHkuaD4KPiAgIAo+ICAgI2luY2x1ZGUgImRpc3BsYXkvaW50ZWxfZnJvbnRidWZmZXIu aCIKPiAgIAo+IEBAIC0yOCw3ICsyOSw2IEBACj4gICAjaW5jbHVkZSAiaTkxNV9zd19mZW5jZV93 b3JrLmgiCj4gICAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgo+ICAgI2luY2x1ZGUgImk5MTVfdXNl cl9leHRlbnNpb25zLmgiCj4gLSNpbmNsdWRlICJpOTE1X21lbWNweS5oIgo+ICAgCj4gICBzdHJ1 Y3QgZWJfdm1hIHsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKPiBAQCAtMjUwMyw3ICsyNTAz LDcgQEAgc3RhdGljIGludCBlYl9wYXJzZV9waXBlbGluZShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVy ICplYiwKPiAgIAkJIShiYXRjaC0+Y2FjaGVfY29oZXJlbnQgJiBJOTE1X0JPX0NBQ0hFX0NPSEVS RU5UX0ZPUl9SRUFEKTsKPiAgIAo+ICAgCXB3LT5iYXRjaF9tYXAgPSBFUlJfUFRSKC1FTk9ERVYp Owo+IC0JaWYgKG5lZWRzX2NsZmx1c2ggJiYgaTkxNV9oYXNfbWVtY3B5X2Zyb21fd2MoKSkKPiAr CWlmIChuZWVkc19jbGZsdXNoICYmIGRybV9oYXNfbWVtY3B5X2Zyb21fd2MoKSkKPiAgIAkJcHct PmJhdGNoX21hcCA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGJhdGNoLCBJOTE1X01BUF9XQyk7 Cj4gICAKPiAgIAlpZiAoSVNfRVJSKHB3LT5iYXRjaF9tYXApKSB7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuYwo+IGluZGV4IDU3MDZkNDcxNjkyZC4uZTkyNDdh ZmIwMzIwIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9v YmplY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3Qu Ywo+IEBAIC0yNCw2ICsyNCw4IEBACj4gICAKPiAgICNpbmNsdWRlIDxsaW51eC9zY2hlZC9tbS5o Pgo+ICAgCj4gKyNpbmNsdWRlIDxkcm0vZHJtX21lbWNweS5oPgo+ICsKPiAgICNpbmNsdWRlICJk aXNwbGF5L2ludGVsX2Zyb250YnVmZmVyLmgiCj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKPiAg ICNpbmNsdWRlICJpOTE1X2dlbV9jbGZsdXNoLmgiCj4gQEAgLTMxLDcgKzMzLDYgQEAKPiAgICNp bmNsdWRlICJpOTE1X2dlbV9tbWFuLmgiCj4gICAjaW5jbHVkZSAiaTkxNV9nZW1fb2JqZWN0Lmgi Cj4gICAjaW5jbHVkZSAiaTkxNV9nbG9iYWxzLmgiCj4gLSNpbmNsdWRlICJpOTE1X21lbWNweS5o Igo+ICAgI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBpOTE1 X2dsb2JhbF9vYmplY3Qgewo+IEBAIC0zNzQsNyArMzc1LDcgQEAgaTkxNV9nZW1fb2JqZWN0X3Jl YWRfZnJvbV9wYWdlX2lvbWFwKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHU2NCBv ZmZzZXQKPiAgIAkJCQkgICAgUEFHRV9TSVpFKTsKPiAgIAo+ICAgCXNyY19wdHIgPSBzcmNfbWFw ICsgb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKPiAtCWlmICghaTkxNV9tZW1jcHlfZnJvbV93Yyhk c3QsICh2b2lkIF9fZm9yY2UgKilzcmNfcHRyLCBzaXplKSkKPiArCWlmICghZHJtX21lbWNweV9m cm9tX3djKGRzdCwgKHZvaWQgX19mb3JjZSAqKXNyY19wdHIsIHNpemUpKQo+ICAgCQltZW1jcHlf ZnJvbWlvKGRzdCwgc3JjX3B0ciwgc2l6ZSk7Cj4gICAKPiAgIAlpb19tYXBwaW5nX3VubWFwKHNy Y19tYXApOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9y ZXNldC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfcmVzZXQuYwo+IGluZGV4 IDg3ODQyNTdlYzgwOC4uOTJhZGE2N2EzODM1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3Jlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9zZWxmdGVzdF9yZXNldC5jCj4gQEAgLTUsOSArNSwxMCBAQAo+ICAgCj4gICAjaW5jbHVkZSA8 bGludXgvY3JjMzIuaD4KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tZW1jcHkuaD4KPiArCj4g ICAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX3N0b2xlbi5oIgo+ICAgCj4gLSNpbmNsdWRlICJpOTE1 X21lbWNweS5oIgo+ICAgI2luY2x1ZGUgImk5MTVfc2VsZnRlc3QuaCIKPiAgICNpbmNsdWRlICJp bnRlbF9ncHVfY29tbWFuZHMuaCIKPiAgICNpbmNsdWRlICJzZWxmdGVzdHMvaWd0X3Jlc2V0Lmgi Cj4gQEAgLTk5LDcgKzEwMCw3IEBAIF9faWd0X3Jlc2V0X3N0b2xlbihzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0LAo+ICAgCQkJbWVtc2V0X2lvKHMsIFNUQUNLX01BR0lDLCBQQUdFX1NJWkUpOwo+ICAgCj4g ICAJCWluID0gKHZvaWQgX19mb3JjZSAqKXM7Cj4gLQkJaWYgKGk5MTVfbWVtY3B5X2Zyb21fd2Mo dG1wLCBpbiwgUEFHRV9TSVpFKSkKPiArCQlpZiAoZHJtX21lbWNweV9mcm9tX3djKHRtcCwgaW4s IFBBR0VfU0laRSkpCj4gICAJCQlpbiA9IHRtcDsKPiAgIAkJY3JjW3BhZ2VdID0gY3JjMzJfbGUo MCwgaW4sIFBBR0VfU0laRSk7Cj4gICAKPiBAQCAtMTM1LDcgKzEzNiw3IEBAIF9faWd0X3Jlc2V0 X3N0b2xlbihzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+ICAgCQkJCSAgICAgIFBBR0VfU0laRSk7Cj4g ICAKPiAgIAkJaW4gPSAodm9pZCBfX2ZvcmNlICopczsKPiAtCQlpZiAoaTkxNV9tZW1jcHlfZnJv bV93Yyh0bXAsIGluLCBQQUdFX1NJWkUpKQo+ICsJCWlmIChkcm1fbWVtY3B5X2Zyb21fd2ModG1w LCBpbiwgUEFHRV9TSVpFKSkKPiAgIAkJCWluID0gdG1wOwo+ICAgCQl4ID0gY3JjMzJfbGUoMCwg aW4sIFBBR0VfU0laRSk7Cj4gICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvdWMvaW50ZWxfZ3VjX2xvZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxf Z3VjX2xvZy5jCj4gaW5kZXggYzM2ZDVlYjViYmI5Li5mMDQ1ZTQyYmU2Y2EgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jCj4gQEAgLTUsOSArNSwxMCBA QAo+ICAgCj4gICAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgo+ICAgCj4gKyNpbmNsdWRlIDxk cm0vZHJtX21lbWNweS5oPgo+ICsKPiAgICNpbmNsdWRlICJndC9pbnRlbF9ndC5oIgo+ICAgI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCj4gLSNpbmNsdWRlICJpOTE1X21lbWNweS5oIgo+ICAgI2luY2x1 ZGUgImludGVsX2d1Y19sb2cuaCIKPiAgIAo+ICAgc3RhdGljIHZvaWQgZ3VjX2xvZ19jYXB0dXJl X2xvZ3Moc3RydWN0IGludGVsX2d1Y19sb2cgKmxvZyk7Cj4gQEAgLTI5NSwxMyArMjk2LDEzIEBA IHN0YXRpYyB2b2lkIGd1Y19yZWFkX3VwZGF0ZV9sb2dfYnVmZmVyKHN0cnVjdCBpbnRlbF9ndWNf bG9nICpsb2cpCj4gICAKPiAgIAkJLyogSnVzdCBjb3B5IHRoZSBuZXdseSB3cml0dGVuIGRhdGEg Ki8KPiAgIAkJaWYgKHJlYWRfb2Zmc2V0ID4gd3JpdGVfb2Zmc2V0KSB7Cj4gLQkJCWk5MTVfbWVt Y3B5X2Zyb21fd2MoZHN0X2RhdGEsIHNyY19kYXRhLCB3cml0ZV9vZmZzZXQpOwo+ICsJCQlkcm1f bWVtY3B5X2Zyb21fd2MoZHN0X2RhdGEsIHNyY19kYXRhLCB3cml0ZV9vZmZzZXQpOwo+ICAgCQkJ Ynl0ZXNfdG9fY29weSA9IGJ1ZmZlcl9zaXplIC0gcmVhZF9vZmZzZXQ7Cj4gICAJCX0gZWxzZSB7 Cj4gICAJCQlieXRlc190b19jb3B5ID0gd3JpdGVfb2Zmc2V0IC0gcmVhZF9vZmZzZXQ7Cj4gICAJ CX0KPiAtCQlpOTE1X21lbWNweV9mcm9tX3djKGRzdF9kYXRhICsgcmVhZF9vZmZzZXQsCj4gLQkJ CQkgICAgc3JjX2RhdGEgKyByZWFkX29mZnNldCwgYnl0ZXNfdG9fY29weSk7Cj4gKwkJZHJtX21l bWNweV9mcm9tX3djKGRzdF9kYXRhICsgcmVhZF9vZmZzZXQsCj4gKwkJCQkgICBzcmNfZGF0YSAr IHJlYWRfb2Zmc2V0LCBieXRlc190b19jb3B5KTsKPiAgIAo+ICAgCQlzcmNfZGF0YSArPSBidWZm ZXJfc2l6ZTsKPiAgIAkJZHN0X2RhdGEgKz0gYnVmZmVyX3NpemU7Cj4gQEAgLTU2OSw3ICs1NzAs NyBAQCBpbnQgaW50ZWxfZ3VjX2xvZ19yZWxheV9vcGVuKHN0cnVjdCBpbnRlbF9ndWNfbG9nICps b2cpCj4gICAJICogaXQgc2hvdWxkIGJlIHByZXNlbnQgb24gdGhlIGNoaXBzZXRzIHN1cHBvcnRp bmcgR3VDIGJhc2VkCj4gICAJICogc3VibWlzc3Npb25zLgo+ICAgCSAqLwo+IC0JaWYgKCFpOTE1 X2hhc19tZW1jcHlfZnJvbV93YygpKSB7Cj4gKwlpZiAoIWRybV9oYXNfbWVtY3B5X2Zyb21fd2Mo KSkgewo+ICAgCQlyZXQgPSAtRU5YSU87Cj4gICAJCWdvdG8gb3V0X3VubG9jazsKPiAgIAl9Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMKPiBpbmRleCA1YjRiMmJkNDZlN2Mu Ljk4NjUzZjFhMmIxZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Nt ZF9wYXJzZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfY21kX3BhcnNlci5j Cj4gQEAgLTI0LDEyICsyNCwxMiBAQAo+ICAgICogICAgQnJhZCBWb2xraW4gPGJyYWRsZXkuZC52 b2xraW5AaW50ZWwuY29tPgo+ICAgICoKPiAgICAqLwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tZW1j cHkuaD4KPiAgIAo+ICAgI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZS5oIgo+ICAgI2luY2x1ZGUg Imd0L2ludGVsX2dwdV9jb21tYW5kcy5oIgo+ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9kcnYuaCIK PiAtI2luY2x1ZGUgImk5MTVfbWVtY3B5LmgiCj4gICAKPiAgIC8qKgo+ICAgICogRE9DOiBiYXRj aCBidWZmZXIgY29tbWFuZCBwYXJzZXIKPiBAQCAtMTE1Miw3ICsxMTUyLDcgQEAgc3RhdGljIHUz MiAqY29weV9iYXRjaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqZHN0X29iaiwKPiAgIAo+ ICAgCWlmIChzcmMpIHsKPiAgIAkJR0VNX0JVR19PTighbmVlZHNfY2xmbHVzaCk7Cj4gLQkJaTkx NV91bmFsaWduZWRfbWVtY3B5X2Zyb21fd2MoZHN0LCBzcmMgKyBvZmZzZXQsIGxlbmd0aCk7Cj4g KwkJZHJtX3VuYWxpZ25lZF9tZW1jcHlfZnJvbV93Yyhkc3QsIHNyYyArIG9mZnNldCwgbGVuZ3Ro KTsKPiAgIAl9IGVsc2Ugewo+ICAgCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwo+ICAgCQl2b2lk ICpwdHI7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gaW5kZXggMzBjMzQ5MTM3YmUyLi42ODYz OWVkMGJkZWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBAQCAtNzIsNyArNzIsNiBA QAo+ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gICAjaW5jbHVkZSAiaTkxNV9pb2MzMi5oIgo+ ICAgI2luY2x1ZGUgImk5MTVfaXJxLmgiCj4gLSNpbmNsdWRlICJpOTE1X21lbWNweS5oIgo+ICAg I2luY2x1ZGUgImk5MTVfcGVyZi5oIgo+ICAgI2luY2x1ZGUgImk5MTVfcXVlcnkuaCIKPiAgICNp bmNsdWRlICJpOTE1X3N1c3BlbmQuaCIKPiBAQCAtMzI1LDcgKzMyNCw2IEBAIHN0YXRpYyBpbnQg aTkxNV9kcml2ZXJfZWFybHlfcHJvYmUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQo+ICAgCW11dGV4X2luaXQoJmRldl9wcml2LT5wcHNfbXV0ZXgpOwo+ICAgCW11dGV4X2luaXQo JmRldl9wcml2LT5oZGNwX2NvbXBfbXV0ZXgpOwo+ICAgCj4gLQlpOTE1X21lbWNweV9pbml0X2Vh cmx5KGRldl9wcml2KTsKPiAgIAlpbnRlbF9ydW50aW1lX3BtX2luaXRfZWFybHkoJmRldl9wcml2 LT5ydW50aW1lX3BtKTsKPiAgIAo+ICAgCXJldCA9IGk5MTVfd29ya3F1ZXVlc19pbml0KGRldl9w cml2KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3Iu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBpbmRleCA4Yjk2NGUz NTVjYjUuLjdjMWI0NDU0NWJhYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dwdV9lcnJvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJy b3IuYwo+IEBAIC0zNCw2ICszNCw3IEBACj4gICAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgo+ ICAgI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tZW1j cHkuaD4KPiAgICNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4gICAKPiAgICNpbmNsdWRlICJk aXNwbGF5L2ludGVsX2RtYy5oIgo+IEBAIC00Niw3ICs0Nyw2IEBACj4gICAKPiAgICNpbmNsdWRl ICJpOTE1X2Rydi5oIgo+ICAgI2luY2x1ZGUgImk5MTVfZ3B1X2Vycm9yLmgiCj4gLSNpbmNsdWRl ICJpOTE1X21lbWNweS5oIgo+ICAgI2luY2x1ZGUgImk5MTVfc2NhdHRlcmxpc3QuaCIKPiAgIAo+ ICAgI2RlZmluZSBBTExPV19GQUlMIChHRlBfS0VSTkVMIHwgX19HRlBfUkVUUllfTUFZRkFJTCB8 IF9fR0ZQX05PV0FSTikKPiBAQCAtMjU1LDcgKzI1NSw3IEBAIHN0YXRpYyBib29sIGNvbXByZXNz X2luaXQoc3RydWN0IGk5MTVfdm1hX2NvbXByZXNzICpjKQo+ICAgCX0KPiAgIAo+ICAgCWMtPnRt cCA9IE5VTEw7Cj4gLQlpZiAoaTkxNV9oYXNfbWVtY3B5X2Zyb21fd2MoKSkKPiArCWlmIChkcm1f aGFzX21lbWNweV9mcm9tX3djKCkpCj4gICAJCWMtPnRtcCA9IHBvb2xfYWxsb2MoJmMtPnBvb2ws IEFMTE9XX0ZBSUwpOwo+ICAgCj4gICAJcmV0dXJuIHRydWU7Cj4gQEAgLTI5NSw3ICsyOTUsNyBA QCBzdGF0aWMgaW50IGNvbXByZXNzX3BhZ2Uoc3RydWN0IGk5MTVfdm1hX2NvbXByZXNzICpjLAo+ ICAgCXN0cnVjdCB6X3N0cmVhbV9zICp6c3RyZWFtID0gJmMtPnpzdHJlYW07Cj4gICAKPiAgIAl6 c3RyZWFtLT5uZXh0X2luID0gc3JjOwo+IC0JaWYgKHdjICYmIGMtPnRtcCAmJiBpOTE1X21lbWNw eV9mcm9tX3djKGMtPnRtcCwgc3JjLCBQQUdFX1NJWkUpKQo+ICsJaWYgKHdjICYmIGMtPnRtcCAm JiBkcm1fbWVtY3B5X2Zyb21fd2MoYy0+dG1wLCBzcmMsIFBBR0VfU0laRSkpCj4gICAJCXpzdHJl YW0tPm5leHRfaW4gPSBjLT50bXA7Cj4gICAJenN0cmVhbS0+YXZhaWxfaW4gPSBQQUdFX1NJWkU7 Cj4gICAKPiBAQCAtMzk1LDcgKzM5NSw3IEBAIHN0YXRpYyBpbnQgY29tcHJlc3NfcGFnZShzdHJ1 Y3QgaTkxNV92bWFfY29tcHJlc3MgKmMsCj4gICAJaWYgKCFwdHIpCj4gICAJCXJldHVybiAtRU5P TUVNOwo+ICAgCj4gLQlpZiAoISh3YyAmJiBpOTE1X21lbWNweV9mcm9tX3djKHB0ciwgc3JjLCBQ QUdFX1NJWkUpKSkKPiArCWlmICghKHdjICYmIGRybV9tZW1jcHlfZnJvbV93YyhwdHIsIHNyYywg UEFHRV9TSVpFKSkpCj4gICAJCW1lbWNweShwdHIsIHNyYywgUEFHRV9TSVpFKTsKPiAgIAlkc3Qt PnBhZ2VzW2RzdC0+cGFnZV9jb3VudCsrXSA9IHB0cjsKPiAgIAljb25kX3Jlc2NoZWQoKTsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9tZW1jcHkuaCBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfbWVtY3B5LmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAzZGYwNjNhMzI5M2IuLjAwMDAwMDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfbWVtY3B5LmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMzQgKzAsMCBAQAo+IC0v KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUICovCj4gLS8qCj4gLSAqIENvcHlyaWdodCDC qSAyMDE5IEludGVsIENvcnBvcmF0aW9uCj4gLSAqLwo+IC0KPiAtI2lmbmRlZiBfX0k5MTVfTUVN Q1BZX0hfXwo+IC0jZGVmaW5lIF9fSTkxNV9NRU1DUFlfSF9fCj4gLQo+IC0jaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KPiAtCj4gLXN0cnVjdCBkcm1faTkxNV9wcml2YXRlOwo+IC0KPiAtdm9pZCBp OTE1X21lbWNweV9pbml0X2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAt Cj4gLWJvb2wgaTkxNV9tZW1jcHlfZnJvbV93Yyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywg dW5zaWduZWQgbG9uZyBsZW4pOwo+IC12b2lkIGk5MTVfdW5hbGlnbmVkX21lbWNweV9mcm9tX3dj KHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbik7Cj4gLQo+IC0v KiBUaGUgbW92bnRkcWEgaW5zdHJ1Y3Rpb25zIHVzZWQgZm9yIG1lbWNweS1mcm9tLXdjIHJlcXVp cmUgMTYtYnl0ZSBhbGlnbm1lbnQsCj4gLSAqIGFzIHdlbGwgYXMgU1NFNC4xIHN1cHBvcnQuIGk5 MTVfbWVtY3B5X2Zyb21fd2MoKSB3aWxsIHJlcG9ydCBpZiBpdCBjYW5ub3QKPiAtICogcGVyZm9y bSB0aGUgb3BlcmF0aW9uLiBUbyBjaGVjayBiZWZvcmVoYW5kLCBwYXNzIGluIHRoZSBwYXJhbWV0 ZXJzIHRvCj4gLSAqIHRvIGk5MTVfY2FuX21lbWNweV9mcm9tX3djKCkgLSBzaW5jZSB3ZSBvbmx5 IGNhcmUgYWJvdXQgdGhlIGxvdyA0IGJpdHMsCj4gLSAqIHlvdSBvbmx5IG5lZWQgdG8gcGFzcyBp biB0aGUgbWlub3Igb2Zmc2V0cywgcGFnZS1hbGlnbmVkIHBvaW50ZXJzIGFyZQo+IC0gKiBhbHdh eXMgdmFsaWQuCj4gLSAqCj4gLSAqIEZvciBqdXN0IGNoZWNraW5nIGZvciBTU0U0LjEsIGluIHRo ZSBmb3Jla25vd2xlZGdlIHRoYXQgdGhlIGZ1dHVyZSB1c2UKPiAtICogd2lsbCBiZSBjb3JyZWN0 bHkgYWxpZ25lZCwganVzdCB1c2UgaTkxNV9oYXNfbWVtY3B5X2Zyb21fd2MoKS4KPiAtICovCj4g LSNkZWZpbmUgaTkxNV9jYW5fbWVtY3B5X2Zyb21fd2MoZHN0LCBzcmMsIGxlbikgXAo+IC0JaTkx NV9tZW1jcHlfZnJvbV93Yygodm9pZCAqKSgodW5zaWduZWQgbG9uZykoZHN0KSB8ICh1bnNpZ25l ZCBsb25nKShzcmMpIHwgKGxlbikpLCBOVUxMLCAwKQo+IC0KPiAtI2RlZmluZSBpOTE1X2hhc19t ZW1jcHlfZnJvbV93YygpIFwKPiAtCWk5MTVfbWVtY3B5X2Zyb21fd2MoTlVMTCwgTlVMTCwgMCkK PiAtCj4gLSNlbmRpZiAvKiBfX0k5MTVfTUVNQ1BZX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX21lbW9yeV9yZWdpb24uYwo+IGluZGV4IGM4 NWQ1MTZiODVjZC4uNmJiMzk5ZTliZTc4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lvbi5jCj4gQEAgLTYsNiArNiw4IEBA Cj4gICAjaW5jbHVkZSA8bGludXgvcHJpbWVfbnVtYmVycy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4 L3NvcnQuaD4KPiAgIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9tZW1jcHkuaD4KPiArCj4gICAjaW5j bHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5oIgo+ICAgCj4gICAjaW5jbHVkZSAibW9ja19kcm0uaCIK PiBAQCAtMjAsNyArMjIsNiBAQAo+ICAgI2luY2x1ZGUgImdlbS9zZWxmdGVzdHMvbW9ja19jb250 ZXh0LmgiCj4gICAjaW5jbHVkZSAiZ3QvaW50ZWxfZW5naW5lX3VzZXIuaCIKPiAgICNpbmNsdWRl ICJndC9pbnRlbF9ndC5oIgo+IC0jaW5jbHVkZSAiaTkxNV9tZW1jcHkuaCIKPiAgICNpbmNsdWRl ICJzZWxmdGVzdHMvaWd0X2ZsdXNoX3Rlc3QuaCIKPiAgICNpbmNsdWRlICJzZWxmdGVzdHMvaTkx NV9yYW5kb20uaCIKPiAgIAo+IEBAIC05MDEsNyArOTAyLDcgQEAgc3RhdGljIGlubGluZSB2b2lk IGlndF9tZW1jcHkodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBzaXplKQo+ICAg Cj4gICBzdGF0aWMgaW5saW5lIHZvaWQgaWd0X21lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29u c3Qgdm9pZCAqc3JjLCBzaXplX3Qgc2l6ZSkKPiAgIHsKPiAtCWk5MTVfbWVtY3B5X2Zyb21fd2Mo ZHN0LCBzcmMsIHNpemUpOwo+ICsJZHJtX21lbWNweV9mcm9tX3djKGRzdCwgc3JjLCBzaXplKTsK PiAgIH0KPiAgIAo+ICAgc3RhdGljIGludCBfcGVyZl9tZW1jcHkoc3RydWN0IGludGVsX21lbW9y eV9yZWdpb24gKnNyY19tciwKPiBAQCAtOTI1LDcgKzkyNiw3IEBAIHN0YXRpYyBpbnQgX3BlcmZf bWVtY3B5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICpzcmNfbXIsCj4gICAJCXsKPiAgIAkJ CSJtZW1jcHlfZnJvbV93YyIsCj4gICAJCQlpZ3RfbWVtY3B5X2Zyb21fd2MsCj4gLQkJCSFpOTE1 X2hhc19tZW1jcHlfZnJvbV93YygpLAo+ICsJCQkhZHJtX2hhc19tZW1jcHlfZnJvbV93YygpLAo+ ICAgCQl9LAo+ICAgCX07Cj4gICAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKnNyYywgKmRz dDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21lbWNweS5oIGIvaW5jbHVkZS9kcm0v ZHJtX21lbWNweS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu LmZlNWVkMWU4OWNlNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fbWVt Y3B5LmgKPiBAQCAtMCwwICsxLDY4IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiAr ICovCj4gKwo+ICsjaWZuZGVmIF9fRFJNX01FTUNQWV9IX18KPiArI2RlZmluZSBfX0RSTV9NRU1D UFlfSF9fCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gK3N0cnVjdCBkbWFf YnVmX21hcDsKPiArCj4gKyNpZmRlZiBDT05GSUdfWDg2Cj4gK2Jvb2wgZHJtX21lbWNweV9mcm9t X3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbik7Cj4gK2Jv b2wgZHJtX21lbWNweV9mcm9tX3djX2RibShzdHJ1Y3QgZG1hX2J1Zl9tYXAgKmRzdCwKPiArCQkJ ICAgIGNvbnN0IHN0cnVjdCBkbWFfYnVmX21hcCAqc3JjLAo+ICsJCQkgICAgdW5zaWduZWQgbG9u ZyBsZW4pOwo+ICt2b2lkIGRybV91bmFsaWduZWRfbWVtY3B5X2Zyb21fd2Modm9pZCAqZHN0LCBj b25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKPiArCj4gKy8qIFRoZSBtb3ZudGRx YSBpbnN0cnVjdGlvbnMgdXNlZCBmb3IgbWVtY3B5LWZyb20td2MgcmVxdWlyZSAxNi1ieXRlIGFs aWdubWVudCwKPiArICogYXMgd2VsbCBhcyBTU0U0LjEgc3VwcG9ydC4gZHJtX21lbWNweV9mcm9t X3djKCkgd2lsbCByZXBvcnQgaWYgaXQgY2Fubm90Cj4gKyAqIHBlcmZvcm0gdGhlIG9wZXJhdGlv bi4gVG8gY2hlY2sgYmVmb3JlaGFuZCwgcGFzcyBpbiB0aGUgcGFyYW1ldGVycyB0bwo+ICsgKiBk cm1fY2FuX21lbWNweV9mcm9tX3djKCkgLSBzaW5jZSB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGxv dyA0IGJpdHMsCj4gKyAqIHlvdSBvbmx5IG5lZWQgdG8gcGFzcyBpbiB0aGUgbWlub3Igb2Zmc2V0 cywgcGFnZS1hbGlnbmVkIHBvaW50ZXJzIGFyZQo+ICsgKiBhbHdheXMgdmFsaWQuCj4gKyAqCj4g KyAqIEZvciBqdXN0IGNoZWNraW5nIGZvciBTU0U0LjEsIGluIHRoZSBmb3Jla25vd2xlZGdlIHRo YXQgdGhlIGZ1dHVyZSB1c2UKPiArICogd2lsbCBiZSBjb3JyZWN0bHkgYWxpZ25lZCwganVzdCB1 c2UgZHJtX2hhc19tZW1jcHlfZnJvbV93YygpLgo+ICsgKi8KPiArI2RlZmluZSBkcm1fY2FuX21l bWNweV9mcm9tX3djKGRzdCwgc3JjLCBsZW4pIFwKPiArCWRybV9tZW1jcHlfZnJvbV93Yygodm9p ZCAqKSgodW5zaWduZWQgbG9uZykoZHN0KSB8ICh1bnNpZ25lZCBsb25nKShzcmMpIHwgKGxlbikp LCBOVUxMLCAwKQo+ICsKPiArI2RlZmluZSBkcm1faGFzX21lbWNweV9mcm9tX3djKCkgXAo+ICsJ ZHJtX21lbWNweV9mcm9tX3djKE5VTEwsIE5VTEwsIDApCj4gKwo+ICt2b2lkIGRybV9tZW1jcHlf aW5pdF9lYXJseSh2b2lkKTsKPiArCj4gKyNlbHNlCj4gKwo+ICtzdGF0aWMgaW5saW5lCj4gK2Jv b2wgZHJtX21lbWNweV9mcm9tX3djKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25l ZCBsb25nIGxlbikKPiArewo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lCj4gK2Jvb2wgZHJtX21lbWNweV9mcm9tX3djX2RibSh2b2lkICpkc3QsIGNvbnN0IHZvaWQg KnNyYywgdW5zaWduZWQgbG9uZyBsZW4pCj4gK3sKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsK PiArc3RhdGljIGlubGluZQo+ICtib29sIGRybV9jYW5fbWVtY3B5X2Zyb21fd2NfZGJtKHZvaWQg KmRzdCwgY29uc3Qgdm9pZCAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbikKPiArewo+ICsJcmV0dXJu IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lCj4gK2Jvb2wgZHJtX2hhc19tZW1jcHlf ZnJvbV93Yyh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gKyNkZWZpbmUg ZHJtX2hhc19tZW1jcHlfZnJvbV93YygpIChmYWxzZSkKPiArI2RlZmluZSBkcm1fdW5hbGlnbmVk X21lbWNweV9mcm9tX3djKF9kc3QsIF9zcmMsIF9sZW4pIFdBUk5fT04oMSkKPiArI2RlZmluZSBk cm1fbWVtY3B5X2luaXRfZWFybHkoKSBkbyB7fSB3aGlsZSAoMCkKPiArI2VuZGlmIC8qIENPTkZJ R19YODYgKi8KPiArI2VuZGlmIC8qIF9fRFJNX01FTUNQWV9IX18gKi8KCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QK SW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=