mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
gpu: nvgpu: List MIG configs in a parsable way
This patch creates a sysfs node which is easier to parse than the existing mig_mode_config_list node. This new node outputs in the following format: active: -1 num_configs: 2 num_instances: 2 id:000000000001 gr:000000000000 gpc:0003 id:000000000002 gr:000000000004 gpc:0003 num_instances: 3 id:000000000001 gr:000000000000 gpc:0003 id:000000000005 gr:000000000004 gpc:0002 id:000000000013 gr:000000000006 gpc:0001 Bug 200740852 Change-Id: I8a3d4425ccb88dd4e58bbe1908e0f7cc577ff191 Signed-off-by: Martin Radev <mradev@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvgpu/+/2704349 Reviewed-by: Alex Waterman <alexw@nvidia.com> GVS: Gerrit_Virtual_Submit
This commit is contained in:
committed by
mobile promotions
parent
1bf9309f17
commit
a5d29a9c45
@@ -1274,6 +1274,88 @@ static ssize_t mig_mode_config_list_show(struct device *dev,
|
||||
static DEVICE_ATTR(mig_mode_config_list, S_IRUGO,
|
||||
mig_mode_config_list_show, NULL);
|
||||
|
||||
/*
|
||||
* Prints out the available MIG configurations and their instances.
|
||||
*/
|
||||
static ssize_t mig_mode_config_list_parsable_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
int offset = 0;
|
||||
int num_written;
|
||||
u32 config_id;
|
||||
u32 num_configs;
|
||||
const struct nvgpu_mig_gpu_instance_config *mig_gpu_instance_config;
|
||||
const struct nvgpu_gpu_instance_config *config;
|
||||
u32 num_instances_in_config;
|
||||
u32 instance_id;
|
||||
const struct nvgpu_gpu_instance_static_config *instance;
|
||||
struct gk20a *g = get_gk20a(dev);
|
||||
/* The passed buffer is of size PAGE_SIZE. */
|
||||
int remaining = PAGE_SIZE;
|
||||
|
||||
if (!nvgpu_is_powered_on(g))
|
||||
return -EINVAL;
|
||||
|
||||
mig_gpu_instance_config =
|
||||
(g->ops.grmgr.get_mig_config_ptr != NULL) ?
|
||||
g->ops.grmgr.get_mig_config_ptr(g) : NULL;
|
||||
if (!mig_gpu_instance_config)
|
||||
return -EINVAL;
|
||||
|
||||
/* Find the active MIG config and print it */
|
||||
if (!nvgpu_is_enabled(g, NVGPU_SUPPORT_MIG)) {
|
||||
num_written = snprintf(&buf[offset], (size_t)remaining, "active: -1\n");
|
||||
if (num_written < 0 || num_written >= remaining)
|
||||
return -ENOMEM;
|
||||
offset += num_written;
|
||||
remaining -= num_written;
|
||||
} else {
|
||||
num_written = snprintf(&buf[offset], (size_t)remaining, "active: %u\n", g->mig.current_gpu_instance_config_id);
|
||||
if (num_written < 0 || num_written >= remaining)
|
||||
return -ENOMEM;
|
||||
offset += num_written;
|
||||
remaining -= num_written;
|
||||
}
|
||||
|
||||
/* Print number of MIG configs */
|
||||
num_configs = mig_gpu_instance_config->num_config_supported;
|
||||
num_written = snprintf(&buf[offset], (size_t)remaining, "num_configs: %u\n", num_configs);
|
||||
if (num_written < 0 || num_written >= remaining)
|
||||
return -ENOMEM;
|
||||
offset += num_written;
|
||||
remaining -= num_written;
|
||||
|
||||
/* Go through each config and print out its GPU instances */
|
||||
for (config_id = 0U; config_id < num_configs ; config_id++) {
|
||||
config = &mig_gpu_instance_config->gpu_instance_config[config_id];
|
||||
|
||||
/* Print the number of instances */
|
||||
num_instances_in_config = config->num_gpu_instances;
|
||||
num_written = snprintf(&buf[offset], (size_t)remaining, "num_instances: %u\n", num_instances_in_config);
|
||||
if (num_written < 0 || num_written >= remaining)
|
||||
return -ENOMEM;
|
||||
offset += num_written;
|
||||
remaining -= num_written;
|
||||
|
||||
/* Go through each GPU instance and print its id, number of GPCs, GR id */
|
||||
for (instance_id = 0U; instance_id < num_instances_in_config; ++instance_id) {
|
||||
instance = &config->gpu_instance_static_config[instance_id];
|
||||
num_written = snprintf(&buf[offset], (size_t)remaining,
|
||||
"id:%.12u gr:%.12u gpc:%.4u\n",
|
||||
instance->gpu_instance_id, instance->gr_syspipe_id, instance->num_gpc);
|
||||
if (num_written < 0 || num_written >= remaining)
|
||||
return -ENOMEM;
|
||||
offset += num_written;
|
||||
remaining -= num_written;
|
||||
}
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(mig_mode_config_list_parsable, S_IRUGO,
|
||||
mig_mode_config_list_parsable_show, NULL);
|
||||
|
||||
static ssize_t mig_mode_config_store(struct device *dev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
@@ -1398,6 +1480,7 @@ void nvgpu_remove_sysfs(struct device *dev)
|
||||
device_remove_file(dev, &dev_attr_comptag_mem_deduct);
|
||||
#ifdef CONFIG_NVGPU_MIG
|
||||
device_remove_file(dev, &dev_attr_mig_mode_config_list);
|
||||
device_remove_file(dev, &dev_attr_mig_mode_config_list_parsable);
|
||||
device_remove_file(dev, &dev_attr_mig_mode_config);
|
||||
#endif
|
||||
device_remove_file(dev, &dev_attr_emulate_mode);
|
||||
@@ -1465,6 +1548,7 @@ int nvgpu_create_sysfs(struct device *dev)
|
||||
error |= device_create_file(dev, &dev_attr_comptag_mem_deduct);
|
||||
#ifdef CONFIG_NVGPU_MIG
|
||||
error |= device_create_file(dev, &dev_attr_mig_mode_config_list);
|
||||
error |= device_create_file(dev, &dev_attr_mig_mode_config_list_parsable);
|
||||
error |= device_create_file(dev, &dev_attr_mig_mode_config);
|
||||
#endif
|
||||
error |= device_create_file(dev, &dev_attr_emulate_mode);
|
||||
|
||||
Reference in New Issue
Block a user