From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=pass header.oldest-pass=0 smtp.remote-ip=52.101.61.52 ARC-Seal: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=pass; t=1793355326; b=gSxFCS62Jip02uUXhA/k163YfxuDatPlZM5NMgXK5Tszaouk5P9IJmupqSAeBI/tqiA1 Sp54NcXZyygzZFVTjo9T4x5tftBlMK4FT4hL2Rttm36oLFyZfKz1haz/PBXTw3oG8LhUM 4XfIPyKU/B/mAbN0EdgyoqrfkGVOv2/CFiTZhGmm39hSxtH15h0Mvsyqxq/EF18P4iGHB M/YwxORBNawVTpWpN6CBN0aEjROMUfCaFv1mRlef2qbY5hzRse3jrj2hyJZ5cL3BTnxNF 0L7NnSCZ6QNYtWuSJo+fzDH4S8YKNkmIlHMJr1fdjUr9Zopbv77YGoSr7EMxRwq1opg== ARC-Message-Signature: i=2; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793355326; h=DMARC-Filter:DKIM-Signature:Received:Received:Message-ID:Date: User-Agent:Subject:To:Cc:References:Content-Language:From:In-Reply-To: Content-Type:Content-Transfer-Encoding:X-ClientProxiedBy:MIME-Version: X-MS-PublicTrafficType:X-MS-TrafficTypeDiagnostic: X-MS-Office365-Filtering-Correlation-Id:X-MS-Exchange-SenderADCheck: X-MS-Exchange-AntiSpam-Relay:X-Microsoft-Antispam: X-Microsoft-Antispam-Message-Info:X-Forefront-Antispam-Report: X-MS-Exchange-AntiSpam-MessageData-ChunkCount: X-MS-Exchange-AntiSpam-MessageData-0:X-OriginatorOrg: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-AuthSource:X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-OriginalArrivalTime: X-MS-Exchange-CrossTenant-FromEntityHeader: X-MS-Exchange-CrossTenant-Id:X-MS-Exchange-CrossTenant-MailboxType: X-MS-Exchange-CrossTenant-UserPrincipalName: X-MS-Exchange-Transport-CrossTenantHeadersStamped; bh=bpSoJ8ERAGE+2HdLcrLZ/w9bdGlkebvz/Cx8ZnJ0+sg=; b=KNK7FNvLbXsOlvXpH6a6d5249i1D59Aw1LJNhN1PXC+gKaG+BNbY8LEBtflt2qvR3ZzE IOql21/gkjh2RWXqug1rECRE25ZkFgbnKInd/1LDD3YrOh363nLWE9o9/P7pglYa+3F+X +qjoIcsDcGmE4sz9GTYisL+sFNwfH2O0R4SMTZj4RUdr0uP27SQCsL9JjmbeDpkk02w0g DFawXYHCG8XpxXD95BeyP5fRu/ISrM5cStM4E4tHUNHm9wcWa/tb22u9ITxNh3wsYzGCW xXpcx9j/sGrdt8F6Gq4ufthQjkZWhXZCei28Ca8800MFx/o4KsdC6N1a3nFkjeNaysg== ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass header.from=amd.com; spf=fail smtp.mailfrom=amd.com; dkim=pass header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=FMNS+2JS; arc=pass header.oldest-pass=0 smtp.remote-ip=52.101.61.52 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010052.outbound.protection.outlook.com [52.101.61.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (secp384r1) server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB551606A327; Fri, 30 Oct 2026 10:15:25 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org BB551606A327 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=amd.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=amd.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=FMNS+2JS ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hjd7bcipzyKzyTNbDSW3hoWQVCoxsE/mXf+py9buiW7IIxWkWP3q0C5CpFoePpk6hfIV/bvKmy4yxFqX9ZxvP/1OcNVbPpgBaRGlr76Z3QNXPJWaXAbzkxRdCc/dXetY4Stz36NulG6ydgn8O4oFc6zzL83Lw1KuAh14zJxgcuNDGP/h046OALWRCAMqLqhtIgFqJ0Pp2c2Hq4y3qvT8ek4KdAbO/Nb5prIJbfXW+bw0BOWl+dECvclVJth8OIRvl13Hr48KSl+Um3owz1mZJy4NtwNOdJPcwTsqE9lv+D+lbM/d1o5VZpof/WqOb5A/Z0WExsbSOObuKuyraC5ewQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bpSoJ8ERAGE+2HdLcrLZ/w9bdGlkebvz/Cx8ZnJ0+sg=; b=qpuyrAhJiruyh+CUV1JpiK93W2sKEFfDJtPKg+daWw5y+298NNbDi5ajm+ZZONaZcJtF9WL0IH3+mQSmM9qfFYMPAd+LJj8uUTSCcvykVfYCpQccjTzxPV2CvkRrye2d1M+Dbm9MRWXiKdoFVDjRfFKezpYEzTZ0NdNu7g2ZTvpmvjYPeUnLjpDeJDRTvcr4bR04uVU7dvnMwNIg7rXHCh1qT+A8YDWOa/tI9RTNLN5Hzn9KSHGQ27zmRwq3ZZ4V4fYCAOPVoj8EzbylA9UieAWAvcPrw5HJ9MM1v7Qj+IDd9+ApKZaBbWAWfj+NYkb4PGo4gQqfgRgAUsiPWdnBMw== 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=bpSoJ8ERAGE+2HdLcrLZ/w9bdGlkebvz/Cx8ZnJ0+sg=; b=FMNS+2JSpnfxs47IL5iXV79FVeRkk4f2mAREunP72TxSJw2hsJC2d73tXyeEDMekuKvFPUqDBhx0qEGnH9vfL5U9wJlGDb/DiSPzmqr4W8Zf4zViLeg0JfEsLXEku+IfNMQovz+NTRDHvJxDUGxqgnFjb+48kWKQ85ikMudWocU= Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) by MW4PR12MB6681.namprd12.prod.outlook.com (2603:10b6:303:1e1::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.10; Fri, 30 Oct 2026 10:15:03 +0000 Received: from PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c]) by PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c%3]) with mapi id 15.21.0546.021; Fri, 30 Oct 2026 10:15:02 +0000 Message-ID: <08705a7a-86aa-4b43-a22a-e80a572010f2@amd.com> Date: Fri, 30 Oct 2026 11:14:50 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 7/8] dma-buf: transfer memcg charges via DMA_BUF_IOCTL_XFER_CHARGE To: Albert Esteve Cc: Tejun Heo , Johannes Weiner , =?UTF-8?Q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Sumit Semwal , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Andrew Morton , Benjamin Gaignard , Brian Starkey , John Stultz , "T.J. Mercier" , Christian Brauner , Paul Moore , James Morris , "Serge E. Hallyn" , Stephen Smalley , Shuah Khan , Randy Dunlap , =?UTF-8?B?T25kcmVqIE1vc27DocSNZWs=?= , Jens Wiklander , Sumit Garg , cgroups@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, linux-kselftest@vger.kernel.org, op-tee@lists.trustedfirmware.org, echanude@redhat.com, mripard@kernel.org References: <20261027-v2_20230123_tjmercier_google_com-v3-0-78d2c4cb8647@redhat.com> <20261027-v2_20230123_tjmercier_google_com-v3-7-78d2c4cb8647@redhat.com> <9ebce3f2-f7a0-46a9-bad7-39059b99423f@amd.com> Content-Language: en-US From: =?UTF-8?Q?Christian_K=C3=B6nig?= In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: BN9PR03CA0516.namprd03.prod.outlook.com (2603:10b6:408:131::11) To PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) X-Mailing-List: selinux@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR12MB5685:EE_|MW4PR12MB6681:EE_ X-MS-Office365-Filtering-Correlation-Id: 4588d9bc-e088-473b-b563-08df366ea973 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|23010399003|1800799024|22082099003|18002099003|10067099003|11063799006|4143699003|56012099006|261021123027099003|261021121427099003|261022105027099003|261026121527099003|261026140227099003|261028144727099003|261009223027099003|261009221227099003; X-Microsoft-Antispam-Message-Info: y6jeYfReWPIn11AK8DxxwrAaYxYfsyHmSuI05RtAAIFhJK/Pc/UPVbNQfjHPfjvjEkcmp5htahnN8sutRpr3NIP5eHm+gXJVuxw342kQAt84cZ2Gq+hNpT1UxerGeU7OKduvM2kydnk7FRC3tfujCcJD/Thv2QJLKFgK71eHu2wILlVlVXmA/VsHHDQN0NAZy4u0y03D1uflTk+SxPJ17pWFW+jWdkFM+0jC9LkpDyxHrL4Ryu0tYD/KpiIG1X2Ua/VLqmvIlssG+k2uXCU4B6V0XGEgnIf69ojN10nKLlOqvsgVXP9ONJe5J0AtVJ1OjjgbaMJEFAJoyJK8EKvmXc1lMuWaMRCqkRVZCXKlgVcbIVF5H6coxvkq68XiI/XRDIZRl8dgDDrEu6ex8pohm6339PV85ewjXO4OybFqOJO3t3nn6AJTnobOJudoK1mbwOdV1wMpw9vNsYqzsWx/uMUgsuNnlwmqjMTz6YhdJUEwhajvtdtSh5t6uhBnJpYfgD51x1XqB/zJWSIsGloTeE2qiYrNebbxHKaTAcZW1fXVVshXmQnNZN6po3LXf6jqBtkdDoSd/ax43WJ3TOyJihHsbe3tc80gykye6WZKkhNlJI8d2x0IYMAnSjj3El4THS/2nenWsQ3HoTV8uhW6uzzQFJ+qKWSlPd99gYfo+Kg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB5685.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(23010399003)(1800799024)(22082099003)(18002099003)(10067099003)(11063799006)(4143699003)(56012099006)(261021123027099003)(261021121427099003)(261022105027099003)(261026121527099003)(261026140227099003)(261028144727099003)(261009223027099003)(261009221227099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R0duRlQ2Qk9HbitDNzZYVjlINEFvQlZ5N2hrN1FSUDlvTnN3b0xETjJYVjRz?= =?utf-8?B?cXVINFJLQ1lzVUswV2pvZUFGRmJGNnBndkFtK0oyRTJ0QW9NU1V5OUxWeTN2?= =?utf-8?B?K3lTSHVuYXRpbzVHUTk4cTRZeXU5eUZaQ2hsYjVhd0U3Znh1ZE14U3VsMTRt?= =?utf-8?B?VnE2SndwdUVOWGd0QTE3RXFCcmhGZXlTYTdFODIxLzd5b3F4ZmhCb3pIbmNH?= =?utf-8?B?RTZDU3Btb05MMnVnaU1KYUN2aWVMOEpFR3VrZ3B6Z3JTNEtqazdJT3dRUlEr?= =?utf-8?B?ZVNBK1dYVklzNzRQZ3lQSjFBYjBoZEEwY08veVFnN0NzaGhsOGNBWHNhUUlL?= =?utf-8?B?cVYzZmxqOVg0d2NETnRLbEhFQTB6Sjc4Rm95MW9SQ05tcWxOOVAvL1l5YnhH?= =?utf-8?B?RDhReVFUQUc1UEZ1SFA4c0lyeWJEY0FUQTBLUUYwT3U5MXJHY25QWVZyelhi?= =?utf-8?B?MGE2L2NyWWVsWFl3Si9ib1ZZdEhZTU9WQzc5RGpLR0MrZ25pbDJnajBYdFZ1?= =?utf-8?B?WUY3SEFJL1FmQzBCcitQTGxxU3ZyNGsxcm9XbTB5Mm1yMzdCUWxQeTJldFVN?= =?utf-8?B?RElLeTlmTlpsMHl3bTdGTjJrcHI3bFAxT2ppMDZyVldRVnVTVGN2T2djSlBD?= =?utf-8?B?VmpTTTJVQy9ZdTB0L0tBb042UFVDOVFJdGFYWlpzNEdmWUNUR1czcXRIQ09r?= =?utf-8?B?MGdyS2JoNjUvdDBWK0hLMzIyclhkUVBYVWtlRkwyTjN3bTFkQSt6aWtBNmlJ?= =?utf-8?B?TWs3TmUzZEduN3VLYSsvWXBrTW04TGE0bTY1UktpZDRkUnFDUFh3akVZYUpM?= =?utf-8?B?ekNlbG92R1hwOGFTTzUvSWxhOG4wZDhzRGNlTjdnQldXdGJ4VWtPWTZKbkQ2?= =?utf-8?B?SmIrNlJFVnVjVFZhZVdJdVVHMXBSbkRWcU0yMGc3SDIvZHlPVzRrS1VNQklu?= =?utf-8?B?VVlZWExMWjV0Z2RyYnl1cm5rTko2YlpUR2cyL2x3dkJJR0xBM2NkVW9VSGl3?= =?utf-8?B?TDVCMTFXMlU3YzVibmJwTzJQaktnQ2ltSURVNVA0djQxZ1FzMTNaWUxQdTN2?= =?utf-8?B?YnFVMEx6YlpBVHJPR0xJYUorZEVTbTk5OC9OWU1kTWFNYjFUbFhrZkpnTFVP?= =?utf-8?B?aHphemt4VDlSOWZzOU5tNFNmYjczTjZpY0dDM05GY2Z4SUwwNmlCSmRHeUxr?= =?utf-8?B?c1NMSFIwR3NzYmJGMDB1L0xoS0t3RGJ6Y2NaWFdQc0RVM2JHcmQxRWtUN2RB?= =?utf-8?B?UkwvUUVqY1FmS3JJMjdQdFp4U0FuNWw0RUU4Wm9EdEhNMm5ROW5pd3JKVWdF?= =?utf-8?B?VlJCRksxLy94S1c3V3RCTHRqWHdJTm9NZEdpT2FOdVJjdGxGa2hNS3JNOWQ4?= =?utf-8?B?NGZUQzJ6ZnFnREc5djVEbzFpNXVxRFhhRUxVVEtJY0E2QkU5UjVnaXdkYlNU?= =?utf-8?B?OVhhOVUwWVBUeG5vayt5aklRM2QxM0hRZHV6WnlmTFlmOUU2SURuV1ZYSzVj?= =?utf-8?B?Y0pvYUloVXI4QVM5MW8vd2t2Sm5wNnNNQmtrTVpSaEVFZUpraGhqNG9xYmdB?= =?utf-8?B?Mlc1eWRMVkRNdVhqb0xNdStCWFV1cS85MzVPMjlNVXM0Rmk5amZmUEVjUlFY?= =?utf-8?B?RnZtV3dBS0dKNk9yZExGU2dUOS9wM09CRnpQUEdkRW81R3NvcHluTWc0ZFU3?= =?utf-8?B?aVpsRGExV3IrZXc5cHIwOENDNEFFUGNxNWZ4RkFWeWN0U3MyU2Y3MnZRTERW?= =?utf-8?B?YVNPZUNKRWlzRmVneEhvajNxcDZ2b3V5VlBablgxcjRRTExEQ0EvT2dlN3Zk?= =?utf-8?B?RjBqa2grRUYvc3FWUzRxa3pPaTc5SVNCeEFaeDdvbHplRkhQWmlxdnFvbzVR?= =?utf-8?B?aVFnTElIMFFodmkvNlNGam9mWWw3SDJQMUdpN2FMS1JwTHAzcjFFQWFGYjFo?= =?utf-8?B?OW8xaUx5dStWaEZJbDc0bG1OZmVNRjJMRm1UckVUeWkyaUVvbGEwYUc3WjBq?= =?utf-8?B?SzExUWRGUWxLZ1o4Z29nUmRJYmJGSzkzbEdmd0dBQkNpZ3A5MlJnVGxqc3lh?= =?utf-8?B?OCtlblpacXRJNFRLYzJhem5wV0VyaEs4T3IwT0pCaWxYSVRmZUhRTXZkNUpy?= =?utf-8?B?K0hIaDNqMFovSlQ1dWsvYTBkVzkvY2U4QzBrZVcxZEJodFFLRFpLTkVOa3hQ?= =?utf-8?B?TUFxOGFub0JyakFKWlZhUklsSkg2V0FPNVV6MmNYSXp4cjFleTFHQXI3RnZr?= =?utf-8?B?dXY5T0Iva2UveFUrWnpYVWNSUFpiOGlncU1BS0ZNTTFHRk5US3Q2MmlzV2dE?= =?utf-8?Q?pvS0X8YwQ5HfbtQm6B?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4588d9bc-e088-473b-b563-08df366ea973 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB5685.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2026 10:15:02.8607 (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: uBMw7bU5ATVx9U3Q87yo4fNwgg4A39Ak4V+pBeARA/8fbuhZFCJRvf+zuMAt+ep9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6681 On 10/29/26 17:23, Albert Esteve wrote: > On Thu, Oct 29, 2026 at 03:16:12PM +0100, Christian König wrote: >> On 10/28/26 17:09, Albert Esteve wrote: >>> On Wed, Oct 28, 2026 at 10:08:19AM +0100, Christian König wrote: >>>> On 10/27/26 16:02, Albert Esteve wrote: >>>>> dma-heap already supports charging a specific cgroup at allocation >>>>> time via charge_fd in DMA_HEAP_IOCTL_ALLOC. However, dma-bufs can >>>>> originate from any exporter (DRM, V4L2, etc.), and the allocator may >>>>> not know the final owner at allocation time. >>>>> >>>>> Add DMA_BUF_IOCTL_XFER_CHARGE to transfer a dma-buf's memcg charge >>>>> to a different cgroup after allocation. The target is identified by >>>>> charge_fd, which may be a cgroupfd or a pidfd. >>>>> >>>>> The transfer charges the new cgroup before uncharging the old one, >>>>> preserving the original charge on failure. An atomic cmpxchg on >>>>> dmabuf->memcg prevents races with concurrent transfers. >>>>> >>>>> Not all dma-buf exporters back their buffers with reclaimable system >>>>> memory. Some represent device registers, VRAM, or carved-out pools >>>>> where size is not a meaningful memory cost. Add a memcg_account flag >>>>> to dma_buf_export_info that exporters set when their buffers should >>>>> participate in memcg accounting. The xfer ioctl returns -EOPNOTSUPP >>>>> for buffers that do not set the flag. Currently only the system heap >>>>> sets it, other exporters can opt in as needed. >>>>> >>>>> Usage example: >>>>> int cg_fd = open("/sys/fs/cgroup/clients/app1", O_RDONLY | O_DIRECTORY); >>>>> >>>>> struct dma_buf_transfer_charge xfer = { >>>>> .charge_fd = cg_fd, >>>>> }; >>>>> ioctl(dmabuf_fd, DMA_BUF_IOCTL_XFER_CHARGE, &xfer); >>>>> /* charge now on app1's cgroup */ >>>>> close(cg_fd); >>>>> >>>>> Signed-off-by: Albert Esteve >>>>> --- >>>>> drivers/dma-buf/dma-buf.c | 43 +++++++++++++++++++++++++++++++++++++ >>>>> drivers/dma-buf/heaps/system_heap.c | 1 + >>>>> include/linux/dma-buf.h | 5 +++++ >>>>> include/linux/memcontrol.h | 9 ++++++++ >>>>> include/uapi/linux/dma-buf.h | 26 ++++++++++++++++++++++ >>>>> mm/memcontrol.c | 41 +++++++++++++++++++++++++++++++++++ >>>>> 6 files changed, 125 insertions(+) >>>>> >>>>> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c >>>>> index f31f49ebd0af..07513ecedc10 100644 >>>>> --- a/drivers/dma-buf/dma-buf.c >>>>> +++ b/drivers/dma-buf/dma-buf.c >>>>> @@ -540,6 +540,45 @@ static long dma_buf_import_sync_file(struct dma_buf *dmabuf, >>>>> } >>>>> #endif >>>>> >>>>> +/* Transfer a dma-buf's memcg charge; see struct dma_buf_transfer_charge */ >>>>> +static long dma_buf_xfer_charge(struct dma_buf *dmabuf, >>>>> + const void __user *user_data) >>>>> +{ >>>>> + struct dma_buf_transfer_charge arg; >>>>> + struct mem_cgroup *memcg; >>>>> + int ret = 0; >>>>> + >>>>> + if (copy_from_user(&arg, user_data, sizeof(arg))) >>>>> + return -EFAULT; >>>>> + >>>>> + if (!IS_ENABLED(CONFIG_MEMCG)) >>>>> + return 0; >>>>> + >>>>> + if (arg.flags != 0) >>>>> + return -EINVAL; >>>>> + >>>>> + if (!dmabuf->memcg_account) >>>>> + return -EOPNOTSUPP; >>>>> + >>>>> + memcg = mem_cgroup_get_from_fd(arg.charge_fd); >>>>> + if (IS_ERR(memcg)) >>>>> + return PTR_ERR(memcg); >>>>> + >>>>> + if (dmabuf->memcg == memcg) >>>>> + goto skip_transfer; >>>>> + >>>>> + if (!mem_cgroup_transfer_dmabuf_charge(dmabuf, memcg)) { >>>>> + ret = -ENOMEM; >>>>> + goto skip_transfer; >>>>> + } >>>>> + >>>>> + return 0; >>>>> + >>>>> +skip_transfer: >>>>> + mem_cgroup_put(memcg); >>>>> + return ret; >>>>> +} >>>>> + >>>>> static long dma_buf_ioctl(struct file *file, >>>>> unsigned int cmd, unsigned long arg) >>>>> { >>>>> @@ -590,6 +629,9 @@ static long dma_buf_ioctl(struct file *file, >>>>> return dma_buf_import_sync_file(dmabuf, (const void __user *)arg); >>>>> #endif >>>>> >>>>> + case DMA_BUF_IOCTL_XFER_CHARGE: >>>>> + return dma_buf_xfer_charge(dmabuf, (const void __user *)arg); >>>>> + >>>>> default: >>>>> return -ENOTTY; >>>>> } >>>>> @@ -750,6 +792,7 @@ struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info) >>>>> dmabuf->size = exp_info->size; >>>>> dmabuf->exp_name = exp_info->exp_name; >>>>> dmabuf->owner = exp_info->owner; >>>>> + dmabuf->memcg_account = exp_info->memcg_account; >>>> >>>> The initial charging should probably be done here as well. >>>> >>>> This way DMA-buf heaps only needs to pass in the charge_fd and we can re-use the functionality for other DMA-buf exporters as well. >>> >>> The problem with doing the charge here is that it happens too late. >>> That is the reasoning for this proposal to move all the charging logic >>> into heap allocators before pages are allocated. >> >> Oh, that is a really good point we need to talk about. >> >> DMA-buf heaps is actually a rather simple use case, but we have way more complex things. >> >> For example in some use cases the backing store of a DMA-buf is only allocated on first use and only then it needs to be comitted to it's memcg or dmem. > > Yes. The idea is focus on heaps for now. But the uAPI is actually > agnostic of the time when the charge happens. When we deal with > lazy-allocation in the future we can just call the reserve/cancel > helpers wherever is more appropiate. As long as the pages are not > allocated, exporters do not set dmabuf->memcg, and XFER does not > work (returns -EOPNOTSUPP). Yeah exactly that's the reason why I'm raising this topic. That approach won't work in all cases. See userspace is not aware that the kernel is delaying allocation or that the kernel is allocating the backing store asynchroniously in a background worker for example. So returning -EOPNOTSUPP when the backing store is not allocated yet and might be allocated later on is rather questionable uAPI because that is racy by design. >> >> I don't mind implementing it for DMA-buf heaps first, but we should have the uAPI and it's handling so solid that it also works for future use cases. > > Agreed. I think we should cover all usecases with the current status. > Your feedback helped a lot in getting there! I mean we can postpone that until we finally need it, but essentially we need to be able to distinct between charging, e.g. making sure the cgroup has enough free limit, and committing, e.g. allowing the resource to be reclaimed. And then it is possible that when the memcg of a DMA-buf changes that only the charging changes, but there isn't any comitted backing store yet... >>> What we could do is fill the dmabuf->memcg field when the flag is set >>> (i.e., committing into the dmabuf in the patch semantics). But for that >>> we'd need adding the memcg we want to charge it to into exp_info in >>> order to support charging to cgroups other than the allocator's (for >>> the common case would be simpler as we can just look at current). >>> Maybe that's what you meant? >> >> At least for the DMA-buf heaps use case that sounds reasonable for now. > > Thanks! Next version will have the flag removed and just use > dmabuf->memcg as indicator, set within dma_buf_export(). > Also, `nr_pages` will be computed within dma_buf_export(), the > contract being that exporters setting exp_info.memcg assert that > size reflects actual system memory bytes. Thinking more about it I would also put changing dmabuf->memcg under the dmabuf->resv lock instead of doing it with cmpxchg. We don't need it currently, but the dmabuf->resv lock is used for all state changes of the DMA-buf object and this operation is not performance critical in any way possible. If there is a problem with locking order we at least get lockdep screaming at us very early and not when we want to extend the functionality in the future. Regards, Christian. > >> >> Regards, >> Christian. >> >>> >>>> >>>>> spin_lock_init(&dmabuf->name_lock); >>>>> init_waitqueue_head(&dmabuf->poll); >>>>> dmabuf->cb_in.poll = dmabuf->cb_out.poll = &dmabuf->poll; >>>>> diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c >>>>> index adeea8cd328b..a764167167ba 100644 >>>>> --- a/drivers/dma-buf/heaps/system_heap.c >>>>> +++ b/drivers/dma-buf/heaps/system_heap.c >>>>> @@ -479,6 +479,7 @@ static struct dma_buf *system_heap_allocate(struct dma_heap *heap, >>>>> exp_info.size = buffer->len; >>>>> exp_info.flags = fd_flags; >>>>> exp_info.priv = buffer; >>>>> + exp_info.memcg_account = true; >>>>> dmabuf = dma_buf_export(&exp_info); >>>>> if (IS_ERR(dmabuf)) { >>>>> ret = PTR_ERR(dmabuf); >>>>> diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h >>>>> index 23ec0ff23fba..ac0ec88cab93 100644 >>>>> --- a/include/linux/dma-buf.h >>>>> +++ b/include/linux/dma-buf.h >>>>> @@ -433,6 +433,9 @@ struct dma_buf { >>>>> >>>>> /** @memcg: the cgroup to which this buffer is currently attributed */ >>>>> struct mem_cgroup *memcg; >>>>> + >>>>> + /** @memcg_account: account buffer memory to cgroup */ >>>>> + bool memcg_account; >>>>> }; >>>>> >>>>> /** >>>>> @@ -505,6 +508,7 @@ struct dma_buf_attachment { >>>>> * @flags: mode flags for the file >>>>> * @resv: reservation-object, NULL to allocate default one >>>>> * @priv: Attach private data of allocator to this buffer >>>>> + * @memcg_account: account buffer memory to cgroup >>>>> * >>>>> * This structure holds the information required to export the buffer. Used >>>>> * with dma_buf_export() only. >>>>> @@ -517,6 +521,7 @@ struct dma_buf_export_info { >>>>> int flags; >>>>> struct dma_resv *resv; >>>>> void *priv; >>>>> + bool memcg_account; >>>>> }; >>>>> >>>>> /** >>>>> diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h >>>>> index 6b30baa79fa9..36fddafbef4e 100644 >>>>> --- a/include/linux/memcontrol.h >>>>> +++ b/include/linux/memcontrol.h >>>>> @@ -679,6 +679,9 @@ bool mem_cgroup_reserve_dmabuf(struct mem_cgroup *memcg, gfp_t gfp, >>>>> void mem_cgroup_commit_dmabuf(struct dma_buf *dmabuf, struct mem_cgroup *memcg, >>>>> unsigned int nr_pages); >>>>> >>>>> +bool mem_cgroup_transfer_dmabuf_charge(struct dma_buf *dmabuf, >>>>> + struct mem_cgroup *new_memcg); >>>>> + >>>>> void __mem_cgroup_uncharge(struct folio *folio); >>>>> >>>>> /** >>>>> @@ -1206,6 +1209,12 @@ static inline void mem_cgroup_cancel_dmabuf(struct mem_cgroup *memcg, >>>>> { >>>>> } >>>>> >>>>> +static inline bool mem_cgroup_transfer_dmabuf_charge(struct dma_buf *dmabuf, >>>>> + struct mem_cgroup *new_memcg) >>>>> +{ >>>>> + return true; >>>>> +} >>>>> + >>>>> static inline void mem_cgroup_uncharge(struct folio *folio) >>>>> { >>>>> } >>>>> diff --git a/include/uapi/linux/dma-buf.h b/include/uapi/linux/dma-buf.h >>>>> index e827c9d20c5d..ea957f4b1d38 100644 >>>>> --- a/include/uapi/linux/dma-buf.h >>>>> +++ b/include/uapi/linux/dma-buf.h >>>>> @@ -168,6 +168,31 @@ struct dma_buf_import_sync_file { >>>>> __s32 fd; >>>>> }; >>>>> >>>>> +/** >>>>> + * struct dma_buf_transfer_charge - Transfer a dma-buf's memcg charge >>>>> + * >>>>> + * Any holder of a dma-buf file descriptor can perform a >>>>> + * DMA_BUF_IOCTL_XFER_CHARGE to attribute the buffer's memory >>>>> + * cost to a specific cgroup, or move it from one cgroup to >>>>> + * another. The ioctl charges the new cgroup before uncharging >>>>> + * the old one atomically. On failure the original charge is >>>>> + * preserved. If the buffer has no existing charge, a new >>>>> + * charge is established. >>>>> + */ >>>>> +struct dma_buf_transfer_charge { >>>>> + /** @flags: Reserved, must be zero */ >>>>> + __u32 flags; /* unused for now */ >>>>> + /** >>>>> + * @charge_fd: File descriptor identifying the target cgroup. >>>>> + * >>>>> + * May be either a pidfd, in which case the charge moves to the >>>>> + * memory cgroup of the referenced process, or a cgroupfd obtained >>>>> + * by opening a cgroup v2 directory, in which case the charge moves >>>>> + * directly to that cgroup's memory controller. >>>>> + */ >>>>> + __u32 charge_fd; >>>>> +}; >>>>> + >>>>> #define DMA_BUF_BASE 'b' >>>>> #define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync) >>>>> >>>>> @@ -179,5 +204,6 @@ struct dma_buf_import_sync_file { >>>>> #define DMA_BUF_SET_NAME_B _IOW(DMA_BUF_BASE, 1, __u64) >>>>> #define DMA_BUF_IOCTL_EXPORT_SYNC_FILE _IOWR(DMA_BUF_BASE, 2, struct dma_buf_export_sync_file) >>>>> #define DMA_BUF_IOCTL_IMPORT_SYNC_FILE _IOW(DMA_BUF_BASE, 3, struct dma_buf_import_sync_file) >>>>> +#define DMA_BUF_IOCTL_XFER_CHARGE _IOW(DMA_BUF_BASE, 4, struct dma_buf_transfer_charge) >>>>> >>>>> #endif >>>>> diff --git a/mm/memcontrol.c b/mm/memcontrol.c >>>>> index 7b841b905759..3adc84fe6668 100644 >>>>> --- a/mm/memcontrol.c >>>>> +++ b/mm/memcontrol.c >>>>> @@ -5786,6 +5786,47 @@ void mem_cgroup_cancel_dmabuf(struct mem_cgroup *memcg, unsigned int nr_pages) >>>>> refill_stock(memcg, nr_pages); >>>>> } >>>>> >>>>> +/** >>>>> + * mem_cgroup_transfer_dmabuf_charge - move a dma-buf charge >>>>> + * @dmabuf: buffer to transfer charge >>>>> + * @new_memcg: target memcg; caller must hold a reference >>>>> + * >>>>> + * Transfers the charge for @dmabuf to @new_memcg and, on >>>>> + * success, stores @new_memcg in @dmabuf->memcg. >>>>> + * Returns %true on success, %false if the charge against @new_memcg >>>>> + * failed or a concurrent transfer raced on @dmabuf->memcg. >>>>> + * On failure the caller retains its reference to @new_memcg. >>>>> + */ >>>>> +bool mem_cgroup_transfer_dmabuf_charge(struct dma_buf *dmabuf, >>>>> + struct mem_cgroup *new_memcg) >>>> >>>> I would make that more generic instead of dmabuf specific. E.g. something like this: >>>> >>>> bool mem_cgroup_transfer_charge(struct struct mem_cgroup **ptr_memcg, struct mem_cgroup *new_memcg, enum memcg_stat_item item, unsigned int nr_pages) >>> >>> Ah yes, I like this generalization. And the implementation remains >>> mostly the same. Thanks! >>> >>>> >>>>> +{ >>>>> + struct mem_cgroup *old_memcg = READ_ONCE(dmabuf->memcg); >>>> >>>>> + unsigned int nr_pages = PAGE_ALIGN(dmabuf->size) >> PAGE_SHIFT; >>>> >>>> This way we can also document in the DMA-buf caller that this conversation must be ok when memcg_account is true. >>>> >>>> Regards, >>>> Christian. >>>> >>>>> + >>>>> + if (mem_cgroup_disabled()) >>>>> + return true; >>>>> + >>>>> + if (!mem_cgroup_reserve_dmabuf(new_memcg, GFP_KERNEL, nr_pages)) >>>>> + return false; >>>>> + >>>>> + mod_memcg_state(new_memcg, MEMCG_DMABUF, nr_pages); >>>>> + >>>>> + if (cmpxchg(&dmabuf->memcg, old_memcg, new_memcg) != old_memcg) { >>>>> + mod_memcg_state(new_memcg, MEMCG_DMABUF, -nr_pages); >>>>> + mem_cgroup_cancel_dmabuf(new_memcg, nr_pages); >>>>> + return false; >>>>> + } >>>>> + >>>>> + if (old_memcg) { >>>>> + /* Uncharge old cgroup */ >>>>> + mod_memcg_state(old_memcg, MEMCG_DMABUF, -nr_pages); >>>>> + mem_cgroup_cancel_dmabuf(old_memcg, nr_pages); >>>>> + mem_cgroup_put(old_memcg); >>>>> + } >>>>> + >>>>> + return true; >>>>> +} >>>>> + >>>>> /** >>>>> * mem_cgroup_uncharge_dmabuf - uncharge a dma-buf from its memcg >>>>> * @dmabuf: buffer to uncharge >>>>> >>>> >>> >> > From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lists.trustedfirmware.org (lists.trustedfirmware.org [18.214.241.189]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBF0F606A321 for ; Fri, 30 Oct 2026 10:15:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=lists.trustedfirmware.org header.i=@lists.trustedfirmware.org header.a=rsa-sha256 header.s=2024 header.b=rNqSgU2F; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=FMNS+2JS Received: from lists.trustedfirmware.org (localhost [127.0.0.1]) by lists.trustedfirmware.org (Postfix) with ESMTP id 1C8A5453CC for ; Fri, 30 Oct 2026 10:15:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.trustedfirmware.org; s=2024; t=1793355327; bh=sZQHkYeqU9pgGeM4N+eBseyU40cf1qkHFhn3V6pE1D8=; h=Date:Subject:To:References:In-Reply-To:CC:List-Id:List-Archive: List-Help:List-Owner:List-Post:List-Subscribe:List-Unsubscribe: From:Reply-To:From; b=rNqSgU2FIPrcLrfK2lnNvRbtWTjMFh5cJJI1Va2j1hoBgbtAw7dkxx1JuAebKa/hH MBEEmHumSdVgilUktrgvXTmrUucXMFRbVpP0IfdMZa9R8XSESbx2exVWGDjJCA53ku 1X1YY9mCHdWjzbSAAAxILBMyix3hmFSJThyBqeJ4FPei0/ujmFoBOcPqYh+Am1ty/x yYrHrGbdrfwnIfE3HIrY+XxAzhuFgYbnpZaGsNp1Tj7tsZwdRQnRJYRpe93CTXDMHo cxqfaWjwRCvi7GK2qqzGjR0NXvv+Os3zVrcE2j46CZBl0hx9dsZ/dZJxNHErjklxiL IEeqG17s9k7Gw== Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010035.outbound.protection.outlook.com [40.93.198.35]) by lists.trustedfirmware.org (Postfix) with ESMTPS id 42DC843E12 for ; Fri, 30 Oct 2026 10:15:07 +0000 (UTC) Authentication-Results: lists.trustedfirmware.org; dkim=pass (1024-bit key; unprotected) header.d=amd.com header.i=@amd.com header.a=rsa-sha256 header.s=selector1 header.b=FMNS+2JS; dkim-atps=neutral ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hjd7bcipzyKzyTNbDSW3hoWQVCoxsE/mXf+py9buiW7IIxWkWP3q0C5CpFoePpk6hfIV/bvKmy4yxFqX9ZxvP/1OcNVbPpgBaRGlr76Z3QNXPJWaXAbzkxRdCc/dXetY4Stz36NulG6ydgn8O4oFc6zzL83Lw1KuAh14zJxgcuNDGP/h046OALWRCAMqLqhtIgFqJ0Pp2c2Hq4y3qvT8ek4KdAbO/Nb5prIJbfXW+bw0BOWl+dECvclVJth8OIRvl13Hr48KSl+Um3owz1mZJy4NtwNOdJPcwTsqE9lv+D+lbM/d1o5VZpof/WqOb5A/Z0WExsbSOObuKuyraC5ewQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bpSoJ8ERAGE+2HdLcrLZ/w9bdGlkebvz/Cx8ZnJ0+sg=; b=qpuyrAhJiruyh+CUV1JpiK93W2sKEFfDJtPKg+daWw5y+298NNbDi5ajm+ZZONaZcJtF9WL0IH3+mQSmM9qfFYMPAd+LJj8uUTSCcvykVfYCpQccjTzxPV2CvkRrye2d1M+Dbm9MRWXiKdoFVDjRfFKezpYEzTZ0NdNu7g2ZTvpmvjYPeUnLjpDeJDRTvcr4bR04uVU7dvnMwNIg7rXHCh1qT+A8YDWOa/tI9RTNLN5Hzn9KSHGQ27zmRwq3ZZ4V4fYCAOPVoj8EzbylA9UieAWAvcPrw5HJ9MM1v7Qj+IDd9+ApKZaBbWAWfj+NYkb4PGo4gQqfgRgAUsiPWdnBMw== 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=bpSoJ8ERAGE+2HdLcrLZ/w9bdGlkebvz/Cx8ZnJ0+sg=; b=FMNS+2JSpnfxs47IL5iXV79FVeRkk4f2mAREunP72TxSJw2hsJC2d73tXyeEDMekuKvFPUqDBhx0qEGnH9vfL5U9wJlGDb/DiSPzmqr4W8Zf4zViLeg0JfEsLXEku+IfNMQovz+NTRDHvJxDUGxqgnFjb+48kWKQ85ikMudWocU= Received: from PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) by MW4PR12MB6681.namprd12.prod.outlook.com (2603:10b6:303:1e1::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.10; Fri, 30 Oct 2026 10:15:03 +0000 Received: from PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c]) by PH7PR12MB5685.namprd12.prod.outlook.com ([fe80::ce69:cfae:774d:a65c%3]) with mapi id 15.21.0546.021; Fri, 30 Oct 2026 10:15:02 +0000 Message-ID: <08705a7a-86aa-4b43-a22a-e80a572010f2@amd.com> Date: Fri, 30 Oct 2026 11:14:50 +0100 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 7/8] dma-buf: transfer memcg charges via DMA_BUF_IOCTL_XFER_CHARGE To: Albert Esteve References: <20261027-v2_20230123_tjmercier_google_com-v3-0-78d2c4cb8647@redhat.com> <20261027-v2_20230123_tjmercier_google_com-v3-7-78d2c4cb8647@redhat.com> <9ebce3f2-f7a0-46a9-bad7-39059b99423f@amd.com> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-ClientProxiedBy: BN9PR03CA0516.namprd03.prod.outlook.com (2603:10b6:408:131::11) To PH7PR12MB5685.namprd12.prod.outlook.com (2603:10b6:510:13c::22) X-Archived-By: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH7PR12MB5685:EE_|MW4PR12MB6681:EE_ X-MS-Office365-Filtering-Correlation-Id: 4588d9bc-e088-473b-b563-08df366ea973 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|23010399003|1800799024|22082099003|18002099003|10067099003|11063799006|4143699003|56012099006|261021123027099003|261021121427099003|261022105027099003|261026121527099003|261026140227099003|261028144727099003|261009223027099003|261009221227099003; X-Microsoft-Antispam-Message-Info: y6jeYfReWPIn11AK8DxxwrAaYxYfsyHmSuI05RtAAIFhJK/Pc/UPVbNQfjHPfjvjEkcmp5htahnN8sutRpr3NIP5eHm+gXJVuxw342kQAt84cZ2Gq+hNpT1UxerGeU7OKduvM2kydnk7FRC3tfujCcJD/Thv2QJLKFgK71eHu2wILlVlVXmA/VsHHDQN0NAZy4u0y03D1uflTk+SxPJ17pWFW+jWdkFM+0jC9LkpDyxHrL4Ryu0tYD/KpiIG1X2Ua/VLqmvIlssG+k2uXCU4B6V0XGEgnIf69ojN10nKLlOqvsgVXP9ONJe5J0AtVJ1OjjgbaMJEFAJoyJK8EKvmXc1lMuWaMRCqkRVZCXKlgVcbIVF5H6coxvkq68XiI/XRDIZRl8dgDDrEu6ex8pohm6339PV85ewjXO4OybFqOJO3t3nn6AJTnobOJudoK1mbwOdV1wMpw9vNsYqzsWx/uMUgsuNnlwmqjMTz6YhdJUEwhajvtdtSh5t6uhBnJpYfgD51x1XqB/zJWSIsGloTeE2qiYrNebbxHKaTAcZW1fXVVshXmQnNZN6po3LXf6jqBtkdDoSd/ax43WJ3TOyJihHsbe3tc80gykye6WZKkhNlJI8d2x0IYMAnSjj3El4THS/2nenWsQ3HoTV8uhW6uzzQFJ+qKWSlPd99gYfo+Kg= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR12MB5685.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(23010399003)(1800799024)(22082099003)(18002099003)(10067099003)(11063799006)(4143699003)(56012099006)(261021123027099003)(261021121427099003)(261022105027099003)(261026121527099003)(261026140227099003)(261028144727099003)(261009223027099003)(261009221227099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R0duRlQ2Qk9HbitDNzZYVjlINEFvQlZ5N2hrN1FSUDlvTnN3b0xETjJYVjRz?= =?utf-8?B?cXVINFJLQ1lzVUswV2pvZUFGRmJGNnBndkFtK0oyRTJ0QW9NU1V5OUxWeTN2?= =?utf-8?B?K3lTSHVuYXRpbzVHUTk4cTRZeXU5eUZaQ2hsYjVhd0U3Znh1ZE14U3VsMTRt?= =?utf-8?B?VnE2SndwdUVOWGd0QTE3RXFCcmhGZXlTYTdFODIxLzd5b3F4ZmhCb3pIbmNH?= =?utf-8?B?RTZDU3Btb05MMnVnaU1KYUN2aWVMOEpFR3VrZ3B6Z3JTNEtqazdJT3dRUlEr?= =?utf-8?B?ZVNBK1dYVklzNzRQZ3lQSjFBYjBoZEEwY08veVFnN0NzaGhsOGNBWHNhUUlL?= =?utf-8?B?cVYzZmxqOVg0d2NETnRLbEhFQTB6Sjc4Rm95MW9SQ05tcWxOOVAvL1l5YnhH?= =?utf-8?B?RDhReVFUQUc1UEZ1SFA4c0lyeWJEY0FUQTBLUUYwT3U5MXJHY25QWVZyelhi?= =?utf-8?B?MGE2L2NyWWVsWFl3Si9ib1ZZdEhZTU9WQzc5RGpLR0MrZ25pbDJnajBYdFZ1?= =?utf-8?B?WUY3SEFJL1FmQzBCcitQTGxxU3ZyNGsxcm9XbTB5Mm1yMzdCUWxQeTJldFVN?= =?utf-8?B?RElLeTlmTlpsMHl3bTdGTjJrcHI3bFAxT2ppMDZyVldRVnVTVGN2T2djSlBD?= =?utf-8?B?VmpTTTJVQy9ZdTB0L0tBb042UFVDOVFJdGFYWlpzNEdmWUNUR1czcXRIQ09r?= =?utf-8?B?MGdyS2JoNjUvdDBWK0hLMzIyclhkUVBYVWtlRkwyTjN3bTFkQSt6aWtBNmlJ?= =?utf-8?B?TWs3TmUzZEduN3VLYSsvWXBrTW04TGE0bTY1UktpZDRkUnFDUFh3akVZYUpM?= =?utf-8?B?ekNlbG92R1hwOGFTTzUvSWxhOG4wZDhzRGNlTjdnQldXdGJ4VWtPWTZKbkQ2?= =?utf-8?B?SmIrNlJFVnVjVFZhZVdJdVVHMXBSbkRWcU0yMGc3SDIvZHlPVzRrS1VNQklu?= =?utf-8?B?VVlZWExMWjV0Z2RyYnl1cm5rTko2YlpUR2cyL2x3dkJJR0xBM2NkVW9VSGl3?= =?utf-8?B?TDVCMTFXMlU3YzVibmJwTzJQaktnQ2ltSURVNVA0djQxZ1FzMTNaWUxQdTN2?= =?utf-8?B?YnFVMEx6YlpBVHJPR0xJYUorZEVTbTk5OC9OWU1kTWFNYjFUbFhrZkpnTFVP?= =?utf-8?B?aHphemt4VDlSOWZzOU5tNFNmYjczTjZpY0dDM05GY2Z4SUwwNmlCSmRHeUxr?= =?utf-8?B?c1NMSFIwR3NzYmJGMDB1L0xoS0t3RGJ6Y2NaWFdQc0RVM2JHcmQxRWtUN2RB?= =?utf-8?B?UkwvUUVqY1FmS3JJMjdQdFp4U0FuNWw0RUU4Wm9EdEhNMm5ROW5pd3JKVWdF?= =?utf-8?B?VlJCRksxLy94S1c3V3RCTHRqWHdJTm9NZEdpT2FOdVJjdGxGa2hNS3JNOWQ4?= =?utf-8?B?NGZUQzJ6ZnFnREc5djVEbzFpNXVxRFhhRUxVVEtJY0E2QkU5UjVnaXdkYlNU?= =?utf-8?B?OVhhOVUwWVBUeG5vayt5aklRM2QxM0hRZHV6WnlmTFlmOUU2SURuV1ZYSzVj?= =?utf-8?B?Y0pvYUloVXI4QVM5MW8vd2t2Sm5wNnNNQmtrTVpSaEVFZUpraGhqNG9xYmdB?= =?utf-8?B?Mlc1eWRMVkRNdVhqb0xNdStCWFV1cS85MzVPMjlNVXM0Rmk5amZmUEVjUlFY?= =?utf-8?B?RnZtV3dBS0dKNk9yZExGU2dUOS9wM09CRnpQUEdkRW81R3NvcHluTWc0ZFU3?= =?utf-8?B?aVpsRGExV3IrZXc5cHIwOENDNEFFUGNxNWZ4RkFWeWN0U3MyU2Y3MnZRTERW?= =?utf-8?B?YVNPZUNKRWlzRmVneEhvajNxcDZ2b3V5VlBablgxcjRRTExEQ0EvT2dlN3Zk?= =?utf-8?B?RjBqa2grRUYvc3FWUzRxa3pPaTc5SVNCeEFaeDdvbHplRkhQWmlxdnFvbzVR?= =?utf-8?B?aVFnTElIMFFodmkvNlNGam9mWWw3SDJQMUdpN2FMS1JwTHAzcjFFQWFGYjFo?= =?utf-8?B?OW8xaUx5dStWaEZJbDc0bG1OZmVNRjJMRm1UckVUeWkyaUVvbGEwYUc3WjBq?= =?utf-8?B?SzExUWRGUWxLZ1o4Z29nUmRJYmJGSzkzbEdmd0dBQkNpZ3A5MlJnVGxqc3lh?= =?utf-8?B?OCtlblpacXRJNFRLYzJhem5wV0VyaEs4T3IwT0pCaWxYSVRmZUhRTXZkNUpy?= =?utf-8?B?K0hIaDNqMFovSlQ1dWsvYTBkVzkvY2U4QzBrZVcxZEJodFFLRFpLTkVOa3hQ?= =?utf-8?B?TUFxOGFub0JyakFKWlZhUklsSkg2V0FPNVV6MmNYSXp4cjFleTFHQXI3RnZr?= =?utf-8?B?dXY5T0Iva2UveFUrWnpYVWNSUFpiOGlncU1BS0ZNTTFHRk5US3Q2MmlzV2dE?= =?utf-8?Q?pvS0X8YwQ5HfbtQm6B?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4588d9bc-e088-473b-b563-08df366ea973 X-MS-Exchange-CrossTenant-AuthSource: PH7PR12MB5685.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2026 10:15:02.8607 (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: uBMw7bU5ATVx9U3Q87yo4fNwgg4A39Ak4V+pBeARA/8fbuhZFCJRvf+zuMAt+ep9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6681 X-Rspamd-Action: no action X-Spamd-Result: default: False [-3.50 / 15.00]; BAYES_HAM(-3.00)[100.00%]; SUSPICIOUS_RECIPS(1.50)[]; ARC_ALLOW(-1.00)[microsoft.com:s=arcselector10001:i=1]; DMARC_POLICY_ALLOW(-0.50)[amd.com,quarantine]; R_DKIM_ALLOW(-0.20)[amd.com:s=selector1]; R_SPF_ALLOW(-0.20)[+ip4:40.92.0.0/15]; MIME_GOOD(-0.10)[text/plain]; MID_RHS_MATCH_FROM(0.00)[]; ASN(0.00)[asn:8075, ipnet:40.80.0.0/12, country:US]; RCPT_COUNT_TWELVE(0.00)[39]; RWL_MAILSPIKE_POSSIBLE(0.00)[40.93.198.35:from]; MIME_TRACE(0.00)[0:+]; NEURAL_HAM(-0.00)[-1.000]; ALIAS_RESOLVED(0.00)[]; RCVD_TLS_LAST(0.00)[]; FROM_HAS_DN(0.00)[]; FREEMAIL_CC(0.00)[kernel.org,cmpxchg.org,suse.com,lwn.net,linuxfoundation.org,linaro.org,linux.dev,linux-foundation.org,collabora.com,arm.com,google.com,paul-moore.com,namei.org,hallyn.com,gmail.com,infradead.org,vger.kernel.org,lists.freedesktop.org,lists.linaro.org,kvack.org,lists.trustedfirmware.org,redhat.com]; TO_DN_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DNSWL_BLOCKED(0.00)[40.93.198.35:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; DKIM_TRACE(0.00)[amd.com:+] X-Rspamd-Server: lists.trustedfirmware.org X-Rspamd-Queue-Id: 42DC843E12 X-Spamd-Bar: --- Message-ID-Hash: UEHN6V7NWXH4BX6GHRHQTSF66VY4KJ3F X-Message-ID-Hash: UEHN6V7NWXH4BX6GHRHQTSF66VY4KJ3F X-MailFrom: Christian.Koenig@amd.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-op-tee.lists.trustedfirmware.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Tejun Heo , Johannes Weiner , =?UTF-8?Q?Michal_Koutn=C3=BD?= , Jonathan Corbet , Shuah Khan , Sumit Semwal , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Andrew Morton , Benjamin Gaignard , Brian Starkey , John Stultz , "T.J. Mercier" , Christian Brauner , Paul Moore , James Morris , "Serge E. Hallyn" , Stephen Smalley , Shuah Khan , Randy Dunlap , =?UTF-8?B?T25kcmVqIE1vc27DocSNZWs=?= , Jens Wiklander , Sumit Garg , cgroup s@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, linux-mm@kvack.org, linux-security-module@vger.kernel.org, selinux@vger.kernel.org, linux-kselftest@vger.kernel.org, op-tee@lists.trustedfirmware.org, echanude@redhat.com, mripard@kernel.org X-Mailman-Version: 3.3.5 Precedence: list List-Id: Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: From: =?utf-8?q?Christian_K=C3=B6nig_via_OP-TEE?= Reply-To: =?UTF-8?Q?Christian_K=C3=B6nig?= X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_PASS,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=4.0.1 X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on aws-us-west-2-korg-listserv-alma10-1 T24gMTAvMjkvMjYgMTc6MjMsIEFsYmVydCBFc3RldmUgd3JvdGU6DQo+IE9uIFRodSwgT2N0IDI5 LCAyMDI2IGF0IDAzOjE2OjEyUE0gKzAxMDAsIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6DQo+PiBP biAxMC8yOC8yNiAxNzowOSwgQWxiZXJ0IEVzdGV2ZSB3cm90ZToNCj4+PiBPbiBXZWQsIE9jdCAy OCwgMjAyNiBhdCAxMDowODoxOUFNICswMTAwLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOg0KPj4+ PiBPbiAxMC8yNy8yNiAxNjowMiwgQWxiZXJ0IEVzdGV2ZSB3cm90ZToNCj4+Pj4+IGRtYS1oZWFw IGFscmVhZHkgc3VwcG9ydHMgY2hhcmdpbmcgYSBzcGVjaWZpYyBjZ3JvdXAgYXQgYWxsb2NhdGlv bg0KPj4+Pj4gdGltZSB2aWEgY2hhcmdlX2ZkIGluIERNQV9IRUFQX0lPQ1RMX0FMTE9DLiBIb3dl dmVyLCBkbWEtYnVmcyBjYW4NCj4+Pj4+IG9yaWdpbmF0ZSBmcm9tIGFueSBleHBvcnRlciAoRFJN LCBWNEwyLCBldGMuKSwgYW5kIHRoZSBhbGxvY2F0b3IgbWF5DQo+Pj4+PiBub3Qga25vdyB0aGUg ZmluYWwgb3duZXIgYXQgYWxsb2NhdGlvbiB0aW1lLg0KPj4+Pj4NCj4+Pj4+IEFkZCBETUFfQlVG X0lPQ1RMX1hGRVJfQ0hBUkdFIHRvIHRyYW5zZmVyIGEgZG1hLWJ1ZidzIG1lbWNnIGNoYXJnZQ0K Pj4+Pj4gdG8gYSBkaWZmZXJlbnQgY2dyb3VwIGFmdGVyIGFsbG9jYXRpb24uIFRoZSB0YXJnZXQg aXMgaWRlbnRpZmllZCBieQ0KPj4+Pj4gY2hhcmdlX2ZkLCB3aGljaCBtYXkgYmUgYSBjZ3JvdXBm ZCBvciBhIHBpZGZkLg0KPj4+Pj4NCj4+Pj4+IFRoZSB0cmFuc2ZlciBjaGFyZ2VzIHRoZSBuZXcg Y2dyb3VwIGJlZm9yZSB1bmNoYXJnaW5nIHRoZSBvbGQgb25lLA0KPj4+Pj4gcHJlc2VydmluZyB0 aGUgb3JpZ2luYWwgY2hhcmdlIG9uIGZhaWx1cmUuIEFuIGF0b21pYyBjbXB4Y2hnIG9uDQo+Pj4+ PiBkbWFidWYtPm1lbWNnIHByZXZlbnRzIHJhY2VzIHdpdGggY29uY3VycmVudCB0cmFuc2ZlcnMu DQo+Pj4+Pg0KPj4+Pj4gTm90IGFsbCBkbWEtYnVmIGV4cG9ydGVycyBiYWNrIHRoZWlyIGJ1ZmZl cnMgd2l0aCByZWNsYWltYWJsZSBzeXN0ZW0NCj4+Pj4+IG1lbW9yeS4gU29tZSByZXByZXNlbnQg ZGV2aWNlIHJlZ2lzdGVycywgVlJBTSwgb3IgY2FydmVkLW91dCBwb29scw0KPj4+Pj4gd2hlcmUg c2l6ZSBpcyBub3QgYSBtZWFuaW5nZnVsIG1lbW9yeSBjb3N0LiBBZGQgYSBtZW1jZ19hY2NvdW50 IGZsYWcNCj4+Pj4+IHRvIGRtYV9idWZfZXhwb3J0X2luZm8gdGhhdCBleHBvcnRlcnMgc2V0IHdo ZW4gdGhlaXIgYnVmZmVycyBzaG91bGQNCj4+Pj4+IHBhcnRpY2lwYXRlIGluIG1lbWNnIGFjY291 bnRpbmcuIFRoZSB4ZmVyIGlvY3RsIHJldHVybnMgLUVPUE5PVFNVUFANCj4+Pj4+IGZvciBidWZm ZXJzIHRoYXQgZG8gbm90IHNldCB0aGUgZmxhZy4gQ3VycmVudGx5IG9ubHkgdGhlIHN5c3RlbSBo ZWFwDQo+Pj4+PiBzZXRzIGl0LCBvdGhlciBleHBvcnRlcnMgY2FuIG9wdCBpbiBhcyBuZWVkZWQu DQo+Pj4+Pg0KPj4+Pj4gVXNhZ2UgZXhhbXBsZToNCj4+Pj4+ICAgaW50IGNnX2ZkID0gb3Blbigi L3N5cy9mcy9jZ3JvdXAvY2xpZW50cy9hcHAxIiwgT19SRE9OTFkgfCBPX0RJUkVDVE9SWSk7DQo+ Pj4+Pg0KPj4+Pj4gICBzdHJ1Y3QgZG1hX2J1Zl90cmFuc2Zlcl9jaGFyZ2UgeGZlciA9IHsNCj4+ Pj4+ICAgICAgIC5jaGFyZ2VfZmQgPSBjZ19mZCwNCj4+Pj4+ICAgfTsNCj4+Pj4+ICAgaW9jdGwo ZG1hYnVmX2ZkLCBETUFfQlVGX0lPQ1RMX1hGRVJfQ0hBUkdFLCAmeGZlcik7DQo+Pj4+PiAgIC8q IGNoYXJnZSBub3cgb24gYXBwMSdzIGNncm91cCAqLw0KPj4+Pj4gICBjbG9zZShjZ19mZCk7DQo+ Pj4+Pg0KPj4+Pj4gU2lnbmVkLW9mZi1ieTogQWxiZXJ0IEVzdGV2ZSA8YWVzdGV2ZUByZWRoYXQu Y29tPg0KPj4+Pj4gLS0tDQo+Pj4+PiAgZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyAgICAgICAg ICAgfCA0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+Pj4+PiAgZHJp dmVycy9kbWEtYnVmL2hlYXBzL3N5c3RlbV9oZWFwLmMgfCAgMSArDQo+Pj4+PiAgaW5jbHVkZS9s aW51eC9kbWEtYnVmLmggICAgICAgICAgICAgfCAgNSArKysrKw0KPj4+Pj4gIGluY2x1ZGUvbGlu dXgvbWVtY29udHJvbC5oICAgICAgICAgIHwgIDkgKysrKysrKysNCj4+Pj4+ICBpbmNsdWRlL3Vh cGkvbGludXgvZG1hLWJ1Zi5oICAgICAgICB8IDI2ICsrKysrKysrKysrKysrKysrKysrKysNCj4+ Pj4+ICBtbS9tZW1jb250cm9sLmMgICAgICAgICAgICAgICAgICAgICB8IDQxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrDQo+Pj4+PiAgNiBmaWxlcyBjaGFuZ2VkLCAxMjUgaW5z ZXJ0aW9ucygrKQ0KPj4+Pj4NCj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1h LWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYw0KPj4+Pj4gaW5kZXggZjMxZjQ5ZWJk MGFmLi4wNzUxM2VjZWRjMTAgMTAwNjQ0DQo+Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1h LWJ1Zi5jDQo+Pj4+PiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jDQo+Pj4+PiBAQCAt NTQwLDYgKzU0MCw0NSBAQCBzdGF0aWMgbG9uZyBkbWFfYnVmX2ltcG9ydF9zeW5jX2ZpbGUoc3Ry dWN0IGRtYV9idWYgKmRtYWJ1ZiwNCj4+Pj4+ICB9DQo+Pj4+PiAgI2VuZGlmDQo+Pj4+PiAgDQo+ Pj4+PiArLyogVHJhbnNmZXIgYSBkbWEtYnVmJ3MgbWVtY2cgY2hhcmdlOyBzZWUgc3RydWN0IGRt YV9idWZfdHJhbnNmZXJfY2hhcmdlICovDQo+Pj4+PiArc3RhdGljIGxvbmcgZG1hX2J1Zl94ZmVy X2NoYXJnZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLA0KPj4+Pj4gKwkJCQljb25zdCB2b2lkIF9f dXNlciAqdXNlcl9kYXRhKQ0KPj4+Pj4gK3sNCj4+Pj4+ICsJc3RydWN0IGRtYV9idWZfdHJhbnNm ZXJfY2hhcmdlIGFyZzsNCj4+Pj4+ICsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOw0KPj4+Pj4g KwlpbnQgcmV0ID0gMDsNCj4+Pj4+ICsNCj4+Pj4+ICsJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmcs IHVzZXJfZGF0YSwgc2l6ZW9mKGFyZykpKQ0KPj4+Pj4gKwkJcmV0dXJuIC1FRkFVTFQ7DQo+Pj4+ PiArDQo+Pj4+PiArCWlmICghSVNfRU5BQkxFRChDT05GSUdfTUVNQ0cpKQ0KPj4+Pj4gKwkJcmV0 dXJuIDA7DQo+Pj4+PiArDQo+Pj4+PiArCWlmIChhcmcuZmxhZ3MgIT0gMCkNCj4+Pj4+ICsJCXJl dHVybiAtRUlOVkFMOw0KPj4+Pj4gKw0KPj4+Pj4gKwlpZiAoIWRtYWJ1Zi0+bWVtY2dfYWNjb3Vu dCkNCj4+Pj4+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4+Pj4+ICsNCj4+Pj4+ICsJbWVtY2cg PSBtZW1fY2dyb3VwX2dldF9mcm9tX2ZkKGFyZy5jaGFyZ2VfZmQpOw0KPj4+Pj4gKwlpZiAoSVNf RVJSKG1lbWNnKSkNCj4+Pj4+ICsJCXJldHVybiBQVFJfRVJSKG1lbWNnKTsNCj4+Pj4+ICsNCj4+ Pj4+ICsJaWYgKGRtYWJ1Zi0+bWVtY2cgPT0gbWVtY2cpDQo+Pj4+PiArCQlnb3RvIHNraXBfdHJh bnNmZXI7DQo+Pj4+PiArDQo+Pj4+PiArCWlmICghbWVtX2Nncm91cF90cmFuc2Zlcl9kbWFidWZf Y2hhcmdlKGRtYWJ1ZiwgbWVtY2cpKSB7DQo+Pj4+PiArCQlyZXQgPSAtRU5PTUVNOw0KPj4+Pj4g KwkJZ290byBza2lwX3RyYW5zZmVyOw0KPj4+Pj4gKwl9DQo+Pj4+PiArDQo+Pj4+PiArCXJldHVy biAwOw0KPj4+Pj4gKw0KPj4+Pj4gK3NraXBfdHJhbnNmZXI6DQo+Pj4+PiArCW1lbV9jZ3JvdXBf cHV0KG1lbWNnKTsNCj4+Pj4+ICsJcmV0dXJuIHJldDsNCj4+Pj4+ICt9DQo+Pj4+PiArDQo+Pj4+ PiAgc3RhdGljIGxvbmcgZG1hX2J1Zl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4+Pj4+ICAJ CQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQ0KPj4+Pj4gIHsNCj4+Pj4+ IEBAIC01OTAsNiArNjI5LDkgQEAgc3RhdGljIGxvbmcgZG1hX2J1Zl9pb2N0bChzdHJ1Y3QgZmls ZSAqZmlsZSwNCj4+Pj4+ICAJCXJldHVybiBkbWFfYnVmX2ltcG9ydF9zeW5jX2ZpbGUoZG1hYnVm LCAoY29uc3Qgdm9pZCBfX3VzZXIgKilhcmcpOw0KPj4+Pj4gICNlbmRpZg0KPj4+Pj4gIA0KPj4+ Pj4gKwljYXNlIERNQV9CVUZfSU9DVExfWEZFUl9DSEFSR0U6DQo+Pj4+PiArCQlyZXR1cm4gZG1h X2J1Zl94ZmVyX2NoYXJnZShkbWFidWYsIChjb25zdCB2b2lkIF9fdXNlciAqKWFyZyk7DQo+Pj4+ PiArDQo+Pj4+PiAgCWRlZmF1bHQ6DQo+Pj4+PiAgCQlyZXR1cm4gLUVOT1RUWTsNCj4+Pj4+ICAJ fQ0KPj4+Pj4gQEAgLTc1MCw2ICs3OTIsNyBAQCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBv cnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQ0KPj4+Pj4gIAlk bWFidWYtPnNpemUgPSBleHBfaW5mby0+c2l6ZTsNCj4+Pj4+ICAJZG1hYnVmLT5leHBfbmFtZSA9 IGV4cF9pbmZvLT5leHBfbmFtZTsNCj4+Pj4+ICAJZG1hYnVmLT5vd25lciA9IGV4cF9pbmZvLT5v d25lcjsNCj4+Pj4+ICsJZG1hYnVmLT5tZW1jZ19hY2NvdW50ID0gZXhwX2luZm8tPm1lbWNnX2Fj Y291bnQ7DQo+Pj4+DQo+Pj4+IFRoZSBpbml0aWFsIGNoYXJnaW5nIHNob3VsZCBwcm9iYWJseSBi ZSBkb25lIGhlcmUgYXMgd2VsbC4NCj4+Pj4NCj4+Pj4gVGhpcyB3YXkgRE1BLWJ1ZiBoZWFwcyBv bmx5IG5lZWRzIHRvIHBhc3MgaW4gdGhlIGNoYXJnZV9mZCBhbmQgd2UgY2FuIHJlLXVzZSB0aGUg ZnVuY3Rpb25hbGl0eSBmb3Igb3RoZXIgRE1BLWJ1ZiBleHBvcnRlcnMgYXMgd2VsbC4NCj4+Pg0K Pj4+IFRoZSBwcm9ibGVtIHdpdGggZG9pbmcgdGhlIGNoYXJnZSBoZXJlIGlzIHRoYXQgaXQgaGFw cGVucyB0b28gbGF0ZS4NCj4+PiBUaGF0IGlzIHRoZSByZWFzb25pbmcgZm9yIHRoaXMgcHJvcG9z YWwgdG8gbW92ZSBhbGwgdGhlIGNoYXJnaW5nIGxvZ2ljDQo+Pj4gaW50byBoZWFwIGFsbG9jYXRv cnMgYmVmb3JlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQuDQo+Pg0KPj4gT2gsIHRoYXQgaXMgYSByZWFs bHkgZ29vZCBwb2ludCB3ZSBuZWVkIHRvIHRhbGsgYWJvdXQuDQo+Pg0KPj4gRE1BLWJ1ZiBoZWFw cyBpcyBhY3R1YWxseSBhIHJhdGhlciBzaW1wbGUgdXNlIGNhc2UsIGJ1dCB3ZSBoYXZlIHdheSBt b3JlIGNvbXBsZXggdGhpbmdzLg0KPj4NCj4+IEZvciBleGFtcGxlIGluIHNvbWUgdXNlIGNhc2Vz IHRoZSBiYWNraW5nIHN0b3JlIG9mIGEgRE1BLWJ1ZiBpcyBvbmx5IGFsbG9jYXRlZCBvbiBmaXJz dCB1c2UgYW5kIG9ubHkgdGhlbiBpdCBuZWVkcyB0byBiZSBjb21pdHRlZCB0byBpdCdzIG1lbWNn IG9yIGRtZW0uDQo+IA0KPiBZZXMuIFRoZSBpZGVhIGlzIGZvY3VzIG9uIGhlYXBzIGZvciBub3cu IEJ1dCB0aGUgdUFQSSBpcyBhY3R1YWxseQ0KPiBhZ25vc3RpYyBvZiB0aGUgdGltZSB3aGVuIHRo ZSBjaGFyZ2UgaGFwcGVucy4gV2hlbiB3ZSBkZWFsIHdpdGgNCj4gbGF6eS1hbGxvY2F0aW9uIGlu IHRoZSBmdXR1cmUgd2UgY2FuIGp1c3QgY2FsbCB0aGUgcmVzZXJ2ZS9jYW5jZWwNCj4gaGVscGVy cyB3aGVyZXZlciBpcyBtb3JlIGFwcHJvcGlhdGUuIEFzIGxvbmcgYXMgdGhlIHBhZ2VzIGFyZSBu b3QNCj4gYWxsb2NhdGVkLCBleHBvcnRlcnMgZG8gbm90IHNldCBkbWFidWYtPm1lbWNnLCBhbmQg WEZFUiBkb2VzIG5vdA0KPiB3b3JrIChyZXR1cm5zIC1FT1BOT1RTVVBQKS4NCg0KWWVhaCBleGFj dGx5IHRoYXQncyB0aGUgcmVhc29uIHdoeSBJJ20gcmFpc2luZyB0aGlzIHRvcGljLiBUaGF0IGFw cHJvYWNoIHdvbid0IHdvcmsgaW4gYWxsIGNhc2VzLg0KDQpTZWUgdXNlcnNwYWNlIGlzIG5vdCBh d2FyZSB0aGF0IHRoZSBrZXJuZWwgaXMgZGVsYXlpbmcgYWxsb2NhdGlvbiBvciB0aGF0IHRoZSBr ZXJuZWwgaXMgYWxsb2NhdGluZyB0aGUgYmFja2luZyBzdG9yZSBhc3luY2hyb25pb3VzbHkgaW4g YSBiYWNrZ3JvdW5kIHdvcmtlciBmb3IgZXhhbXBsZS4NCg0KU28gcmV0dXJuaW5nIC1FT1BOT1RT VVBQIHdoZW4gdGhlIGJhY2tpbmcgc3RvcmUgaXMgbm90IGFsbG9jYXRlZCB5ZXQgYW5kIG1pZ2h0 IGJlIGFsbG9jYXRlZCBsYXRlciBvbiBpcyByYXRoZXIgcXVlc3Rpb25hYmxlIHVBUEkgYmVjYXVz ZSB0aGF0IGlzIHJhY3kgYnkgZGVzaWduLg0KPj4NCj4+IEkgZG9uJ3QgbWluZCBpbXBsZW1lbnRp bmcgaXQgZm9yIERNQS1idWYgaGVhcHMgZmlyc3QsIGJ1dCB3ZSBzaG91bGQgaGF2ZSB0aGUgdUFQ SSBhbmQgaXQncyBoYW5kbGluZyBzbyBzb2xpZCB0aGF0IGl0IGFsc28gd29ya3MgZm9yIGZ1dHVy ZSB1c2UgY2FzZXMuDQo+IA0KPiBBZ3JlZWQuIEkgdGhpbmsgd2Ugc2hvdWxkIGNvdmVyIGFsbCB1 c2VjYXNlcyB3aXRoIHRoZSBjdXJyZW50IHN0YXR1cy4NCj4gWW91ciBmZWVkYmFjayBoZWxwZWQg YSBsb3QgaW4gZ2V0dGluZyB0aGVyZSENCg0KSSBtZWFuIHdlIGNhbiBwb3N0cG9uZSB0aGF0IHVu dGlsIHdlIGZpbmFsbHkgbmVlZCBpdCwgYnV0IGVzc2VudGlhbGx5IHdlIG5lZWQgdG8gYmUgYWJs ZSB0byBkaXN0aW5jdCBiZXR3ZWVuIGNoYXJnaW5nLCBlLmcuIG1ha2luZyBzdXJlIHRoZSBjZ3Jv dXAgaGFzIGVub3VnaCBmcmVlIGxpbWl0LCBhbmQgY29tbWl0dGluZywgZS5nLiBhbGxvd2luZyB0 aGUgcmVzb3VyY2UgdG8gYmUgcmVjbGFpbWVkLg0KDQpBbmQgdGhlbiBpdCBpcyBwb3NzaWJsZSB0 aGF0IHdoZW4gdGhlIG1lbWNnIG9mIGEgRE1BLWJ1ZiBjaGFuZ2VzIHRoYXQgb25seSB0aGUgY2hh cmdpbmcgY2hhbmdlcywgYnV0IHRoZXJlIGlzbid0IGFueSBjb21pdHRlZCBiYWNraW5nIHN0b3Jl IHlldC4uLg0KDQo+Pj4gV2hhdCB3ZSBjb3VsZCBkbyBpcyBmaWxsIHRoZSBkbWFidWYtPm1lbWNn IGZpZWxkIHdoZW4gdGhlIGZsYWcgaXMgc2V0DQo+Pj4gKGkuZS4sIGNvbW1pdHRpbmcgaW50byB0 aGUgZG1hYnVmIGluIHRoZSBwYXRjaCBzZW1hbnRpY3MpLiBCdXQgZm9yIHRoYXQNCj4+PiB3ZSdk IG5lZWQgYWRkaW5nIHRoZSBtZW1jZyB3ZSB3YW50IHRvIGNoYXJnZSBpdCB0byBpbnRvIGV4cF9p bmZvIGluDQo+Pj4gb3JkZXIgdG8gc3VwcG9ydCBjaGFyZ2luZyB0byBjZ3JvdXBzIG90aGVyIHRo YW4gdGhlIGFsbG9jYXRvcidzIChmb3INCj4+PiB0aGUgY29tbW9uIGNhc2Ugd291bGQgYmUgc2lt cGxlciBhcyB3ZSBjYW4ganVzdCBsb29rIGF0IGN1cnJlbnQpLg0KPj4+IE1heWJlIHRoYXQncyB3 aGF0IHlvdSBtZWFudD8NCj4+DQo+PiBBdCBsZWFzdCBmb3IgdGhlIERNQS1idWYgaGVhcHMgdXNl IGNhc2UgdGhhdCBzb3VuZHMgcmVhc29uYWJsZSBmb3Igbm93Lg0KPiANCj4gVGhhbmtzISBOZXh0 IHZlcnNpb24gd2lsbCBoYXZlIHRoZSBmbGFnIHJlbW92ZWQgYW5kIGp1c3QgdXNlDQo+IGRtYWJ1 Zi0+bWVtY2cgYXMgaW5kaWNhdG9yLCBzZXQgd2l0aGluIGRtYV9idWZfZXhwb3J0KCkuDQo+IEFs c28sIGBucl9wYWdlc2Agd2lsbCBiZSBjb21wdXRlZCB3aXRoaW4gZG1hX2J1Zl9leHBvcnQoKSwg dGhlDQo+IGNvbnRyYWN0IGJlaW5nIHRoYXQgZXhwb3J0ZXJzIHNldHRpbmcgZXhwX2luZm8ubWVt Y2cgYXNzZXJ0IHRoYXQNCj4gc2l6ZSByZWZsZWN0cyBhY3R1YWwgc3lzdGVtIG1lbW9yeSBieXRl cy4NCg0KVGhpbmtpbmcgbW9yZSBhYm91dCBpdCBJIHdvdWxkIGFsc28gcHV0IGNoYW5naW5nIGRt YWJ1Zi0+bWVtY2cgdW5kZXIgdGhlIGRtYWJ1Zi0+cmVzdiBsb2NrIGluc3RlYWQgb2YgZG9pbmcg aXQgd2l0aCBjbXB4Y2hnLg0KDQpXZSBkb24ndCBuZWVkIGl0IGN1cnJlbnRseSwgYnV0IHRoZSBk bWFidWYtPnJlc3YgbG9jayBpcyB1c2VkIGZvciBhbGwgc3RhdGUgY2hhbmdlcyBvZiB0aGUgRE1B LWJ1ZiBvYmplY3QgYW5kIHRoaXMgb3BlcmF0aW9uIGlzIG5vdCBwZXJmb3JtYW5jZSBjcml0aWNh bCBpbiBhbnkgd2F5IHBvc3NpYmxlLg0KDQpJZiB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCBsb2Nr aW5nIG9yZGVyIHdlIGF0IGxlYXN0IGdldCBsb2NrZGVwIHNjcmVhbWluZyBhdCB1cyB2ZXJ5IGVh cmx5IGFuZCBub3Qgd2hlbiB3ZSB3YW50IHRvIGV4dGVuZCB0aGUgZnVuY3Rpb25hbGl0eSBpbiB0 aGUgZnV0dXJlLg0KDQpSZWdhcmRzLA0KQ2hyaXN0aWFuLg0KDQo+IA0KPj4NCj4+IFJlZ2FyZHMs DQo+PiBDaHJpc3RpYW4uDQo+Pg0KPj4+DQo+Pj4+DQo+Pj4+PiAgCXNwaW5fbG9ja19pbml0KCZk bWFidWYtPm5hbWVfbG9jayk7DQo+Pj4+PiAgCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRtYWJ1Zi0+ cG9sbCk7DQo+Pj4+PiAgCWRtYWJ1Zi0+Y2JfaW4ucG9sbCA9IGRtYWJ1Zi0+Y2Jfb3V0LnBvbGwg PSAmZG1hYnVmLT5wb2xsOw0KPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1Zi9oZWFw cy9zeXN0ZW1faGVhcC5jIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL3N5c3RlbV9oZWFwLmMNCj4+ Pj4+IGluZGV4IGFkZWVhOGNkMzI4Yi4uYTc2NDE2NzE2N2JhIDEwMDY0NA0KPj4+Pj4gLS0tIGEv ZHJpdmVycy9kbWEtYnVmL2hlYXBzL3N5c3RlbV9oZWFwLmMNCj4+Pj4+ICsrKyBiL2RyaXZlcnMv ZG1hLWJ1Zi9oZWFwcy9zeXN0ZW1faGVhcC5jDQo+Pj4+PiBAQCAtNDc5LDYgKzQ3OSw3IEBAIHN0 YXRpYyBzdHJ1Y3QgZG1hX2J1ZiAqc3lzdGVtX2hlYXBfYWxsb2NhdGUoc3RydWN0IGRtYV9oZWFw ICpoZWFwLA0KPj4+Pj4gIAlleHBfaW5mby5zaXplID0gYnVmZmVyLT5sZW47DQo+Pj4+PiAgCWV4 cF9pbmZvLmZsYWdzID0gZmRfZmxhZ3M7DQo+Pj4+PiAgCWV4cF9pbmZvLnByaXYgPSBidWZmZXI7 DQo+Pj4+PiArCWV4cF9pbmZvLm1lbWNnX2FjY291bnQgPSB0cnVlOw0KPj4+Pj4gIAlkbWFidWYg PSBkbWFfYnVmX2V4cG9ydCgmZXhwX2luZm8pOw0KPj4+Pj4gIAlpZiAoSVNfRVJSKGRtYWJ1Zikp IHsNCj4+Pj4+ICAJCXJldCA9IFBUUl9FUlIoZG1hYnVmKTsNCj4+Pj4+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oDQo+Pj4+PiBp bmRleCAyM2VjMGZmMjNmYmEuLmFjMGVjODhjYWI5MyAxMDA2NDQNCj4+Pj4+IC0tLSBhL2luY2x1 ZGUvbGludXgvZG1hLWJ1Zi5oDQo+Pj4+PiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaA0K Pj4+Pj4gQEAgLTQzMyw2ICs0MzMsOSBAQCBzdHJ1Y3QgZG1hX2J1ZiB7DQo+Pj4+PiAgDQo+Pj4+ PiAgCS8qKiBAbWVtY2c6IHRoZSBjZ3JvdXAgdG8gd2hpY2ggdGhpcyBidWZmZXIgaXMgY3VycmVu dGx5IGF0dHJpYnV0ZWQgKi8NCj4+Pj4+ICAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOw0KPj4+ Pj4gKw0KPj4+Pj4gKwkvKiogQG1lbWNnX2FjY291bnQ6IGFjY291bnQgYnVmZmVyIG1lbW9yeSB0 byBjZ3JvdXAgKi8NCj4+Pj4+ICsJYm9vbCBtZW1jZ19hY2NvdW50Ow0KPj4+Pj4gIH07DQo+Pj4+ PiAgDQo+Pj4+PiAgLyoqDQo+Pj4+PiBAQCAtNTA1LDYgKzUwOCw3IEBAIHN0cnVjdCBkbWFfYnVm X2F0dGFjaG1lbnQgew0KPj4+Pj4gICAqIEBmbGFnczoJbW9kZSBmbGFncyBmb3IgdGhlIGZpbGUN Cj4+Pj4+ICAgKiBAcmVzdjoJcmVzZXJ2YXRpb24tb2JqZWN0LCBOVUxMIHRvIGFsbG9jYXRlIGRl ZmF1bHQgb25lDQo+Pj4+PiAgICogQHByaXY6CUF0dGFjaCBwcml2YXRlIGRhdGEgb2YgYWxsb2Nh dG9yIHRvIHRoaXMgYnVmZmVyDQo+Pj4+PiArICogQG1lbWNnX2FjY291bnQ6CWFjY291bnQgYnVm ZmVyIG1lbW9yeSB0byBjZ3JvdXANCj4+Pj4+ICAgKg0KPj4+Pj4gICAqIFRoaXMgc3RydWN0dXJl IGhvbGRzIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBleHBvcnQgdGhlIGJ1ZmZlci4gVXNl ZA0KPj4+Pj4gICAqIHdpdGggZG1hX2J1Zl9leHBvcnQoKSBvbmx5Lg0KPj4+Pj4gQEAgLTUxNyw2 ICs1MjEsNyBAQCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyB7DQo+Pj4+PiAgCWludCBmbGFn czsNCj4+Pj4+ICAJc3RydWN0IGRtYV9yZXN2ICpyZXN2Ow0KPj4+Pj4gIAl2b2lkICpwcml2Ow0K Pj4+Pj4gKwlib29sIG1lbWNnX2FjY291bnQ7DQo+Pj4+PiAgfTsNCj4+Pj4+ICANCj4+Pj4+ICAv KioNCj4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1 ZGUvbGludXgvbWVtY29udHJvbC5oDQo+Pj4+PiBpbmRleCA2YjMwYmFhNzlmYTkuLjM2ZmRkYWZi ZWY0ZSAxMDA2NDQNCj4+Pj4+IC0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oDQo+Pj4+ PiArKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaA0KPj4+Pj4gQEAgLTY3OSw2ICs2Nzks OSBAQCBib29sIG1lbV9jZ3JvdXBfcmVzZXJ2ZV9kbWFidWYoc3RydWN0IG1lbV9jZ3JvdXAgKm1l bWNnLCBnZnBfdCBnZnAsDQo+Pj4+PiAgdm9pZCBtZW1fY2dyb3VwX2NvbW1pdF9kbWFidWYoc3Ry dWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLA0KPj4+Pj4gIAkJ CSAgICAgIHVuc2lnbmVkIGludCBucl9wYWdlcyk7DQo+Pj4+PiAgDQo+Pj4+PiArYm9vbCBtZW1f Y2dyb3VwX3RyYW5zZmVyX2RtYWJ1Zl9jaGFyZ2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwNCj4+ Pj4+ICsJCQkJICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2cpOw0KPj4+Pj4gKw0K Pj4+Pj4gIHZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8pOw0K Pj4+Pj4gIA0KPj4+Pj4gIC8qKg0KPj4+Pj4gQEAgLTEyMDYsNiArMTIwOSwxMiBAQCBzdGF0aWMg aW5saW5lIHZvaWQgbWVtX2Nncm91cF9jYW5jZWxfZG1hYnVmKHN0cnVjdCBtZW1fY2dyb3VwICpt ZW1jZywNCj4+Pj4+ICB7DQo+Pj4+PiAgfQ0KPj4+Pj4gIA0KPj4+Pj4gK3N0YXRpYyBpbmxpbmUg Ym9vbCBtZW1fY2dyb3VwX3RyYW5zZmVyX2RtYWJ1Zl9jaGFyZ2Uoc3RydWN0IGRtYV9idWYgKmRt YWJ1ZiwNCj4+Pj4+ICsJCQkJCQkgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpuZXdfbWVtY2cpDQo+ Pj4+PiArew0KPj4+Pj4gKwlyZXR1cm4gdHJ1ZTsNCj4+Pj4+ICt9DQo+Pj4+PiArDQo+Pj4+PiAg c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfdW5jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xp bykNCj4+Pj4+ICB7DQo+Pj4+PiAgfQ0KPj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9s aW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvZG1hLWJ1Zi5oDQo+Pj4+PiBpbmRl eCBlODI3YzlkMjBjNWQuLmVhOTU3ZjRiMWQzOCAxMDA2NDQNCj4+Pj4+IC0tLSBhL2luY2x1ZGUv dWFwaS9saW51eC9kbWEtYnVmLmgNCj4+Pj4+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9kbWEt YnVmLmgNCj4+Pj4+IEBAIC0xNjgsNiArMTY4LDMxIEBAIHN0cnVjdCBkbWFfYnVmX2ltcG9ydF9z eW5jX2ZpbGUgew0KPj4+Pj4gIAlfX3MzMiBmZDsNCj4+Pj4+ICB9Ow0KPj4+Pj4gIA0KPj4+Pj4g Ky8qKg0KPj4+Pj4gKyAqIHN0cnVjdCBkbWFfYnVmX3RyYW5zZmVyX2NoYXJnZSAtIFRyYW5zZmVy IGEgZG1hLWJ1ZidzIG1lbWNnIGNoYXJnZQ0KPj4+Pj4gKyAqDQo+Pj4+PiArICogQW55IGhvbGRl ciBvZiBhIGRtYS1idWYgZmlsZSBkZXNjcmlwdG9yIGNhbiBwZXJmb3JtIGENCj4+Pj4+ICsgKiBE TUFfQlVGX0lPQ1RMX1hGRVJfQ0hBUkdFIHRvIGF0dHJpYnV0ZSB0aGUgYnVmZmVyJ3MgbWVtb3J5 DQo+Pj4+PiArICogY29zdCB0byBhIHNwZWNpZmljIGNncm91cCwgb3IgbW92ZSBpdCBmcm9tIG9u ZSBjZ3JvdXAgdG8NCj4+Pj4+ICsgKiBhbm90aGVyLiAgVGhlIGlvY3RsIGNoYXJnZXMgdGhlIG5l dyBjZ3JvdXAgYmVmb3JlIHVuY2hhcmdpbmcNCj4+Pj4+ICsgKiB0aGUgb2xkIG9uZSBhdG9taWNh bGx5LiAgT24gZmFpbHVyZSB0aGUgb3JpZ2luYWwgY2hhcmdlIGlzDQo+Pj4+PiArICogcHJlc2Vy dmVkLiAgSWYgdGhlIGJ1ZmZlciBoYXMgbm8gZXhpc3RpbmcgY2hhcmdlLCBhIG5ldw0KPj4+Pj4g KyAqIGNoYXJnZSBpcyBlc3RhYmxpc2hlZC4NCj4+Pj4+ICsgKi8NCj4+Pj4+ICtzdHJ1Y3QgZG1h X2J1Zl90cmFuc2Zlcl9jaGFyZ2Ugew0KPj4+Pj4gKwkvKiogQGZsYWdzOiBSZXNlcnZlZCwgbXVz dCBiZSB6ZXJvICovDQo+Pj4+PiArCV9fdTMyIGZsYWdzOyAvKiB1bnVzZWQgZm9yIG5vdyAqLw0K Pj4+Pj4gKwkvKioNCj4+Pj4+ICsJICogQGNoYXJnZV9mZDogRmlsZSBkZXNjcmlwdG9yIGlkZW50 aWZ5aW5nIHRoZSB0YXJnZXQgY2dyb3VwLg0KPj4+Pj4gKwkgKg0KPj4+Pj4gKwkgKiBNYXkgYmUg ZWl0aGVyIGEgcGlkZmQsIGluIHdoaWNoIGNhc2UgdGhlIGNoYXJnZSBtb3ZlcyB0byB0aGUNCj4+ Pj4+ICsJICogbWVtb3J5IGNncm91cCBvZiB0aGUgcmVmZXJlbmNlZCBwcm9jZXNzLCBvciBhIGNn cm91cGZkIG9idGFpbmVkDQo+Pj4+PiArCSAqIGJ5IG9wZW5pbmcgYSBjZ3JvdXAgdjIgZGlyZWN0 b3J5LCBpbiB3aGljaCBjYXNlIHRoZSBjaGFyZ2UgbW92ZXMNCj4+Pj4+ICsJICogZGlyZWN0bHkg dG8gdGhhdCBjZ3JvdXAncyBtZW1vcnkgY29udHJvbGxlci4NCj4+Pj4+ICsJICovDQo+Pj4+PiAr CV9fdTMyIGNoYXJnZV9mZDsNCj4+Pj4+ICt9Ow0KPj4+Pj4gKw0KPj4+Pj4gICNkZWZpbmUgRE1B X0JVRl9CQVNFCQknYicNCj4+Pj4+ICAjZGVmaW5lIERNQV9CVUZfSU9DVExfU1lOQwlfSU9XKERN QV9CVUZfQkFTRSwgMCwgc3RydWN0IGRtYV9idWZfc3luYykNCj4+Pj4+ICANCj4+Pj4+IEBAIC0x NzksNSArMjA0LDYgQEAgc3RydWN0IGRtYV9idWZfaW1wb3J0X3N5bmNfZmlsZSB7DQo+Pj4+PiAg I2RlZmluZSBETUFfQlVGX1NFVF9OQU1FX0IJX0lPVyhETUFfQlVGX0JBU0UsIDEsIF9fdTY0KQ0K Pj4+Pj4gICNkZWZpbmUgRE1BX0JVRl9JT0NUTF9FWFBPUlRfU1lOQ19GSUxFCV9JT1dSKERNQV9C VUZfQkFTRSwgMiwgc3RydWN0IGRtYV9idWZfZXhwb3J0X3N5bmNfZmlsZSkNCj4+Pj4+ICAjZGVm aW5lIERNQV9CVUZfSU9DVExfSU1QT1JUX1NZTkNfRklMRQlfSU9XKERNQV9CVUZfQkFTRSwgMywg c3RydWN0IGRtYV9idWZfaW1wb3J0X3N5bmNfZmlsZSkNCj4+Pj4+ICsjZGVmaW5lIERNQV9CVUZf SU9DVExfWEZFUl9DSEFSR0UJX0lPVyhETUFfQlVGX0JBU0UsIDQsIHN0cnVjdCBkbWFfYnVmX3Ry YW5zZmVyX2NoYXJnZSkNCj4+Pj4+ICANCj4+Pj4+ICAjZW5kaWYNCj4+Pj4+IGRpZmYgLS1naXQg YS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMNCj4+Pj4+IGluZGV4IDdiODQxYjkw NTc1OS4uM2FkYzg0ZmU2NjY4IDEwMDY0NA0KPj4+Pj4gLS0tIGEvbW0vbWVtY29udHJvbC5jDQo+ Pj4+PiArKysgYi9tbS9tZW1jb250cm9sLmMNCj4+Pj4+IEBAIC01Nzg2LDYgKzU3ODYsNDcgQEAg dm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9kbWFidWYoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1 bnNpZ25lZCBpbnQgbnJfcGFnZXMpDQo+Pj4+PiAgCQlyZWZpbGxfc3RvY2sobWVtY2csIG5yX3Bh Z2VzKTsNCj4+Pj4+ICB9DQo+Pj4+PiAgDQo+Pj4+PiArLyoqDQo+Pj4+PiArICogbWVtX2Nncm91 cF90cmFuc2Zlcl9kbWFidWZfY2hhcmdlIC0gbW92ZSBhIGRtYS1idWYgY2hhcmdlDQo+Pj4+PiAr ICogQGRtYWJ1ZjogYnVmZmVyIHRvIHRyYW5zZmVyIGNoYXJnZQ0KPj4+Pj4gKyAqIEBuZXdfbWVt Y2c6IHRhcmdldCBtZW1jZzsgY2FsbGVyIG11c3QgaG9sZCBhIHJlZmVyZW5jZQ0KPj4+Pj4gKyAq DQo+Pj4+PiArICogVHJhbnNmZXJzIHRoZSBjaGFyZ2UgZm9yIEBkbWFidWYgdG8gQG5ld19tZW1j ZyBhbmQsIG9uDQo+Pj4+PiArICogc3VjY2Vzcywgc3RvcmVzIEBuZXdfbWVtY2cgaW4gQGRtYWJ1 Zi0+bWVtY2cuDQo+Pj4+PiArICogUmV0dXJucyAldHJ1ZSBvbiBzdWNjZXNzLCAlZmFsc2UgaWYg dGhlIGNoYXJnZSBhZ2FpbnN0IEBuZXdfbWVtY2cNCj4+Pj4+ICsgKiBmYWlsZWQgb3IgYSBjb25j dXJyZW50IHRyYW5zZmVyIHJhY2VkIG9uIEBkbWFidWYtPm1lbWNnLg0KPj4+Pj4gKyAqIE9uIGZh aWx1cmUgdGhlIGNhbGxlciByZXRhaW5zIGl0cyByZWZlcmVuY2UgdG8gQG5ld19tZW1jZy4NCj4+ Pj4+ICsgKi8NCj4+Pj4+ICtib29sIG1lbV9jZ3JvdXBfdHJhbnNmZXJfZG1hYnVmX2NoYXJnZShz dHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLA0KPj4+Pj4gKwkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3Jv dXAgKm5ld19tZW1jZykNCj4+Pj4NCj4+Pj4gSSB3b3VsZCBtYWtlIHRoYXQgbW9yZSBnZW5lcmlj IGluc3RlYWQgb2YgZG1hYnVmIHNwZWNpZmljLiBFLmcuIHNvbWV0aGluZyBsaWtlIHRoaXM6DQo+ Pj4+DQo+Pj4+IGJvb2wgbWVtX2Nncm91cF90cmFuc2Zlcl9jaGFyZ2Uoc3RydWN0IHN0cnVjdCBt ZW1fY2dyb3VwICoqcHRyX21lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbmV3X21lbWNnLCBlbnVt IG1lbWNnX3N0YXRfaXRlbSBpdGVtLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpDQo+Pj4NCj4+PiBB aCB5ZXMsIEkgbGlrZSB0aGlzIGdlbmVyYWxpemF0aW9uLiBBbmQgdGhlIGltcGxlbWVudGF0aW9u IHJlbWFpbnMNCj4+PiBtb3N0bHkgdGhlIHNhbWUuIFRoYW5rcyENCj4+Pg0KPj4+Pg0KPj4+Pj4g K3sNCj4+Pj4+ICsJc3RydWN0IG1lbV9jZ3JvdXAgKm9sZF9tZW1jZyA9IFJFQURfT05DRShkbWFi dWYtPm1lbWNnKTsNCj4+Pj4NCj4+Pj4+ICsJdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gUEFHRV9B TElHTihkbWFidWYtPnNpemUpID4+IFBBR0VfU0hJRlQ7DQo+Pj4+DQo+Pj4+IFRoaXMgd2F5IHdl IGNhbiBhbHNvIGRvY3VtZW50IGluIHRoZSBETUEtYnVmIGNhbGxlciB0aGF0IHRoaXMgY29udmVy c2F0aW9uIG11c3QgYmUgb2sgd2hlbiBtZW1jZ19hY2NvdW50IGlzIHRydWUuDQo+Pj4+DQo+Pj4+ IFJlZ2FyZHMsDQo+Pj4+IENocmlzdGlhbi4NCj4+Pj4NCj4+Pj4+ICsNCj4+Pj4+ICsJaWYgKG1l bV9jZ3JvdXBfZGlzYWJsZWQoKSkNCj4+Pj4+ICsJCXJldHVybiB0cnVlOw0KPj4+Pj4gKw0KPj4+ Pj4gKwlpZiAoIW1lbV9jZ3JvdXBfcmVzZXJ2ZV9kbWFidWYobmV3X21lbWNnLCBHRlBfS0VSTkVM LCBucl9wYWdlcykpDQo+Pj4+PiArCQlyZXR1cm4gZmFsc2U7DQo+Pj4+PiArDQo+Pj4+PiArCW1v ZF9tZW1jZ19zdGF0ZShuZXdfbWVtY2csIE1FTUNHX0RNQUJVRiwgbnJfcGFnZXMpOw0KPj4+Pj4g Kw0KPj4+Pj4gKwlpZiAoY21weGNoZygmZG1hYnVmLT5tZW1jZywgb2xkX21lbWNnLCBuZXdfbWVt Y2cpICE9IG9sZF9tZW1jZykgew0KPj4+Pj4gKwkJbW9kX21lbWNnX3N0YXRlKG5ld19tZW1jZywg TUVNQ0dfRE1BQlVGLCAtbnJfcGFnZXMpOw0KPj4+Pj4gKwkJbWVtX2Nncm91cF9jYW5jZWxfZG1h YnVmKG5ld19tZW1jZywgbnJfcGFnZXMpOw0KPj4+Pj4gKwkJcmV0dXJuIGZhbHNlOw0KPj4+Pj4g Kwl9DQo+Pj4+PiArDQo+Pj4+PiArCWlmIChvbGRfbWVtY2cpIHsNCj4+Pj4+ICsJCS8qIFVuY2hh cmdlIG9sZCBjZ3JvdXAgKi8NCj4+Pj4+ICsJCW1vZF9tZW1jZ19zdGF0ZShvbGRfbWVtY2csIE1F TUNHX0RNQUJVRiwgLW5yX3BhZ2VzKTsNCj4+Pj4+ICsJCW1lbV9jZ3JvdXBfY2FuY2VsX2RtYWJ1 ZihvbGRfbWVtY2csIG5yX3BhZ2VzKTsNCj4+Pj4+ICsJCW1lbV9jZ3JvdXBfcHV0KG9sZF9tZW1j Zyk7DQo+Pj4+PiArCX0NCj4+Pj4+ICsNCj4+Pj4+ICsJcmV0dXJuIHRydWU7DQo+Pj4+PiArfQ0K Pj4+Pj4gKw0KPj4+Pj4gIC8qKg0KPj4+Pj4gICAqIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfZG1hYnVm IC0gdW5jaGFyZ2UgYSBkbWEtYnVmIGZyb20gaXRzIG1lbWNnDQo+Pj4+PiAgICogQGRtYWJ1Zjog YnVmZmVyIHRvIHVuY2hhcmdlDQo+Pj4+Pg0KPj4+Pg0KPj4+DQo+Pg0KPiANCg0K