Merge commit 'ickle/for-anholt' into drm-intel-next
This commit is contained in:
@@ -1468,6 +1468,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
|
|||||||
spin_lock_init(&dev_priv->user_irq_lock);
|
spin_lock_init(&dev_priv->user_irq_lock);
|
||||||
spin_lock_init(&dev_priv->error_lock);
|
spin_lock_init(&dev_priv->error_lock);
|
||||||
dev_priv->user_irq_refcount = 0;
|
dev_priv->user_irq_refcount = 0;
|
||||||
|
dev_priv->trace_irq_seqno = 0;
|
||||||
|
|
||||||
ret = drm_vblank_init(dev, I915_NUM_PIPE);
|
ret = drm_vblank_init(dev, I915_NUM_PIPE);
|
||||||
|
|
||||||
|
@@ -202,6 +202,7 @@ typedef struct drm_i915_private {
|
|||||||
spinlock_t user_irq_lock;
|
spinlock_t user_irq_lock;
|
||||||
/** Refcount for i915_user_irq_get() versus i915_user_irq_put(). */
|
/** Refcount for i915_user_irq_get() versus i915_user_irq_put(). */
|
||||||
int user_irq_refcount;
|
int user_irq_refcount;
|
||||||
|
u32 trace_irq_seqno;
|
||||||
/** Cached value of IMR to avoid reads in updating the bitfield */
|
/** Cached value of IMR to avoid reads in updating the bitfield */
|
||||||
u32 irq_mask_reg;
|
u32 irq_mask_reg;
|
||||||
u32 pipestat[2];
|
u32 pipestat[2];
|
||||||
@@ -665,6 +666,7 @@ extern int i915_irq_emit(struct drm_device *dev, void *data,
|
|||||||
extern int i915_irq_wait(struct drm_device *dev, void *data,
|
extern int i915_irq_wait(struct drm_device *dev, void *data,
|
||||||
struct drm_file *file_priv);
|
struct drm_file *file_priv);
|
||||||
void i915_user_irq_get(struct drm_device *dev);
|
void i915_user_irq_get(struct drm_device *dev);
|
||||||
|
void i915_trace_irq_get(struct drm_device *dev, u32 seqno);
|
||||||
void i915_user_irq_put(struct drm_device *dev);
|
void i915_user_irq_put(struct drm_device *dev);
|
||||||
extern void i915_enable_interrupt (struct drm_device *dev);
|
extern void i915_enable_interrupt (struct drm_device *dev);
|
||||||
|
|
||||||
|
@@ -1770,7 +1770,7 @@ i915_gem_retire_requests(struct drm_device *dev)
|
|||||||
drm_i915_private_t *dev_priv = dev->dev_private;
|
drm_i915_private_t *dev_priv = dev->dev_private;
|
||||||
uint32_t seqno;
|
uint32_t seqno;
|
||||||
|
|
||||||
if (!dev_priv->hw_status_page)
|
if (!dev_priv->hw_status_page || list_empty(&dev_priv->mm.request_list))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
seqno = i915_get_gem_seqno(dev);
|
seqno = i915_get_gem_seqno(dev);
|
||||||
@@ -1794,6 +1794,12 @@ i915_gem_retire_requests(struct drm_device *dev)
|
|||||||
} else
|
} else
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (unlikely (dev_priv->trace_irq_seqno &&
|
||||||
|
i915_seqno_passed(dev_priv->trace_irq_seqno, seqno))) {
|
||||||
|
i915_user_irq_put(dev);
|
||||||
|
dev_priv->trace_irq_seqno = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -3352,7 +3358,7 @@ i915_dispatch_gem_execbuffer(struct drm_device *dev,
|
|||||||
exec_start = (uint32_t) exec_offset + exec->batch_start_offset;
|
exec_start = (uint32_t) exec_offset + exec->batch_start_offset;
|
||||||
exec_len = (uint32_t) exec->batch_len;
|
exec_len = (uint32_t) exec->batch_len;
|
||||||
|
|
||||||
trace_i915_gem_request_submit(dev, dev_priv->mm.next_gem_seqno);
|
trace_i915_gem_request_submit(dev, dev_priv->mm.next_gem_seqno + 1);
|
||||||
|
|
||||||
count = nbox ? nbox : 1;
|
count = nbox ? nbox : 1;
|
||||||
|
|
||||||
|
@@ -725,6 +725,16 @@ void i915_user_irq_put(struct drm_device *dev)
|
|||||||
spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
|
spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void i915_trace_irq_get(struct drm_device *dev, u32 seqno)
|
||||||
|
{
|
||||||
|
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
||||||
|
|
||||||
|
if (dev_priv->trace_irq_seqno == 0)
|
||||||
|
i915_user_irq_get(dev);
|
||||||
|
|
||||||
|
dev_priv->trace_irq_seqno = seqno;
|
||||||
|
}
|
||||||
|
|
||||||
static int i915_wait_irq(struct drm_device * dev, int irq_nr)
|
static int i915_wait_irq(struct drm_device * dev, int irq_nr)
|
||||||
{
|
{
|
||||||
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
|
||||||
|
@@ -158,16 +158,17 @@ TRACE_EVENT(i915_gem_request_submit,
|
|||||||
TP_ARGS(dev, seqno),
|
TP_ARGS(dev, seqno),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
__field(u32, seqno)
|
__field(u32, seqno)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
__entry->seqno = seqno;
|
__entry->seqno = seqno;
|
||||||
|
i915_trace_irq_get(dev, seqno);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p, seqno=%u", __entry->dev, __entry->seqno)
|
TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(i915_gem_request_flush,
|
TRACE_EVENT(i915_gem_request_flush,
|
||||||
@@ -178,20 +179,20 @@ TRACE_EVENT(i915_gem_request_flush,
|
|||||||
TP_ARGS(dev, seqno, flush_domains, invalidate_domains),
|
TP_ARGS(dev, seqno, flush_domains, invalidate_domains),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
__field(u32, seqno)
|
__field(u32, seqno)
|
||||||
__field(u32, flush_domains)
|
__field(u32, flush_domains)
|
||||||
__field(u32, invalidate_domains)
|
__field(u32, invalidate_domains)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
__entry->seqno = seqno;
|
__entry->seqno = seqno;
|
||||||
__entry->flush_domains = flush_domains;
|
__entry->flush_domains = flush_domains;
|
||||||
__entry->invalidate_domains = invalidate_domains;
|
__entry->invalidate_domains = invalidate_domains;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p, seqno=%u, flush=%04x, invalidate=%04x",
|
TP_printk("dev=%u, seqno=%u, flush=%04x, invalidate=%04x",
|
||||||
__entry->dev, __entry->seqno,
|
__entry->dev, __entry->seqno,
|
||||||
__entry->flush_domains, __entry->invalidate_domains)
|
__entry->flush_domains, __entry->invalidate_domains)
|
||||||
);
|
);
|
||||||
@@ -204,16 +205,16 @@ TRACE_EVENT(i915_gem_request_complete,
|
|||||||
TP_ARGS(dev, seqno),
|
TP_ARGS(dev, seqno),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
__field(u32, seqno)
|
__field(u32, seqno)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
__entry->seqno = seqno;
|
__entry->seqno = seqno;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p, seqno=%u", __entry->dev, __entry->seqno)
|
TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(i915_gem_request_retire,
|
TRACE_EVENT(i915_gem_request_retire,
|
||||||
@@ -223,16 +224,16 @@ TRACE_EVENT(i915_gem_request_retire,
|
|||||||
TP_ARGS(dev, seqno),
|
TP_ARGS(dev, seqno),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
__field(u32, seqno)
|
__field(u32, seqno)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
__entry->seqno = seqno;
|
__entry->seqno = seqno;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p, seqno=%u", __entry->dev, __entry->seqno)
|
TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(i915_gem_request_wait_begin,
|
TRACE_EVENT(i915_gem_request_wait_begin,
|
||||||
@@ -242,16 +243,16 @@ TRACE_EVENT(i915_gem_request_wait_begin,
|
|||||||
TP_ARGS(dev, seqno),
|
TP_ARGS(dev, seqno),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
__field(u32, seqno)
|
__field(u32, seqno)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
__entry->seqno = seqno;
|
__entry->seqno = seqno;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p, seqno=%u", __entry->dev, __entry->seqno)
|
TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(i915_gem_request_wait_end,
|
TRACE_EVENT(i915_gem_request_wait_end,
|
||||||
@@ -261,16 +262,16 @@ TRACE_EVENT(i915_gem_request_wait_end,
|
|||||||
TP_ARGS(dev, seqno),
|
TP_ARGS(dev, seqno),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
__field(u32, seqno)
|
__field(u32, seqno)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
__entry->seqno = seqno;
|
__entry->seqno = seqno;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p, seqno=%u", __entry->dev, __entry->seqno)
|
TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(i915_ring_wait_begin,
|
TRACE_EVENT(i915_ring_wait_begin,
|
||||||
@@ -280,14 +281,14 @@ TRACE_EVENT(i915_ring_wait_begin,
|
|||||||
TP_ARGS(dev),
|
TP_ARGS(dev),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p", __entry->dev)
|
TP_printk("dev=%u", __entry->dev)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(i915_ring_wait_end,
|
TRACE_EVENT(i915_ring_wait_end,
|
||||||
@@ -297,14 +298,14 @@ TRACE_EVENT(i915_ring_wait_end,
|
|||||||
TP_ARGS(dev),
|
TP_ARGS(dev),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct drm_device *, dev)
|
__field(u32, dev)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->dev = dev;
|
__entry->dev = dev->primary->index;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("dev=%p", __entry->dev)
|
TP_printk("dev=%u", __entry->dev)
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif /* _I915_TRACE_H_ */
|
#endif /* _I915_TRACE_H_ */
|
||||||
|
Reference in New Issue
Block a user