Hi Stewart,
Stewart Hildebrand <stewart.hildebr...@amd.com> writes: > On 10/12/23 18:09, Volodymyr Babchuk wrote: >> This function can be used when user wants to remove all rangeset >> entries but do not want to destroy rangeset itself. >> >> Signed-off-by: Volodymyr Babchuk <volodymyr_babc...@epam.com> >> >> --- >> >> Changes in v10: >> >> - New in v10. The function is used in "vpci/header: handle p2m range sets >> per BAR" >> --- >> xen/common/rangeset.c | 9 +++++++-- >> xen/include/xen/rangeset.h | 3 ++- >> 2 files changed, 9 insertions(+), 3 deletions(-) >> >> diff --git a/xen/common/rangeset.c b/xen/common/rangeset.c >> index 35c3420885..420275669e 100644 >> --- a/xen/common/rangeset.c >> +++ b/xen/common/rangeset.c >> @@ -448,8 +448,7 @@ struct rangeset *rangeset_new( >> return r; >> } >> >> -void rangeset_destroy( >> - struct rangeset *r) >> +void rangeset_empty(struct rangeset *r) >> { >> struct range *x; >> >> @@ -465,6 +464,12 @@ void rangeset_destroy( >> >> while ( (x = first_range(r)) != NULL ) >> destroy_range(r, x); >> +} >> + >> +void rangeset_destroy( >> + struct rangeset *r) >> +{ >> + rangeset_empty(r); >> >> xfree(r); >> } > > I think the list_del(&r->rangeset_list) operation (and associated > locking and NULL check) shouldn't be moved to the new rangeset_empty() > function, it should stay in rangeset_destroy(). Ahh, yes. It was a really stupid idea to move list_del(&r->rangeset_list); to rangeset_empty(). -- WBR, Volodymyr