[libcamera-devel,v4,1/8] libcamera: ipa_module_info: add license field

Message ID 20190711185047.11671-2-paul.elder@ideasonboard.com
State Accepted
Headers show
Series
  • Add IPA process isolation
Related show

Commit Message

Paul Elder July 11, 2019, 6:50 p.m. UTC
Add a field to IPAModuleInfo to contain the license of the module.

This license field will be used to determine whether the IPA module
should be run in an isolated process or not. If the license is open
source, then the IPA module will be allowed to run without process
isolation, if the user enables it. If the license is not open source,
then the IPA module will be run with process isolation.

Update the dummy IPA and IPA test to conform to the new struct layout.

Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
Changes in v4:
- improve documentation

Changes in v3:
- make license field SPDX

New patch in v2
- this replaces the isolate flag that was used in v1

 include/libcamera/ipa/ipa_module_info.h |  1 +
 src/ipa/ipa_dummy.cpp                   |  1 +
 src/libcamera/ipa_module.cpp            | 23 +++++++++++++++++++++++
 test/ipa/ipa_test.cpp                   |  1 +
 4 files changed, 26 insertions(+)

Patch

diff --git a/include/libcamera/ipa/ipa_module_info.h b/include/libcamera/ipa/ipa_module_info.h
index 585f753..d9e33c1 100644
--- a/include/libcamera/ipa/ipa_module_info.h
+++ b/include/libcamera/ipa/ipa_module_info.h
@@ -18,6 +18,7 @@  struct IPAModuleInfo {
 	uint32_t pipelineVersion;
 	char pipelineName[256];
 	char name[256];
+	char license[64];
 } __attribute__((packed));
 
 extern "C" {
diff --git a/src/ipa/ipa_dummy.cpp b/src/ipa/ipa_dummy.cpp
index ee7a3a8..4c8b665 100644
--- a/src/ipa/ipa_dummy.cpp
+++ b/src/ipa/ipa_dummy.cpp
@@ -34,6 +34,7 @@  const struct IPAModuleInfo ipaModuleInfo = {
 	0,
 	"PipelineHandlerVimc",
 	"Dummy IPA for Vimc",
+	"LGPL-2.1-or-later",
 };
 
 IPAInterface *ipaCreate()
diff --git a/src/libcamera/ipa_module.cpp b/src/libcamera/ipa_module.cpp
index d2e3c36..9cead71 100644
--- a/src/libcamera/ipa_module.cpp
+++ b/src/libcamera/ipa_module.cpp
@@ -214,6 +214,29 @@  elfLoadSymbol(void *map, size_t soSize, const char *symbol)
  *
  * \var IPAModuleInfo::name
  * \brief The name of the IPA module
+ *
+ * \var IPAModuleInfo::license
+ * \brief License of the IPA module
+ *
+ * This license is used to determine whether to force isolation of the IPA in
+ * a separate process. If the license is "Proprietary", then the IPA will
+ * be isolated. If the license is open-source, then the IPA will be allowed to
+ * run without isolation if the user enables it. The license should be an
+ * SPDX license string. The following licenses are currently available to
+ * allow the IPA to run unisolated:
+ *
+ * - GPL-2.0-only
+ * - GPL-2.0-or-later
+ * - GPL-3.0-only
+ * - GPL-3.0-or-later
+ * - LGPL-2.1-only
+ * - LGPL-2.1-or-later
+ * - LGPL-3.0-only
+ * - LGPL-3.0-or-later
+ *
+ * Any other license will cause the IPA to be run isolated.
+ *
+ * \todo Allow user to choose to isolate open source IPAs
  */
 
 /**
diff --git a/test/ipa/ipa_test.cpp b/test/ipa/ipa_test.cpp
index bbef069..b9e1bd6 100644
--- a/test/ipa/ipa_test.cpp
+++ b/test/ipa/ipa_test.cpp
@@ -59,6 +59,7 @@  protected:
 			0,
 			"PipelineHandlerVimc",
 			"Dummy IPA for Vimc",
+			"GPL-2.0-or-later",
 		};
 
 		count += runTest("src/ipa/ipa_dummy.so", testInfo);