mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
hw/mem/cxl_type3: Add DPA range validation for accesses to DC regions
All DPA ranges in the DC regions are invalid to access until an extent covering the range has been successfully accepted by the host. A bitmap is added to each region to record whether a DC block in the region has been backed by a DC extent. Each bit in the bitmap represents a DC block. When a DC extent is accepted, all the bits representing the blocks in the extent are set, which will be cleared when the extent is released. Tested-by: Svetly Todorov <svetly.todorov@memverge.com> Reviewed-by: Gregory Price <gregory.price@memverge.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Fan Ni <fan.ni@samsung.com> Message-Id: <20240523174651.1089554-13-nifan.cxl@gmail.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
d0b9b28a5b
commit
e4180db4e6
3 changed files with 86 additions and 0 deletions
|
@ -1655,6 +1655,7 @@ static CXLRetCode cmd_dcd_add_dyn_cap_rsp(const struct cxl_cmd *cmd,
|
|||
|
||||
cxl_insert_extent_to_extent_list(extent_list, dpa, len, NULL, 0);
|
||||
ct3d->dc.total_extent_count += 1;
|
||||
ct3_set_region_block_backed(ct3d, dpa, len);
|
||||
}
|
||||
/* Remove the first extent group in the pending list */
|
||||
cxl_extent_group_list_delete_front(&ct3d->dc.extents_pending);
|
||||
|
@ -1813,10 +1814,12 @@ static CXLRetCode cmd_dcd_release_dyn_cap(const struct cxl_cmd *cmd,
|
|||
* list and update the extent count;
|
||||
*/
|
||||
QTAILQ_FOREACH_SAFE(ent, &ct3d->dc.extents, node, ent_next) {
|
||||
ct3_clear_region_block_backed(ct3d, ent->start_dpa, ent->len);
|
||||
cxl_remove_extent_from_extent_list(&ct3d->dc.extents, ent);
|
||||
}
|
||||
copy_extent_list(&ct3d->dc.extents, &updated_list);
|
||||
QTAILQ_FOREACH_SAFE(ent, &updated_list, node, ent_next) {
|
||||
ct3_set_region_block_backed(ct3d, ent->start_dpa, ent->len);
|
||||
cxl_remove_extent_from_extent_list(&updated_list, ent);
|
||||
}
|
||||
ct3d->dc.total_extent_count = updated_list_size;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue