libhsakmt: remove iommu_block which supports IOMMUv2 performance

IOMMUv2 is removed from AMDGPU/KFD.

Change-Id: I9fcf20ae9288cb40bb4b696284fc70534fb6484b
Signed-off-by: James Zhu <James.Zhu@amd.com>
Этот коммит содержится в:
James Zhu
2023-09-12 16:11:31 -04:00
родитель 274b5b51ca
Коммит 277d5e27ff
3 изменённых файлов: 0 добавлений и 121 удалений
-2
Просмотреть файл
@@ -188,7 +188,6 @@ HSAKMT_STATUS init_counter_props(unsigned int NumNodes)
}
counter_props_count = NumNodes;
alloc_pmc_blocks();
if (init_shared_region() != HSAKMT_STATUS_SUCCESS) {
pr_warn("Profiling of privileged blocks is not available.\n");
@@ -215,7 +214,6 @@ void destroy_counter_props(void)
}
free(counter_props);
free_pmc_blocks();
}
static int blockid2uuid(enum perf_block_id block_id, HSA_UUID *uuid)
-116
Просмотреть файл
@@ -1958,122 +1958,6 @@ static struct perf_counter_block navi_blocks[PERFCOUNTER_BLOCKID__MAX] = {
},
};
/* Current APUs only have one IOMMU. If NUMA is introduced to APUs, we'll need
* to expand the struct here to an array.
*/
static struct perf_counter_block iommu_block;
static HSAKMT_STATUS alloc_pmc_blocks_iommu(void)
{
DIR *dir;
struct dirent *dent;
const char *sysfs_amdiommu_event_path =
"/sys/bus/event_source/devices/amd_iommu_0/events";
/* Counter source in IOMMU's Counter Bank Addressing register is 8 bits,
* so the biggest counter number/id possible is 0xff.
*/
const int max_counter_id = 0xff;
char path[256];
const int len = sizeof(path);
FILE *file;
int num;
char counter_id[max_counter_id + 1];
HSAKMT_STATUS ret = HSAKMT_STATUS_SUCCESS;
uint32_t *ptr;
struct perf_counter_block *block = &iommu_block;
memset(block, 0, sizeof(struct perf_counter_block));
dir = opendir(sysfs_amdiommu_event_path);
if (!dir) {
/* Before kernel 4.12, amd_iommu is the path */
sysfs_amdiommu_event_path =
"/sys/bus/event_source/devices/amd_iommu/events";
dir = opendir(sysfs_amdiommu_event_path);
if (!dir)
goto out;
}
memset(counter_id, 0, max_counter_id + 1);
while ((dent = readdir(dir))) {
if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, ".."))
continue;
if (snprintf(path, len, "%s/%s", sysfs_amdiommu_event_path,
dent->d_name) >= len) {
pr_err("Increase path length.\n");
ret = HSAKMT_STATUS_NO_MEMORY;
goto out;
}
file = fopen(path, "r");
if (!file) {
ret = HSAKMT_STATUS_ERROR;
goto out;
}
if (fscanf(file, "csource=0x%x", &num) != 1) {
ret = HSAKMT_STATUS_ERROR;
fclose(file);
goto out;
}
if (num > max_counter_id)
/* This should never happen. If it does, check IOMMU driver. */
pr_err("max_counter_id %d is set too small.\n",
max_counter_id);
else {
counter_id[num] = 1;
++block->num_of_counters;
}
fclose(file);
}
block->counter_ids = malloc(sizeof(uint32_t) * block->num_of_counters);
if (!block->counter_ids) {
ret = HSAKMT_STATUS_NO_MEMORY;
goto out;
}
ptr = block->counter_ids;
for (num = 0; num < (max_counter_id + 1); num++) {
if (counter_id[num]) {
ptr[0] = num;
++ptr;
}
}
if (snprintf(path, len, "%s/%d/%s",
"/sys/devices/virtual/kfd/kfd/topology/nodes",
0, /* IOMMU is in node 0. Change this if NUMA is introduced to APU. */
"perf/iommu/max_concurrent") >= len) {
pr_err("Increase path length\n");
ret = HSAKMT_STATUS_NO_MEMORY;
goto out;
};
file = fopen(path, "r");
if (!file) {
ret = HSAKMT_STATUS_ERROR;
goto out;
}
if (fscanf(file, "%d", &block->num_of_slots) != 1)
ret = HSAKMT_STATUS_ERROR;
fclose(file);
out:
if (dir)
closedir(dir);
return ret;
}
HSAKMT_STATUS alloc_pmc_blocks(void)
{
return alloc_pmc_blocks_iommu();
}
void free_pmc_blocks(void)
{
if (iommu_block.counter_ids)
free(iommu_block.counter_ids);
iommu_block.counter_ids = NULL;
iommu_block.num_of_counters = 0;
}
HSAKMT_STATUS get_block_properties(uint32_t node_id,
enum perf_block_id block_id,
struct perf_counter_block *block)
-3
Просмотреть файл
@@ -67,9 +67,6 @@ struct perf_counter_block {
uint64_t counter_mask;
};
HSAKMT_STATUS alloc_pmc_blocks(void);
void free_pmc_blocks(void);
HSAKMT_STATUS get_block_properties(uint32_t node_id,
enum perf_block_id block_id,
struct perf_counter_block *block);