From: Jesse Hall Date: Fri, 5 May 2017 23:41:35 +0000 (-0700) Subject: Load updated graphics drivers into sphal-child namespace X-Git-Tag: android-x86-9.0-r1~417^2^2~50^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=57de0ff6270835f3470e0420fcd1835146a2beb0;p=android-x86%2Fframeworks-native.git Load updated graphics drivers into sphal-child namespace Bug: 37854032 Test: install driver package, run gles3jni and vulkanGears, check /proc//maps to ensure updated driver is loaded Change-Id: I45d5be974ad079f8fcdbce6f06ccd3c191ec6a12 --- diff --git a/libs/ui/GraphicsEnv.cpp b/libs/ui/GraphicsEnv.cpp index 1d204245d3..8182c07001 100644 --- a/libs/ui/GraphicsEnv.cpp +++ b/libs/ui/GraphicsEnv.cpp @@ -23,6 +23,11 @@ #include #include +// TODO(b/37049319) Get this from a header once one exists +extern "C" { + android_namespace_t* android_get_exported_namespace(const char*); +} + namespace android { /*static*/ GraphicsEnv& GraphicsEnv::getInstance() { @@ -43,33 +48,19 @@ void GraphicsEnv::setDriverPath(const std::string path) { android_namespace_t* GraphicsEnv::getDriverNamespace() { static std::once_flag once; std::call_once(once, [this]() { - // TODO; In the next version of Android, all graphics drivers will be - // loaded into a custom namespace. To minimize risk for this release, - // only updated drivers use a custom namespace. - // - // Additionally, the custom namespace will be - // ANDROID_NAMESPACE_TYPE_ISOLATED, and will only have access to a - // subset of the system. if (mDriverPath.empty()) return; - - char defaultPath[PATH_MAX]; - android_get_LD_LIBRARY_PATH(defaultPath, sizeof(defaultPath)); - size_t defaultPathLen = strlen(defaultPath); - - std::string path; - path.reserve(mDriverPath.size() + 1 + defaultPathLen); - path.append(mDriverPath); - path.push_back(':'); - path.append(defaultPath, defaultPathLen); - - mDriverNamespace = android_create_namespace( - "gfx driver", - nullptr, // ld_library_path - path.c_str(), // default_library_path - ANDROID_NAMESPACE_TYPE_SHARED, - nullptr, // permitted_when_isolated_path - nullptr); // parent + // If the sphal namespace isn't configured for a device, don't support updatable drivers. + // We need a parent namespace to inherit the default search path from. + auto sphalNamespace = android_get_exported_namespace("sphal"); + if (!sphalNamespace) return; + mDriverNamespace = android_create_namespace("gfx driver", + nullptr, // ld_library_path + mDriverPath.c_str(), // default_library_path + ANDROID_NAMESPACE_TYPE_SHARED | + ANDROID_NAMESPACE_TYPE_ISOLATED, + nullptr, // permitted_when_isolated_path + sphalNamespace); }); return mDriverNamespace; }