raw/ifpga/base: enhance driver reliability in multi-process
authorWei Huang <wei.huang@intel.com>
Fri, 23 Oct 2020 08:59:59 +0000 (04:59 -0400)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 3 Nov 2020 22:34:29 +0000 (23:34 +0100)
commite41856b515cece86e2082d97f4e2a83181df5f82
treee4bfd18adc39ba95e6c61132bbf8c20a990eb43b
parent82255e036acc95ff219af32ec9be385583d97368
raw/ifpga/base: enhance driver reliability in multi-process

Current hardware protection is based on pthread mutex which
work just for situation of multi-thread in one process. In
multi-process environment, hardware state machine would be
corrupted by concurrent access, that means original pthread
mutex mechanism need be enhanced.

The major modifications in this patch are list below:
1. Create a mutex for adapter in shared memory named
   "mutex.IFPGA:domain:bus:dev.func" when device is probed.
2. Create a shared memory named "IFPGA:domain:bus:dev.func" during opae
   adapter is initializing. There is a reference count in shared memory.
   Shared memory will be destroyed once reference count turned to zero.
3. Two mutexs are created in shared memory and initialized with flag
   PTHREAD_PROCESS_SHARED. One for SPI and the other for I2C. They will
   be passed to SPI and I2C driver subsequently.
4. DTB data in flash will be cached in shared memory. Then MAX10 driver
   can read DTB from shared memory instead of flash. This avoid
   confliction of concurrent flash access between hardware and software.

Signed-off-by: Wei Huang <wei.huang@intel.com>
Signed-off-by: Tianfei Zhang <tianfei.zhang@intel.com>
Acked-by: Rosen Xu <rosen.xu@intel.com>
drivers/raw/ifpga/base/ifpga_fme.c
drivers/raw/ifpga/base/meson.build
drivers/raw/ifpga/base/opae_hw_api.c
drivers/raw/ifpga/base/opae_hw_api.h
drivers/raw/ifpga/base/opae_i2c.c
drivers/raw/ifpga/base/opae_i2c.h
drivers/raw/ifpga/base/opae_intel_max10.c
drivers/raw/ifpga/base/opae_spi.c
drivers/raw/ifpga/base/opae_spi.h
drivers/raw/ifpga/base/opae_spi_transaction.c