From fef15b4bb88c61248393b93d13b1f79bb628def0 Mon Sep 17 00:00:00 2001 From: Christophe Fontaine Date: Sat, 9 Apr 2016 12:38:49 +0900 Subject: Add support for AArch32 gcc version 4.9.2 (Raspbian 4.9.2-10) Tested on Linux raspberrypi 4.4.6-v7+ #875 SMP Tue Apr 12 16:33:02 BST 2016 armv7l GNU/Linux CPUs may be little or big endian, detect with gcc flags, not the processor architecture Add a new flag $(PLATFORM)_uses_openssl which allows to disable the link with openssl lib. vlib/vlib/threads.c: startup.conf must: - specify the heapsize as we don't have hugepages on raspbian cpu { main-core 3 } heapsize 64M Corrects in various files the assumption uword == u64 and replaces 'u64' cast with 'pointer_to_uword' and 'uword_to_pointer' where appropriate. 256 CPUs may create an OOM when testing with small memory footprint ( heapsize 64M ), allows the number of VLIB_MAX_CPUS to be set in platforms/*.mk vppinfra/vppinfra/longjmp.S: ARM - copy r1 (1st parameter of the setjmp call) to r0 (return value) vppinfra/vppinfra/time.h: On ARMv7 in AArch32 mode, we can access to a 64bit register to retreive the cycles count. gcc on rpi only declare ARM_ARCH 6. Override this info, and check if it is possible to use 'mrrc'. /!\ the time function will NOT work without allowing the user mode access to the PMU. You may download the source of the kmod here: https://github.com/christophefontaine/arm_rdtsc Change-Id: I8142606436d9671a184133b935398427f08a8bd2 Signed-off-by: Christophe Fontaine --- vlib-api/vlibmemory/memory_vlib.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'vlib-api') diff --git a/vlib-api/vlibmemory/memory_vlib.c b/vlib-api/vlibmemory/memory_vlib.c index 7ba76ec49d1..107fddc31ad 100644 --- a/vlib-api/vlibmemory/memory_vlib.c +++ b/vlib-api/vlibmemory/memory_vlib.c @@ -1135,8 +1135,8 @@ static void vl_api_rpc_call_t_handler (vl_api_rpc_call_t * mp) if (mp->need_barrier_sync) vlib_worker_thread_barrier_sync (vm); - fp = (void *)(mp->function); - rv = (*fp)(mp->data); + fp = uword_to_pointer(mp->function, int(*)(void *)); + rv = fp(mp->data); if (mp->need_barrier_sync) vlib_worker_thread_barrier_release (vm); @@ -1174,7 +1174,7 @@ void vl_api_rpc_call_main_thread (void *fp, u8 * data, u32 data_length) memset (mp, 0, sizeof (*mp)); memcpy (mp->data, data, data_length); mp->_vl_msg_id = ntohs (VL_API_RPC_CALL); - mp->function = (u64)fp; + mp->function = pointer_to_uword(fp); mp->need_barrier_sync = 1; /* Use the "normal" control-plane mechanism for the main thread */ -- cgit 1.2.3-korg