SWDEV-273235 - Remove dependency on ADL

Currently ADL is only being included if we build HSAIL and not LC. The
only configuration that does this is Ellesmere on Linux.

As the appprofile logic doesn't do anything right now, it should be
safe to remove it.

Change-Id: I13ce8c27af08c25b95edcbfd2ee1ce447b0bfd39


[ROCm/clr commit: 6ff4839d76]
This commit is contained in:
Vladislav Sytchenko
2021-07-09 15:57:10 -04:00
committed by Maneesh Gupta
orang tua 0104c5817c
melakukan 4def94c516
@@ -22,133 +22,19 @@
#include "os/os.hpp"
#include "utils/flags.hpp"
#include "appprofile.hpp"
#if !defined(WITH_LIGHTNING_COMPILER)
#include "adl.h"
#endif // !defined(WITH_LIGHTNING_COMPILER)
#include <cstdlib>
#include <cstring>
#if defined(WITH_LIGHTNING_COMPILER)
typedef void* ADLApplicationProfile;
int SearchProfileOfAnApplication(const wchar_t* fileName, ADLApplicationProfile** lppProfile)
{
return 0;
}
#define __stdcall
#endif // defined(WITH_LIGHTNING_COMPILER)
#ifdef BRAHMA
extern int SearchProfileOfAnApplication(const wchar_t* fileName,
ADLApplicationProfile** lppProfile);
#endif // BRAHMA
#define GETPROCADDRESS(_adltype_, _adlfunc_) (_adltype_) amd::Os::getSymbol(adlHandle_, #_adlfunc_);
namespace amd {
#if !defined(BRAHMA) && !defined(WITH_LIGHTNING_COMPILER)
static void* __stdcall adlMallocCallback(int n) { return malloc(n); }
class ADL {
public:
ADL();
~ADL();
bool init();
void* adlHandle() const { return adlHandle_; };
ADL_CONTEXT_HANDLE adlContext() const { return adlContext_; }
typedef int (*Adl2MainControlCreate)(ADL_MAIN_MALLOC_CALLBACK callback,
int iEnumConnectedAdapters, ADL_CONTEXT_HANDLE* context);
typedef int (*Adl2MainControlDestroy)(ADL_CONTEXT_HANDLE context);
typedef int (*Adl2ConsoleModeFileDescriptorSet)(ADL_CONTEXT_HANDLE context, int fileDescriptor);
typedef int (*Adl2MainControlRefresh)(ADL_CONTEXT_HANDLE context);
typedef int (*Adl2ApplicationProfilesSystemReload)(ADL_CONTEXT_HANDLE context);
typedef int (*Adl2ApplicationProfilesProfileOfApplicationx2Search)(
ADL_CONTEXT_HANDLE context, const wchar_t* fileName, const wchar_t* path,
const wchar_t* version, const wchar_t* appProfileArea, ADLApplicationProfile** lppProfile);
Adl2MainControlCreate adl2MainControlCreate;
Adl2MainControlDestroy adl2MainControlDestroy;
Adl2ConsoleModeFileDescriptorSet adl2ConsoleModeFileDescriptorSet;
Adl2MainControlRefresh adl2MainControlRefresh;
Adl2ApplicationProfilesSystemReload adl2ApplicationProfilesSystemReload;
Adl2ApplicationProfilesProfileOfApplicationx2Search
adl2ApplicationProfilesProfileOfApplicationx2Search;
private:
void* adlHandle_;
ADL_CONTEXT_HANDLE adlContext_;
};
ADL::ADL() : adlHandle_(NULL), adlContext_(NULL) {
adl2MainControlCreate = NULL;
adl2MainControlDestroy = NULL;
adl2ConsoleModeFileDescriptorSet = NULL;
adl2MainControlRefresh = NULL;
adl2ApplicationProfilesSystemReload = NULL;
adl2ApplicationProfilesProfileOfApplicationx2Search = NULL;
}
ADL::~ADL() {
if (adl2MainControlDestroy != NULL) {
adl2MainControlDestroy(adlContext_);
}
adlContext_ = NULL;
}
bool ADL::init() {
if (!adlHandle_) {
adlHandle_ = amd::Os::loadLibrary("atiadl" LP64_SWITCH(LINUX_SWITCH("xx", "xy"), "xx"));
}
if (!adlHandle_) {
return false;
}
adl2MainControlCreate = GETPROCADDRESS(Adl2MainControlCreate, ADL2_Main_Control_Create);
adl2MainControlDestroy = GETPROCADDRESS(Adl2MainControlDestroy, ADL2_Main_Control_Destroy);
adl2ConsoleModeFileDescriptorSet =
GETPROCADDRESS(Adl2ConsoleModeFileDescriptorSet, ADL2_ConsoleMode_FileDescriptor_Set);
adl2MainControlRefresh = GETPROCADDRESS(Adl2MainControlRefresh, ADL2_Main_Control_Refresh);
adl2ApplicationProfilesSystemReload =
GETPROCADDRESS(Adl2ApplicationProfilesSystemReload, ADL2_ApplicationProfiles_System_Reload);
adl2ApplicationProfilesProfileOfApplicationx2Search =
GETPROCADDRESS(Adl2ApplicationProfilesProfileOfApplicationx2Search,
ADL2_ApplicationProfiles_ProfileOfAnApplicationX2_Search);
if (adl2MainControlCreate == NULL || adl2MainControlDestroy == NULL ||
adl2MainControlRefresh == NULL || adl2ApplicationProfilesSystemReload == NULL ||
adl2ApplicationProfilesProfileOfApplicationx2Search == NULL) {
return false;
}
int result = adl2MainControlCreate(adlMallocCallback, 1, &adlContext_);
if (result != ADL_OK) {
// ADL2 is expected to return ADL_ERR_NO_XDISPLAY in Linux Console mode environment
if (result == ADL_ERR_NO_XDISPLAY) {
if (adl2ConsoleModeFileDescriptorSet == NULL ||
adl2ConsoleModeFileDescriptorSet(adlContext_, ADL_UNSET) != ADL_OK) {
return false;
}
adl2MainControlRefresh(adlContext_);
} else {
return false;
}
}
// Reload is disabled in ADL with the change list 1198904 and ticket
// SWDEV-59442 - The ADL_ApplicationProfiles_System_Reload Function is not Re-entrant
// Returned value is ADL_ERR_NOT_SUPPORTED on Windows.
adl2ApplicationProfilesSystemReload(adlContext_);
return true;
}
#endif // BRAHMA
AppProfile::AppProfile() : gpuvmHighAddr_(false), profileOverridesAllSettings_(false) {
amd::Os::getAppPathAndFileName(appFileName_, appPathAndFileName_);
propertyDataMap_.insert(
@@ -193,75 +79,14 @@ bool AppProfile::init() {
bool AppProfile::ParseApplicationProfile() {
ADLApplicationProfile* pProfile = NULL;
#if !defined(BRAHMA) && !defined(WITH_LIGHTNING_COMPILER)
amd::ADL* adl = new amd::ADL;
if ((adl == NULL) || !adl->init()) {
delete adl;
return false;
}
// Apply blb configurations
int result = adl->adl2ApplicationProfilesProfileOfApplicationx2Search(
adl->adlContext(), wsAppFileName_.c_str(), NULL, NULL, L"OCL", &pProfile);
delete adl;
#else // BRAHMA
if (!SearchProfileOfAnApplication(wsAppFileName_.c_str(), &pProfile)) {
return false;
}
#endif // BRAHMA
if (pProfile == NULL) {
return false;
}
#if !defined(WITH_LIGHTNING_COMPILER)
PropertyRecord* firstProperty = pProfile->record;
uint32_t valueOffset = 0;
const int BUFSIZE = 1024;
wchar_t wbuffer[BUFSIZE];
char buffer[2 * BUFSIZE];
for (int index = 0; index < pProfile->iCount; index++) {
PropertyRecord* profileProperty =
reinterpret_cast<PropertyRecord*>((reinterpret_cast<char*>(firstProperty)) + valueOffset);
// Get property name
char* propertyName = profileProperty->strName;
auto entry = propertyDataMap_.find(std::string(propertyName));
if (entry == propertyDataMap_.end()) {
// unexpected name
valueOffset += (sizeof(PropertyRecord) + profileProperty->iDataSize - 4);
continue;
}
// Get the property value
switch (entry->second.type_) {
case DataType_Boolean:
*(reinterpret_cast<bool*>(entry->second.data_)) = profileProperty->uData[0] ? true : false;
break;
case DataType_String: {
assert((size_t)(profileProperty->iDataSize) < sizeof(wbuffer) - 2 &&
"app profile string too long");
memset(wbuffer, 0, sizeof(wbuffer));
memcpy(wbuffer, profileProperty->uData, profileProperty->iDataSize);
size_t len = wcstombs(buffer, wbuffer, sizeof(buffer));
assert(len < sizeof(buffer) - 1 && "app profile string too long");
*(reinterpret_cast<std::string*>(entry->second.data_)) = buffer;
break;
}
default:
break;
}
valueOffset += (sizeof(PropertyRecord) + profileProperty->iDataSize - 4);
}
free(pProfile);
#endif // !defined(WITH_LIGHTNING_COMPILER)
return true;
}
}