arm: tegra: nvhost: Add debugfs entry for null GPU kickoff
Janne Hellsten [Tue, 24 May 2011 12:34:13 +0000 (15:34 +0300)]
Add a debugfs entry for enabling/disabling GPU null kickoff of
graphics submits on a per process basis.

Restructure existing tegra_host debugfs node by making the existing
tegra_host file a directory and moving the status query under its own
status node.  Thus the file system structure changes from:

/sys/kernel/debug/tegra_host - status

to

/sys/kernel/debug/tegra_host/status - status
/sys/kernel/debug/tegra_host/null_kickoff_pid - null GPU ctl

Bug 826513

Original-Change-Id: Id7ccbce1bb9e53c6e3b036d10f23563fab6bf481
Reviewed-on: http://git-master/r/32765
Reviewed-by: Janne Hellsten <jhellsten@nvidia.com>
Tested-by: Janne Hellsten <jhellsten@nvidia.com>
Reviewed-by: Yu-Huan Hsu <yhsu@nvidia.com>
Reviewed-by: Daniel Willemsen <dwillemsen@nvidia.com>
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>

Rebase-Id: R8bfacafbd0a74cddf33cded06331e52b53564156

drivers/video/tegra/host/debug.c
drivers/video/tegra/host/dev.c
drivers/video/tegra/host/dev.h

index c7c6a0c..07fd184 100644 (file)
@@ -30,6 +30,8 @@ struct output {
        char buf[256];
 };
 
+pid_t nvhost_debug_null_kickoff_pid;
+
 static void write_to_seqfile(void *ctx, const char* str, size_t len)
 {
        seq_write((struct seq_file *)ctx, str, len);
@@ -371,8 +373,13 @@ static const struct file_operations nvhost_debug_fops = {
 
 void nvhost_debug_init(struct nvhost_master *master)
 {
-       debugfs_create_file("tegra_host", S_IRUGO, NULL,
+       struct dentry *de = debugfs_create_dir("tegra_host", NULL);
+
+       debugfs_create_file("status", S_IRUGO, de,
                        master, &nvhost_debug_fops);
+
+       debugfs_create_u32("null_kickoff_pid", S_IRUGO|S_IWUGO, de,
+                       &nvhost_debug_null_kickoff_pid);
 }
 #else
 void nvhost_debug_init(struct nvhost_master *master)
index 4a4b550..97ea642 100644 (file)
@@ -254,6 +254,9 @@ static int nvhost_ioctl_channel_flush(
                return num_unpin;
        }
 
+       if (nvhost_debug_null_kickoff_pid == current->tgid)
+               null_kickoff = 1;
+
        /* context switch if needed, and submit user's gathers to the channel */
        err = nvhost_channel_submit(ctx->ch, ctx->hwctx, ctx->nvmap,
                                ctx->gathers, ctx->cur_gather,
index e448dff..688fa43 100644 (file)
@@ -51,4 +51,6 @@ struct nvhost_master {
 void nvhost_debug_init(struct nvhost_master *master);
 void nvhost_debug_dump(struct nvhost_master *master);
 
+extern pid_t nvhost_debug_null_kickoff_pid;
+
 #endif