241
241
#define list_first_entry_rcu(ptr, type, member) \
242
242
list_entry_rcu((ptr)->next, type, member)
244
#define __list_for_each_entry_rcu(pos, head, member) \
245
for (pos = list_entry_rcu((head)->next, typeof(*pos), member); \
246
&pos->member != (head); \
247
pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
250
245
* list_for_each_entry_rcu - iterate over rcu list of given type
251
246
* @pos: the type * to use as a loop cursor.
259
254
#define list_for_each_entry_rcu(pos, head, member) \
260
255
for (pos = list_entry_rcu((head)->next, typeof(*pos), member); \
261
prefetch(pos->member.next), &pos->member != (head); \
256
&pos->member != (head); \
262
257
pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
276
271
#define list_for_each_continue_rcu(pos, head) \
277
272
for ((pos) = rcu_dereference_raw(list_next_rcu(pos)); \
278
prefetch((pos)->next), (pos) != (head); \
279
274
(pos) = rcu_dereference_raw(list_next_rcu(pos)))
290
285
#define list_for_each_entry_continue_rcu(pos, head, member) \
291
286
for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \
292
prefetch(pos->member.next), &pos->member != (head); \
287
&pos->member != (head); \
293
288
pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
296
* list_for_each_entry_continue_rcu - continue iteration over typed rcu list
297
* @pos: the type * to use as a loop cursor.
298
* @head: the head for your list.
299
* @member: the name of the list_struct within the struct.
301
* This list-traversal primitive may safely run concurrently with
302
* the _rcu list-mutation primitives such as list_add_rcu()
303
* as long as the traversal is guarded by rcu_read_lock().
304
* It continues an iteration initiated by list_for_each_entry_rcu().
306
#define list_for_each_entry_continue_rcu(pos, head, member) \
307
for (pos = list_entry_rcu(pos->member.next, typeof(*pos), member); \
308
prefetch(pos->member.next), &pos->member != (head); \
309
pos = list_entry_rcu(pos->member.next, typeof(*pos), member))
313
291
* hlist_del_rcu - deletes entry from hash list without re-initialization
314
292
* @n: the element to delete from the hash list.
450
428
#define __hlist_for_each_rcu(pos, head) \
451
429
for (pos = rcu_dereference(hlist_first_rcu(head)); \
452
pos && ({ prefetch(pos->next); 1; }); \
453
431
pos = rcu_dereference(hlist_next_rcu(pos)))
466
444
#define hlist_for_each_entry_rcu(tpos, pos, head, member) \
467
445
for (pos = rcu_dereference_raw(hlist_first_rcu(head)); \
468
pos && ({ prefetch(pos->next); 1; }) && \
469
447
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
470
448
pos = rcu_dereference_raw(hlist_next_rcu(pos)))
483
461
#define hlist_for_each_entry_rcu_bh(tpos, pos, head, member) \
484
462
for (pos = rcu_dereference_bh((head)->first); \
485
pos && ({ prefetch(pos->next); 1; }) && \
486
464
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
487
465
pos = rcu_dereference_bh(pos->next))
495
473
#define hlist_for_each_entry_continue_rcu(tpos, pos, member) \
496
474
for (pos = rcu_dereference((pos)->next); \
497
pos && ({ prefetch(pos->next); 1; }) && \
498
476
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
499
477
pos = rcu_dereference(pos->next))
507
485
#define hlist_for_each_entry_continue_rcu_bh(tpos, pos, member) \
508
486
for (pos = rcu_dereference_bh((pos)->next); \
509
pos && ({ prefetch(pos->next); 1; }) && \
510
488
({ tpos = hlist_entry(pos, typeof(*tpos), member); 1; }); \
511
489
pos = rcu_dereference_bh(pos->next))