From fbf7c42612e5402cd25ae71c59f803f9bcaa34d4 Mon Sep 17 00:00:00 2001 From: Guiding Li Date: Thu, 12 Oct 2023 17:22:44 +0800 Subject: [PATCH] libmetal: set ept address loop++ in bitmap CPU0 CPU1 create_ept1:addr1 create_ept1 OK <====== msg1 OK <====== msg2 OK <====== msg3 msg4 <====== msg4 on the virtioqueue close_ept1 close_ept1 create_ept2:addr1 create_ept1 (same addr with ept1) msg4 ept2 recv ept1 msg ERROR <====== The msg4 which belong to ep1, error received by ept2. For the issue, I give a resolve method, for the rpmsg_get_address(), always return a new increased num. Signed-off-by: Guiding Li --- lib/utilities.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utilities.h b/lib/utilities.h index 6b592e01..624bb535 100644 --- a/lib/utilities.h +++ b/lib/utilities.h @@ -134,10 +134,10 @@ metal_bitmap_next_clear_bit(unsigned long *bitmap, unsigned int start, unsigned int bit; for (bit = start; - bit < max && !metal_bitmap_is_bit_clear(bitmap, bit); + bit < max + start && !metal_bitmap_is_bit_clear(bitmap, bit % max); bit++) ; - return bit; + return bit % max; } #define metal_bitmap_for_each_clear_bit(bitmap, bit, max) \