On Fri, 28 Jun 2024 11:46:11 +0100
Vincent Donnefort <vdonnef...@google.com> wrote:

> diff --git a/tools/testing/selftests/ring-buffer/map_test.c 
> b/tools/testing/selftests/ring-buffer/map_test.c
> index a9006fa7097e..4bb0192e43f3 100644
> --- a/tools/testing/selftests/ring-buffer/map_test.c
> +++ b/tools/testing/selftests/ring-buffer/map_test.c
> @@ -228,6 +228,20 @@ TEST_F(map, data_mmap)
>       data = mmap(NULL, data_len, PROT_READ, MAP_SHARED,
>                   desc->cpu_fd, meta_len);
>       ASSERT_EQ(data, MAP_FAILED);
> +
> +     /* Verify meta-page padding */
> +     if (desc->meta->meta_page_size > getpagesize()) {
> +             void *addr;
> +
> +             data_len = desc->meta->meta_page_size;
> +             data = mmap(NULL, data_len,
> +                         PROT_READ, MAP_SHARED, desc->cpu_fd, 0);
> +             ASSERT_NE(data, MAP_FAILED);
> +
> +             addr = (void *)((unsigned long)data + getpagesize());
> +             ASSERT_EQ(*((int *)addr), 0);

Should we make this a test that the entire page is zero?

                for (int i = desc->meta->meta_struct_len; i < 
desc->meta->meta_page_size; i += sizeof(int))
                        ASSERT_EQ(((int *)data)[i], 0);

?

> +             munmap(data, data_len);
> +     }
>  }

Also, looking at the init, if for some reason (I highly doubt it may
happen) that the meta_struct_len becomes bigger than page_size, we should
update the init section to:

        /* Handle the case where meta_struct_len is greater than page size */
        if (page_size < desc->meta->meta_struct_len) {
                /* meta_page_size is >= meta_struct_len */
                page_size = desc->meta->meta_page_size;
                munmap(desc->meta, page_size);
                map = mmap(NULL, page_size, PROT_READ, MAP_SHARED, 
desc->cpu_fd, 0);
                if (map == MAP_FAILED)
                        return -errno;
                desc->meta = (struct trace_buffer_meta *)map;
        }

-- Steve

Reply via email to