|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] xen: mapcache: Fix finding matching entry
On Thu, 10 Apr 2025, Aleksandr Partanen wrote:
> If we have request without lock and hit unlocked or invalid
> entry during the search, we remap it immediately,
> even if we have matching entry in next entries in bucket.
> This leads to duplication of mappings of the same size,
> and to possibility of selecting the wrong element
> during invalidation and underflow it's entry->lock counter
>
> Signed-off-by: Aleksandr Partanen <alex.pentagrid@xxxxxxxxx>
Hi Aleksandr, thanks for the patch, it looks correct to me.
Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
Edgar, would you be able to give it a look as well to make sure?
> ---
> hw/xen/xen-mapcache.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/hw/xen/xen-mapcache.c b/hw/xen/xen-mapcache.c
> index 698b5c53ed..2c8f861fdb 100644
> --- a/hw/xen/xen-mapcache.c
> +++ b/hw/xen/xen-mapcache.c
> @@ -376,12 +376,12 @@ tryagain:
>
> entry = &mc->entry[address_index % mc->nr_buckets];
>
> - while (entry && (lock || entry->lock) && entry->vaddr_base &&
> - (entry->paddr_index != address_index || entry->size !=
> cache_size ||
> + while (entry && (!entry->vaddr_base ||
> + entry->paddr_index != address_index || entry->size != cache_size
> ||
> !test_bits(address_offset >> XC_PAGE_SHIFT,
> test_bit_size >> XC_PAGE_SHIFT,
> entry->valid_mapping))) {
> - if (!free_entry && !entry->lock) {
> + if (!free_entry && (!entry->lock || !entry->vaddr_base)) {
> free_entry = entry;
> free_pentry = pentry;
> }
> --
> 2.39.5
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |