Lines Matching refs:xas
1410 #define xas_marked(xas, mark) xa_marked((xas)->xa, (mark)) argument
1411 #define xas_trylock(xas) xa_trylock((xas)->xa) argument
1412 #define xas_lock(xas) xa_lock((xas)->xa) argument
1413 #define xas_unlock(xas) xa_unlock((xas)->xa) argument
1414 #define xas_lock_bh(xas) xa_lock_bh((xas)->xa) argument
1415 #define xas_unlock_bh(xas) xa_unlock_bh((xas)->xa) argument
1416 #define xas_lock_irq(xas) xa_lock_irq((xas)->xa) argument
1417 #define xas_unlock_irq(xas) xa_unlock_irq((xas)->xa) argument
1418 #define xas_lock_irqsave(xas, flags) \ argument
1419 xa_lock_irqsave((xas)->xa, flags)
1420 #define xas_unlock_irqrestore(xas, flags) \ argument
1421 xa_unlock_irqrestore((xas)->xa, flags)
1429 static inline int xas_error(const struct xa_state *xas) in xas_error() argument
1431 return xa_err(xas->xa_node); in xas_error()
1443 static inline void xas_set_err(struct xa_state *xas, long err) in xas_set_err() argument
1445 xas->xa_node = XA_ERROR(err); in xas_set_err()
1454 static inline bool xas_invalid(const struct xa_state *xas) in xas_invalid() argument
1456 return (unsigned long)xas->xa_node & 3; in xas_invalid()
1465 static inline bool xas_valid(const struct xa_state *xas) in xas_valid() argument
1467 return !xas_invalid(xas); in xas_valid()
1476 static inline bool xas_is_node(const struct xa_state *xas) in xas_is_node() argument
1478 return xas_valid(xas) && xas->xa_node; in xas_is_node()
1509 static inline void xas_reset(struct xa_state *xas) in xas_reset() argument
1511 xas->xa_node = XAS_RESTART; in xas_reset()
1526 static inline bool xas_retry(struct xa_state *xas, const void *entry) in xas_retry() argument
1532 xas_reset(xas); in xas_retry()
1555 int xas_get_order(struct xa_state *xas);
1558 void xas_try_split(struct xa_state *xas, void *entry, unsigned int order);
1566 static inline int xas_get_order(struct xa_state *xas) in xas_get_order() argument
1571 static inline void xas_split(struct xa_state *xas, void *entry, in xas_split() argument
1574 xas_store(xas, entry); in xas_split()
1577 static inline void xas_split_alloc(struct xa_state *xas, void *entry, in xas_split_alloc() argument
1582 static inline void xas_try_split(struct xa_state *xas, void *entry, in xas_try_split() argument
1608 static inline void *xas_reload(struct xa_state *xas) in xas_reload() argument
1610 struct xa_node *node = xas->xa_node; in xas_reload()
1615 return xa_head(xas->xa); in xas_reload()
1617 offset = (xas->xa_index >> node->shift) & XA_CHUNK_MASK; in xas_reload()
1618 entry = xa_entry(xas->xa, node, offset); in xas_reload()
1623 offset = xas->xa_offset; in xas_reload()
1625 return xa_entry(xas->xa, node, offset); in xas_reload()
1637 static inline void xas_set(struct xa_state *xas, unsigned long index) in xas_set() argument
1639 xas->xa_index = index; in xas_set()
1640 xas->xa_node = XAS_RESTART; in xas_set()
1653 static inline void xas_advance(struct xa_state *xas, unsigned long index) in xas_advance() argument
1655 unsigned char shift = xas_is_node(xas) ? xas->xa_node->shift : 0; in xas_advance()
1657 xas->xa_index = index; in xas_advance()
1658 xas->xa_offset = (index >> shift) & XA_CHUNK_MASK; in xas_advance()
1667 static inline void xas_set_order(struct xa_state *xas, unsigned long index, in xas_set_order() argument
1671 xas->xa_index = order < BITS_PER_LONG ? (index >> order) << order : 0; in xas_set_order()
1672 xas->xa_shift = order - (order % XA_CHUNK_SHIFT); in xas_set_order()
1673 xas->xa_sibs = (1 << (order % XA_CHUNK_SHIFT)) - 1; in xas_set_order()
1674 xas->xa_node = XAS_RESTART; in xas_set_order()
1677 xas_set(xas, index); in xas_set_order()
1690 static inline void xas_set_update(struct xa_state *xas, xa_update_node_t update) in xas_set_update() argument
1692 xas->xa_update = update; in xas_set_update()
1695 static inline void xas_set_lru(struct xa_state *xas, struct list_lru *lru) in xas_set_lru() argument
1697 xas->xa_lru = lru; in xas_set_lru()
1711 static inline void *xas_next_entry(struct xa_state *xas, unsigned long max) in xas_next_entry() argument
1713 struct xa_node *node = xas->xa_node; in xas_next_entry()
1717 xas->xa_offset != (xas->xa_index & XA_CHUNK_MASK))) in xas_next_entry()
1718 return xas_find(xas, max); in xas_next_entry()
1721 if (unlikely(xas->xa_index >= max)) in xas_next_entry()
1722 return xas_find(xas, max); in xas_next_entry()
1723 if (unlikely(xas->xa_offset == XA_CHUNK_MASK)) in xas_next_entry()
1724 return xas_find(xas, max); in xas_next_entry()
1725 entry = xa_entry(xas->xa, node, xas->xa_offset + 1); in xas_next_entry()
1727 return xas_find(xas, max); in xas_next_entry()
1728 xas->xa_offset++; in xas_next_entry()
1729 xas->xa_index++; in xas_next_entry()
1736 static inline unsigned int xas_find_chunk(struct xa_state *xas, bool advance, in xas_find_chunk() argument
1739 unsigned long *addr = xas->xa_node->marks[(__force unsigned)mark]; in xas_find_chunk()
1740 unsigned int offset = xas->xa_offset; in xas_find_chunk()
1768 static inline void *xas_next_marked(struct xa_state *xas, unsigned long max, in xas_next_marked() argument
1771 struct xa_node *node = xas->xa_node; in xas_next_marked()
1776 return xas_find_marked(xas, max, mark); in xas_next_marked()
1777 offset = xas_find_chunk(xas, true, mark); in xas_next_marked()
1778 xas->xa_offset = offset; in xas_next_marked()
1779 xas->xa_index = (xas->xa_index & ~XA_CHUNK_MASK) + offset; in xas_next_marked()
1780 if (xas->xa_index > max) in xas_next_marked()
1783 return xas_find_marked(xas, max, mark); in xas_next_marked()
1784 entry = xa_entry(xas->xa, node, offset); in xas_next_marked()
1786 return xas_find_marked(xas, max, mark); in xas_next_marked()
1811 #define xas_for_each(xas, entry, max) \ argument
1812 for (entry = xas_find(xas, max); entry; \
1813 entry = xas_next_entry(xas, max))
1829 #define xas_for_each_marked(xas, entry, max, mark) \ argument
1830 for (entry = xas_find_marked(xas, max, mark); entry; \
1831 entry = xas_next_marked(xas, max, mark))
1845 #define xas_for_each_conflict(xas, entry) \ argument
1846 while ((entry = xas_find_conflict(xas)))
1867 static inline void *xas_prev(struct xa_state *xas) in xas_prev() argument
1869 struct xa_node *node = xas->xa_node; in xas_prev()
1872 xas->xa_offset == 0)) in xas_prev()
1873 return __xas_prev(xas); in xas_prev()
1875 xas->xa_index--; in xas_prev()
1876 xas->xa_offset--; in xas_prev()
1877 return xa_entry(xas->xa, node, xas->xa_offset); in xas_prev()
1896 static inline void *xas_next(struct xa_state *xas) in xas_next() argument
1898 struct xa_node *node = xas->xa_node; in xas_next()
1901 xas->xa_offset == XA_CHUNK_MASK)) in xas_next()
1902 return __xas_next(xas); in xas_next()
1904 xas->xa_index++; in xas_next()
1905 xas->xa_offset++; in xas_next()
1906 return xa_entry(xas->xa, node, xas->xa_offset); in xas_next()