diff options
author | 2020-04-14 09:19:50 +0200 | |
---|---|---|
committer | 2020-04-14 09:19:50 +0200 | |
commit | a4721ced760684d1776bf31f7925aa41bb3f4846 (patch) | |
tree | a76e23b60ecceed68b5fa4904f677fe20e304b6e /lib/xarray.c | |
parent | drm/bridge: analogix_dp: Split bind() into probe() and real bind() (diff) | |
parent | Linux 5.7-rc1 (diff) | |
download | linux-dev-a4721ced760684d1776bf31f7925aa41bb3f4846.tar.xz linux-dev-a4721ced760684d1776bf31f7925aa41bb3f4846.zip |
Merge v5.7-rc1 into drm-misc-fixes
Start the new drm-misc-fixes cycle.
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Diffstat (limited to 'lib/xarray.c')
-rw-r--r-- | lib/xarray.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/xarray.c b/lib/xarray.c index 1d9fab7db8da..e9e641d3c0c3 100644 --- a/lib/xarray.c +++ b/lib/xarray.c @@ -970,7 +970,7 @@ void xas_pause(struct xa_state *xas) xas->xa_node = XAS_RESTART; if (node) { - unsigned int offset = xas->xa_offset; + unsigned long offset = xas->xa_offset; while (++offset < XA_CHUNK_SIZE) { if (!xa_is_sibling(xa_entry(xas->xa, node, offset))) break; @@ -1208,6 +1208,8 @@ void *xas_find_marked(struct xa_state *xas, unsigned long max, xa_mark_t mark) } entry = xa_entry(xas->xa, xas->xa_node, xas->xa_offset); + if (!entry && !(xa_track_free(xas->xa) && mark == XA_FREE_MARK)) + continue; if (!xa_is_node(entry)) return entry; xas->xa_node = xa_to_node(entry); @@ -1836,10 +1838,11 @@ static bool xas_sibling(struct xa_state *xas) struct xa_node *node = xas->xa_node; unsigned long mask; - if (!node) + if (!IS_ENABLED(CONFIG_XARRAY_MULTI) || !node) return false; mask = (XA_CHUNK_SIZE << node->shift) - 1; - return (xas->xa_index & mask) > (xas->xa_offset << node->shift); + return (xas->xa_index & mask) > + ((unsigned long)xas->xa_offset << node->shift); } /** |