From nobody Sat May 18 19:12:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=memverge.com); dmarc=pass(p=none dis=none) header.from=memverge.com ARC-Seal: i=2; a=rsa-sha256; t=1713989145; cv=pass; d=zohomail.com; s=zohoarc; b=FrNClputl/uNVYmM89sZllW3cE+I+I9lSSYwgg9/649fuL+wMwqy7wGPVKfLcep3HJlSrk+h0/wmm/QGGALEwLxPzD/Ra8OgJjPwrw9osA7gzxExXMmIPtdU/8QBg7NriwSZaZpR6LYKbDS4fhVnQ9gP2tesJkiXWv4pq6AX0Tk= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713989145; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qnLdblsMRDSOzforEnHVVgC29eihoHuXi927zOmPpKo=; b=ccJcGP+6yrj1Xp1qRlL7QtgUeFcMxnd9RFJJvRbF9CFOgqodJ+2ZeU0pmLnViwKQL2cVlD5I+7kk6WB+Q0iK4mPgE8saBn2tXveYkcgpyFGUhVi3yvif3w5vO5SvHBIaaJ/OR6iHcgBL338d1EcuuM8UogLtiVyK2Y0Fof7Tqk4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=memverge.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713989145280177.85599686701016; Wed, 24 Apr 2024 13:05:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rzira-00010D-56; Wed, 24 Apr 2024 16:05:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rzirV-0000zm-4v for qemu-devel@nongnu.org; Wed, 24 Apr 2024 16:05:01 -0400 Received: from mail-mw2nam10on20701.outbound.protection.outlook.com ([2a01:111:f403:2412::701] helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rzirT-0008DI-C6 for qemu-devel@nongnu.org; Wed, 24 Apr 2024 16:05:00 -0400 Received: from IA0PR17MB6347.namprd17.prod.outlook.com (2603:10b6:208:435::22) by SN4PR17MB5846.namprd17.prod.outlook.com (2603:10b6:806:215::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Wed, 24 Apr 2024 20:04:24 +0000 Received: from IA0PR17MB6347.namprd17.prod.outlook.com ([fe80::200e:df84:29a9:8c9a]) by IA0PR17MB6347.namprd17.prod.outlook.com ([fe80::200e:df84:29a9:8c9a%6]) with mapi id 15.20.7519.021; Wed, 24 Apr 2024 20:04:24 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Xp0ICyZ1sfA4Sw2tJX0l9DT63LdbIPrxb/5SOZkurb29mCUgqvu7PheikZ9pBDGqAAyIKFt2Kjv4CpwuNTHy12bMMd5dTDqIRhwqCtkdpzDaU/BU+tncA/sTUmnIGIZQN70eQmmKwaosCPmE2S04xfS0psw5gWLf/DqAxZFJKQDw7FJgMFiw3XL80M1Labf3oSduRuUg0SlX4xjTOkm9PqcCj2ibFHvePe5+wSZwjOmpIKy+IbXopVDwQ9sy6mpIqlnVS5jjobzLuhHpMjFAQNhQxnLPJ5eyfTmlQmt0Gx355DD4VXjMbtCeGQPU0yO8kShljKxh5lw/vF3smJCXhQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=qnLdblsMRDSOzforEnHVVgC29eihoHuXi927zOmPpKo=; b=BM06Pbyx4NTojkaqYAkeEv83uTYt56x+UvtQua4Tc6uDquBR+j9GtUxG7z6UfCjDvh15QE8cLY8VWrzE+GcTrN5/cxcRQIlEWjt1yl/15YF71/nNYymGBtqMpRwq6Jw6nemTcJb0X965s/3REC/+PPT6WiPciZm4ECh8e1QnLkx+bD/OgllvSlRNZ62x1eSMI0oVmYPL0UggE+9hqkwi7kU9DvixVC+azq3+1QantIOQU3kv00NNP1EZj8D+jmUcuqamTHW8twKgtGHIYXhbKUSyI4TSUDS9gbtKVCMAltcJR7eZbOq6Q/bcTSWb5w1Q2xAfXsKWHWW5iqCwm+tV8A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=memverge.com; dmarc=pass action=none header.from=memverge.com; dkim=pass header.d=memverge.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=memverge.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=qnLdblsMRDSOzforEnHVVgC29eihoHuXi927zOmPpKo=; b=s/q0O0x0Bm7qb7c1mcqNlafTGInXxHY7yCtCNONhC/uNgJLbjSzjSMp2v8Ug2taff8VmVOJ06Qy49IHPOyl9NnCFhMOxEaUT4KphMZF/sKgeRhGaEW2ObITT+leUbh8/5tzGpdY2bXrncAtWV7JqH30qdyeZmmmVUofQKCv6bhU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=memverge.com; From: Svetly Todorov Date: Wed, 24 Apr 2024 13:04:06 -0700 Subject: [PATCH RFC v2 1/3] cxl-mailbox-utils: move CXLUpdateDCExtentListInPl into header Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240424-cxl-2024-04-22-pullahead-v2-1-a87fc4597795@memverge.com> References: <20240424-cxl-2024-04-22-pullahead-v2-0-a87fc4597795@memverge.com> In-Reply-To: <20240424-cxl-2024-04-22-pullahead-v2-0-a87fc4597795@memverge.com> To: qemu-devel@nongnu.org Cc: Svetly Todorov , Gregory Price , jonathan.cameron@huawei.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=ed25519-sha256; t=1713989063; l=2156; i=svetly.todorov@memverge.com; s=20240312; h=from:subject:message-id; bh=n6uLLVpW754pheV8P0lm/gJ67umDXl4IO0f47kciLqQ=; b=NF0R9bPEmDxA0o18wloZn9HlVXqr89v6zaKjXN7GhBjqsO7E1hEStX3kiv6ycuffKFw07/ycf FtNZ8rFXREKC0bvxfubVbR2fZK8gD3vKaLOeS710Y2e4oYIkmJrEOhb X-Developer-Key: i=svetly.todorov@memverge.com; a=ed25519; pk=bo0spdkY5tAEf+QP9ZH+jA9biE/razmOR7VcBXnymUE= X-ClientProxiedBy: BY3PR03CA0005.namprd03.prod.outlook.com (2603:10b6:a03:39a::10) To IA0PR17MB6347.namprd17.prod.outlook.com (2603:10b6:208:435::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA0PR17MB6347:EE_|SN4PR17MB5846:EE_ X-MS-Office365-Filtering-Correlation-Id: 776b3926-f936-4a35-912d-08dc6499bd36 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: =?utf-8?B?WVdTalU4NDF2YlI1TEJJQy80b0pQMXZlT3h3RVdSdXBmZGVUUnlLUjFIMURH?= =?utf-8?B?aC9LOFc5SkFvT3dPRmsra0tZaWJjNGFnZ3V4RjZCOGtqQnF6R1dPZ3N1SGJ1?= =?utf-8?B?azRvckFjcnBPOCtrWUNLZ0tiZXFCcmF3VVpIb2dlZC9WL1ZGek51SFJZZGEr?= =?utf-8?B?bk1YUnBuV1RqMnY1Uko2Tkt6cGVjYk4xalIzUWdCYnd0b2pGek8xR0ZtNWdK?= =?utf-8?B?dVFIQXBVWDZ4c0RoOSt5YTlnOHpSdGI2Q1J3UWtCS25yTGN5czhGUnZhK1JG?= =?utf-8?B?akZGc3c0UjlCQy9laGJ3WFhoOGNWQnk2eUdyTHB1NUlER0pxVWxsLzFVenM2?= =?utf-8?B?VHJNd0Jvclcwd3dmMDR6d3NvclpoRE40RG1HWG5JYkp4dC9UNDhMWFBWQ1Jh?= =?utf-8?B?d2NNaUtFOFoyS3pJS1R4U05RMnV6WTBiaVpDRFczaUE2Y3BJWng1T3AySzAw?= =?utf-8?B?eWRrMlFrY0pveHFibnZEV0ZNdVBhT1R2MUNIVWgzOFpRU29wMHErVWRhdk9D?= =?utf-8?B?SW1wU0poMzFYUUR2WmZ4d2sySzA4VTNFM3hZTFpLQTNuYVliWUZFcjhGWFh2?= =?utf-8?B?a0FMWDZsY3Q1SE1NdnJUd2RUNzJYTFJaZVFvTWN1U3AzTTZiclAyeTdrd090?= =?utf-8?B?YndITVYzbHB6MW5vSmpSNS9HZ3BrTXJhZXFaa0lvVlNLdXJ6dFZHR2N3cHlH?= =?utf-8?B?MjVSK2xWd212aW1LeE9YOUErZ0V5T3p6SFYxVlI4Yy9qK3BkVGxqM1k0OVMz?= =?utf-8?B?Kzl6c0lZSUtDaWgzbFdSalZ1OThscHJNSU5LTDl0NjNoTGUydVBPS2hqT1ZM?= =?utf-8?B?MHVYaTVHSkJJRndKVWVHcWFQR0owcVJnTllVcjJlcldpR0ptdFp0YkVvclBz?= =?utf-8?B?dGhxY1U4NyszRkNUQ0tacFFmTDF5ampiK3g4RXpqWldaeVFoZDJ2Mkh2SHZG?= =?utf-8?B?V1hlbDh6OElxcEZ5MTJCcDBFTDRHSjdsMXh6aC84NFN1d29nNGxST2t4T2Ix?= =?utf-8?B?aVMrS0lsWGlDOWg1WldEN1dNNVZKWXQvQnVFVXVySkV4VzhPY0xSczJLTjZm?= =?utf-8?B?aDZacWRMcVdqa0xBWDdYRXhBNWNaMHdWNVJoaXhzTmtFYkZQWU9TNXh6ZDBx?= =?utf-8?B?d09IMVFkK0F2MXQ4Z01oM0M0QjdnNlJDNjM4c0JoVWcyajArTUFkQTJZdC9N?= =?utf-8?B?NmphTjEwN2N6MUJOTTdQa3JCd3IvT1B1dDZzeDZwNHZCSk9kWm82Zkp2ODBX?= =?utf-8?B?bWU4TCsxNXg0eFM4eXpJSE00Z01qN2tMVkFkR2hqNE1JNmc5OEhaOEM2Vk00?= =?utf-8?B?MThYTHdoeGtTTU55TWREMENicXVHWHptWS9tNURqM0VyT3hmSWwzbEhYSGlY?= =?utf-8?B?bnl6Wno2dnFySmc3UUNINUpWZHhTbHBya1pYMVF3c3VjbVNLeGh2US9FWG9T?= =?utf-8?B?SC9INWEvNUlGUXFoNWY5MzNvd3p3S2hkSXBLaXBqTlhVaktOWEdKNGtGNFRi?= =?utf-8?B?S0ZKYURhZ2tBNDNzSW4zWXlQNDYwYlJZcDdYSHQvZEMzMTBoaFNMRnRhNFJX?= =?utf-8?B?a1RZVmxzMUQwc29WVnZ4M3JmM08zME4rUTVZbFpQc1JVV1lZdWlnejQvTC8v?= =?utf-8?B?OHRpY1UyNWxqRkRsU04yYi9zYlZ1OGdkSUhtTmhuOS9pWTJjUERuZkZSQ0Y2?= =?utf-8?B?aS9BUlJGb0xQTVVQVGVKUmtMcFlGYURKNVJ1SHVqTFArZC9mSjFGVENDblQ2?= =?utf-8?B?NGVzTy9SL2V0RG5oTDdIUlUxTFQ5bytTVXlyakNZUnpCOXF1bGx5TXppWVF4?= =?utf-8?B?OXZTMDFKWUtLWjJWT20wUT09?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR17MB6347.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QllxWU5OZ01jR0NpRmhza1RlWEJWZEtsTENobGJyUkR4dFR2VzQ4ckNCYXlx?= =?utf-8?B?VmpZOXBvanVCMVdQTU5Fc3Q2d3M1d3hwck9DbnJjYS9oa1hxaTY4bWdLYVlL?= =?utf-8?B?WndVckhxcFQrUmI3czJQaktTQ0MxL2o5SFhBVjNOUGo1amJ5ZmRFeUtvcXJ4?= =?utf-8?B?OVMzeXV0VjY4dHdZYmU3d1BKaEpuNHJVdnpORkhGR01qRzUvcThCUExaU0Ey?= =?utf-8?B?NjRacWQ2SVhuOHZ0c1piTldQMHU1cStwZDNFR0hkQTdrWTE3Tm14bGVKa0h4?= =?utf-8?B?L2lsLzViVWR0M29Qc1J6c0JsajEvM2V2NDJZKzVLRjA5SFRKRHlhNWxlZ084?= =?utf-8?B?UXpXcWdaVzN6Zk5Odit0dkNpbjQrNzg0NnhBNmhhN0dNS2lsUGVsTXJNUGI2?= =?utf-8?B?bGNic2pyR1hkMEdSZUJ4WlAwT1hieFgvMkxVbjd3bzg2cEx2eDlpeko4ci95?= =?utf-8?B?eHdCYVhzSHlOWCtpMTVDbFRXdi8yZ2lnRzlzUTlFTWx5dWxkNVhOc0N0NHRB?= =?utf-8?B?OFIvTHI2enMwWkFSaWh0QlR3cWdNbXE5L1pkcUE3UFRFTElLV3BMNVIraGg1?= =?utf-8?B?OUZVOVBZWEd3eXRZU1F6V280U0FxNHJ6K002UXZzclRiZEJ6NmJGQ3FrcHJR?= =?utf-8?B?cmNZUS9QZmJXNlZxdzcvekRRZGV6YmFiazJlUlMvZ0h1S013U1BETXUxMFlp?= =?utf-8?B?amRRa251V0ErSW4vRTNxemZaTlVGMWRna2JGZy9mT2RLeEFiVFk3M2FqZmgz?= =?utf-8?B?OU92NnVmVDdwSTJaNFV2OWRHME9aV3F0QWd0V2hHQVQrbisyQ1ZHc2lNL3FC?= =?utf-8?B?Z1FSeVFJeHgrQ1pKOGY3TjM1WWx0QktaTllYOEhVRlpBcytERnlWUnBMT3Nu?= =?utf-8?B?cjFCbHNOa0NFeEk2cUZTelFXdUNyTllCUi9uekpwRFhoMVJqQ25JQmJ3aE14?= =?utf-8?B?N2k5OG1rSmhIQ1BkTFB3Y0swaU4yTlc0Z0NmMC9kWDlsVkVZZlZlb1c1VGxP?= =?utf-8?B?MzgrZlo4R1djSjRQOGVFdGRDZGxWWGU5VlcwTVMrbEVsdjM4MHlkZWZmaVRX?= =?utf-8?B?ZnFxSUhTaVI5akszaGhIZEYyNlFVTkJTVGRKTE9JM0poR2lLVCt5NVNQK3I1?= =?utf-8?B?ZTZWVnJtMHZKRDJ4NjA3RzFuNEwrVWprcmF2WGpGa2VLRkZIMzN2emZlbWVx?= =?utf-8?B?dE5nbDVDY2dhVUFkdFZya3VkTVF4M29DQmNmVDlWcHRWQmkzdFFXUldidDNp?= =?utf-8?B?bnFJdzdzVVhONW43bmY5UldleG5ZUS9wbnpMOUR6SVBTM0JGZG9Pc1RWZlJI?= =?utf-8?B?Z1FaR2IvNU5yeENNZUc4SXV5NDBpK3paMzVYcnV0dkI0TjlHM0RabVpnZ2Fz?= =?utf-8?B?YTg4ZmJxeDBueERZYkxDS2V6V05wMTdSTElhNnkvS1IxZ2VsbW8yVVNBMFhG?= =?utf-8?B?MDdsbS9YRi95YjdRYjFoVjg4WjRNVzlOQlVlQlZVUWxqbVYxem8zcU1UWFZM?= =?utf-8?B?aE1GcGliZWp0eGY0ekYxUHhtazNyanpBcjhac1lwNUIwRnVEMzV4Y3lwQ3pt?= =?utf-8?B?ZmhhV2NJWWlHWXpiY1ovTXRWcVRZQ3R4UGJySXRTbWZweWhsR2xrV1IwZzh6?= =?utf-8?B?LzlKRmpQS2g2elVjN2FKYWlZVzFmM2NzeE50aTJTZGJuS1ZPZVdRNmpxcHgz?= =?utf-8?B?dlJ2U09sRjQ0OTQ0MXBVaHJQRW1PeVplSllYQXlCd290YzFpZ283YVVtRHJQ?= =?utf-8?B?dFovZnBBbkFTcUJJa3poMnNrRitaWVV2eXliVVpma3FtdXVyUmRPOWRUbFZN?= =?utf-8?B?WXFxZldxcVNrc0hhNS9xR2VqdldoLzEzRnFrZmxTZTdsOCtsWm5jcWgyb3h3?= =?utf-8?B?ZzliaHJ6bHdxRldVS2JvaWtnU3lUVzRUV29ITk1jakVqdW1Ld1NIdDdIdXBy?= =?utf-8?B?ekxiejVZaGFyOGpYejZZbldlMWwrSDVmUjdHc2NGZVlvaVF6SURqcmVXa2pk?= =?utf-8?B?SnhHVzlmb0lzTEhFc0JGYjFmTkJYdnVZU3ozNVJFQ0FwWk5ITFgrMisxd21M?= =?utf-8?B?bkdvTVdyRGp4dm5KT1NGaEovYkV0YXVjSXYzeGxOVGlrVlljU092clBaOS84?= =?utf-8?B?cDBDWTF0Tkx5N1h2VU0yUXBXZWd1eWFZb3BZZzMzVHovK3FRK1U4aVNUdnJ2?= =?utf-8?Q?UonS5CspxOlrEcDG0x9FAzk=3D?= X-OriginatorOrg: memverge.com X-MS-Exchange-CrossTenant-Network-Message-Id: 776b3926-f936-4a35-912d-08dc6499bd36 X-MS-Exchange-CrossTenant-AuthSource: IA0PR17MB6347.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2024 20:04:24.7841 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5c90cb59-37e7-4c81-9c07-00473d5fb682 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: zJr6xDH85fuZO9Csgwwxpqkyml6SjK0V58/Jg2X2ZA6PpIegYMzFnZIXFVlmkSLYyn8HVukkf4O2Vr840K7t51cDLOYIOJuVtXA+tE+kz4g= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR17MB5846 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2412::701; envelope-from=svetly.todorov@memverge.com; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @memverge.com) X-ZM-MESSAGEID: 1713989146748100005 Allows other CXL devices to access host DCD-add-response payload. --- hw/cxl/cxl-mailbox-utils.c | 16 ---------------- include/hw/cxl/cxl_device.h | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index 413673da59..dc916f5bb3 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -2184,22 +2184,6 @@ void cxl_extent_group_list_delete_front(CXLDCExtentG= roupList *list) g_free(group); } =20 -/* - * CXL r3.1 Table 8-168: Add Dynamic Capacity Response Input Payload - * CXL r3.1 Table 8-170: Release Dynamic Capacity Input Payload - */ -typedef struct CXLUpdateDCExtentListInPl { - uint32_t num_entries_updated; - uint8_t flags; - uint8_t rsvd[3]; - /* CXL r3.1 Table 8-169: Updated Extent */ - struct { - uint64_t start_dpa; - uint64_t len; - uint8_t rsvd[8]; - } QEMU_PACKED updated_entries[]; -} QEMU_PACKED CXLUpdateDCExtentListInPl; - /* * For the extents in the extent list to operate, check whether they are v= alid * 1. The extent should be in the range of a valid DC region; diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index cb95ccbd61..5c60342556 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -525,6 +525,22 @@ typedef struct CXLDCExtentGroup { } CXLDCExtentGroup; typedef QTAILQ_HEAD(, CXLDCExtentGroup) CXLDCExtentGroupList; =20 +/* + * CXL r3.1 Table 8-168: Add Dynamic Capacity Response Input Payload + * CXL r3.1 Table 8-170: Release Dynamic Capacity Input Payload + */ +typedef struct CXLUpdateDCExtentListInPl { + uint32_t num_entries_updated; + uint8_t flags; + uint8_t rsvd[3]; + /* CXL r3.1 Table 8-169: Updated Extent */ + struct { + uint64_t start_dpa; + uint64_t len; + uint8_t rsvd[8]; + } QEMU_PACKED updated_entries[]; +} QEMU_PACKED CXLUpdateDCExtentListInPl; + typedef struct CXLDCRegion { uint64_t base; /* aligned to 256*MiB */ uint64_t decode_len; /* aligned to 256*MiB */ --=20 2.34.1 From nobody Sat May 18 19:12:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=memverge.com); dmarc=pass(p=none dis=none) header.from=memverge.com ARC-Seal: i=2; a=rsa-sha256; t=1713989144; cv=pass; d=zohomail.com; s=zohoarc; b=lGQE6hp6p9sCGkKCvK9zN59a8m0FoTjKsfpx++ph2DyIGIuX6A2I0qQ47awBSaVtGlHRn/FcZa0/9TxsGvHBWGwPrmuInBAl8SFtW2qGUypG1Pk6lRxbMgsRmTwUILjPe8jZ5PwyFzKi3XPgAxGx/8mtp77Thc/e3C9WFptiL/8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713989144; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=T5M1rRrfg/O/7uLkDuQ5P9LfaGKsdcr+uqSTJGUCooQ=; b=X7PAvlhNk2kEnqvk5xKLLV6UQst8zNZBXvy9boeuNrICKJKgFuxsGHXr1U3VfG5pQdk1dTjc259SQa0IeystO1SMrdy+z5EEP3RcCyfi0wtLK4bmxNo3Qc71fkQ2pF/obHNC355p+BxT13UhQrrZWyb8T373/uZ/pUIA3wrmXks= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=memverge.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713989144862131.7691363230059; Wed, 24 Apr 2024 13:05:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rzirc-00010y-3g; Wed, 24 Apr 2024 16:05:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rzirX-000103-L2 for qemu-devel@nongnu.org; Wed, 24 Apr 2024 16:05:03 -0400 Received: from mail-mw2nam10on20701.outbound.protection.outlook.com ([2a01:111:f403:2412::701] helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rzirV-0008DI-IY for qemu-devel@nongnu.org; Wed, 24 Apr 2024 16:05:03 -0400 Received: from IA0PR17MB6347.namprd17.prod.outlook.com (2603:10b6:208:435::22) by SN4PR17MB5846.namprd17.prod.outlook.com (2603:10b6:806:215::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Wed, 24 Apr 2024 20:04:26 +0000 Received: from IA0PR17MB6347.namprd17.prod.outlook.com ([fe80::200e:df84:29a9:8c9a]) by IA0PR17MB6347.namprd17.prod.outlook.com ([fe80::200e:df84:29a9:8c9a%6]) with mapi id 15.20.7519.021; Wed, 24 Apr 2024 20:04:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=g55Kk5uHkPEg9DU3RuzM0fiMyRbsuRWMwmddOqEUHYt2/ExqQoqNhtVVvzlqAFuf8nWDBzMK7zJCiPgSwraMrQAwnfOoE1ZR+g/v4pp4t+Nmm7TZcQj07sbrxdybeYOJswGdTYrVdn8R94tzr1W7YXzqQ7EePoYI+6v4YOR8f8aMjvHKNt6aosUj4hNklL12qNtNSzU2UxmgVQ7dt+D6pUMV0G/gu9zOV3zOt/BRWsF26ZZRVSacxX8FKUju0lrqTeK5XxwUpFZVl4EpUCxd+oazw1dYqDyeK6s+qgaB4UbBvSKUuohrRn5vS0QVYlZvmYGWrEyOjq3m5Jkm4Py6gA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=T5M1rRrfg/O/7uLkDuQ5P9LfaGKsdcr+uqSTJGUCooQ=; b=k6vimMy+JjBXNWZv6URmHqMt3UaGbxLwSHwXNZUzMlxlgW+KZcOdCW7flwAGFYlD1/2BwGOj3lq+J1sVnXn/FVHylt/Arw+d2EtcoVYyP/IyQoEf9e1CGfukCpkezaufanW8b+lcuBzu7/jX+ESkC6jp4HZdEXcBHBohGRr0FUnFnvceRUeyGX0ZXOSb5nTukLhE8Hk64pIBnS3R5sW/QGlM0ty016ZcXuOmujOEOxUJhaMvnSq5LPEJr4rPBC2/21wztfmKbIIbMd7eLwMKDMput0+MFr4bccFwOycHO8JNtFF8jve7ZZlKEmZx/w2R26F2dJt7mU5n44+i3LuxJg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=memverge.com; dmarc=pass action=none header.from=memverge.com; dkim=pass header.d=memverge.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=memverge.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T5M1rRrfg/O/7uLkDuQ5P9LfaGKsdcr+uqSTJGUCooQ=; b=oFkMnGja1Qit5IPpbn5fSztELnfFyvTC+fpDQty/V3tTWrHWtbkeOFFYua3aEGqZgU4mJSype77lpPxE5DIvvZ4NjEmJP7ePqmqrBJsJUR4n/fsVUlvNIwYp35OjiBvomH8bB+GWHK0daJVsAAY3Rjbzyxnb85hiKorJmMnhAYg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=memverge.com; From: Svetly Todorov Date: Wed, 24 Apr 2024 13:04:07 -0700 Subject: [PATCH RFC v2 2/3] cxl_type3: add MHD callbacks Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240424-cxl-2024-04-22-pullahead-v2-2-a87fc4597795@memverge.com> References: <20240424-cxl-2024-04-22-pullahead-v2-0-a87fc4597795@memverge.com> In-Reply-To: <20240424-cxl-2024-04-22-pullahead-v2-0-a87fc4597795@memverge.com> To: qemu-devel@nongnu.org Cc: Svetly Todorov , Gregory Price , jonathan.cameron@huawei.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=ed25519-sha256; t=1713989063; l=7417; i=svetly.todorov@memverge.com; s=20240312; h=from:subject:message-id; bh=a3chGYz40NH+1tOj9J+3vAQ33JJx6r5pMZAwyiD1jvw=; b=VpwbNRGlx9XMBlytQJuynsx3S9ft/AxXCRbQnomkFCz1/57Xjli6amTmUr5nbsFya0f7TpTL0 aJftVMpL9wnAjmHyu6jsbWTqTE03Spk66dEWfiujGFuR+5YIlkjLUrb X-Developer-Key: i=svetly.todorov@memverge.com; a=ed25519; pk=bo0spdkY5tAEf+QP9ZH+jA9biE/razmOR7VcBXnymUE= X-ClientProxiedBy: BY3PR03CA0005.namprd03.prod.outlook.com (2603:10b6:a03:39a::10) To IA0PR17MB6347.namprd17.prod.outlook.com (2603:10b6:208:435::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA0PR17MB6347:EE_|SN4PR17MB5846:EE_ X-MS-Office365-Filtering-Correlation-Id: dc54affa-a2bf-4ed4-3a65-08dc6499bdaf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NGpyeDJsSTJUUThuOGNwWGJxcmdOcG9RcnBzaG15Nkgzbjkxc1BKRGxqMlYw?= =?utf-8?B?ZHZYdCthaDNkdnlNL3NNVzRJTWFNbHM5b3BYN3BMNWZTTEMvdVdQV0t5R3U4?= =?utf-8?B?OTNGbytzWURka1YxUVYzV3d1WUZNRXNSV1NaeDNSbGVKZEkzblNKaGlCRGlP?= =?utf-8?B?SnU4QWo1U1RxWnlMNENoVk1La1pnTEpsM0ZUV2gyOVAxS1ZPYkZiR3MydG80?= =?utf-8?B?Y0NsRHF3TXUwRUthTUVvdnhNNTJrcnRkNVFPcjVwR3hNQWxBUkdlMjA1SWhM?= =?utf-8?B?UzBZM2VyR3paTmpTR1Evb2JLbDBWSlNSaFdkaXlmWGdiSk5pbGpqRENNemVk?= =?utf-8?B?eGdISmZFSFBZbFdnNDA5djBHazZ3dm5FTDE2TmZ2bi9kQ2wxM2tiOHY1WkZB?= =?utf-8?B?VUw5YUZENmV6M1ZHcm8zdis5MHNNZytNcUJGY1BOWkIxZmUzWDBsSk5jMG5o?= =?utf-8?B?TkNTV3pycFd6Nlp2L3gxRzB2MVBUMm9zaXJSVUlsNWt0WFpBYTlOdWdtL21N?= =?utf-8?B?a05yVEh5aFViUXhHbUhZR0dYUGF2cXFnQnVCaDZKV2FTV1Uya0Zka202VHJM?= =?utf-8?B?SkV5Z0prenFSY2pGQnBSa1hGZXIrbnltcWdROFc2UmN6TDBybUlMSUNwU0tW?= =?utf-8?B?WTVxWSt3OVhVcjVqMWVxMWlabFBKbE9Ud0xZN3gzbTlReWErbFluT3dFZmdB?= =?utf-8?B?UkVYeUFJSG9Md1RMZm9JbWFnSTVVUHdxUC9aMllXdkVpajdlY0ttR1RJSFlG?= =?utf-8?B?SkxJR05WaW4rNENjb2ozQ1o1ZHlyL1dET28vSDBlNm5UNm05Ukthd3JNM3h6?= =?utf-8?B?U1dkb0t3SHpxRTV6WTlpMmk4dGZuWFJ4MTdpeUZkaFN2SGJhMXJDTEUyNnF4?= =?utf-8?B?M2hmOWoyaVc0Nm5ZQjJwemxBMHN4SUZEM2RRTi96N0M1bXc4OXZmVDRFK3g4?= =?utf-8?B?S3V6QStzNHV3MnJyOE44UEN6d0hNRm9YSVAya1BMZmhkNmY2eVVuVkxMR3pj?= =?utf-8?B?bU5jNS9aVk1WSGxHMkwxaWV4bE9vTTdNTTJRNDJmbkdzdVB0ejJ5ZXlRYkJ4?= =?utf-8?B?TldSMmtrcUEzQUxpeTZldFY4bmQ0ZTROdlNLS2JrUkhPWWxUMGlpRnI3ejEv?= =?utf-8?B?MCs0NWRFY2x0ZXA3bGo4L216Ly83UTFoamdaTUJaVjJrUVlQVFYwZnNSTlA4?= =?utf-8?B?Z1huNWNZMlN5Y3lDZG1SdkZ5cEI0dnhQUU94TnFWUTFLRGQ3d0s0WjF3eHdr?= =?utf-8?B?cXhPcFFvVWhWaVJXT0F2aWlYb1BXU1dhbXROZ2QvZVRweGpRY1BNNS9kbDBL?= =?utf-8?B?dUkrY3ZKMGNidGVhbWxWMXI5OFh4UzNPZ0hPeEtFR0hLcDZKYzYxY3FabHBI?= =?utf-8?B?Z1pZVVFQZHordXdqN0pGdUFZQ0ZIMlozQkw2aG5tanlPTnFHUk1QVXRoMzNM?= =?utf-8?B?Tkl2VU10OENlbWo0WUJLTzVvZlQ3cXVPcjF6c3RaT1dLeTRXcWlCSmlvQXQ1?= =?utf-8?B?US80ditBNzVqQTlVZ1RVUXF6S3JtMDRjRm5Tek1KRm9tdW9vNWFLbVh3QmR6?= =?utf-8?B?U0pQaC81bkFoa0kxaXh1K2tDSnJwWHdTVXdFQWZ1YzdnMkhHTTJkUXprQmF4?= =?utf-8?B?cWZQSHJ0bS9hdjVjZnpyZlJ0NjBCUGxoNGJMa0tYZEpSc3VocTVYMFdqNkw3?= =?utf-8?B?SWhkY0lTRG42MTdJWnBBU3cyZ3lsQXVlL21iZzFOalNhN29Ba1JLdU10TWJB?= =?utf-8?B?TWFZdjdLakNjM0JuUEdaRzU1NG0xaXBMczRuTVZZczVRcnFZN0E4N0FEbkp5?= =?utf-8?B?V2U3TE5WS0hEOCtwcGhHZz09?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR17MB6347.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QVlDUUE0Ym92bWlzblZLb25wRmg0d1NiUUZnamlkVlZ1N3ZVUGZ1UVRMeXJa?= =?utf-8?B?aUFJNk9BQi94YXNERVlaaEhMWW9ScUxrWW1LRzJjRXptajVVa0FJWlFlTEFk?= =?utf-8?B?djR0dExIeXpWaTdCalFLWmV6REltczJLR0M3b2k3ZnpxRTJlSVl2RUZFaGI5?= =?utf-8?B?cmMwOTVKeVFzOUNQOWdXVzNyRjMwWXNoSzZUSGdQZFRZMkJRNkxxNkdYdXR5?= =?utf-8?B?cnZzVXpoYXBuNERoLzZhM21OeFovTytVVFF6a2xMYXpxQVVFQk5rbGNUUUo0?= =?utf-8?B?MkdzaG43UStXcGRVaW5TQ1VXL2hSVXpuTHlUQXJXektib2tFZGlucTdjRHdH?= =?utf-8?B?Z1htTmR6OERmeDhBL2RhSzBldUhLVzljY2VLM1YwVzQzM3F5SWNkVVR3RVZE?= =?utf-8?B?ZmQ3Ym9DL05ydDRIL2ZlTEpUUnF0NnpPN1EzT1VhdFRMcDFPOUd6dlorM1Rr?= =?utf-8?B?b3RGNC9lT2hWWFR0SmlJQVFPbkNSQ1Bmb3RLQmptMU9xT1UvdjRBOTk1VTNV?= =?utf-8?B?ZnVCL0lWUDZSclgxTmNqY3daWUdZODJESDhOc3VpY081TzJ0VkJTNkdESGsy?= =?utf-8?B?akRnd0xRTUhxWVBCZlZRNFhSdkJUeWY3NnBiU1ZuWUlmTkxodit1anJNZzlH?= =?utf-8?B?YU1DVXNvTit3Y2dHOXJCdmwyUTh3YW02T3RGZjdZdHNnZGJNcjJxTE1oV1o2?= =?utf-8?B?UkZnaWVOSEw0ZEdxUTJMakVtVC9leUZDWjdmZkF5MUNPTGR4NHlKVHRXb3p4?= =?utf-8?B?QnZqRW91ZWIrSW5QVXcvVFZtclRDb09TNVZKZkptazhqNVZueXhQUlczaXN4?= =?utf-8?B?aDlDVStpaFpOMUE5VmMvWHVZNmdDSDlUOWVDVmxESHRSRUhBZGVaZnBkeklY?= =?utf-8?B?UUYvZGdrVG8vc3Z5dm1TeC84Sk40K3k3SXMwcHRJZGF1VGx0OTBKWVYwMmdl?= =?utf-8?B?RExuMHRpczFXZmpHMHVZNGhFamhkU3VPODEvbEw1THNTeW1JM1loMHZMdkhi?= =?utf-8?B?blF0NHV2Q0tpbzFNYWtGOWd2N0NEaG1VRGY1T2FkSkRRa3FMYXlma2J1RmU2?= =?utf-8?B?OStrQWtUNjA5Z2UxR3J0WVk4MXV2WkFwMTIvWHpwTDBUOFdqK0lxNGU3clBR?= =?utf-8?B?SG12azJ0cUs3bzlGOURSSkpsUkZtWE9rWFdBQkRLZFlBV1FUSy8yejAyLzNI?= =?utf-8?B?VmxPeWhONUFqREV6Wm5uTGlpazdzYjlNREdmSkZEYmsvUlpZeGMxNGhZZzVj?= =?utf-8?B?MGZlK2V6QVdoTW9QSUxIdm5zWUhjdEVlN05TQlNsanU3UW5TRU5wVk9ZcHpt?= =?utf-8?B?eDBhK2NWTGx4QjlFc1N4UkRDYklIbUEvQmNiTlBCaHVWSFlkV0hkN0NqdzZ4?= =?utf-8?B?ZU9NeDcwT25OYUVBREE5YWlqSUx0Ulk3S3VSWFFyV1MxSlJkaUFrVTdBTTAw?= =?utf-8?B?YkppbHU0QW9keHo3L2RFOEp0NmlqcU5oWHkyL2crY1JjNVRpUitvR3ZNcERY?= =?utf-8?B?MFVaSjVpcnpTODN3Zk4reUpOd3YvcENOOVgwNmdNR1pTZXZ6QWpaSVZ2TDFY?= =?utf-8?B?SWhGQjloa0JSeDBxdFh2eGpLVCtiMWtLZkVEM0krRmQxOUhDRkFRUWdGVzA4?= =?utf-8?B?c2RJZzd1TnFnTzE2eUhzY01xMnhFS21RUTR1Nm9WaWduOWFGbDZRUzJFckVi?= =?utf-8?B?R0gxTTFDSTZZMEY1U3F1WGZaWXdpdHlxa1lMS0VnbG4yQzVTUVh3YVlpcy9O?= =?utf-8?B?Wm9oQ1VaL0NleGhITnFLejhZUzJUODUvYU5yS3RKT3l2M3hUQmRzWW02c2JT?= =?utf-8?B?OHN3V3B2QU1jYVN6UXRWRkxTb2l1YnBTMzM1S3pKN3FoS0x1VHhhMndvekw2?= =?utf-8?B?a3FiNnFlMEFLcUVqRyt6NUJXendiZTM2SXFRcTVSME1QQ1RGdHlRTFcwcElR?= =?utf-8?B?NXhDVXpvbGFmL1lZclZEU2pVMUkyVldzbW1SNjVKSm94bXhabXRScVVUVkI1?= =?utf-8?B?b1Rsb0I1dlc4Vm00M2c0bjNLMDk4Q3MzMCtralZ4cXlhYVo0RUovUWJQQjdX?= =?utf-8?B?OE96MWJZb3FaSXkzZ0RNaHFFaFgwVmFJbTBNcFh1NXRlek5kOCtvd04xbXRI?= =?utf-8?B?eEJ6SjZ1Y25wVTA4WjFuV3pPbGNneDVZWjNadzJUN2owMUt0ek92TE0rMmJ6?= =?utf-8?Q?8yp5vTG7SW+3bI5dSpnrBXc=3D?= X-OriginatorOrg: memverge.com X-MS-Exchange-CrossTenant-Network-Message-Id: dc54affa-a2bf-4ed4-3a65-08dc6499bdaf X-MS-Exchange-CrossTenant-AuthSource: IA0PR17MB6347.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2024 20:04:25.5750 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5c90cb59-37e7-4c81-9c07-00473d5fb682 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: a3svedPsAYpIG2kKJDVLU9/qVtOEz7VlfvSMoKVVwaEOCCYL7aQHE/CSvPQyQn02VI/lH3IR0mLJ68TB903YAFPVTy6ep9oOm1rQ3hdbdQs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR17MB5846 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2412::701; envelope-from=svetly.todorov@memverge.com; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @memverge.com) X-ZM-MESSAGEID: 1713989146783100006 Introduce an API for validating DC adds, removes, and responses against a multi-headed device. mhd_reserve_extents() is called during a DC add request. This allows a multi-headed device to check whether the requested extents belong to another host. If not, then this function can claim those extents in the MHD state and allow the cxl_type3 code to follow suit in the host-local blk_bitmap. mhd_reclaim_extents() is called during the DC add response. It allows the MHD to reclaim extents that were preallocated to a host during the request but rejected in the response. mhd_release_extent() is called during the DC release response. It can be invoked after a host frees an extent in its local bitmap, allowing the MHD handler to release that same extent in the multi-host state. --- hw/cxl/cxl-mailbox-utils.c | 28 +++++++++++++++++++++++++++- hw/mem/cxl_type3.c | 17 +++++++++++++++++ include/hw/cxl/cxl_device.h | 8 ++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index dc916f5bb3..0429bb4816 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -2283,6 +2283,7 @@ static CXLRetCode cmd_dcd_add_dyn_cap_rsp(const struc= t cxl_cmd *cmd, { CXLUpdateDCExtentListInPl *in =3D (void *)payload_in; CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + CXLType3Class *cvc =3D CXL_TYPE3_GET_CLASS(ct3d); CXLDCExtentList *extent_list =3D &ct3d->dc.extents; uint32_t i; uint64_t dpa, len; @@ -2317,6 +2318,11 @@ static CXLRetCode cmd_dcd_add_dyn_cap_rsp(const stru= ct cxl_cmd *cmd, ct3d->dc.total_extent_count +=3D 1; ct3_set_region_block_backed(ct3d, dpa, len); } + + if (cvc->mhd_reclaim_extents) + cvc->mhd_reclaim_extents(&ct3d->parent_obj, &ct3d->dc.extents_pend= ing, + in); + /* Remove the first extent group in the pending list*/ cxl_extent_group_list_delete_front(&ct3d->dc.extents_pending); =20 @@ -2350,6 +2356,7 @@ static CXLRetCode cxl_dc_extent_release_dry_run(CXLTy= pe3Dev *ct3d, uint32_t *updated_list_size) { CXLDCExtent *ent, *ent_next; + CXLType3Class *cvc =3D CXL_TYPE3_GET_CLASS(ct3d); uint64_t dpa, len; uint32_t i; int cnt_delta =3D 0; @@ -2370,6 +2377,13 @@ static CXLRetCode cxl_dc_extent_release_dry_run(CXLT= ype3Dev *ct3d, goto free_and_exit; } =20 + /* In an MHD, check that this DPA range belongs to this host */ + if (cvc->mhd_access_valid && + !cvc->mhd_access_valid(&ct3d->parent_obj, dpa, len)) { + ret =3D CXL_MBOX_INVALID_PA; + goto free_and_exit; + } + /* After this point, extent overflow is the only error can happen = */ while (len > 0) { QTAILQ_FOREACH(ent, updated_list, node) { @@ -2442,9 +2456,11 @@ static CXLRetCode cmd_dcd_release_dyn_cap(const stru= ct cxl_cmd *cmd, { CXLUpdateDCExtentListInPl *in =3D (void *)payload_in; CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + CXLType3Class *cvc =3D CXL_TYPE3_GET_CLASS(ct3d); CXLDCExtentList updated_list; CXLDCExtent *ent, *ent_next; - uint32_t updated_list_size; + uint32_t updated_list_size, i; + uint64_t dpa, len; CXLRetCode ret; =20 if (in->num_entries_updated =3D=3D 0) { @@ -2462,6 +2478,16 @@ static CXLRetCode cmd_dcd_release_dyn_cap(const stru= ct cxl_cmd *cmd, return ret; } =20 + /* Updated_entries contains the released extents. Free those in the MH= D */ + for (i =3D 0; cvc->mhd_release_extent && i < in->num_entries_updated; = ++i) { + dpa =3D in->updated_entries[i].start_dpa; + len =3D in->updated_entries[i].len; + + if (cvc->mhd_release_extent) { + cvc->mhd_release_extent(&ct3d->parent_obj, dpa, len); + } + } + /* * If the dry run release passes, the returned updated_list will * be the updated extent list and we just need to clear the extents diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c index 88facd49ed..e69cb6f7b7 100644 --- a/hw/mem/cxl_type3.c +++ b/hw/mem/cxl_type3.c @@ -799,6 +799,7 @@ static void cxl_destroy_dc_regions(CXLType3Dev *ct3d) { CXLDCExtent *ent, *ent_next; CXLDCExtentGroup *group, *group_next; + CXLType3Class *cvc =3D CXL_TYPE3_CLASS(ct3d); int i; CXLDCRegion *region; =20 @@ -817,6 +818,10 @@ static void cxl_destroy_dc_regions(CXLType3Dev *ct3d) for (i =3D 0; i < ct3d->dc.num_regions; i++) { region =3D &ct3d->dc.regions[i]; g_free(region->blk_bitmap); + if (cvc->mhd_release_extent) { + cvc->mhd_release_extent(&ct3d->parent_obj, region->base, + region->len); + } } } =20 @@ -2104,6 +2109,7 @@ static void qmp_cxl_process_dynamic_capacity_prescrip= tive(const char *path, CXLEventDynamicCapacity dCap =3D {}; CXLEventRecordHdr *hdr =3D &dCap.hdr; CXLType3Dev *dcd; + CXLType3Class *cvc; uint8_t flags =3D 1 << CXL_EVENT_TYPE_INFO; uint32_t num_extents =3D 0; CXLDCExtentRecordList *list; @@ -2121,6 +2127,7 @@ static void qmp_cxl_process_dynamic_capacity_prescrip= tive(const char *path, } =20 dcd =3D CXL_TYPE3(obj); + cvc =3D CXL_TYPE3_GET_CLASS(dcd); if (!dcd->dc.num_regions) { error_setg(errp, "No dynamic capacity support from the device"); return; @@ -2193,6 +2200,13 @@ static void qmp_cxl_process_dynamic_capacity_prescri= ptive(const char *path, num_extents++; } =20 + /* If this is an MHD, attempt to reserve the extents */ + if (type =3D=3D DC_EVENT_ADD_CAPACITY && cvc->mhd_reserve_extents && + !cvc->mhd_reserve_extents(&dcd->parent_obj, records, rid)) { + error_setg(errp, "mhsld is enabled and extent reservation failed"); + return; + } + /* Create extent list for event being passed to host */ i =3D 0; list =3D records; @@ -2336,6 +2350,9 @@ static void ct3_class_init(ObjectClass *oc, void *dat= a) cvc->set_cacheline =3D set_cacheline; cvc->mhd_get_info =3D NULL; cvc->mhd_access_valid =3D NULL; + cvc->mhd_reserve_extents =3D NULL; + cvc->mhd_reclaim_extents =3D NULL; + cvc->mhd_release_extent =3D NULL; } =20 static const TypeInfo ct3d_info =3D { diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index 5c60342556..f7ac0c34d2 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -14,6 +14,7 @@ #include "hw/pci/pci_device.h" #include "hw/register.h" #include "hw/cxl/cxl_events.h" +#include "qapi/qapi-commands-cxl.h" =20 #include "hw/cxl/cxl_cpmu.h" /* @@ -651,6 +652,13 @@ struct CXLType3Class { size_t *len_out, CXLCCI *cci); bool (*mhd_access_valid)(PCIDevice *d, uint64_t addr, unsigned int siz= e); + bool (*mhd_reserve_extents)(PCIDevice *d, + CXLDCExtentRecordList *records, + uint8_t rid); + bool (*mhd_reclaim_extents)(PCIDevice *d, + CXLDCExtentGroupList *groups, + CXLUpdateDCExtentListInPl *in); + bool (*mhd_release_extent)(PCIDevice *d, uint64_t dpa, uint64_t len); }; =20 struct CSWMBCCIDev { --=20 2.34.1 From nobody Sat May 18 19:12:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=memverge.com); dmarc=pass(p=none dis=none) header.from=memverge.com ARC-Seal: i=2; a=rsa-sha256; t=1713989144; cv=pass; d=zohomail.com; s=zohoarc; b=kNx53f3b4ntkmbk7oFP3Dr+Bez3fTXJvuO6ionEm7vNY7RcqF6U2tYtbHBQ2UQh2H7FylzNmPg8OJxyBg4OeAwMRCbjlUE97pXfyTausweDS2dNi0jftvRia0SP5bTFAO2vvShET3EpJiPGo8apVb2FAu/r0V7HnUjf6nFbYLIY= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713989144; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=HCgoHLPds5uQj0aDjHRdIkKXNsoAoSa9JC+RkTC23FQ=; b=a7LLxsmJIvgGRWUTs7bB46PVYcYTgdu2CQwqxOrsTDerXKWfTuFXzOhnKTK6s4hY7elJX1zUSloUt+Y5Ecuwna1ONUR5nTeQCxUWYFD3wz/iRjtRs8gRu2JyFP5q/ihzIWVO3jroCP6Ls8D3VGpmUljZOFuuXFo23w6JAPf8QTE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; arc=pass (i=1 dmarc=pass fromdomain=memverge.com); dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713989144893371.9311667707856; Wed, 24 Apr 2024 13:05:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rzird-00011G-25; Wed, 24 Apr 2024 16:05:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rzirb-00010p-FA for qemu-devel@nongnu.org; Wed, 24 Apr 2024 16:05:07 -0400 Received: from mail-mw2nam10on20701.outbound.protection.outlook.com ([2a01:111:f403:2412::701] helo=NAM10-MW2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rzirY-0008DI-2r for qemu-devel@nongnu.org; Wed, 24 Apr 2024 16:05:07 -0400 Received: from IA0PR17MB6347.namprd17.prod.outlook.com (2603:10b6:208:435::22) by SN4PR17MB5846.namprd17.prod.outlook.com (2603:10b6:806:215::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Wed, 24 Apr 2024 20:04:26 +0000 Received: from IA0PR17MB6347.namprd17.prod.outlook.com ([fe80::200e:df84:29a9:8c9a]) by IA0PR17MB6347.namprd17.prod.outlook.com ([fe80::200e:df84:29a9:8c9a%6]) with mapi id 15.20.7519.021; Wed, 24 Apr 2024 20:04:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dsaZ+UD86ViIakYkvvO6M8TU7A+XDpWqCpmhphphwaNXpRyTuhCdGCqiv2SRZSZajAxXodvXiF/TWtNwft6hNV0+uYTv8AvIvKnW8aUdO0ves8qATkO9I9sHNYHxw9FtCMXU51V3lh57kB0zHJg0nYWbCMmTqWWvYcOCMglyJkzn2HvUy2UDgSbK2535aV0Hxr63gyKRtQ8t3MooPLLkWvkPcgQ9xZtIbGIdPdhzF24NK4CRxWOLmV4hc53752Hi2LyX7TvWswUwmuDXd5M6Zzyn2JqQnZgUdU79uGlFxmXJRdwcXxBrVm8QdQZodJm0QCT47phA1kw5TXZ7L8vl6w== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HCgoHLPds5uQj0aDjHRdIkKXNsoAoSa9JC+RkTC23FQ=; b=ZlT1IlnRXnvzRjj7cUQa/DKU+ndjgcjR8py074jZ8mnWvFkYlksEyxeyWdQsm7ZRTH6vyRwFQ1JNXNSOLTLEl++SQV2e9DtqCWY8dJRlhLynk/layKw9/VF9rrRppBn8BFlSh93Qgq1u3Yg3cA8k2tUQzmglMuMYBsvr5wM61XFgtJgYzJsbmFEtZzyMC/ssKJjAkLQsEVDggsGRpz8CIIarhHVvogkS3j0nC6mG+XNoG7jJeTfqu0icBdqnngzhNdW/3UTMasrTk0ydEEYcdU7rNCU8Oi17iSIelh0hcodA4p7R1ATV6jGkUE7Y0uCjE6RDfDmf33KVRzhKLb4WxA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=memverge.com; dmarc=pass action=none header.from=memverge.com; dkim=pass header.d=memverge.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=memverge.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HCgoHLPds5uQj0aDjHRdIkKXNsoAoSa9JC+RkTC23FQ=; b=ZjgdkOD0/IaPyy4o620dNohZXu5QO72Bnk3r7dJAjC7dNhikqa0A32IIikNrUs6l0WzsSvsMokls/aQDr5mFDJwFHJSZxgrm/2gpNRIx2QbUJLEVSwkp1ebFxPaxfnNiUBqMy1xdDYVYISHA6fAEfSCb4IhkG2ifZm1JN3rgas8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=memverge.com; From: Svetly Todorov Date: Wed, 24 Apr 2024 13:04:08 -0700 Subject: [PATCH RFC v2 3/3] mhsld: implement MHSLD device Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20240424-cxl-2024-04-22-pullahead-v2-3-a87fc4597795@memverge.com> References: <20240424-cxl-2024-04-22-pullahead-v2-0-a87fc4597795@memverge.com> In-Reply-To: <20240424-cxl-2024-04-22-pullahead-v2-0-a87fc4597795@memverge.com> To: qemu-devel@nongnu.org Cc: Svetly Todorov , Gregory Price , jonathan.cameron@huawei.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com X-Mailer: b4 0.14-dev X-Developer-Signature: v=1; a=ed25519-sha256; t=1713989063; l=18941; i=svetly.todorov@memverge.com; s=20240312; h=from:subject:message-id; bh=Mmf0qdxK449WcZGHC/bZlcgno9+Nn5fb0FgJIQKg1r8=; b=pIssofizIzxeAbX4wsWnWB7QhAzcEGb2Q8d0ggfSU0xx3yDjK4utqNDINWCE+NAIu3fMw8EOz O8Mq+0wA5PnA+SME9PwBQxxGrQi31kaqYsUNH8oeAENgtgAzKSmS07O X-Developer-Key: i=svetly.todorov@memverge.com; a=ed25519; pk=bo0spdkY5tAEf+QP9ZH+jA9biE/razmOR7VcBXnymUE= X-ClientProxiedBy: BY3PR03CA0005.namprd03.prod.outlook.com (2603:10b6:a03:39a::10) To IA0PR17MB6347.namprd17.prod.outlook.com (2603:10b6:208:435::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA0PR17MB6347:EE_|SN4PR17MB5846:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e777ca6-ec33-4ae8-721f-08dc6499be29 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZTNxcE1FYWZxelNLWDNJKy9ya0Vqc2VEQ3VKbTJLTEUvNFYyR01Pa0lZS3kr?= =?utf-8?B?bTlLMFBsMWdsQ1dTdGc5cDZtRm5KeXYyTFRkTmZHR0lXY2J5ZXZCZG53VmMw?= =?utf-8?B?RlNmZ0YyRy9VUXJvMGpOYUxBb3ZBUEZMZjdWMmNsRElwNlpFcjVPaDRManM2?= =?utf-8?B?alBuWlY4QjgrUEI5TDlaMUJRUzd2RVdjQVVHU1ZYL2pQdWJsUktUZEpoQnU4?= =?utf-8?B?em03ZC94WS9TVjV6VE9GNFcvM1hOS0tUMStlUzJWdllhV2lUOG4zT01sMkJT?= =?utf-8?B?WVh0ZllNNlEwNWVOdzE3bWg4WGUvVnhqZGhUR2xWNjd4YllnblJZKzlVSEd3?= =?utf-8?B?MUJSK3JMTm9xTnJ3cWtCWCtHdzVBdkxsL2N0MDFZRmRpcUlCTTlRUHZNbDNJ?= =?utf-8?B?MVl6eGNZSzhNNDBtVVllaS9qNjluanF5djVSQUFpWTN6R0l4UWYwS3puOUJw?= =?utf-8?B?TXo2b0JxMGJDbk9nbksyalVTMEp5eHlNMEd4OEtVWVliQXhlRFMwdVNsRUFX?= =?utf-8?B?TkJ0TzNKbUIramhuRkhJNUJuTHZyRW84VW1VWlVPWEROdXlFeDNSb3ZxSWRw?= =?utf-8?B?LzlQLzNheDY2M29QRHB2WHY5MGxvMnBrcFcvT1gyUG43MDBrYXEzMXV4UEs4?= =?utf-8?B?Zk94ZGErNkRBYkUwZnVmTkIrZ1Z1ZjhvcGpqY3BESHFUU29UblVuVStPaHpp?= =?utf-8?B?SUZ2bGVBRWsxaXFpbjJwWHZtTDlXSG1LN0lQMzkrbEdRamVncXhzUVVBU3Fz?= =?utf-8?B?THNwY3lMbDVTMDZESkxXemZ3MkdGT1BIV0hCN09jblBhVmM0alZ4OHowYksz?= =?utf-8?B?WVVCM09iT3BhSjFseDdaRWVjaDdFN0NsVnFBNUZSaEVuZDdoejJNRUVDanEv?= =?utf-8?B?aW1zRmliQUhvNlZmUzBVSlNaeFdtTlVzd0R5MWhyVjVDVEhXb2pOZFVhb3dC?= =?utf-8?B?T3VxN2pUVFZ2T0ZDRVlwLzhrYzFyeHFSRzlZYlFuZ0d5RGZKVXEzeEtuY3Fr?= =?utf-8?B?K2VncW0rdEkvakdERjFHWE11YnkyNjE0MmNEeUNQcEhIYkFKK3VYbm5wejM1?= =?utf-8?B?Z01VcWFwR0JuR0NJbW92aDVPbzEvNmsvZ0xVMXR0aG1wSS9QdlBSaUhOSkRm?= =?utf-8?B?VG1YbXd6T2xRbFVtQ2dEUHh4VVFVRmJ1Q1FJS29LcnVINktWQVpyOS9OdW5G?= =?utf-8?B?dEh1c1htSm90NEJ1VHZmaDA2dnZ4ZCtRdWNTYlFPU3VRVElxbVZYSlJxT1JS?= =?utf-8?B?NFJDODZPcTZlb2MrOFdOMHJmS2syT1NzZ1VRT1kxN1pnSEhvY29FWEtsYXFx?= =?utf-8?B?Z2tFbUU0M0Q0RnB5WWNJZXZ2R0RpRkRLc3RzVEJYWC8xeXpUWEV4M0U2Sm95?= =?utf-8?B?MTRXSlB1Z2ZiMlprQndIZzYyaE4rVGs4UDNDUEh2VGx1bFpiTkRqVGlZZmMx?= =?utf-8?B?bGtKQ09RV0tCalR5bkNSZXQvUVV3bzhpTm5meDNVbWNpTzBmZVUzdmFNU0cz?= =?utf-8?B?OUdFeGw1cGxDUDdKa2VPdkc4YkZHVkloVVpKdit6NDE1cVFGV0ZzczFDY2gw?= =?utf-8?B?b1B0TURpckM1K2FKaGt3c2w0UFJadjVudUgzRVhqRHI2RmVMOXQzQjRCSWN0?= =?utf-8?B?UEZadmpSYVB5bWk0S08vREdUeDNaR3NxZ0dnSU1KS0JCWjRQUWc1aXNnMTE0?= =?utf-8?B?a2lqTzhLaVNqeWxoMlFCVHFJK2wvbUExRWc4RStLVXBtQXJPZFhwUDJ4UTRz?= =?utf-8?B?cUQyZW5RMTVaSnphd1gyVE9Za0d5ZzYrSU9EUThkTVFhTTRVOHBsMEVnY2tW?= =?utf-8?B?cmpxaVpLKzdwdGU3SENYZz09?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:IA0PR17MB6347.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(366007)(376005)(52116005)(1800799015)(38350700005); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y0FhdFRMdkxlWUs5S015dlRBczQzNTRoektwenNwMnNORElWVGpZczE2YkJn?= =?utf-8?B?bWJKNWhmRW9pTWQxWC9wL002dG55dUFNQlpsSHRLODMwZzcyOTJtSS9jdWda?= =?utf-8?B?ZStod2s5eXhuYTRjQ3NLRVYxYk9vd0Z1Nnh6V05Nc0Q3cHFFQkhhL3FxVm1o?= =?utf-8?B?SkFKVllLbWdaMXd5UHBKazJNQUllYTlNNlpWZzhjTWxWY2cvN24wK2lwQnlY?= =?utf-8?B?UUh0cEc1TFdEeXR3NUZjdFNqOFlhUFBwTWU2Q3NYdjB4OFpQUE5yYkRKRG05?= =?utf-8?B?NXdvcnJlRVkzSWxaTEt5a2c4OFk2SnFkUUczUzBWRnhtanFuY0dob2UyZ3Zv?= =?utf-8?B?M1hOTHpMd3pRR0VpRHg2SmduRm0rcnd6Z1p5MWkyK1Avb0w3ZzM4blhhMGZy?= =?utf-8?B?Y0NpdGdMaE8yaEQ2aE5LTXh3dUhKbzlGVjNyS1FtcmlFcTM1cDZKVkNvTlp4?= =?utf-8?B?VXpZSmZXdnRNQWlOSHJGZ1lrUmV0Z3lVVGpHQXdySERUNkFCbDYzTFFlNE1a?= =?utf-8?B?aUxNbHcrd3dTS2MyWUt5SG8vL1ZWdHd1SG5sN3NGbDFhd0h5b0xNRXg1OFM0?= =?utf-8?B?SEFhQ1VTaGpwaTZnZnlURnNTbnR3SFNscVdwUXMwbXhSa3VCU0hPY2pObTMw?= =?utf-8?B?Vi9OMlJLN0NjSTFkVDRwV3REVXdBM3oyMHFNYUprckM5ZW5SMEtBenVYaURW?= =?utf-8?B?amtMMWNsZUdDN0t0bnpJY3BuZEFMZllDZDc4TkNiUEVBM3BDQlcxd1dwU3hy?= =?utf-8?B?TmFaMFlQcE83RlpjeFZWQ1FJdEZDMVdrMzZ1VmFVZFk5cXVCNmh2eGs0R0hF?= =?utf-8?B?aUNDTUFIbTB5RGl2OExiTTBVNzlxSWtzUTEybmNlbWpVTmxBWXNxMVYyNFBJ?= =?utf-8?B?QUdjQmZ6UmpKTllYVEZ4L3hIVnBEL3UydnRmU21Jeklpa1JmaTFUckRJY3Fj?= =?utf-8?B?VHpmSHhUR3hHMnlRNGM2eXR6cld0UklxOHYyTFpTVmdUSnE5aUpJK3RBQnZo?= =?utf-8?B?c29qVG96MnBPODdUMkYveFpDZzBIdDFyclRxekQzakR0MVJoWEFNU1o1VzBz?= =?utf-8?B?L1VBbE83Mm1FNTZ1Wmxpa2pzb0Z6WTlCZHFRWXBhN2J4Mm9YS2R0R1FHaUE0?= =?utf-8?B?QWZ6WFBKRG9kVjJGYlF0U0tzU0hHbTg2R09QVjVUNXUzeEc3N0hqTDBteWZ6?= =?utf-8?B?bFV0WkpaVTdndzczUnQzOUpBUFFwakNVeUN1dCtBWjF6SjBKd205aEYxTFk2?= =?utf-8?B?dHZPTmdBZDgydTZTTWZPaDN6THdhNGdTVGF2L042RGdlZERGTmR5WEp3U1E4?= =?utf-8?B?Ull6dks3NnNwV3N3OWRRR1NPUWZuUG1zWVZmZ0pTTlhTQm9nUmRJQnBwUHFS?= =?utf-8?B?OTNzZzk3aHpha0ZCSEpqdFZ0VjQza3M4dzVEeVZSSjVLVU5xK2tseWFGam5X?= =?utf-8?B?bTVjM2tiOVpKSXJiR2wzT3BleVJUVnpPRkwyOXQwcUowWjhXVUVET05kUTFi?= =?utf-8?B?NEZKVVZ4bXdhVStYSjFvK0YwTlgxSEV3Q1ZYYjhGMHNyQ2MzYXJyM3FDMFFi?= =?utf-8?B?QnZmUDBTbk54aUZveU1rVDByZU1BZ21tYkhiYmR5MWtJS1g0WWVpcXd1a2lp?= =?utf-8?B?WEVIbm9ubUlOVTNqVDVFZ29tS1NZYzBZTDBMTytGTE5TOTM3S2twbDdTc0hm?= =?utf-8?B?azd4Y1dRT3BKTjlJU3ZMNG1DYUMxRTIvUzlxbGhRcFpCZ2ttTHMyUTE0WE0v?= =?utf-8?B?eUdUalg3MTlYYVFJOWFUUjN1dWJ0QmVGMnhRTEZDam8wK2pVbE5zTGxQMVp6?= =?utf-8?B?UWgxMXYwUlpSeFFDMjZIclRSSGZ2elNkY1JWNGF2ajNvK2xrZHNJVkVOblVt?= =?utf-8?B?Z1ZQQzUzNTFsOTlvTzdKNDhyOC9wUnZ2RTNIWUY3MFpLSmczK3lUYmxVbUdy?= =?utf-8?B?a0VrVFdsZ25iODVwcWVWbFZHaEUzVjM2ajVyOGJCS3pjNWZLZy9lSy9tT2NB?= =?utf-8?B?dHVoQkpCa29peXhSNkY1VG9sMzVWa0VDNndDRzdMdGRFZTlYK2psOEtLSUIz?= =?utf-8?B?MEpLSEt1Y3hJaXVWK25VdExxVUk3UTZpRkZrSmRWYkUySm1LZzc2MXR2NUVr?= =?utf-8?B?WStrYlpOREZXOFVxTFRTMXNaMDM0bWJrQSs0OXRTMmV5UWNiSUNlYkVxRCtr?= =?utf-8?Q?XyOKoSM4Pe142n8eloXWZ6o=3D?= X-OriginatorOrg: memverge.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e777ca6-ec33-4ae8-721f-08dc6499be29 X-MS-Exchange-CrossTenant-AuthSource: IA0PR17MB6347.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2024 20:04:26.3890 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 5c90cb59-37e7-4c81-9c07-00473d5fb682 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FhY6yvbUR0byMcyc6wkR9pPKMtrPL7oO9XdY6GxJ7QmkMHdG0n7i8P82U40zAhVsjPayrkNZSHeimyQfByL756YS4e9zaImShupP5Eos0OU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR17MB5846 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f403:2412::701; envelope-from=svetly.todorov@memverge.com; helo=NAM10-MW2-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @memverge.com) X-ZM-MESSAGEID: 1713989146788100007 Using a shared-memory bytemap, validates that DC adds, releases, and reclamations happen on extents belonging to the appropriate host. The MHSLD device inherits from the CXL_TYPE3 class and adds the following configuration options: --mhd-head=3D --mhd-state_file=3D --mhd-init=3D --mhd-head specifies the head ID of the host on the given device. --mhd-state_file is the name of the shared-memory-backed file used to store the MHD state. --mhd-init indicates whether this QEMU instance should initialize the state_file; if so, the instance will create the file if it does not exist, ftruncate it to the appropriate size, and initialize its header. It is assumed that the --mhd-init instance is run and allowed to completely finish configuration before any other guests access the shared state. The shared state file only needs to be intialized once. Even if a guest dies without clearing the ownership bits associated with its head-ID, future guests with that ID will clear those bits in cxl_mhsld_realize(), regardless of whether mhd_init is true or false. The following command line options create an MHSLD with 4GB of backing memory, whose state is tracked in /dev/shm/mhd_metadata. --mhd-init=3Dtrue tells this instance to initialize the state as described above. ./qemu-system_x86-64 \ [... other options ...] \ -device pxb-cxl,id=3Dcxl.0,bus=3Dpcie.0,bus_nr=3D52 \ -device cxl-rp,id=3Drp0,bus=3Dcxl.0,chassis=3D0,port=3D0,slot=3D0 \ -object memory-backend-ram,id=3Dmem0,size=3D4G \ -device cxl-mhsld,bus=3Drp0,num-dc-regions=3D1,volatile-dc-memdev=3Dmem0,id= =3Dcxl-mem0,sn=3D66667,mhd-head=3D0,mhd-state_file=3Dmhd_metadata,mhd-init= =3Dtrue \ -M cxl-fmw.0.targets.0=3Dcxl.0,cxl-fmw.0.size=3D4G \ -qmp unix:/tmp/qmp-sock-1,server,nowait Once this guest completes setup, other guests looking to access the device can be booted with the same configuration options, but with --mhd-head !=3D 0, --mhd-init=3Dfalse, and a different QMP socket. --- hw/cxl/Kconfig | 1 + hw/cxl/meson.build | 1 + hw/cxl/mhsld/Kconfig | 4 + hw/cxl/mhsld/meson.build | 3 + hw/cxl/mhsld/mhsld.c | 456 +++++++++++++++++++++++++++++++++++++++++++= ++++ hw/cxl/mhsld/mhsld.h | 75 ++++++++ 6 files changed, 540 insertions(+) diff --git a/hw/cxl/Kconfig b/hw/cxl/Kconfig index e603839a62..919e59b598 100644 --- a/hw/cxl/Kconfig +++ b/hw/cxl/Kconfig @@ -1,3 +1,4 @@ +source mhsld/Kconfig source vendor/Kconfig =20 config CXL diff --git a/hw/cxl/meson.build b/hw/cxl/meson.build index e8c8c1355a..394750dd19 100644 --- a/hw/cxl/meson.build +++ b/hw/cxl/meson.build @@ -16,4 +16,5 @@ system_ss.add(when: 'CONFIG_I2C_MCTP_CXL', if_true: files= ('i2c_mctp_cxl.c')) =20 system_ss.add(when: 'CONFIG_ALL', if_true: files('cxl-host-stubs.c')) =20 +subdir('mhsld') subdir('vendor') diff --git a/hw/cxl/mhsld/Kconfig b/hw/cxl/mhsld/Kconfig new file mode 100644 index 0000000000..dc2be15140 --- /dev/null +++ b/hw/cxl/mhsld/Kconfig @@ -0,0 +1,4 @@ +config CXL_MHSLD + bool + depends on CXL_MEM_DEVICE + default y diff --git a/hw/cxl/mhsld/meson.build b/hw/cxl/mhsld/meson.build new file mode 100644 index 0000000000..c595558f8a --- /dev/null +++ b/hw/cxl/mhsld/meson.build @@ -0,0 +1,3 @@ +if host_os =3D=3D 'linux' + system_ss.add(when: 'CONFIG_CXL_MHSLD', if_true: files('mhsld.c',)) +endif diff --git a/hw/cxl/mhsld/mhsld.c b/hw/cxl/mhsld/mhsld.c new file mode 100644 index 0000000000..14f4b6f6c9 --- /dev/null +++ b/hw/cxl/mhsld/mhsld.c @@ -0,0 +1,456 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (c) 2024 MemVerge Inc. + * + */ + +#include +#include "qemu/osdep.h" +#include "qemu/bitmap.h" +#include "hw/irq.h" +#include "migration/vmstate.h" +#include "qapi/error.h" +#include "hw/cxl/cxl.h" +#include "hw/cxl/cxl_mailbox.h" +#include "hw/cxl/cxl_device.h" +#include "hw/pci/pcie.h" +#include "hw/pci/pcie_port.h" +#include "hw/qdev-properties.h" +#include "sysemu/hostmem.h" +#include "mhsld.h" + +#define TYPE_CXL_MHSLD "cxl-mhsld" +OBJECT_DECLARE_TYPE(CXLMHSLDState, CXLMHSLDClass, CXL_MHSLD) + +/* + * CXL r3.0 section 7.6.7.5.1 - Get Multi-Headed Info (Opcode 5500h) + * + * This command retrieves the number of heads, number of supported LDs, + * and Head-to-LD mapping of a Multi-Headed device. + */ +static CXLRetCode cmd_mhd_get_info(const struct cxl_cmd *cmd, + uint8_t *payload_in, size_t len_in, + uint8_t *payload_out, size_t *len_out, + CXLCCI * cci) +{ + CXLMHSLDState *s =3D CXL_MHSLD(cci->d); + MHDGetInfoInput *input =3D (void *)payload_in; + MHDGetInfoOutput *output =3D (void *)payload_out; + + uint8_t start_ld =3D input->start_ld; + uint8_t ldmap_len =3D input->ldmap_len; + uint8_t i; + + if (start_ld >=3D s->mhd_state->nr_lds) { + return CXL_MBOX_INVALID_INPUT; + } + + output->nr_lds =3D s->mhd_state->nr_lds; + output->nr_heads =3D s->mhd_state->nr_heads; + output->resv1 =3D 0; + output->start_ld =3D start_ld; + output->resv2 =3D 0; + + for (i =3D 0; i < ldmap_len && (start_ld + i) < output->nr_lds; i++) { + output->ldmap[i] =3D s->mhd_state->ldmap[start_ld + i]; + } + output->ldmap_len =3D i; + + *len_out =3D sizeof(*output) + output->ldmap_len; + return CXL_MBOX_SUCCESS; +} + +static const struct cxl_cmd cxl_cmd_set_mhsld[256][256] =3D { + [MHSLD_MHD][GET_MHD_INFO] =3D {"GET_MULTI_HEADED_INFO", + cmd_mhd_get_info, 2, 0}, +}; + +static Property cxl_mhsld_props[] =3D { + DEFINE_PROP_UINT32("mhd-head", CXLMHSLDState, mhd_head, ~(0)), + DEFINE_PROP_STRING("mhd-state_file", CXLMHSLDState, mhd_state_file), + DEFINE_PROP_BOOL("mhd-init", CXLMHSLDState, mhd_init, false), + DEFINE_PROP_END_OF_LIST(), +}; + +static int cxl_mhsld_state_open(const char *filename, int flags) +{ + char name[128]; + snprintf(name, sizeof(name), "/%s", filename); + return shm_open(name, flags, 0666); +} + +static int cxl_mhsld_state_unlink(const char *filename) +{ + char name[128]; + snprintf(name, sizeof(name), "/%s", filename); + return shm_unlink(name); +} + +static int cxl_mhsld_state_create(const char *filename, size_t size) +{ + int fd, rc; + + fd =3D cxl_mhsld_state_open(filename, O_RDWR | O_CREAT); + if (fd =3D=3D -1) { + return -1; + } + + rc =3D ftruncate(fd, size); + + if (rc) { + close(fd); + return -1; + } + + return fd; +} + +static bool cxl_mhsld_state_set(CXLMHSLDState *s, size_t block_start, + size_t block_count) +{ + uint8_t prev, val, *block; + size_t i; + + val =3D (1 << s->mhd_head); + + /* + * Try to claim all extents from start -> start + count; + * break early if a claimed extent is encountered + */ + for (i =3D 0; i < block_count; ++i) { + block =3D &s->mhd_state->blocks[block_start + i]; + prev =3D __sync_val_compare_and_swap(block, 0, val); + if (prev !=3D 0) { + break; + } + } + + if (prev =3D=3D 0) { + return true; + } + + /* Roll back incomplete claims */ + for (;; --i) { + block =3D &s->mhd_state->blocks[block_start + i]; + __sync_fetch_and_and(block, ~(1u << s->mhd_head)); + if (i =3D=3D 0) { + break; + } + } + + return false; +} + +static void cxl_mhsld_state_clear(CXLMHSLDState *s, size_t block_start, + size_t block_count) +{ + size_t i; + uint8_t *block; + + for (i =3D 0; i < block_count; ++i) { + block =3D &s->mhd_state->blocks[block_start + i]; + __sync_fetch_and_and(block, ~(1u << s->mhd_head)); + } +} + +static void cxl_mhsld_state_initialize(CXLMHSLDState *s, size_t dc_size) +{ + if (!s->mhd_init) { + cxl_mhsld_state_clear(s, 0, dc_size / MHSLD_BLOCK_SZ); + return; + } + + memset(s->mhd_state, 0, s->mhd_state_size); + s->mhd_state->nr_heads =3D MHSLD_HEADS; + s->mhd_state->nr_lds =3D MHSLD_HEADS; + s->mhd_state->nr_blocks =3D dc_size / MHSLD_BLOCK_SZ; +} + +/* Returns starting index of region in MHD map. */ +static inline size_t cxl_mhsld_find_dc_region_start(PCIDevice *d, + CXLDCRegion *r) +{ + CXLType3Dev *dcd =3D CXL_TYPE3(d); + size_t start =3D 0; + uint8_t rid; + + for (rid =3D 0; rid < dcd->dc.num_regions; ++rid) { + if (&dcd->dc.regions[rid] =3D=3D r) { + break; + } + start +=3D dcd->dc.regions[rid].len / dcd->dc.regions[rid].block_s= ize; + } + + return start; +} + +static MHSLDSharedState *cxl_mhsld_state_map(CXLMHSLDState *s) +{ + void *map; + size_t size =3D s->mhd_state_size; + int fd =3D s->mhd_state_fd; + + if (fd < 0) { + return NULL; + } + + map =3D mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + if (map =3D=3D MAP_FAILED) { + return NULL; + } + + return (MHSLDSharedState *)map; +} + +/* + * Triggered during an add_capacity command to a CXL device: + * takes a list of extent records and preallocates them, + * in anticipation of a "dcd accept" response from the host. + * + * Extents that are not accepted by the host will be rolled + * back later. + */ +static bool cxl_mhsld_reserve_extents(PCIDevice *d, + CXLDCExtentRecordList *records, + uint8_t rid) +{ + uint64_t len, dpa; + bool rc; + + CXLMHSLDState *s =3D CXL_MHSLD(d); + CXLDCExtentRecordList *list =3D records, *rollback =3D NULL; + + CXLType3Dev *ct3d =3D CXL_TYPE3(d); + CXLDCRegion *region =3D &ct3d->dc.regions[rid]; + + for (; list; list =3D list->next) { + len =3D list->value->len / MHSLD_BLOCK_SZ; + dpa =3D (list->value->offset + region->base) / MHSLD_BLOCK_SZ; + + rc =3D cxl_mhsld_state_set(s, dpa, len); + + if (!rc) { + rollback =3D records; + break; + } + } + + /* Setting the mhd state failed. Roll back the extents that were added= */ + for (; rollback; rollback =3D rollback->next) { + len =3D rollback->value->len / MHSLD_BLOCK_SZ; + dpa =3D (list->value->offset + region->base) / MHSLD_BLOCK_SZ; + + cxl_mhsld_state_clear(s, dpa, len); + + if (rollback =3D=3D list) { + return false; + } + } + + return true; +} + +static bool cxl_mhsld_reclaim_extents(PCIDevice *d, + CXLDCExtentGroupList *ext_groups, + CXLUpdateDCExtentListInPl *in) +{ + CXLMHSLDState *s =3D CXL_MHSLD(d); + CXLType3Dev *ct3d =3D CXL_TYPE3(d); + CXLDCExtentGroup *ext_group =3D QTAILQ_FIRST(ext_groups); + CXLDCExtent *ent; + CXLDCRegion *region; + g_autofree unsigned long *blk_bitmap =3D NULL; + uint64_t dpa, off, len, size, i; + + /* Get the DCD region via the first requested extent */ + ent =3D QTAILQ_FIRST(&ext_group->list); + dpa =3D ent->start_dpa; + len =3D ent->len; + region =3D cxl_find_dc_region(ct3d, dpa, len); + size =3D region->len / MHSLD_BLOCK_SZ; + blk_bitmap =3D bitmap_new(size); + + /* Set all requested extents to 1 in a bitmap */ + QTAILQ_FOREACH(ent, &ext_group->list, node) { + off =3D ent->start_dpa - region->base; + len =3D ent->len; + bitmap_set(blk_bitmap, off / MHSLD_BLOCK_SZ, len / MHSLD_BLOCK_SZ); + } + + /* Clear bits associated with accepted extents */ + for (i =3D 0; i < in->num_entries_updated; i++) { + off =3D in->updated_entries[i].start_dpa - region->base; + len =3D in->updated_entries[i].len; + bitmap_clear(blk_bitmap, off / MHSLD_BLOCK_SZ, len / MHSLD_BLOCK_S= Z); + } + + /* + * Reclaim only the extents that belong to unaccepted extents, + * i.e. those whose bits are still raised in blk_bitmap + */ + for (off =3D find_first_bit(blk_bitmap, size); off < size;) { + len =3D find_next_zero_bit(blk_bitmap, size, off) - off; + cxl_mhsld_state_clear(s, off, len); + off =3D find_next_bit(blk_bitmap, size, off + len); + } + + return true; +} + +static bool cxl_mhsld_release_extent(PCIDevice *d, uint64_t dpa, uint64_t = len) +{ + cxl_mhsld_state_clear(CXL_MHSLD(d), dpa / MHSLD_BLOCK_SZ, + len / MHSLD_BLOCK_SZ); + return true; +} + +static bool cxl_mhsld_access_valid(PCIDevice *d, uint64_t addr, + unsigned int size) +{ + CXLType3Dev *ct3d =3D CXL_TYPE3(d); + CXLMHSLDState *s =3D CXL_MHSLD(d); + CXLDCRegion *r =3D cxl_find_dc_region(ct3d, addr, size); + size_t i; + + addr =3D addr / r->block_size; + size =3D size / r->block_size; + + for (i =3D 0; i < size; ++i) { + if (s->mhd_state->blocks[addr + i] !=3D (1 << s->mhd_head)) { + return false; + } + } + + return true; +} + +static void cxl_mhsld_realize(PCIDevice *pci_dev, Error **errp) +{ + CXLMHSLDState *s =3D CXL_MHSLD(pci_dev); + MemoryRegion *mr; + int fd =3D -1; + size_t dc_size; + + ct3_realize(pci_dev, errp); + + /* Get number of blocks from dcd size */ + mr =3D host_memory_backend_get_memory(s->ct3d.dc.host_dc); + if (!mr) { + return; + } + dc_size =3D memory_region_size(mr); + if (!dc_size) { + error_setg(errp, "MHSLD does not have dynamic capacity to manage"); + return; + } + + s->mhd_state_size =3D (dc_size / MHSLD_BLOCK_SZ) + sizeof(MHSLDSharedS= tate); + + /* Sanity check the head idx */ + if (s->mhd_head >=3D MHSLD_HEADS) { + error_setg(errp, "MHD Head ID must be between 0-7"); + return; + } + + /* Create the state file if this is the 'mhd_init' instance */ + if (s->mhd_init) { + fd =3D cxl_mhsld_state_create(s->mhd_state_file, s->mhd_state_size= ); + } else { + fd =3D cxl_mhsld_state_open(s->mhd_state_file, O_RDWR); + } + + if (fd < 0) { + error_setg(errp, "failed to open mhsld state errno %d", errno); + return; + } + + s->mhd_state_fd =3D fd; + + /* Map the state and initialize it as needed */ + s->mhd_state =3D cxl_mhsld_state_map(s); + if (!s->mhd_state) { + error_setg(errp, "Failed to mmap mhd state file"); + close(fd); + cxl_mhsld_state_unlink(s->mhd_state_file); + return; + } + + cxl_mhsld_state_initialize(s, dc_size); + + /* Set the LD ownership for this head to this system */ + s->mhd_state->ldmap[s->mhd_head] =3D s->mhd_head; + return; +} + + +static void cxl_mhsld_exit(PCIDevice *pci_dev) +{ + CXLMHSLDState *s =3D CXL_MHSLD(pci_dev); + + ct3_exit(pci_dev); + + if (s->mhd_state_fd) { + munmap(s->mhd_state, s->mhd_state_size); + close(s->mhd_state_fd); + cxl_mhsld_state_unlink(s->mhd_state_file); + s->mhd_state =3D NULL; + } +} + +static void cxl_mhsld_reset(DeviceState *d) +{ + CXLMHSLDState *s =3D CXL_MHSLD(d); + + ct3d_reset(d); + cxl_add_cci_commands(&s->ct3d.cci, cxl_cmd_set_mhsld, 512); + + cxl_mhsld_state_clear(s, 0, s->mhd_state->nr_blocks); +} + +/* + * Example: DCD-add events need to validate that the requested extent + * does not already have a mapping (or, if it does, it is + * a shared extent with the right tagging). + * + * Since this operates on the shared state, we will need to serialize + * these callbacks across QEMU instances via a mutex in shared state. + */ + +static void cxl_mhsld_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + PCIDeviceClass *pc =3D PCI_DEVICE_CLASS(klass); + + pc->realize =3D cxl_mhsld_realize; + pc->exit =3D cxl_mhsld_exit; + dc->reset =3D cxl_mhsld_reset; + device_class_set_props(dc, cxl_mhsld_props); + + CXLType3Class *cvc =3D CXL_TYPE3_CLASS(klass); + cvc->mhd_get_info =3D cmd_mhd_get_info; + cvc->mhd_access_valid =3D cxl_mhsld_access_valid; + cvc->mhd_reserve_extents =3D cxl_mhsld_reserve_extents; + cvc->mhd_reclaim_extents =3D cxl_mhsld_reclaim_extents; + cvc->mhd_release_extent =3D cxl_mhsld_release_extent; +} + +static const TypeInfo cxl_mhsld_info =3D { + .name =3D TYPE_CXL_MHSLD, + .parent =3D TYPE_CXL_TYPE3, + .class_size =3D sizeof(struct CXLMHSLDClass), + .class_init =3D cxl_mhsld_class_init, + .instance_size =3D sizeof(CXLMHSLDState), + .interfaces =3D (InterfaceInfo[]) { + { INTERFACE_CXL_DEVICE }, + { INTERFACE_PCIE_DEVICE }, + {} + }, +}; + +static void cxl_mhsld_register_types(void) +{ + type_register_static(&cxl_mhsld_info); +} + +type_init(cxl_mhsld_register_types) diff --git a/hw/cxl/mhsld/mhsld.h b/hw/cxl/mhsld/mhsld.h new file mode 100644 index 0000000000..e7ead1f0d2 --- /dev/null +++ b/hw/cxl/mhsld/mhsld.h @@ -0,0 +1,75 @@ +/* + * SPDX-License-Identifier: GPL-2.0-or-later + * + * Copyright (c) 2024 MemVerge Inc. + * + */ + +#ifndef CXL_MHSLD_H +#define CXL_MHSLD_H +#include +#include "hw/cxl/cxl.h" +#include "hw/cxl/cxl_mailbox.h" +#include "hw/cxl/cxl_device.h" +#include "qemu/units.h" + +#define MHSLD_BLOCK_SZ (2 * MiB) + +/* + * We limit the number of heads to prevent the shared state + * region from becoming a major memory hog. We need 512MB of + * memory space to track 8-host ownership of 4GB of memory in + * blocks of 2MB. This can change if the block size is increased. + */ +#define MHSLD_HEADS (8) + +/* + * The shared state cannot have 2 variable sized regions + * so we have to max out the ldmap. + */ +typedef struct MHSLDSharedState { + uint8_t nr_heads; + uint8_t nr_lds; + uint8_t ldmap[MHSLD_HEADS]; + uint64_t nr_blocks; + uint8_t blocks[]; +} MHSLDSharedState; + +struct CXLMHSLDState { + CXLType3Dev ct3d; + bool mhd_init; + char *mhd_state_file; + int mhd_state_fd; + size_t mhd_state_size; + uint32_t mhd_head; + MHSLDSharedState *mhd_state; +}; + +struct CXLMHSLDClass { + CXLType3Class parent_class; +}; + +enum { + MHSLD_MHD =3D 0x55, + #define GET_MHD_INFO 0x0 +}; + +/* + * MHD Get Info Command + * Returns information the LD's associated with this head + */ +typedef struct MHDGetInfoInput { + uint8_t start_ld; + uint8_t ldmap_len; +} QEMU_PACKED MHDGetInfoInput; + +typedef struct MHDGetInfoOutput { + uint8_t nr_lds; + uint8_t nr_heads; + uint16_t resv1; + uint8_t start_ld; + uint8_t ldmap_len; + uint16_t resv2; + uint8_t ldmap[]; +} QEMU_PACKED MHDGetInfoOutput; +#endif --=20 2.34.1