mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-23 18:16:01 +03:00
gpu: nvgpu: move force preemption flags to gr_ctx_desc
Debug boolean flags force_preemption_gfxp and force_preemption_cilp are right now stored in gr_gk20a.ctx_vars struct These flags logically are property of gr.ctx units since they indicate whether each context should be forced to gfxp/cilp preemption mode by default Move these flags to struct nvgpu_gr_ctx_desc and remove them from gr_gk20a.ctx_vars Expose below APIs from gr.ctx unit to check if flags are set nvgpu_gr_ctx_desc_force_preemption_gfxp() nvgpu_gr_ctx_desc_force_preemption_cilp() Move debugfs creation code to create corresponding debugfs to gr_gk20a_debugfs_init() and change debugfs type from "u32" to "file" Struct gr.gr_ctx_desc is created only during first poweron. Return error if this struct is not available. Remove unnecessary initialization of these variables from platform specific probe functions Jira NVGPU-3112 Change-Id: I8b2de27f0c71dd2ea5abcf94221c2e15c80073ea Signed-off-by: Deepak Nibade <dnibade@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2099398 Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Vinod Gopalakrishnakurup <vinodg@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
556e139077
commit
ee5b3823ff
@@ -12,9 +12,14 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <nvgpu/gr/ctx.h>
|
||||
|
||||
#include "common/gr/ctx_priv.h"
|
||||
|
||||
#include "debug_gr.h"
|
||||
#include "os_linux.h"
|
||||
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/debugfs.h>
|
||||
|
||||
static int gr_default_attrib_cb_size_show(struct seq_file *s, void *data)
|
||||
@@ -40,6 +45,110 @@ static const struct file_operations gr_default_attrib_cb_size_fops= {
|
||||
.release = single_release,
|
||||
};
|
||||
|
||||
static ssize_t force_preemption_gfxp_read(struct file *file,
|
||||
char __user *user_buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[3];
|
||||
struct gk20a *g = file->private_data;
|
||||
|
||||
if (g->gr->gr_ctx_desc == NULL) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (g->gr->gr_ctx_desc->force_preemption_gfxp) {
|
||||
buf[0] = 'Y';
|
||||
} else {
|
||||
buf[0] = 'N';
|
||||
}
|
||||
|
||||
buf[1] = '\n';
|
||||
buf[2] = 0x00;
|
||||
|
||||
return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
|
||||
}
|
||||
|
||||
static ssize_t force_preemption_gfxp_write(struct file *file,
|
||||
const char __user *user_buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[32];
|
||||
int buf_size;
|
||||
bool val;
|
||||
struct gk20a *g = file->private_data;
|
||||
|
||||
if (g->gr->gr_ctx_desc == NULL) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
buf_size = min(count, (sizeof(buf)-1));
|
||||
if (copy_from_user(buf, user_buf, buf_size)) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (strtobool(buf, &val) == 0) {
|
||||
g->gr->gr_ctx_desc->force_preemption_gfxp = val;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct file_operations force_preemption_gfxp_fops = {
|
||||
.open = simple_open,
|
||||
.read = force_preemption_gfxp_read,
|
||||
.write = force_preemption_gfxp_write,
|
||||
};
|
||||
|
||||
static ssize_t force_preemption_cilp_read(struct file *file,
|
||||
char __user *user_buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[3];
|
||||
struct gk20a *g = file->private_data;
|
||||
|
||||
if (g->gr->gr_ctx_desc == NULL) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (g->gr->gr_ctx_desc->force_preemption_cilp) {
|
||||
buf[0] = 'Y';
|
||||
} else {
|
||||
buf[0] = 'N';
|
||||
}
|
||||
|
||||
buf[1] = '\n';
|
||||
buf[2] = 0x00;
|
||||
|
||||
return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
|
||||
}
|
||||
|
||||
static ssize_t force_preemption_cilp_write(struct file *file,
|
||||
const char __user *user_buf, size_t count, loff_t *ppos)
|
||||
{
|
||||
char buf[32];
|
||||
int buf_size;
|
||||
bool val;
|
||||
struct gk20a *g = file->private_data;
|
||||
|
||||
if (g->gr->gr_ctx_desc == NULL) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
buf_size = min(count, (sizeof(buf)-1));
|
||||
if (copy_from_user(buf, user_buf, buf_size)) {
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
if (strtobool(buf, &val) == 0) {
|
||||
g->gr->gr_ctx_desc->force_preemption_cilp = val;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct file_operations force_preemption_cilp_fops = {
|
||||
.open = simple_open,
|
||||
.read = force_preemption_cilp_read,
|
||||
.write = force_preemption_cilp_write,
|
||||
};
|
||||
|
||||
int gr_gk20a_debugfs_init(struct gk20a *g)
|
||||
{
|
||||
struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g);
|
||||
@@ -47,7 +156,19 @@ int gr_gk20a_debugfs_init(struct gk20a *g)
|
||||
|
||||
d = debugfs_create_file(
|
||||
"gr_default_attrib_cb_size", S_IRUGO, l->debugfs, g,
|
||||
&gr_default_attrib_cb_size_fops);
|
||||
&gr_default_attrib_cb_size_fops);
|
||||
if (!d)
|
||||
return -ENOMEM;
|
||||
|
||||
d = debugfs_create_file(
|
||||
"force_preemption_gfxp", S_IRUGO|S_IWUSR, l->debugfs, g,
|
||||
&force_preemption_gfxp_fops);
|
||||
if (!d)
|
||||
return -ENOMEM;
|
||||
|
||||
d = debugfs_create_file(
|
||||
"force_preemption_cilp", S_IRUGO|S_IWUSR, l->debugfs, g,
|
||||
&force_preemption_cilp_fops);
|
||||
if (!d)
|
||||
return -ENOMEM;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user