From 521c3e1bc9fb9579def74c7d1ac9e2392a6d8cd8 Mon Sep 17 00:00:00 2001 From: Generic account for RWTHAachen Students Date: Mon, 6 Jun 2011 06:45:17 -0700 Subject: [PATCH 1/2] free allocated memory for iRCCE_MAIL_HEADER now; call iRCCE_finalize() in icc_halt() --- arch/x86/include/asm/iRCCE.h | 1 + arch/x86/scc/iRCCE_admin.c | 19 +++++++++++++++++++ arch/x86/scc/iRCCE_mailbox.c | 3 +-- arch/x86/scc/icc.c | 2 ++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/iRCCE.h b/arch/x86/include/asm/iRCCE.h index 5c0edfc3..7c071d5b 100644 --- a/arch/x86/include/asm/iRCCE.h +++ b/arch/x86/include/asm/iRCCE.h @@ -134,6 +134,7 @@ typedef struct _iRCCE_MAIL_TRASH_BIN { // // Initialize/Finalize functions: int iRCCE_init(void); +int iRCCE_finalize(void); // // Non-blocking send/recv functions: int iRCCE_isend(char *, ssize_t, int, iRCCE_SEND_REQUEST *); diff --git a/arch/x86/scc/iRCCE_admin.c b/arch/x86/scc/iRCCE_admin.c index ba465765..2a28f09e 100644 --- a/arch/x86/scc/iRCCE_admin.c +++ b/arch/x86/scc/iRCCE_admin.c @@ -109,4 +109,23 @@ int iRCCE_init(void) { return (iRCCE_SUCCESS); } +//-------------------------------------------------------------------------------------- +// FUNCTION: iRCCE_finalize +//-------------------------------------------------------------------------------------- +// finalize the library +//-------------------------------------------------------------------------------------- +int iRCCE_finalize(void) { + // empty iRCCE_mail_garbage + iRCCE_MAIL_HEADER* run; + iRCCE_MAIL_HEADER* erase_header; + + for( run = iRCCE_mail_garbage.first; run != NULL; ) { + erase_header = run; + run = run->next; + kfree( erase_header, sizeof(iRCCE_MAIL_HEADER) ); + } + + iRCCE_mail_garbage.first = iRCCE_mail_garbage.last = NULL; + return iRCCE_SUCCESS; +} #endif diff --git a/arch/x86/scc/iRCCE_mailbox.c b/arch/x86/scc/iRCCE_mailbox.c index 4c235da9..4680a34d 100644 --- a/arch/x86/scc/iRCCE_mailbox.c +++ b/arch/x86/scc/iRCCE_mailbox.c @@ -119,8 +119,7 @@ static int iRCCE_mail_fetch( // routine to check for new mail in mailboxes //------------------------------------------------------------------------------ static int iRCCE_mailbox_check() { - int i, j; - int tmp; + int i; for( i=0; i Date: Mon, 6 Jun 2011 08:32:59 -0700 Subject: [PATCH 2/2] little memory optimization in fetch-function --- arch/x86/scc/iRCCE_mailbox.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/arch/x86/scc/iRCCE_mailbox.c b/arch/x86/scc/iRCCE_mailbox.c index 4680a34d..8b14480a 100644 --- a/arch/x86/scc/iRCCE_mailbox.c +++ b/arch/x86/scc/iRCCE_mailbox.c @@ -33,6 +33,10 @@ #ifdef CONFIG_ROCKCREEK #include +// forward declaration +static int iRCCE_mailbox_close_one(int rank, int check); + + //------------------------------------------------------------------------------ // FUNCTION: iRCCE_mailbox_print_header //------------------------------------------------------------------------------ @@ -90,8 +94,8 @@ static int iRCCE_mail_fetch( // check if received a last-mail if( header->tag == iRCCE_LAST_MAIL ) { iRCCE_last_mail[rank] = 1; - iRCCE_mailbox_close( rank ); // we can close respective mailbox - kfree( header, sizeof(iRCCE_MAIL_HEADER) ); + iRCCE_mailbox_close_one( rank, 0 ); // we can close respective mailbox + iRCCE_mail_release( &header ); } else { // check mail priority @@ -316,12 +320,12 @@ int iRCCE_mailbox_flush(void) { //------------------------------------------------------------------------------ // routine to close one mailbox //------------------------------------------------------------------------------ -static int iRCCE_mailbox_close_one(int rank) { +static int iRCCE_mailbox_close_one(int rank, int check) { RCCE_acquire_lock( RCCE_IAM ); // check if it contains new mail RC_cache_invalidate(); - if( iRCCE_mailbox_recv[rank]->sent ) { + if( check && iRCCE_mailbox_recv[rank]->sent ) { iRCCE_mail_fetch(rank); } @@ -351,11 +355,11 @@ int iRCCE_mailbox_close(int rank) { if( rank == iRCCE_MAILBOX_ALL ) { int i; for( i=0; i