[Cbe-oss-dev] [PATCH] libspe2: Add test for NOSCHED SPE context
Kazunori Asayama
asayama at sm.sony.co.jp
Wed Sep 3 16:27:10 EST 2008
Kazunori Asayama wrote:
> This patch provides a test for NOSCHED SPE context.
>
> Signed-off-by: Kazunori Asayama <asayama at sm.sony.co.jp>
OK to apply?
>
> ---
> tests/libspe2.run/Makefile | 3
> tests/libspe2.run/test_nosched_context.c | 109 +++++++++++++++++++++++++++++++
> 2 files changed, 112 insertions(+)
>
> Index: b/tests/libspe2.run/test_nosched_context.c
> ===================================================================
> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
> +++ b/tests/libspe2.run/test_nosched_context.c 2008-08-13 18:49:41.000000000 +0900
> @@ -0,0 +1,109 @@
> +/*
> + * libspe2 - A wrapper library to adapt the JSRE SPU usage model to SPUFS
> + *
> + * Copyright (C) 2008 Sony Computer Entertainment Inc.
> + * Copyright 2008 Sony Corp.
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +/* This test checks if multiple SPE contexts can be created and be run
> + * at the same time correctly.
> + */
> +
> +#include <stdio.h>
> +#include <stdint.h>
> +#include <errno.h>
> +#include <string.h>
> +#include <pthread.h>
> +
> +#include "ppu_libspe2_test.h"
> +
> +extern spe_program_handle_t spu_arg;
> +
> +static int num_spes;
> +
> +static void *spe_thread_proc(void *arg)
> +{
> + spe_context_ptr_t spe;
> + unsigned int entry = SPE_DEFAULT_ENTRY;
> + int ret;
> + spe_stop_info_t stop_info;
> +
> + /* synchronize all threads to check whether the library is
> + * thread-safe.
> + */
> + global_sync(num_spes);
> +
> + spe = spe_context_create(SPE_NOSCHED, 0);
> + if (!spe) {
> + eprintf("spe_context_create(0, NULL): %s\n", strerror(errno));
> + fatal();
> + }
> +
> + if (spe_program_load(spe, &spu_arg)) {
> + eprintf("spe_program_load(%p, &spu_arg): %s\n", spe, strerror(errno));
> + fatal();
> + }
> +
> + ret = spe_context_run(spe, &entry, 0,
> + (void*)RUN_ARGP_DATA, (void*)RUN_ENVP_DATA, &stop_info);
> + if (ret == 0) {
> + if (check_exit_code(&stop_info, 0)) {
> + fatal();
> + }
> + }
> + else {
> + eprintf("spe_context_run(%p, ...): %s\n", spe, strerror(errno));
> + fatal();
> + }
> +
> + ret = spe_context_destroy(spe);
> + if (ret) {
> + eprintf("spe_context_destroy(%p): %s\n", spe, strerror(errno));
> + fatal();
> + }
> +
> + return NULL;
> +}
> +
> +static int test(int argc, char **argv)
> +{
> + int ret;
> +
> + num_spes = spe_cpu_info_get(SPE_COUNT_PHYSICAL_SPES, -1);
> + if (num_spes <= 0) {
> + eprintf("Could not get # of physical SPEs\n");
> + fatal();
> + }
> +
> + /* this test case works only as root */
> + if (getuid() == 0) {
> + ret = ppe_thread_group_run(num_spes, spe_thread_proc, NULL, NULL);
> + if (ret) {
> + fatal();
> + }
> + }
> + else {
> + eprintf("Root privilege is required. Ignored.\n");
> + }
> +
> + return 0;
> +}
> +
> +int main(int argc, char **argv)
> +{
> + return ppu_main(argc, argv, test);
> +}
> Index: b/tests/libspe2.run/Makefile
> ===================================================================
> --- a/tests/libspe2.run/Makefile 2008-08-13 17:55:38.000000000 +0900
> +++ b/tests/libspe2.run/Makefile 2008-08-13 17:55:47.000000000 +0900
> @@ -30,6 +30,7 @@ main_progs = \
> test_run_image.elf \
> test_stop.elf \
> test_multiple_context.elf \
> + test_nosched_context.elf \
> test_single_gang_context.elf \
> test_context_create_error.elf \
> test_run_error.elf \
> @@ -61,6 +62,8 @@ test_stop.elf: spu_stop.embed.o
>
> test_multiple_context.elf: spu_arg.embed.o
>
> +test_nosched_context.elf: spu_arg.embed.o
> +
> test_single_gang_context.elf: spu_arg.embed.o
>
> test_affinity.elf: spu_arg.embed.o
>
>
> _______________________________________________
> cbe-oss-dev mailing list
> cbe-oss-dev at ozlabs.org
> https://ozlabs.org/mailman/listinfo/cbe-oss-dev
>
>
>
--
(ASAYAMA Kazunori
(asayama at sm.sony.co.jp))
t
More information about the cbe-oss-dev
mailing list