On Wed, 12 Jan 2022, Andy Shevchenko wrote: > On Tue, Jan 11, 2022 at 08:55:58PM -0800, Martinez, Ricardo wrote: > > On 12/16/2021 3:08 AM, Ilpo Järvinen wrote: > > > On Mon, 6 Dec 2021, Ricardo Martinez wrote: > > > > > + if (req->entry.next == &ring->gpd_ring) > > > > + return list_first_entry(&ring->gpd_ring, struct cldma_request, entry); > > > > + > > > > + return list_next_entry(req, entry); > > ... > > > > > + if (req->entry.prev == &ring->gpd_ring) > > > > + return list_last_entry(&ring->gpd_ring, struct cldma_request, entry); > > > > + > > > > + return list_prev_entry(req, entry); > > ... > > > > Wouldn't these two seems generic enough to warrant adding something like > > > list_next/prev_entry_circular(...) to list.h? > > > > Agree, in the upcoming version I'm planning to include something like this > > to list.h as suggested: > > I think you mean for next and prev, i.o.w. two helpers, correct? > > > #define list_next_entry_circular(pos, ptr, member) \ > > >     ((pos)->member.next == (ptr) ? \ > > I believe this is list_entry_is_head(). It takes .next so it's not the same as list_entry_is_head() and list_entry_is_last() doesn't exist. -- i. > >     list_first_entry(ptr, typeof(*(pos)), member) : \ > >     list_next_entry(pos, member)) > >