[Mesa-dev] [RFC PATCH 01/14] anv/tests: Fix block_pool_no_free test.
Jason Ekstrand
jason at jlekstrand.net
Mon Dec 10 18:00:40 UTC 2018
On Fri, Dec 7, 2018 at 6:06 PM Rafael Antognolli <
rafael.antognolli at intel.com> wrote:
> The test was checking whether -1 was smaller than an unsigned int, which
> is always false. So it was exiting early and never running until the
> end, since it would reach the condition (thread_max == -1).
>
> However, just fixing that is not enough. The test is currently getting
> the highest block on each iteration, and then on the next one, until it
> reaches the end. But by that point, we wouldn't have looked at all
> blocks of all threads. For instance, for 3 threads and 4 blocks per
> thread, a situation like this (unlikely to happen):
>
> [Thread]: [Blocks]
> [0]: [0, 32, 64, 96]
> [1]: [128, 160, 192, 224]
> [2]: [256, 288, 320, 352]
>
> Would cause the test to iterate only over the thread number 2.
>
> The fix is to always grab the lowest block on each iteration, and assert
> that it is higher than the one from the previous iteration.
> ---
> src/intel/vulkan/tests/block_pool_no_free.c | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/src/intel/vulkan/tests/block_pool_no_free.c
> b/src/intel/vulkan/tests/block_pool_no_free.c
> index 17006dd3bc7..730297d4e36 100644
> --- a/src/intel/vulkan/tests/block_pool_no_free.c
> +++ b/src/intel/vulkan/tests/block_pool_no_free.c
> @@ -78,16 +78,16 @@ static void validate_monotonic(uint32_t **blocks)
> unsigned next[NUM_THREADS];
> memset(next, 0, sizeof(next));
>
> - int highest = -1;
> + uint32_t lowest = UINT32_MAX;
>
I think this should still be named "highest" since it is the highest thing
we've seen. Also, I kind-of think -1 still makes sense as a starting
value. Maybe we just need to make the comparison below explicitly signed
with a cast.
> while (true) {
> - /* First, we find which thread has the highest next element */
> - int thread_max = -1;
> + /* First, we find which thread has the lowest next element */
> + uint32_t thread_max = UINT32_MAX;
>
Yes, this loop needs to change. However, I think we should rename the
variables to thread_min and min_thread_idx.
> int max_thread_idx = -1;
> for (unsigned i = 0; i < NUM_THREADS; i++) {
> if (next[i] >= BLOCKS_PER_THREAD)
> continue;
>
> - if (thread_max < blocks[i][next[i]]) {
> + if (thread_max > blocks[i][next[i]]) {
> thread_max = blocks[i][next[i]];
> max_thread_idx = i;
> }
> @@ -96,13 +96,14 @@ static void validate_monotonic(uint32_t **blocks)
> /* The only way this can happen is if all of the next[] values are
> at
> * BLOCKS_PER_THREAD, in which case, we're done.
> */
> - if (thread_max == -1)
> + if (thread_max == UINT32_MAX)
> break;
>
> - /* That next element had better be higher than the previous highest
> */
> - assert(blocks[max_thread_idx][next[max_thread_idx]] > highest);
> + /* That next element had better be higher than the previous lowest
> */
> + assert(lowest == UINT32_MAX ||
> + blocks[max_thread_idx][next[max_thread_idx]] > lowest);
>
> - highest = blocks[max_thread_idx][next[max_thread_idx]];
> + lowest = blocks[max_thread_idx][next[max_thread_idx]];
> next[max_thread_idx]++;
> }
> }
> --
> 2.17.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20181210/bfc864b5/attachment.html>
More information about the mesa-dev
mailing list