RCCE_shmalloc returns only a physical address => we have to map this region into the virtual address space
This commit is contained in:
parent
af6ef23085
commit
2605ce5b34
4 changed files with 21 additions and 9 deletions
|
@ -84,7 +84,7 @@ static void intr_handler(struct state *s)
|
||||||
int tmp, z;
|
int tmp, z;
|
||||||
|
|
||||||
#ifdef CONFIG_LWIP
|
#ifdef CONFIG_LWIP
|
||||||
// mmnif_irqhandler();
|
mmnif_irqhandler();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
z = Z_PID(RC_COREID[my_ue]);
|
z = Z_PID(RC_COREID[my_ue]);
|
||||||
|
|
|
@ -47,6 +47,7 @@ extern HANDLE hProc;
|
||||||
|
|
||||||
#include <metalsvm/semaphore.h>
|
#include <metalsvm/semaphore.h>
|
||||||
#include <metalsvm/spinlock.h>
|
#include <metalsvm/spinlock.h>
|
||||||
|
#include <metalsvm/page.h>
|
||||||
|
|
||||||
#include <asm/RCCE.h>
|
#include <asm/RCCE.h>
|
||||||
#include <asm/RCCE_lib.h>
|
#include <asm/RCCE_lib.h>
|
||||||
|
@ -715,7 +716,11 @@ err_t mmnif_init(struct netif* netif)
|
||||||
/* Alloc and clear shared memory for rx_buff
|
/* Alloc and clear shared memory for rx_buff
|
||||||
*/
|
*/
|
||||||
mpb_size = (sizeof(mm_rx_buffer_t) + MMNIF_RX_BUFFERLEN);
|
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);
|
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);
|
mmnif->rx_buff = mpb_start_address + (mpb_size) * (own_ip_address - router_ip_address);
|
||||||
if (!(mpb_start_address))
|
if (!(mpb_start_address))
|
||||||
|
@ -1103,6 +1108,8 @@ int mmnif_open(void)
|
||||||
*/
|
*/
|
||||||
int mmnif_close(void)
|
int mmnif_close(void)
|
||||||
{
|
{
|
||||||
|
size_t phyaddr;
|
||||||
|
|
||||||
mmnif_t* mmnif;
|
mmnif_t* mmnif;
|
||||||
|
|
||||||
if (!mmnif_dev)
|
if (!mmnif_dev)
|
||||||
|
@ -1119,7 +1126,12 @@ int mmnif_close(void)
|
||||||
|
|
||||||
kfree(mmnif->tx_buff[0],MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN);
|
kfree(mmnif->tx_buff[0],MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN);
|
||||||
kfree(mmnif_dev,sizeof(mmnif_t));
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,7 +153,7 @@ int network_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
//mmnif_open();
|
mmnif_open();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// start echo and ping server
|
// start echo and ping server
|
||||||
|
@ -169,7 +169,7 @@ int network_shutdown(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_LWIP
|
#ifdef CONFIG_LWIP
|
||||||
#ifdef CONFIG_ROCKCREEK
|
#ifdef CONFIG_ROCKCREEK
|
||||||
//mmnif_close();
|
mmnif_close();
|
||||||
#elif defined(CONFIG_PCI)
|
#elif defined(CONFIG_PCI)
|
||||||
dhcp_release(default_netif);
|
dhcp_release(default_netif);
|
||||||
dhcp_stop(default_netif);
|
dhcp_stop(default_netif);
|
||||||
|
|
|
@ -131,7 +131,7 @@ static int svm_test(void *arg)
|
||||||
my_ue = RCCE_ue();
|
my_ue = RCCE_ue();
|
||||||
num_ues = RCCE_num_ues();
|
num_ues = RCCE_num_ues();
|
||||||
|
|
||||||
#if 0
|
#if 1
|
||||||
if (!my_ue) {
|
if (!my_ue) {
|
||||||
// allocate and initialize SVM region
|
// allocate and initialize SVM region
|
||||||
A[0] = (int*) kmalloc(3*N*N*sizeof(int));
|
A[0] = (int*) kmalloc(3*N*N*sizeof(int));
|
||||||
|
@ -399,14 +399,14 @@ int test_init(void)
|
||||||
// create_kernel_task(NULL,client_task,NULL);
|
// create_kernel_task(NULL,client_task,NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//create_kernel_task(NULL, foo, "Hello from foo1");
|
create_kernel_task(NULL, foo, "Hello from foo1");
|
||||||
//create_kernel_task(NULL, join_test, NULL);
|
create_kernel_task(NULL, join_test, NULL);
|
||||||
//create_kernel_task(NULL, producer, NULL);
|
//create_kernel_task(NULL, producer, NULL);
|
||||||
//create_kernel_task(NULL, consumer, NULL);
|
//create_kernel_task(NULL, consumer, NULL);
|
||||||
//create_kernel_task(NULL, mail_ping, 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/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/jacobi", argv);
|
//create_user_task(NULL, "/bin/jacobi", argv);
|
||||||
//create_user_task(NULL, "/bin/server", server_argv);
|
//create_user_task(NULL, "/bin/server", server_argv);
|
||||||
|
|
Loading…
Add table
Reference in a new issue