From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D76B83A9D9F for ; Fri, 6 Feb 2026 12:33:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.176.79.56 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770381240; cv=none; b=gNCzQSYkbws/RnMmyk6AjfbbGQqhRNYDgUb1kg2vAb0dR5MhvRn3+P5oFykT0h+UDs/wbmoqz+FgCJNVNIvhbAxTCdguGXLqBpaLkksbvJbuZ7fUQT5Uj3/TaBSfTNjeN3HR+mMcpsKpzIgD1De/MHFg8KSLNhjbzqyx+KJoV1Q= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770381240; c=relaxed/simple; bh=NnnlrCYQqhW7qt0Dgx8zn9GkFTB65Z+kXY2UeigI1H0=; h=Date:From:To:CC:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Fz0vcjPfgpJIGg6vUwR3fPauitmdb0khRR/IqQteOqssY+/KGMqb6+icM9UM/RIvqhn3hp5SQxiTxZnIjtZfjDlpfYZZRZuxH4IhRJnerq4gTpQxw3TjYswcQkQBJreEnAGQEO0Ey8ZHTQew+kSXSoDy6EkCO5C3iifDrLNaYNo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=185.176.79.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.18.224.107]) by frasgout.his.huawei.com (SkyGuard) with ESMTPS id 4f6tm11NF6zJ46ZL; Fri, 6 Feb 2026 20:33:05 +0800 (CST) Received: from dubpeml500005.china.huawei.com (unknown [7.214.145.207]) by mail.maildlp.com (Postfix) with ESMTPS id 78A4D40570; Fri, 6 Feb 2026 20:33:57 +0800 (CST) Received: from localhost (10.203.177.15) by dubpeml500005.china.huawei.com (7.214.145.207) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Fri, 6 Feb 2026 12:33:56 +0000 Date: Fri, 6 Feb 2026 12:33:55 +0000 From: Jonathan Cameron To: Alireza Sanaee CC: , , , , , , , , , Subject: Re: [RFC PATCH 4/7] hw/cxl: Map lazy memory backend after host acceptance Message-ID: <20260206123355.00006698@huawei.com> In-Reply-To: <20251127225526.700-5-alireza.sanaee@huawei.com> References: <20251127225526.700-1-alireza.sanaee@huawei.com> <20251127225526.700-5-alireza.sanaee@huawei.com> X-Mailer: Claws Mail 4.3.0 (GTK 3.24.42; x86_64-w64-mingw32) Precedence: bulk X-Mailing-List: linux-cxl@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-ClientProxiedBy: lhrpeml100011.china.huawei.com (7.191.174.247) To dubpeml500005.china.huawei.com (7.214.145.207) On Thu, 27 Nov 2025 22:55:22 +0000 Alireza Sanaee wrote: > Map relevant memory backend when host accepted an extent. Explain what works at this point. Does the old non performant read / write land in this memory after this patch? We could decide not to support that, but key is the patch should explain where we are at this point. No comments inline. > > Signed-off-by: Alireza Sanaee > --- > hw/cxl/cxl-mailbox-utils.c | 74 ++++++++++++++++++++++++++++++++++++-- > 1 file changed, 71 insertions(+), 3 deletions(-) > > diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c > index ae723c03ec..b785553225 100644 > --- a/hw/cxl/cxl-mailbox-utils.c > +++ b/hw/cxl/cxl-mailbox-utils.c > @@ -2979,6 +2979,30 @@ static CXLRetCode cxl_detect_malformed_extent_list(CXLType3Dev *ct3d, > return CXL_MBOX_SUCCESS; > } > > +static bool cxl_extent_find_extent_detail(CXLDCExtentGroupList *list, > + uint64_t start_dpa, > + uint64_t len, > + uint8_t *tag, > + HostMemoryBackend **hmb, > + struct CXLFixedWindow **fw, > + int *rid) > +{ > + CXLDCExtent *ent, *ent_next; > + CXLDCExtentGroup *group = QTAILQ_FIRST(list); > + > + QTAILQ_FOREACH_SAFE(ent, &group->list, node, ent_next) { > + if (ent->start_dpa == start_dpa && ent->len == len) { > + *fw = ent->fw; > + *hmb = ent->hm; > + memcpy(tag, ent->tag, 0x10); > + *rid = ent->rid; > + return true; > + } > + } > + > + return false; > +} > + > static CXLRetCode cxl_dcd_add_dyn_cap_rsp_dry_run(CXLType3Dev *ct3d, > const CXLUpdateDCExtentListInPl *in) > { > @@ -3029,8 +3053,12 @@ static CXLRetCode cmd_dcd_add_dyn_cap_rsp(const struct cxl_cmd *cmd, > CXLUpdateDCExtentListInPl *in = (void *)payload_in; > CXLType3Dev *ct3d = CXL_TYPE3(cci->d); > CXLDCExtentList *extent_list = &ct3d->dc.extents; > + struct CXLFixedWindow *fw; > + HostMemoryBackend *hmb_dc; > + uint8_t tag[0x10]; > uint32_t i, num; > uint64_t dpa, len; > + int rid; > CXLRetCode ret; > > if (len_in < sizeof(*in)) { > @@ -3065,12 +3093,52 @@ static CXLRetCode cmd_dcd_add_dyn_cap_rsp(const struct cxl_cmd *cmd, > } > > for (i = 0; i < in->num_entries_updated; i++) { > + bool found; > + MemoryRegion *mr; > + > dpa = in->updated_entries[i].start_dpa; > len = in->updated_entries[i].len; > > - cxl_insert_extent_to_extent_list(extent_list, NULL, > - NULL, dpa, len, > - NULL, 0, 0); > + if (ct3d->dc.total_capacity_cmd) { > + found = cxl_extent_find_extent_detail( > + &ct3d->dc.extents_pending, dpa, len, tag, &hmb_dc, &fw, &rid); > + > + /* > + * This only occurs when host accepts an extent where device does > + * not know anything about it. > + */ > + if (!found) { > + qemu_log("Could not find the extent detail for DPA 0x%" PRIx64 > + " LEN 0x%" PRIx64 "\n", > + dpa, len); > + return CXL_MBOX_INVALID_PA; > + } > + > + /* The host memory backend should not be already mapped */ > + if (host_memory_backend_is_mapped(hmb_dc)) { > + qemu_log("The host memory backend for DPA 0x%" PRIx64 > + " LEN 0x%" PRIx64 " is already mapped\n", > + dpa, len); > + return CXL_MBOX_INVALID_PA; > + } > + > + mr = host_memory_backend_get_memory(hmb_dc); > + if (!mr) { > + qemu_log("Could not get memory region from host memory " > + "backend\n"); > + return CXL_MBOX_INVALID_PA; > + } > + > + memory_region_set_nonvolatile(mr, false); > + memory_region_set_enabled(mr, true); > + host_memory_backend_set_mapped(hmb_dc, true); > + cxl_insert_extent_to_extent_list(extent_list, hmb_dc, fw, dpa, len, > + NULL, 0, rid); > + } else { > + cxl_insert_extent_to_extent_list(extent_list, NULL, NULL, dpa, len, > + NULL, 0, -1); > + } > + > ct3d->dc.total_extent_count += 1; > ct3d->dc.nr_extents_accepted += 1; > ct3_set_region_block_backed(ct3d, dpa, len);