[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