From cd6f8b56fcb4a93b6c48fb3afeed700992b5b6d6 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Mon, 17 Oct 2011 01:55:22 -0700 Subject: [PATCH] remove bug in the initialization of heap_start_address --- drivers/net/mmnif.c | 57 +++++++++------------------------------------ 1 file changed, 11 insertions(+), 46 deletions(-) diff --git a/drivers/net/mmnif.c b/drivers/net/mmnif.c index 90f5a5fe..8c72600a 100644 --- a/drivers/net/mmnif.c +++ b/drivers/net/mmnif.c @@ -65,7 +65,7 @@ #define USE_CACHE 0 // set to 1 if you want to use the message passing buffer -#define MMNIF_USE_MPB 1 +#define MMNIF_USE_MPB 0 #if USE_CACHE && MMNIF_USE_MBP #error MBP version uses implicitly the cache @@ -275,14 +275,6 @@ static void mmnif_irqhandler(struct state* s); inline static void* memcpy_from_nc(void *dest, const void *src, size_t count) { -#if 0 - size_t i; - - for(i=0; idcount--; rb->dwrite = (rb->dwrite + 1) % MMNIF_MAX_DESCRIPTORS; rb->tail = (rb->tail + len); - RCCE_release_lock(dest-1); - return ret; } else if (rb->head > len) { rb->desc_table[rb->dwrite].stat = MMNIF_STATUS_PENDING; ret = (uint32_t) memblock; @@ -534,11 +514,6 @@ static uint32_t mmnif_rxbuff_alloc(uint8_t dest, uint16_t len) rb->dcount--; rb->dwrite = (rb->dwrite + 1) % MMNIF_MAX_DESCRIPTORS; rb->tail = len; - RCCE_release_lock(dest-1); - return ret; - } else { - RCCE_release_lock(dest-1); - return 0; } } else { if (rb->head - rb->tail > len) @@ -550,8 +525,6 @@ static uint32_t mmnif_rxbuff_alloc(uint8_t dest, uint16_t len) rb->dcount--; rb->dwrite = (rb->dwrite + 1) % MMNIF_MAX_DESCRIPTORS; rb->tail = (rb->tail + len); - RCCE_release_lock(dest-1); - return ret; } else if (rb->tail == rb->head) { if (MMNIF_RX_BUFFERLEN - rb->tail < len) { @@ -566,17 +539,13 @@ static uint32_t mmnif_rxbuff_alloc(uint8_t dest, uint16_t len) rb->dcount--; rb->dwrite = (rb->dwrite + 1) % MMNIF_MAX_DESCRIPTORS; rb->tail = (rb->tail + len); - RCCE_release_lock(dest-1); - return ret; - } else { - RCCE_release_lock(dest-1); - return 0; } } - } else { - RCCE_release_lock(dest-1); - return 0; } + +out: + RCCE_release_lock(dest-1); + return ret; } /* mmnif_commit_packet: this function set the state of the (in advance) @@ -701,9 +670,6 @@ realloc: goto realloc; } - if (!write_address) - goto drop_packet; - #if MMNIF_USE_MPB asm volatile (".byte 0x0f; .byte 0x0a;\n"); #endif @@ -711,7 +677,7 @@ realloc: for (q = p, i = 0; q != 0; q = q->next) { #if !MMNIF_USE_MBP - memcpy_to_nc((char*) write_address+ i, q->payload, q->len); + memcpy_to_nc((char*) write_address + i, q->payload, q->len); #else memcpy_put((char*) write_address + i, q->payload, q->len); #endif @@ -1018,9 +984,8 @@ err_t mmnif_init(struct netif *netif) // map physical address in the virtual address space #if USE_CACHE - //heap_start_address = map_region(0, heap_start_address, (MMNIF_CORES*heap_size) >> PAGE_SHIFT, MAP_KERNEL_SPACE|MAP_MPE); - //uint32_t n = (uint32_t) heap_start_address; heap_start_address = map_region(0, heap_start_address, (MMNIF_CORES * heap_size) >> PAGE_SHIFT, MAP_KERNEL_SPACE | MAP_NO_CACHE | MAP_MPE | MAP_WT); + uint32_t n = (uint32_t) heap_start_address; map_region(heap_start_address + (heap_size) * (own_ip_address - router_ip_address), n + (heap_size) * (own_ip_address - router_ip_address), header_size >> PAGE_SHIFT, MAP_KERNEL_SPACE | MAP_MPE | MAP_WT | MAP_REMAP); #else heap_start_address = (void*) map_region(0, (size_t) heap_start_address, (MMNIF_CORES * heap_size) >> PAGE_SHIFT, MAP_KERNEL_SPACE | MAP_NO_CACHE | MAP_MPE | MAP_WT); @@ -1030,7 +995,7 @@ err_t mmnif_init(struct netif *netif) #if MMNIF_USE_MPB mmnif->rx_heap = heap_start_address; - heap_start_address = heap_start_address - (own_ip_address - router_ip_address) * 0x2000; + heap_start_address = heap_start_address - (RC_MY_COREID/2 * 16*1024*1024 ) - (RC_MY_COREID%2 * 0x2000); DEBUGPRINTF("heap_start_address : %p\n", heap_start_address); #else mmnif->rx_heap = heap_start_address + (heap_size) * (own_ip_address - router_ip_address); @@ -1230,7 +1195,7 @@ anotherpacket: * and other higher layer can handle it */ p = pbuf_alloc(PBUF_RAW, length, PBUF_POOL); - if (!p) + if (BUILTIN_EXPECT(!p, 0)) { DEBUGPRINTF("mmnif_rx(): low on mem - packet dropped\n"); goto drop_packet;