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 --- svm/ssvm.c | 10 +++++----- svm/ssvm.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'svm') diff --git a/svm/ssvm.c b/svm/ssvm.c index b9c6ef9fd0b..92d86e6d1e4 100644 --- a/svm/ssvm.c +++ b/svm/ssvm.c @@ -59,10 +59,10 @@ int ssvm_master_init (ssvm_private_t * ssvm, u32 master_index) if (ssvm->requested_va) ssvm->requested_va += randomize_baseva; - sh = ssvm->sh = (void *) mmap((void *)ssvm->requested_va, ssvm->ssvm_size, + sh = ssvm->sh = (ssvm_shared_header_t *) mmap((void *)ssvm->requested_va, ssvm->ssvm_size, PROT_READ | PROT_WRITE, flags, ssvm_fd, 0); - if ((u64) ssvm->sh == (u64) MAP_FAILED) + if (ssvm->sh == MAP_FAILED) { clib_unix_warning ("mmap"); close(ssvm_fd); @@ -78,7 +78,7 @@ int ssvm_master_init (ssvm_private_t * ssvm, u32 master_index) (((u8 *)sh) + MMAP_PAGESIZE, ssvm->ssvm_size - MMAP_PAGESIZE, MHEAP_FLAG_DISABLE_VM | MHEAP_FLAG_THREAD_SAFE); - sh->ssvm_va = (u64) sh; + sh->ssvm_va = pointer_to_uword(sh); sh->master_index = master_index; oldheap = ssvm_push_heap (sh); @@ -123,7 +123,7 @@ int ssvm_slave_init (ssvm_private_t * ssvm, int timeout_in_seconds) map_it: sh = (void *) mmap (0, MMAP_PAGESIZE, PROT_READ | PROT_WRITE, MAP_SHARED, ssvm_fd, 0); - if ((u64) sh == (u64) MAP_FAILED) + if (sh == MAP_FAILED) { clib_unix_warning ("slave research mmap"); close (ssvm_fd); @@ -150,7 +150,7 @@ int ssvm_slave_init (ssvm_private_t * ssvm, int timeout_in_seconds) MAP_SHARED | MAP_FIXED, ssvm_fd, 0); - if ((u64) sh == (u64) MAP_FAILED) + if (sh == MAP_FAILED) { clib_unix_warning ("slave final mmap"); close (ssvm_fd); diff --git a/svm/ssvm.h b/svm/ssvm.h index 51164931962..cd34afd2928 100644 --- a/svm/ssvm.h +++ b/svm/ssvm.h @@ -73,7 +73,7 @@ typedef struct { u32 my_pid; u32 vlib_hw_if_index; u8 * name; - u64 requested_va; + uword requested_va; int i_am_master; u32 per_interface_next_index; u32 * rx_queue; -- cgit 1.2.3-korg