From nobody Sat Nov 15 20:51:46 2025 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; dmarc=pass(p=none dis=none) header.from=samsung.com ARC-Seal: i=1; a=rsa-sha256; t=1747901381; cv=none; d=zohomail.com; s=zohoarc; b=ZcKfzdOO6+T2T7XTXWmy+LdAS6J6y4SWyBDPgoogd1qHSEkGGw2wdGuPWGOi5/Mtu79dBVSWmO8JvpngOz1GOb6v69kZCyBxsslN1wIK9JsrBkeDNqYpJLkMm8d3+pIj9uAfvX2vPv4JRAybkwdEJUWK/UvofuB2zq/jnzZmnR4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747901381; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From: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=j5e89bxW+dUvDSFtAEe4o/9DR+/R6+jma2SiWb+OTGI=; b=MJlAdYOJqpMU4Xm5oTntYu58Brp65f6eNlebxR7JMQWaFy0ZZ5LU0QQuG5+bigYaUXx8vpCyMW0eE1oeA4dDpEIr1Ix4rrNreEGpC4fpeG5Q7YKt2lBKzGgglWgPNGVJaDjGHdYthZ0KJcfyBe29tAbdocdI3wkR3lQPfY6v5Nw= ARC-Authentication-Results: i=1; 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; 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 1747901381119761.1967686751722; Thu, 22 May 2025 01:09:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uI0yz-0006UE-DP; Thu, 22 May 2025 04:08:54 -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 1uI0yv-0006Tq-MX for qemu-devel@nongnu.org; Thu, 22 May 2025 04:08:49 -0400 Received: from mailout3.samsung.com ([203.254.224.33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uI0yo-0002mL-MH for qemu-devel@nongnu.org; Thu, 22 May 2025 04:08:46 -0400 Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20250522080831epoutp03fe5693315677ec57d4f0fcd010b3ae1d~ByvuDe6pQ2648226482epoutp03r for ; Thu, 22 May 2025 08:08:31 +0000 (GMT) Received: from epsnrtp03.localdomain (unknown [182.195.42.155]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPS id 20250522080831epcas5p3f5affcf829c94f3e627c5242590ca378~ByvtR7RC_0045300453epcas5p3n; Thu, 22 May 2025 08:08:31 +0000 (GMT) Received: from epcas5p4.samsung.com (unknown [182.195.38.175]) by epsnrtp03.localdomain (Postfix) with ESMTP id 4b31Bj2k0nz3hhT8; Thu, 22 May 2025 08:08:29 +0000 (GMT) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20250522063149epcas5p13719600aa8f59313ff3dc2570c996aec~BxbR0iKUi2830428304epcas5p16; Thu, 22 May 2025 06:31:49 +0000 (GMT) Received: from epsmgmc1p1new.samsung.com (unknown [182.195.42.40]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20250522063149epsmtrp230f6db4aef1e4c0f9bee98421485facb~BxbRzvRn41208312083epsmtrp2W; Thu, 22 May 2025 06:31:49 +0000 (GMT) Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgmc1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id F5.F8.07818.5D4CE286; Thu, 22 May 2025 15:31:49 +0900 (KST) Received: from test-PowerEdge-R740xd.samsungds.net (unknown [107.99.41.79]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20250522063147epsmtip24a25fc88e390ec373fae9aab2a4bd8d8~BxbQXsN-y1283412834epsmtip2G; Thu, 22 May 2025 06:31:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20250522080831epoutp03fe5693315677ec57d4f0fcd010b3ae1d~ByvuDe6pQ2648226482epoutp03r DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1747901312; bh=j5e89bxW+dUvDSFtAEe4o/9DR+/R6+jma2SiWb+OTGI=; h=From:To:Cc:Subject:Date:References:From; b=QOhekBoYXqqY0URx8JeZjeNDfICVVv2VDnGcOADP0El9vNv/MfFtsusiL0Ga08Zy7 YWxoXXYD/HXhQ6gC9BkoNPq3luh8YLNdDQZwu4uWK9NKYuM9MLFgij2OOHNbwFjEV1 Xn++5pifm2wSQDmCdFweI0p9dcVApVDQDtmMhDto= X-AuditID: b6c32a28-46cef70000001e8a-bc-682ec4d57996 From: Vinayak Holikatti To: qemu-devel@nongnu.org Cc: gost.dev@samsung.com, linux-cxl@vger.kernel.org, nifan.cxl@gmail.com, dave@stgolabs.net, vishak.g@samsung.com, krish.reddy@samsung.com, a.manzanares@samsung.com, alok.rathore@samsung.com, Vinayak Holikatti Subject: [PATCH] Add support for FMAPI Get Mutliheaded Head info opcode (5501h) Date: Thu, 22 May 2025 12:01:35 +0530 Message-Id: <20250522063135.366295-1-vinayak.kh@samsung.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrDLMWRmVeSWpSXmKPExsWy7bCSvO7VI3oZBndncllMP6xo8eX0HjaL 1TfXMFrcPLCTyWLhxmVMFudnnWKx+LttL6PF8d4dLBYnTm5nB4rNYXfg8tg56y67x5Nrm5k8 +rasYvSYOrve4/MmuQDWKC6blNSczLLUIn27BK6MxXfeMxc8jag4/fwuWwNjn0MXIyeHhICJ xK8V69i7GLk4hAR2M0rMbgNxQBJSEsd2/mSDsIUlVv57DlX0j1FiW+MZJpAEm4CBxIPm42AN IgKSEr+7TjODFDEL/GKUeLr7PlhCWMBfoqulDaiBg4NFQFVi7cRokDCvgI3ErLXrGSEWyEvs P3iWGSIuKHFy5hMWEJsZKN68dTbzBEa+WUhSs5CkFjAyrWKUTC0ozk3PTTYsMMxLLdcrTswt Ls1L10vOz93ECA5gLY0djO++NekfYmTiYDzEKMHBrCTCG7tCJ0OINyWxsiq1KD++qDQntfgQ ozQHi5I470rDiHQhgfTEktTs1NSC1CKYLBMHp1QDk05TfWp1t+qySdI7JbaJ/NqbVvpKTn3J qzVlGiyBb9Y/WfvmSf+2sA/HZMLWOHHomxavVw84q2G29PDZsv/ZOlb/s26cyUvIvbgqkP3Y xCrzqrVn7Wz3/2SbdeCV+An+FI0Vd7ebHm90Dv3OqH+Am8PDp+boS3F+59jlcdvmxvxViPis sqJ36dW1Vse/WK42Dy8y/jJrttaSm0XnAne6CKxhin1X9L2vOVktc/XBDd0JRqvrkk4khvk1 udi6v2k3amObuOOcSw5PlTDTqn0S2q75wTuu5XLZbXuvP/12867PUYaZJdaP4qx+HExnfT67 arKh9u7Kg2LPbr7Zd05c/E3x6tlOB2rZXDhslwWxKbEUZyQaajEXFScCALdVnTXPAgAA X-CMS-MailID: 20250522063149epcas5p13719600aa8f59313ff3dc2570c996aec X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P cpgsPolicy: CPGSC10-542,Y X-CFilter-Loop: Reflected X-CMS-RootMailID: 20250522063149epcas5p13719600aa8f59313ff3dc2570c996aec References: 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=203.254.224.33; envelope-from=vinayak.kh@samsung.com; helo=mailout3.samsung.com X-Spam_score_int: -45 X-Spam_score: -4.6 X-Spam_bar: ---- X-Spam_report: (-4.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.184, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, 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 @samsung.com) X-ZM-MESSAGEID: 1747901383273116600 CXL spec 3.2 section 7.6.7.5.2 describes Get Head Info. Signed-off-by: Vinayak Holikatti --- This patch is generated against Jonathan Cameron's branch cxl-2025-03-20 hw/cxl/cxl-mailbox-utils.c | 21 +++++++++ hw/cxl/mhsld/mhsld.c | 92 ++++++++++++++++++++++++++++++++++++- hw/cxl/mhsld/mhsld.h | 26 +++++++++++ include/hw/cxl/cxl_device.h | 6 +++ 4 files changed, 144 insertions(+), 1 deletion(-) diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c index a02d130926..4f25caecea 100644 --- a/hw/cxl/cxl-mailbox-utils.c +++ b/hw/cxl/cxl-mailbox-utils.c @@ -122,6 +122,7 @@ enum { #define MANAGEMENT_COMMAND 0x0 MHD =3D 0x55, #define GET_MHD_INFO 0x0 + #define GET_MHD_HEAD_INFO 0x1 }; =20 /* CCI Message Format CXL r3.1 Figure 7-19 */ @@ -267,6 +268,23 @@ static CXLRetCode cmd_mhd_get_info(const struct cxl_cm= d *cmd, return CXL_MBOX_UNSUPPORTED; } =20 +/* + * CXL r3.2 section 7.6.7.5.2 - Get Multi-Headed Head Info (Opcode 5501h) + */ +static CXLRetCode cmd_mhd_get_head_info(const struct cxl_cmd *cmd, + uint8_t *payload_in, size_t len_in, + uint8_t *payload_out, size_t *len_out, + CXLCCI *cci) +{ + CXLType3Dev *ct3d =3D CXL_TYPE3(cci->d); + CXLType3Class *cvc =3D CXL_TYPE3_GET_CLASS(ct3d); + if (cvc->mhd_get_head_info) { + return cvc->mhd_get_head_info(cmd, payload_in, len_in, payload_out, + len_out, cci); + } + return CXL_MBOX_UNSUPPORTED; +} + static CXLRetCode cmd_events_get_records(const struct cxl_cmd *cmd, uint8_t *payload_in, size_t len_i= n, uint8_t *payload_out, size_t *len= _out, @@ -3429,6 +3447,7 @@ static const struct cxl_cmd cxl_cmd_set[256][256] =3D= { "MEDIA_AND_POISON_GET_SCAN_MEDIA_RESULTS", cmd_media_get_scan_media_results, 0, 0 }, [MHD][GET_MHD_INFO] =3D { "GET_MULTI_HEADED_INFO", cmd_mhd_get_info, 2= , 0}, + [MHD][GET_MHD_HEAD_INFO] =3D { "GET_MULTI_HEADED_INFO", cmd_mhd_get_he= ad_info, 2, 0}, }; =20 static const struct cxl_cmd cxl_cmd_set_dcd[256][256] =3D { @@ -3761,6 +3780,8 @@ static const struct cxl_cmd cxl_cmd_set_t3_fm_owned_l= d_mctp[256][256] =3D { [TIMESTAMP][GET] =3D { "TIMESTAMP_GET", cmd_timestamp_get, 0, 0 }, [TUNNEL][MANAGEMENT_COMMAND] =3D { "TUNNEL_MANAGEMENT_COMMAND", cmd_tunnel_management_cmd, ~0, 0 }, + [MHD][GET_MHD_INFO] =3D { "GET_MULTI_HEADED_INFO", cmd_mhd_get_info, 2= , 0}, + [MHD][GET_MHD_HEAD_INFO] =3D { "GET_MULTI_HEADED_INFO", cmd_mhd_get_he= ad_info, 2, 0}, }; =20 void cxl_initialize_t3_fm_owned_ld_mctpcci(CXLCCI *cci, DeviceState *d, diff --git a/hw/cxl/mhsld/mhsld.c b/hw/cxl/mhsld/mhsld.c index 9f633b3bed..981546b5ff 100644 --- a/hw/cxl/mhsld/mhsld.c +++ b/hw/cxl/mhsld/mhsld.c @@ -61,9 +61,57 @@ static CXLRetCode cmd_mhd_get_info(const struct cxl_cmd = *cmd, return CXL_MBOX_SUCCESS; } =20 +/* + * CXL r3.2 section 7.6.7.5.2 - Get Head Info (Opcode 5501h) + * + * 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_head_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); + MHDGetHeadInfoInput *input =3D (void *)payload_in; + MHDGetHeadInfoOutput *output =3D (void *)payload_out; + int i =3D 0; + + if (input->start_head > MHSLD_HEADS) { + return CXL_MBOX_INVALID_INPUT; + } + + output->nr_heads =3D MIN((MHSLD_HEADS - input->start_head), input->nr_= heads); + for (i =3D input->start_head; i < input->start_head + output->nr_heads= ; i++) { + output->head_info_list[i].port_number =3D + s->mhd_state->head_info_blocks[i].port_nu= mber; + output->head_info_list[i].max_link_width =3D + s->mhd_state->head_info_blocks[i].max_link_w= idth; + output->head_info_list[i].nego_link_width =3D + s->mhd_state->head_info_blocks[i].nego_link_w= idth; + output->head_info_list[i].supp_link_speeds_vector =3D + s->mhd_state->head_info_blocks[i].supp_link_speeds_ve= ctor; + output->head_info_list[i].max_link_speed =3D + s->mhd_state->head_info_blocks[i].max_link_s= peed; + output->head_info_list[i].current_link_speed =3D + s->mhd_state->head_info_blocks[i].current_link_s= peed; + output->head_info_list[i].ltssm_state =3D + s->mhd_state->head_info_blocks[i].ltssm_s= tate; + output->head_info_list[i].first_nego_lane_num =3D + s->mhd_state->head_info_blocks[i].first_nego_lane= _num; + output->head_info_list[i].link_state_flags =3D + s->mhd_state->head_info_blocks[i].link_state_f= lags; + } + + *len_out =3D sizeof(*output) + output->nr_heads * sizeof(MHDHeadInfoBl= ock); + 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}, + [MHSLD_MHD][GET_MHD_HEAD_INFO] =3D {"GET_HEAD_INFO", + cmd_mhd_get_head_info, 2, 0}, }; =20 static const Property cxl_mhsld_props[] =3D { @@ -166,6 +214,47 @@ static void cxl_mhsld_state_initialize(CXLMHSLDState *= s, size_t dc_size) s->mhd_state->nr_blocks =3D dc_size / MHSLD_BLOCK_SZ; } =20 + +static void cxl_mhsld_init_head_info(CXLMHSLDState *s, PCIDevice *pdev) +{ + uint16_t lnksta =3D 0; + uint16_t current_link_speed =3D 0; + uint16_t negotiated_link_width =3D 0; + uint16_t lnkcap =3D 0, lnkcap2 =3D 0; + uint16_t max_link_width =3D 0; + uint16_t max_link_speed =3D 0; + uint16_t supported_link_speeds_vector =3D 0; + + lnksta =3D pdev->config_read(pdev, + pdev->exp.exp_cap + PCI_EXP_LNKSTA, + sizeof(lnksta)); + lnkcap =3D pdev->config_read(pdev, + pdev->exp.exp_cap + PCI_EXP_LNKCAP, + sizeof(lnkcap)); + lnkcap2 =3D pdev->config_read(pdev, + pdev->exp.exp_cap + PCI_EXP_LNKCAP2, + sizeof(lnkcap2)); + supported_link_speeds_vector =3D (lnkcap2 & 0xFE) >> 1; + max_link_width =3D (lnkcap & PCI_EXP_LNKCAP_MLW) >> 4; + max_link_speed =3D lnkcap & PCI_EXP_LNKCAP_SLS; + current_link_speed =3D lnksta & PCI_EXP_LNKSTA_CLS; + negotiated_link_width =3D (lnksta & PCI_EXP_LNKSTA_NLW) >> 4; + + s->mhd_state->head_info_blocks[s->mhd_head].port_number =3D s->mhd_hea= d; + s->mhd_state->head_info_blocks[s->mhd_head].max_link_width =3D max_lin= k_width; + s->mhd_state->head_info_blocks[s->mhd_head].nego_link_width =3D + negotiated_link_= width; + s->mhd_state->head_info_blocks[s->mhd_head].supp_link_speeds_vector = =3D + supported_link_speeds_v= ector; + s->mhd_state->head_info_blocks[s->mhd_head].max_link_speed =3D + max_link_= speed; + s->mhd_state->head_info_blocks[s->mhd_head].current_link_speed =3D + current_link_= speed; + s->mhd_state->head_info_blocks[s->mhd_head].ltssm_state =3D 0x7; + s->mhd_state->head_info_blocks[s->mhd_head].first_nego_lane_num =3D 0; + s->mhd_state->head_info_blocks[s->mhd_head].link_state_flags =3D 0; +} + /* Returns starting index of region in MHD map. */ static inline size_t cxl_mhsld_find_dc_region_start(PCIDevice *d, CXLDCRegion *r) @@ -376,7 +465,7 @@ static void cxl_mhsld_realize(PCIDevice *pci_dev, Error= **errp) } =20 cxl_mhsld_state_initialize(s, dc_size); - + cxl_mhsld_init_head_info(s, pci_dev); /* Set the LD ownership for this head to this system */ s->mhd_state->ldmap[s->mhd_head] =3D s->mhd_head; return; @@ -428,6 +517,7 @@ static void cxl_mhsld_class_init(ObjectClass *klass, vo= id *data) =20 CXLType3Class *cvc =3D CXL_TYPE3_CLASS(klass); cvc->mhd_get_info =3D cmd_mhd_get_info; + cvc->mhd_get_head_info =3D cmd_mhd_get_head_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; diff --git a/hw/cxl/mhsld/mhsld.h b/hw/cxl/mhsld/mhsld.h index e7ead1f0d2..c9fbec71ca 100644 --- a/hw/cxl/mhsld/mhsld.h +++ b/hw/cxl/mhsld/mhsld.h @@ -23,6 +23,18 @@ */ #define MHSLD_HEADS (8) =20 +typedef struct MHDHeadInfoBlock { + uint8_t port_number; + uint8_t max_link_width; + uint8_t nego_link_width; + uint8_t supp_link_speeds_vector; + uint8_t max_link_speed; + uint8_t current_link_speed; + uint8_t ltssm_state; + uint8_t first_nego_lane_num; + uint8_t link_state_flags; +} QEMU_PACKED MHDHeadInfoBlock; + /* * The shared state cannot have 2 variable sized regions * so we have to max out the ldmap. @@ -32,6 +44,7 @@ typedef struct MHSLDSharedState { uint8_t nr_lds; uint8_t ldmap[MHSLD_HEADS]; uint64_t nr_blocks; + MHDHeadInfoBlock head_info_blocks[MHSLD_HEADS]; uint8_t blocks[]; } MHSLDSharedState; =20 @@ -52,6 +65,7 @@ struct CXLMHSLDClass { enum { MHSLD_MHD =3D 0x55, #define GET_MHD_INFO 0x0 + #define GET_MHD_HEAD_INFO 0x1 }; =20 /* @@ -72,4 +86,16 @@ typedef struct MHDGetInfoOutput { uint16_t resv2; uint8_t ldmap[]; } QEMU_PACKED MHDGetInfoOutput; + +typedef struct MHDGetHeadInfoInput { + uint8_t start_head; + uint8_t nr_heads; +} QEMU_PACKED MHDGetHeadInfoInput; + +typedef struct MHDGetHeadInfoOutput { + uint8_t nr_heads; + uint8_t rsvd[3]; + MHDHeadInfoBlock head_info_list[]; +} QEMU_PACKED MHDGetHeadInfoOutput; + #endif diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h index ca515cab13..c93c71c45d 100644 --- a/include/hw/cxl/cxl_device.h +++ b/include/hw/cxl/cxl_device.h @@ -732,6 +732,12 @@ struct CXLType3Class { uint8_t *payload_out, size_t *len_out, CXLCCI *cci); + CXLRetCode (*mhd_get_head_info)(const struct cxl_cmd *cmd, + uint8_t *payload_in, + size_t len_in, + uint8_t *payload_out, + 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, CxlDynamicCapacityExtentList *records, --=20 2.34.1