diff --git a/arch/x86/scc/icc.c b/arch/x86/scc/icc.c index 79ca128e..a1254138 100644 --- a/arch/x86/scc/icc.c +++ b/arch/x86/scc/icc.c @@ -84,7 +84,7 @@ static void intr_handler(struct state *s) int tmp, z; #ifdef CONFIG_LWIP -// mmnif_irqhandler(); + mmnif_irqhandler(); #endif z = Z_PID(RC_COREID[my_ue]); diff --git a/drivers/net/mmnif.c b/drivers/net/mmnif.c index 6d805772..1cb8b779 100644 --- a/drivers/net/mmnif.c +++ b/drivers/net/mmnif.c @@ -47,6 +47,7 @@ extern HANDLE hProc; #include #include +#include #include #include @@ -715,7 +716,11 @@ err_t mmnif_init(struct netif* netif) /* Alloc and clear shared memory for rx_buff */ mpb_size = (sizeof(mm_rx_buffer_t) + MMNIF_RX_BUFFERLEN); + // align mpb size to the granularity of a page size + mpb_size = (mpb_size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1); mpb_start_address = RCCE_shmalloc(mpb_size*MMNIF_CORES); + // map physical address in the virtual address space + mpb_start_address = map_region(0, mpb_start_address, mpb_size >> PAGE_SHIFT, MAP_KERNEL_SPACE|MAP_NO_CACHE); mmnif->rx_buff = mpb_start_address + (mpb_size) * (own_ip_address - router_ip_address); if (!(mpb_start_address)) @@ -1103,6 +1108,8 @@ int mmnif_open(void) */ int mmnif_close(void) { + size_t phyaddr; + mmnif_t* mmnif; if (!mmnif_dev) @@ -1119,7 +1126,12 @@ int mmnif_close(void) kfree(mmnif->tx_buff[0],MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); kfree(mmnif_dev,sizeof(mmnif_t)); - RCCE_shfree(mpb_start_address); + + // determine physical address + phyaddr = virt_to_phys(mpb_start_address); + // unmap shared memory regeion + unmap_region(mpb_start_address, mpb_size >> PAGE_SHIFT); + RCCE_shfree(phyaddr); return NULL; } diff --git a/kernel/init.c b/kernel/init.c index 462578e1..a29807ac 100644 --- a/kernel/init.c +++ b/kernel/init.c @@ -153,7 +153,7 @@ int network_init(void) } } #else - //mmnif_open(); + mmnif_open(); #endif // start echo and ping server @@ -169,7 +169,7 @@ int network_shutdown(void) { #ifdef CONFIG_LWIP #ifdef CONFIG_ROCKCREEK - //mmnif_close(); + mmnif_close(); #elif defined(CONFIG_PCI) dhcp_release(default_netif); dhcp_stop(default_netif); diff --git a/kernel/tests.c b/kernel/tests.c index f1b43576..efa081b5 100644 --- a/kernel/tests.c +++ b/kernel/tests.c @@ -131,7 +131,7 @@ static int svm_test(void *arg) my_ue = RCCE_ue(); num_ues = RCCE_num_ues(); -#if 0 +#if 1 if (!my_ue) { // allocate and initialize SVM region A[0] = (int*) kmalloc(3*N*N*sizeof(int)); @@ -399,14 +399,14 @@ int test_init(void) // create_kernel_task(NULL,client_task,NULL); #endif - //create_kernel_task(NULL, foo, "Hello from foo1"); - //create_kernel_task(NULL, join_test, NULL); + create_kernel_task(NULL, foo, "Hello from foo1"); + 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, svm_test, NULL); + //create_kernel_task(NULL, svm_test, 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); //create_user_task(NULL, "/bin/server", server_argv);