Since v1: Fixed error when compiling with clang (Bill)

This patch series introduces a new ODP memory allocator and then uses it
on the driver interface:

The first 3 patches introduces barriers on the driver interface.
This is based on its equivalent from the API side.

Then comes the definition of the shmen programing functions for the DRV
interface: This should look very familiar, as it is based on its API side as
well, with extension to perform lookup and free directely by name or by
address, as most drivers will probably want that.
In that sence, the well known API shmem interface will look like a subset
of the DRV shmem interface.

Then comes the file descriptor server: its goal is to enable sharing of
file desriptors between linux processes, regardless of fork time.
This will be needed by the memory allocator (following patches), but will
likely also be needed when file-descriptor based pktios will be written as
"process mode runnable". It is therefore written as a standalone service
where clients can register file descriptors and others clients can query for
those. The servers holds a table {context, key} ->fd.
The ODP memory allocator will register its files descriptors using the
memory block index as key and "ISHM" as context. The context is meant to enable
the usage of the server from different users, without key clash: if pktio
uses its pktio index as key, it won't clash with ISHM keys as the context
(ISHM vs PKTIO) will be different.

Then comes the internal memory allocator itself: Though its interface is
a superset of the current shared memory API, its internal differs largely:
The new internal memory allocator (ishm) is not using ANONYMOUS mapping
but file descriptor based mapping instead: this is to enable its usage
from different processes, regardless of fork time.
Also, this memory allocator supports a flag, called SINGLE_VA: when allocated
with  this flag, memory is guaranted to be mapped at the same virtual address
in all ODP threads (i.e linux threads or processes, regardless of fork time).
This is done by prealocating plenty of virtual address space (not memory
 -just address space) at global init time and mapping the SINGLE_VA'd blocks
there (using MAP_FIXED) on demand.
Ishm maintains the virtual space memory map.

Blocks allocated without this flag are mapped using the normal linux strategy,
and will likely end-up at different virtual addresses in different linux
processes (when allocated after fork)

IMPORTANT NOTE: ishm supports huge pages BUT because the mapping is no longer
anonymous, the hugetlbfs mount point must be writable by the ODP process:
Either run as root or fix the permissions!
ishm will fall back to normal pages if it fails allocationg huge pages- as
before.

Then comes a patch adding a debug funtion to ishm: as it was fully separable
it became its own patch...

Then commes the linux implementation of the driver shm interface. This,
of course, use ishm. It is just a wrapper around it.
If this ishm way of allocating memory is "approved", such a wrapper should be
written for the API side as well (replacing the current shared_memory.c)
so that the API interface , the driver interface and ODP internals make
use of a unique memory allocator: ishm.

At least comes the definition a a series of tests to test the driver
interface shared memory. These tests are runnable in thread or process mode
(using the usual --odph_proc flag)

Thanks for reading so far... and happy review!

Christophe

Christophe Milard (13):
  linux-gen: cosmetic changes on barrier
  drv: adding barrier.h
  linux-gen: drv: adding barrier
  linux-generic: drv: strong typing
  drv: adding shared memory
  linux-gen: fdserver: new fdserver added
  linux-generic: system_info: adding huge page dir
  linux-gen: ishm: internal shared memory allocator (ishm) added
  linux-gen: ishm: adding debug function
  linux-gen: drv: shm
  test: validation: drv: shmem: basic tests
  test: validation: drv: shmem: testing SINGLE_VA flag
  test: validation: drv: shmem: stress tests

 include/odp/api/spec/barrier.h                     |    2 -
 include/odp/drv/spec/barrier.h                     |   66 +
 include/odp/drv/spec/shm.h                         |  231 ++++
 include/odp_drv.h                                  |    2 +
 platform/Makefile.inc                              |    2 +
 platform/linux-generic/Makefile.am                 |   15 +-
 platform/linux-generic/_fdserver.c                 |  655 +++++++++
 platform/linux-generic/_ishm.c                     | 1461 ++++++++++++++++++++
 platform/linux-generic/_ishmphy.c                  |  168 +++
 platform/linux-generic/arch/arm/odp/api/cpu_arch.h |   25 +-
 platform/linux-generic/arch/arm/odp_cpu_arch.c     |   49 +-
 .../linux-generic/arch/arm/odp_sysinfo_parse.c     |   28 +-
 platform/linux-generic/arch/powerpc/odp_cpu_arch.c |   49 +-
 platform/linux-generic/drv_barrier.c               |   50 +
 platform/linux-generic/drv_shm.c                   |  102 ++
 .../linux-generic/include/_fdserver_internal.h     |   39 +
 platform/linux-generic/include/_ishm_internal.h    |   46 +
 platform/linux-generic/include/_ishmphy_internal.h |   25 +
 platform/linux-generic/include/ishmphy_internal.h  |   24 +
 .../include/odp/api/plat/barrier_types.h           |    1 -
 platform/linux-generic/include/odp/drv/barrier.h   |   30 +
 .../include/odp/drv/plat/barrier_types.h           |   38 +
 .../linux-generic/include/odp/drv/plat/shm_types.h |   46 +
 .../include/odp/drv/plat/strong_types.h            |   35 +
 platform/linux-generic/include/odp/drv/shm.h       |   36 +
 .../linux-generic/include/odp_config_internal.h    |   16 +
 platform/linux-generic/include/odp_internal.h      |   17 +-
 platform/linux-generic/odp_barrier.c               |    2 +-
 platform/linux-generic/odp_init.c                  |   39 +
 platform/linux-generic/odp_system_info.c           |  181 ++-
 test/common_plat/m4/configure.m4                   |    3 +-
 test/common_plat/validation/drv/Makefile.am        |    3 +-
 .../common_plat/validation/drv/drvshmem/.gitignore |    1 +
 .../validation/drv/drvshmem/Makefile.am            |   10 +
 .../common_plat/validation/drv/drvshmem/drvshmem.c |  794 +++++++++++
 .../common_plat/validation/drv/drvshmem/drvshmem.h |   27 +
 .../validation/drv/drvshmem/drvshmem_main.c        |   12 +
 test/linux-generic/Makefile.am                     |    1 +
 38 files changed, 4316 insertions(+), 15 deletions(-)
 create mode 100644 include/odp/drv/spec/barrier.h
 create mode 100644 include/odp/drv/spec/shm.h
 create mode 100644 platform/linux-generic/_fdserver.c
 create mode 100644 platform/linux-generic/_ishm.c
 create mode 100644 platform/linux-generic/_ishmphy.c
 mode change 120000 => 100644 platform/linux-generic/arch/arm/odp/api/cpu_arch.h
 mode change 120000 => 100644 platform/linux-generic/arch/arm/odp_cpu_arch.c
 mode change 120000 => 100644 
platform/linux-generic/arch/arm/odp_sysinfo_parse.c
 mode change 120000 => 100644 platform/linux-generic/arch/powerpc/odp_cpu_arch.c
 create mode 100644 platform/linux-generic/drv_barrier.c
 create mode 100644 platform/linux-generic/drv_shm.c
 create mode 100644 platform/linux-generic/include/_fdserver_internal.h
 create mode 100644 platform/linux-generic/include/_ishm_internal.h
 create mode 100644 platform/linux-generic/include/_ishmphy_internal.h
 create mode 100644 platform/linux-generic/include/ishmphy_internal.h
 create mode 100644 platform/linux-generic/include/odp/drv/barrier.h
 create mode 100644 platform/linux-generic/include/odp/drv/plat/barrier_types.h
 create mode 100644 platform/linux-generic/include/odp/drv/plat/shm_types.h
 create mode 100644 platform/linux-generic/include/odp/drv/plat/strong_types.h
 create mode 100644 platform/linux-generic/include/odp/drv/shm.h
 create mode 100644 test/common_plat/validation/drv/drvshmem/.gitignore
 create mode 100644 test/common_plat/validation/drv/drvshmem/Makefile.am
 create mode 100644 test/common_plat/validation/drv/drvshmem/drvshmem.c
 create mode 100644 test/common_plat/validation/drv/drvshmem/drvshmem.h
 create mode 100644 test/common_plat/validation/drv/drvshmem/drvshmem_main.c

-- 
2.7.4

Reply via email to