Skip to content

Commit

Permalink
plist: Add plist_last
Browse files Browse the repository at this point in the history
plist is currently used by the scheduler, which only needs to know the
highest item in the list.  This adds plist_last which allows you to
find the lowest.  This is necessary for using plists to implement a
fast search of dynamic ranges in pm_qos which can have both highest
and lowest criteria.

Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
  • Loading branch information
James Bottomley authored and Rafael J. Wysocki committed Jul 18, 2010
1 parent c125e96 commit 12e4d0c
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions include/linux/plist.h
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,23 @@ static inline int plist_node_empty(const struct plist_node *node)
container_of(plist_first(head), type, member)
#endif

/**
* plist_last_entry - get the struct for the last entry
* @head: the &struct plist_head pointer
* @type: the type of the struct this is embedded in
* @member: the name of the list_struct within the struct
*/
#ifdef CONFIG_DEBUG_PI_LIST
# define plist_last_entry(head, type, member) \
({ \
WARN_ON(plist_head_empty(head)); \
container_of(plist_last(head), type, member); \
})
#else
# define plist_last_entry(head, type, member) \
container_of(plist_last(head), type, member)
#endif

/**
* plist_first - return the first node (and thus, highest priority)
* @head: the &struct plist_head pointer
Expand All @@ -271,4 +288,16 @@ static inline struct plist_node *plist_first(const struct plist_head *head)
struct plist_node, plist.node_list);
}

/**
* plist_last - return the last node (and thus, lowest priority)
* @head: the &struct plist_head pointer
*
* Assumes the plist is _not_ empty.
*/
static inline struct plist_node *plist_last(const struct plist_head *head)
{
return list_entry(head->node_list.prev,
struct plist_node, plist.node_list);
}

#endif

0 comments on commit 12e4d0c

Please sign in to comment.