diff options
author | Christophe Fontaine <christophe.fontaine@qosmos.com> | 2016-04-09 12:38:49 +0900 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2016-04-18 13:20:57 +0000 |
commit | fef15b4bb88c61248393b93d13b1f79bb628def0 (patch) | |
tree | 0f34cc14987dde62a32201101c29b24b023fd36b /vnet/vnet/devices/ssvm/node.c | |
parent | 7a2a378d2dcdba900651b02859b686cafe6dfd22 (diff) |
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 <christophe.fontaine@qosmos.com>
Diffstat (limited to 'vnet/vnet/devices/ssvm/node.c')
-rw-r--r-- | vnet/vnet/devices/ssvm/node.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/vnet/vnet/devices/ssvm/node.c b/vnet/vnet/devices/ssvm/node.c index b26d73d12b8..3a5709d0323 100644 --- a/vnet/vnet/devices/ssvm/node.c +++ b/vnet/vnet/devices/ssvm/node.c @@ -97,8 +97,8 @@ ssvm_eth_device_input (ssvm_eth_main_t * em, uword n_trace = vlib_get_trace_count (vm, node); /* Either side down? buh-bye... */ - if ((u64)(sh->opaque [MASTER_ADMIN_STATE_INDEX]) == 0 || - (u64)(sh->opaque [SLAVE_ADMIN_STATE_INDEX]) == 0) + if (pointer_to_uword(sh->opaque [MASTER_ADMIN_STATE_INDEX]) == 0 || + pointer_to_uword(sh->opaque [SLAVE_ADMIN_STATE_INDEX]) == 0) return 0; if (intfc->i_am_master) @@ -271,14 +271,14 @@ ssvm_eth_device_input (ssvm_eth_main_t * em, ASSERT(vec_len(intfc->rx_queue) > 0); - n_available = (u32)(u64)(sh->opaque[CHUNK_POOL_NFREE]); + n_available = (u32)pointer_to_uword(sh->opaque[CHUNK_POOL_NFREE]); elt_indices = (u32 *)(sh->opaque[CHUNK_POOL_FREELIST_INDEX]); memcpy (&elt_indices[n_available], intfc->rx_queue, vec_len (intfc->rx_queue) * sizeof (u32)); n_available += vec_len (intfc->rx_queue); - sh->opaque[CHUNK_POOL_NFREE] = (void *) (u64) n_available; + sh->opaque[CHUNK_POOL_NFREE] = uword_to_pointer(n_available, void* ); ssvm_unlock (sh); |