Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.6:Update
hwloc.28837
core-levelzero-Set-ZES_ENABLE_SYSMAN-via-setenv...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File core-levelzero-Set-ZES_ENABLE_SYSMAN-via-setenv-instead-of-putenv.patch of Package hwloc.28837
From: Egbert Eich <eich@suse.com> Date: Tue Apr 11 14:25:19 2023 +0200 Subject: core+levelzero: Set ZES_ENABLE_SYSMAN via setenv instead of putenv Patch-mainline: Not yet Git-commit: 649d47b7a7f15456c75613d5d54f22b5e6623ee5 References: Backported from: Git-repo: https://github.com/open-mpi/hwloc Git-commit: fe363de1647013c190ac3e9d25bb1d7d3fbe574d Setting `ZES_ENABLE_SYSMAN` via `putenv` placed a constant string in the environ array which cannot be touched. If the user is manipulating that environ array then touching this envar will result in a segv. - Instead of using `putenv` use `setenv` which will put a copy of the constant string in the `environ` array allowing the end user to manipulate that array as needed. - Note that I could not find a `setenv` function for windows so I left a comment and did not touch that code. Signed-off-by: Joshua Hursey <jhursey@us.ibm.com> Also change the putenv() inside topology-levelzero.c for consistency and update some comments. Signed-off-by: Brice Goglin <Brice.Goglin@inria.fr> Signed-off-by: Egbert Eich <eich@suse.com> Signed-off-by: Egbert Eich <eich@suse.de> --- hwloc/topology-levelzero.c | 7 ++++++- hwloc/topology.c | 8 +++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/hwloc/topology-levelzero.c b/hwloc/topology-levelzero.c index dc8f4fe..42401aa 100644 --- a/hwloc/topology-levelzero.c +++ b/hwloc/topology-levelzero.c @@ -44,7 +44,12 @@ hwloc_levelzero_discover(struct hwloc_backend *backend, struct hwloc_disc_status */ env = getenv("ZES_ENABLE_SYSMAN"); if (!env) { - putenv((char *) "ZES_ENABLE_SYSMAN=1"); + /* setenv() is safer than putenv() but not available on Windows */ +#ifdef HWLOC_WIN_SYS + putenv("ZES_ENABLE_SYSMAN=1") +#else + setenv("ZES_ENABLE_SYSMAN", "1", 1); +#endif /* we'll warn below if we fail to get zes devices */ sysman_maybe_missing = 1; } else if (!atoi(env)) { diff --git a/hwloc/topology.c b/hwloc/topology.c index 01e5a86..ca04b4d 100644 --- a/hwloc/topology.c +++ b/hwloc/topology.c @@ -3,6 +3,7 @@ * Copyright © 2009-2021 Inria. All rights reserved. * Copyright © 2009-2012, 2020 Université Bordeaux * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved. + * Copyright © 2022 IBM Corporation. All rights reserved. * See COPYING in top-level directory. */ @@ -60,21 +61,21 @@ * * L0 seems to be using getenv() to check this variable on Windows * (at least in the Intel Compute-Runtime of March 2021), - * so use putenv() to set the variable. + * but setenv() doesn't seem to exist on Windows, hence use putenv() to set the variable. * * For the record, Get/SetEnvironmentVariable() is not exactly the same as getenv/putenv(): * - getenv() doesn't see what was set with SetEnvironmentVariable() * - GetEnvironmentVariable() doesn't see putenv() in cygwin (while it does in MSVC and MinGW). * Hence, if L0 ever switches from getenv() to GetEnvironmentVariable(), * it will break in cygwin, we'll have to use both putenv() and SetEnvironmentVariable(). - * Hopefully L0 will be provide a way to enable Sysman without env vars before it happens. + * Hopefully L0 will provide a way to enable Sysman without env vars before it happens. */ #ifdef HWLOC_HAVE_ATTRIBUTE_CONSTRUCTOR static void hwloc_constructor(void) __attribute__((constructor)); static void hwloc_constructor(void) { if (!getenv("ZES_ENABLE_SYSMAN")) - putenv((char *) "ZES_ENABLE_SYSMAN=1"); + setenv("ZES_ENABLE_SYSMAN", "1", 1); } #endif #ifdef HWLOC_WIN_SYS @@ -82,6 +83,7 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { if (!getenv("ZES_ENABLE_SYSMAN")) + /* Windows does not have a setenv, so use putenv. */ putenv((char *) "ZES_ENABLE_SYSMAN=1"); } return TRUE;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor