[PATCH 4/4] drm: add tests/amdgpu (v2)

Emil Velikov emil.l.velikov at gmail.com
Wed Apr 29 06:15:36 PDT 2015


Hi Alex,

On 24 April 2015 at 16:13, Alex Deucher <alexdeucher at gmail.com> wrote:
> This adds some basic unit tests for the new amdgpu driver.
>
> v2: use common util_math.h
>
Can I put forward a few suggestions:
 - Can we use calloc over malloc. It will likely save you/others some
headaches in the future.
 - Use capital letters for header guards
 - Annotate the CU_SuiteInfo/CU_TestInfo as static.

> Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
> ---
>  configure.ac                |  23 ++
>  tests/Makefile.am           |   6 +
>  tests/amdgpu/Makefile.am    |  24 ++
>  tests/amdgpu/amdgpu_test.c  | 241 +++++++++++++
>  tests/amdgpu/amdgpu_test.h  | 119 +++++++
>  tests/amdgpu/basic_tests.c  | 676 ++++++++++++++++++++++++++++++++++++
>  tests/amdgpu/bo_tests.c     | 151 ++++++++
>  tests/amdgpu/cs_tests.c     | 319 +++++++++++++++++
>  tests/amdgpu/uvd_messages.h | 813 ++++++++++++++++++++++++++++++++++++++++++++
>  tests/kmstest/main.c        |   1 +
>  10 files changed, 2373 insertions(+)
>  create mode 100644 tests/amdgpu/Makefile.am
>  create mode 100644 tests/amdgpu/amdgpu_test.c
>  create mode 100644 tests/amdgpu/amdgpu_test.h
>  create mode 100644 tests/amdgpu/basic_tests.c
>  create mode 100644 tests/amdgpu/bo_tests.c
>  create mode 100644 tests/amdgpu/cs_tests.c
>  create mode 100644 tests/amdgpu/uvd_messages.h
>

> diff --git a/tests/amdgpu/Makefile.am b/tests/amdgpu/Makefile.am
> new file mode 100644
> index 0000000..ba7339d
> --- /dev/null
> +++ b/tests/amdgpu/Makefile.am
> @@ -0,0 +1,24 @@

> +LDADD = $(top_builddir)/libdrm.la \
> +       $(top_builddir)/amdgpu/libdrm_amdgpu.la
> +
...
> +amdgpu_test_LDFLAGS  = $(CUNIT_LIBS)
LDFLAGS should not be used for LIBS (normally) - please fold it with
LDADD above;

amdgpu_test_LDADD = \
$(top_builddir)/libdrm.la \
$(top_builddir)/amdgpu/libdrm_amdgpu.la \
$(CUNIT_LIBS)

> +amdgpu_test_SOURCES = \
> +       amdgpu_test.c \
> +       basic_tests.c \
> +       bo_tests.c \
> +       cs_tests.c
Please add the headers in the list.
amdgpu_test.h
uvd_messages.h

> diff --git a/tests/amdgpu/amdgpu_test.c b/tests/amdgpu/amdgpu_test.c
> new file mode 100644
> index 0000000..fc14b70
> --- /dev/null
> +++ b/tests/amdgpu/amdgpu_test.c
> @@ -0,0 +1,241 @@

> +int drm_amdgpu[MAX_CARDS_SUPPORTED];
We're using only a single one in the tests. Why the array ?

> +int main(int argc, char **argv)
> +{

> +       for (i = 0; i < MAX_CARDS_SUPPORTED; i++)
> +               drm_amdgpu[i] = 0;
0 is a valid fd number.

> +       /* Try to open all possible radeon connections
> +        * Right now: Open only the 0.
> +        */
> +       printf("Try to open the card 0..\n");
> +       drm_amdgpu[0] = open("/dev/dri/card0", O_RDWR | O_CLOEXEC);
> +
> +       if (drm_amdgpu[0] == 1) {
1 is a valid fd number. Perhaps < 0 ?

> +       /** Display version of DRM driver */
> +       drmVersionPtr retval;
> +       drm_version_t *version = drmMalloc(sizeof(*version));
> +
> +       version->name_len    = 0;
> +       version->name        = NULL;
> +       version->date_len    = 0;
> +       version->date        = NULL;
> +       version->desc_len    = 0;
> +       version->desc        = NULL;
> +
> +       if (drmIoctl(drm_amdgpu[0], DRM_IOCTL_VERSION, version)) {
> +               perror("Could not get DRM driver version\n");
> +               drmFree(version);
> +               exit(EXIT_FAILURE);
> +       }
> +
> +       if (version->name_len)
> +               version->name    = drmMalloc(version->name_len + 1);
> +       if (version->date_len)
> +               version->date    = drmMalloc(version->date_len + 1);
> +       if (version->desc_len)
> +               version->desc    = drmMalloc(version->desc_len + 1);
> +
> +       if (drmIoctl(drm_amdgpu[0], DRM_IOCTL_VERSION, version)) {
> +               perror("Could not get information about DRM driver");
> +               drmFree(version);
> +               exit(EXIT_FAILURE);
> +       }
> +
> +       /* The results might not be null-terminated strings. Add zero */
> +       if (version->name_len)
> +               version->name[version->name_len] = '\0';
> +       if (version->date_len)
> +               version->date[version->date_len] = '\0';
> +       if (version->desc_len)
> +               version->desc[version->desc_len] = '\0';
> +
> +       printf("DRM Driver: Name: [%s] : Date [%s] : Description [%s]\n",
> +                       version->name, version->date, version->desc);
> +
Please use drmGetVersion/drmFreeVersion rather than open coding it.
This implementation leaks memory.

> +       drmFree(version);
> +
> +       /* Initialize test suites to run */
> +
> +       /* initialize the CUnit test registry */
> +       if (CUE_SUCCESS != CU_initialize_registry())
Swap CUE_SUCCESS and CU_initialize_registry() ?

> +               return CU_get_error();
Close the fd before return/exit(). The rest of the could use it as well.

> +
> +       /* Register suites. */
> +       if (CU_register_suites(suites) != CUE_SUCCESS) {
> +               fprintf(stderr, "suite registration failed - %s\n",
> +                               CU_get_error_msg());
Not familiar with CUnit, but looks like we should use
CU_cleanup_registry() here. Same for the rest of the file ?

> +               exit(EXIT_FAILURE);
> +       }


> diff --git a/tests/amdgpu/basic_tests.c b/tests/amdgpu/basic_tests.c
> new file mode 100644
> index 0000000..c53f6a0
> --- /dev/null
> +++ b/tests/amdgpu/basic_tests.c

> +#define SDMA_PKT_HEADER_op_offset 0
> +#define SDMA_PKT_HEADER_op_mask   0x000000FF
> +#define SDMA_PKT_HEADER_op_shift  0
> +#define SDMA_PKT_HEADER_OP(x) (((x) & SDMA_PKT_HEADER_op_mask) << SDMA_PKT_HEADER_op_shift)
Unused ?

> +static void amdgpu_command_submission_sdma_const_fill(void)
> +{

> +       pm4 = malloc(pm4_dw * 4);
pm4 = calloc(pm4_dw, sizeof(*pm4));

> +       loop = 0;
> +       while(loop < 3) {
Bikeshed: Most of the patch uses for loops

> +}

> +static void amdgpu_command_submission_sdma_copy_linear(void)
> +{
Same suggestions as amdgpu_command_submission_sdma_const_fill

Cheers
Emil


More information about the dri-devel mailing list