On 12/16/2021 3:08 AM, Ilpo Järvinen wrote:
On Mon, 6 Dec 2021, Ricardo Martinez wrote:
...
+static struct cldma_request *t7xx_cldma_ring_step_forward(struct cldma_ring *ring,
+ struct cldma_request *req)
+{
+ if (req->entry.next == &ring->gpd_ring)
+ return list_first_entry(&ring->gpd_ring, struct cldma_request, entry);
+
+ return list_next_entry(req, entry);
+}
+
+static struct cldma_request *t7xx_cldma_ring_step_backward(struct cldma_ring *ring,
+ struct cldma_request *req)
+{
+ 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:
#define list_next_entry_circular(pos, ptr, member) \
((pos)->member.next == (ptr) ? \
list_first_entry(ptr, typeof(*(pos)), member) : \
list_next_entry(pos, member))