From f4443e6761d1297978582eb42e8eb7b3974a9e75 Mon Sep 17 00:00:00 2001 From: Simon Pickartz Date: Fri, 1 Jul 2011 15:41:41 +0200 Subject: [PATCH] new mail_pingpong test --- arch/x86/include/asm/icc.h | 5 +++ arch/x86/scc/icc.c | 67 +++++++++++++++++++++++--------------- kernel/tests.c | 11 ++----- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/arch/x86/include/asm/icc.h b/arch/x86/include/asm/icc.h index cb806761..191a0566 100644 --- a/arch/x86/include/asm/icc.h +++ b/arch/x86/include/asm/icc.h @@ -39,6 +39,11 @@ typedef struct { extern bootinfo_t* bootinfo; +enum icc_mail_requests { + PING_REQ=1, + PING_RESP, +}; + /* #define ICC_TYPE_IP (1 << 0) #define ICC_TYPE_SVM (1 << 1) diff --git a/arch/x86/scc/icc.c b/arch/x86/scc/icc.c index b2a517b9..3b7a9853 100644 --- a/arch/x86/scc/icc.c +++ b/arch/x86/scc/icc.c @@ -210,46 +210,59 @@ int icc_halt(void) return 0; } -#define MAIL_MSG_SIZE 20 +#define ROUNDS 1000 int icc_mail_ping( void ) { uint32_t flags; uint64_t timer; - int remote_rank = (my_ue+1)%2; + int rem_rank = (my_ue+1)%2; + int i; + iRCCE_MAIL_HEADER* recv_header = NULL; - char send_buffer[MAIL_MSG_SIZE]; - int length = MAIL_MSG_SIZE; - - if( my_ue ) { - return 0; - } - kprintf( "Hello from mail_ping ... \n" ); // disable interrupts flags = irq_nested_disable(); - - // start timer - timer = rdtsc(); - - // start anylength send - iRCCE_isend( send_buffer, -length, remote_rank, NULL ); - - // wait for response - iRCCE_MAIL_HEADER* mail; - do { - iRCCE_mail_recv( &mail ); - } while( !mail ); - // stop timer + for( i=0; itag == 2 ) { - kprintf( "Response received in %d ticks!\n", timer ); - } - else { - kprintf( "Response didn't arrive!\n" ); + if( my_rank == 0 ) { + printf( "mail_pingpong needs in average %.3f µsec (%d ticks)!\n", + timer/(2.0*ROUNDS*533), timer/(2*ROUNDS) ); } irq_nested_enable(flags); diff --git a/kernel/tests.c b/kernel/tests.c index 9ef0a393..e3528a7b 100644 --- a/kernel/tests.c +++ b/kernel/tests.c @@ -88,13 +88,8 @@ static int STDCALL foo(void* arg) #ifdef CONFIG_ROCKCREEK int STDCALL mail_ping(void* arg) { - int i; - - for(i=0; i<20; i++) { icc_mail_ping(); - //icc_halt(); - udelay(500000); - } + icc_halt(); return 0; } @@ -135,9 +130,9 @@ int test_init(void) //create_kernel_task(NULL, join_test, NULL); //create_kernel_task(NULL, producer, NULL); //create_kernel_task(NULL, consumer, NULL); - //create_kernel_task(NULL, mail_ping, NULL); + create_kernel_task(NULL, mail_ping, NULL); //create_user_task(NULL, "/bin/hello", argv); - create_user_task(NULL, "/bin/tests", argv); + //create_user_task(NULL, "/bin/tests", argv); //create_user_task(NULL, "/bin/jacobi", argv); //create_user_task(NULL, "/bin/jacobi", argv);