[PATCH 2/2] drm/i915/gvt: Add new debugfs tool mmio_diff

Du, Changbin changbin.du at intel.com
Fri Oct 20 09:15:56 UTC 2017


On Fri, Oct 20, 2017 at 05:08:08PM +0800, Zhenyu Wang wrote:
> On 2017.10.17 10:00:41 +0800, changbin.du at intel.com wrote:
> > From: Changbin Du <changbin.du at intel.com>
> > 
> > This new debugfs entry is used to figure out which registers of vGPU
> > is different to host. It is a useful tool for new platform enabling
> > and debugging. When read this entry, all the diff mmio are recognized
> > and sorted by mmio offset. Besides, the bit positions of different
> > value are listed in 'Diff' column. Here is a show:
> > 
> > $ sudo cat ./mmio_diff
> > Offset   HW       vGPU     Diff
> > 00002030 000025f8 00000000 3-8,10,13
> > 00002034 012025f8 00000000 3-8,10,13,21,24
> > 00002038 027fb000 00000000 12-13,15-22,25
> > 0000203c 00003000 00000000 12-13
> > 00002054 0000000a 00000040 1,3,6
> > 00002074 012025f8 00000000 3-8,10,13,21,24
> > 00002080 fffe6000 00000000 13-14,17-31
> > 000020a8 fffffeff ffffffff 8
> > 000020d4 00000004 00000000 2
> > ....
> > 00145974 eb42718c 010c11b0 2-5,13-14,17-19,22,25,27,29-31
> > 00145978 0000002f 0000002a 0,2
> > 0014597c 0000002f 0000002a 0,2
> > 00145980 0000002b 00000028 0-1
> > 00145984 a5a87c9e b27d20c0 1-4,6,10-12,14,16,18,20,22-26,28
> > 001459c0 88390000 883c0000 16,18
> > 00146200 88350000 883a0000 16-19
> > Total: 72432, Diff: 901
> > 
> > Signed-off-by: Changbin Du <changbin.du at intel.com>
> > ---
> >  drivers/gpu/drm/i915/gvt/debugfs.c | 113 +++++++++++++++++++++++++++++++++++++
> >  1 file changed, 113 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/gvt/debugfs.c b/drivers/gpu/drm/i915/gvt/debugfs.c
> > index 02acd58..c8c09cc 100644
> > --- a/drivers/gpu/drm/i915/gvt/debugfs.c
> > +++ b/drivers/gpu/drm/i915/gvt/debugfs.c
> > @@ -21,9 +21,117 @@
> >   * SOFTWARE.
> >   */
> >  #include <linux/debugfs.h>
> > +#include <linux/list_sort.h>
> >  #include "i915_drv.h"
> >  #include "gvt.h"
> >  
> > +struct mmio_diff_param {
> > +	struct intel_vgpu *vgpu;
> > +	int total;
> > +	int diff;
> > +	struct list_head diff_mmio_list;
> > +};
> > +
> > +struct diff_mmio {
> > +	struct list_head node;
> > +	u32 offset;
> > +	u32 preg;
> > +	u32 vreg;
> > +};
> > +
> > +/* Compare two diff_mmio items. */
> > +static int mmio_offset_compare(void *priv,
> > +	struct list_head *a, struct list_head *b)
> > +{
> > +	struct diff_mmio *ma;
> > +	struct diff_mmio *mb;
> > +
> > +	ma = container_of(a, struct diff_mmio, node);
> > +	mb = container_of(b, struct diff_mmio, node);
> > +	if (ma->offset < mb->offset)
> > +		return -1;
> > +	else if (ma->offset > mb->offset)
> > +		return 1;
> > +	return 0;
> > +}
> > +
> > +static inline int mmio_diff_handler(struct intel_gvt *gvt,
> > +				    u32 offset, void *data)
> > +{
> > +	struct drm_i915_private *dev_priv = gvt->dev_priv;
> > +	struct mmio_diff_param *param = data;
> > +	struct diff_mmio *node;
> > +	u32 preg, vreg;
> > +
> > +	preg = I915_READ_NOTRACE(_MMIO(offset));
> > +	vreg = vgpu_vreg(param->vgpu, offset);
> > +
> > +	if (preg != vreg) {
> > +		node = kmalloc(sizeof(*node), GFP_KERNEL);
> > +		if (!node)
> > +			return -ENOMEM;
> > +
> > +		node->offset = offset;
> > +		node->preg = preg;
> > +		node->vreg = vreg;
> > +		list_add(&node->node, &param->diff_mmio_list);
> > +		param->diff++;
> > +	}
> > +	param->total++;
> > +	return 0;
> > +}
> > +
> > +/* Show the all the different values of tracked mmio. */
> > +static int vgpu_mmio_diff_show(struct seq_file *s, void *unused)
> > +{
> > +	struct intel_vgpu *vgpu = s->private;
> > +	struct intel_gvt *gvt = vgpu->gvt;
> > +	struct mmio_diff_param param = {
> > +		.vgpu = vgpu,
> > +		.total = 0,
> > +		.diff = 0,
> > +	};
> > +	struct diff_mmio *node, *next;
> > +
> > +	INIT_LIST_HEAD(&param.diff_mmio_list);
> > +
> > +	mutex_lock(&gvt->lock);
> > +	spin_lock_bh(&gvt->scheduler.mmio_context_lock);
> > +
> 
> need mmio_hw_access_pre()/post() for runtime pm
>

Good catch, thanks.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20171020/d8e40bb2/attachment.sig>


More information about the intel-gvt-dev mailing list