diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h index 6a18464b..b1845e24 100644 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -55,6 +55,7 @@ inline static uint32_t irq_nested_disable(void) { asm volatile("pushf; cli; popl %0": "=r"(flags) : : "memory"); if (flags & (1 << 9)) return 1; + return 0; } @@ -71,8 +72,9 @@ inline static void irq_enable(void) { * @param flags Flags to set. Could be the old ones you got from irq_nested_disable. */ inline static void irq_nested_enable(uint32_t flags) { - if (flags) + if (flags) { irq_enable(); + } } #ifdef __cplusplus diff --git a/arch/x86/scc/iRCCE_mailbox.c b/arch/x86/scc/iRCCE_mailbox.c index 4e42b262..3c13b801 100644 --- a/arch/x86/scc/iRCCE_mailbox.c +++ b/arch/x86/scc/iRCCE_mailbox.c @@ -393,6 +393,7 @@ int iRCCE_mail_send( int dest // UE that will receive the header ) { uint32_t flags; + int i; // check for an attempt to send to own mailbox if( dest == RCCE_IAM ) { @@ -402,16 +403,10 @@ int iRCCE_mail_send( // if dest mailbox is full, check for incoming mail RC_cache_invalidate(); while( iRCCE_mailbox_send[dest]->sent ) { - iRCCE_mailbox_check(); - NOP8; - NOP8; - NOP8; + //iRCCE_mailbox_check(); RC_cache_invalidate(); } - /* disable interrupts */ - flags = irq_nested_disable(); - // check if mailbox is closed RCCE_acquire_lock( dest ); RC_cache_invalidate(); @@ -420,6 +415,9 @@ int iRCCE_mail_send( return iRCCE_MAILBOX_CLOSED; } + /* disable interrupts */ +// flags = irq_nested_disable(); + // prepare header iRCCE_MAIL_HEADER header = { RCCE_IAM, size, tag, NULL, prio, RCCE_FLAG_UNSET, RCCE_FLAG_UNSET, @@ -441,10 +439,10 @@ int iRCCE_mail_send( *(int *)RCCE_fool_write_combine_buffer = 1; RC_cache_invalidate(); - RCCE_release_lock( dest ); - /* enable interrupts */ - irq_nested_enable(flags); +// irq_nested_enable(flags); + + RCCE_release_lock( dest ); return iRCCE_SUCCESS; } diff --git a/arch/x86/scc/icc.c b/arch/x86/scc/icc.c index f8cab40b..f3c314ec 100644 --- a/arch/x86/scc/icc.c +++ b/arch/x86/scc/icc.c @@ -265,7 +265,7 @@ int icc_irq_ping() static inline void icc_mail_check_tag(iRCCE_MAIL_HEADER* mail) { char* recv_buffer; - static int count = 0; + static int i = 0; if( !mail ) { kprintf( "NO MAIL + "); @@ -280,8 +280,8 @@ static inline void icc_mail_check_tag(iRCCE_MAIL_HEADER* mail) { break; case PING_REQ: -// count++; - + ++i; + if( !(i%1000) ) kprintf( "PingReq%d ", i ); iRCCE_mail_send(0, PING_RESP, 0, NULL, mail->source); break; @@ -434,11 +434,11 @@ int icc_mail_noise() { int flags; // leave function if not participating -/* if( !((my_ue == 1) || (my_ue == 2) || (my_ue == CORE_A) || (my_ue == CORE_B)) ) { + if( (my_ue == CORE_A) /*|| (my_ue == CORE_B)*/ ) { kprintf( "mail_noise: leaving" ); return -1; } -*/ + kprintf( "Hello from icc_mail_noise: my_ue = %d\n", my_ue ); kprintf( "num_ues = %d\n", num_ranks ); @@ -447,7 +447,7 @@ int icc_mail_noise() { if( !(i%1000) ) kprintf( "%d ", i ); /* send a mail to each UE */ for( j=0; j