[Cbe-oss-dev] [PATCH 7:7] spufs: implement debug file for analyzing application hangs

Luke Browning lukebr at linux.vnet.ibm.com
Sat May 17 01:06:02 EST 2008


Provide x_ctxt debug file

Add a ctxt file to the spu virtual file system that shows spu context 
information that is used in scheduling.  This file is useful for analyzing
application hangs and performance problems.  In some cases, it may be 
used to isolate problems to either the kernel or the application.

This file displays fields which are implementation specific.  Not only
may the sets of fields displayed change over time, but the significance
of the data in these fields may change.  This information is intended to 
be used by a limit set of people, spufs kernel developers.  

This file should NOT be used by applications of any kind.

Signed-off-by: Luke Browning <lukebrowning at us.ibm.com>

---
Index: spufs/arch/powerpc/platforms/cell/spufs/file.c
===================================================================
--- spufs.orig/arch/powerpc/platforms/cell/spufs/file.c
+++ spufs/arch/powerpc/platforms/cell/spufs/file.c
@@ -2411,6 +2411,58 @@ static const struct file_operations spuf
 	.release	= single_release,
 };
 
+static int spufs_show_x_ctxt(struct seq_file *s, void *private)
+{
+	struct spu_context *ctx = s->private;
+	u64 mfc_control_RW;
+
+	mutex_lock(&ctx->state_mutex);
+	if (ctx->spu) {
+		struct spu *spu = ctx->spu;
+		struct spu_priv2 __iomem *priv2 = spu->priv2;
+
+		spin_lock_irq(&spu->register_lock);
+		mfc_control_RW = in_be64(&priv2->mfc_control_RW);
+		spin_unlock_irq(&spu->register_lock);
+	} else {
+		struct spu_state *csa = &ctx->csa;
+
+		mfc_control_RW = csa->priv2.mfc_control_RW;
+	}
+
+	seq_printf(s, "%c flgs(%lx) sflgs(%lx) pri(%d) ts(%d) scnt(0x%04x)"
+		" spu(%02d) %c %lx %lx %lx %lx %x %x\n",
+		ctx->state == SPU_STATE_SAVED ? 'S' : 'R',
+		ctx->flags,
+		ctx->sched_flags,
+		ctx->prio,
+		ctx->time_slice,
+		ctx->sched_count,
+		ctx->spu ? ctx->spu->number : -1,
+		!list_empty(&ctx->rq) ? 'q' : ' ',
+		ctx->csa.class_0_pending,
+		ctx->csa.class_0_dar,
+		ctx->csa.class_1_dsisr,
+		mfc_control_RW,
+		ctx->ops->runcntl_read(ctx),
+		ctx->ops->status_read(ctx));
+
+	mutex_unlock(&ctx->state_mutex);
+
+	return 0;
+}
+
+static int spufs_x_ctxt_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, spufs_show_x_ctxt, SPUFS_I(inode)->i_ctx);
+}
+
+static const struct file_operations spufs_x_ctxt_fops = {
+	.open           = spufs_x_ctxt_open,
+	.read           = seq_read,
+	.llseek         = seq_lseek,
+	.release        = single_release,
+};
 
 struct tree_descr spufs_dir_contents[] = {
 	{ "capabilities", &spufs_caps_fops, 0444, },
@@ -2447,6 +2499,7 @@ struct tree_descr spufs_dir_contents[] =
 	{ "proxydma_info", &spufs_proxydma_info_fops, 0444, },
 	{ "tid", &spufs_tid_fops, 0444, },
 	{ "stat", &spufs_stat_fops, 0444, },
+	{ "x_ctxt", &spufs_x_ctxt_fops, 0444, },
 	{},
 };
 
@@ -2472,6 +2525,7 @@ struct tree_descr spufs_dir_nosched_cont
 	{ "object-id", &spufs_object_id_ops, 0666, },
 	{ "tid", &spufs_tid_fops, 0444, },
 	{ "stat", &spufs_stat_fops, 0444, },
+	{ "x_ctxt", &spufs_x_ctxt_fops, 0444, },
 	{},
 };





More information about the cbe-oss-dev mailing list