drm/i915: Protect pipe_crc->entries update
Set the pipe_crc->entries pointer while holding the relevant spinlock. Doesn't matter too much since a spurious pipe crc interrupt would then just update one entry but later that entry would get cleared when head and tail are both set to 0. But being a bit more paranoid doesn't hurt. Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
2be57922d4
commit
4252fbc3d4
@ -3410,13 +3410,15 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe,
|
||||
|
||||
/* none -> real source transition */
|
||||
if (source) {
|
||||
struct intel_pipe_crc_entry *entries;
|
||||
|
||||
DRM_DEBUG_DRIVER("collecting CRCs for pipe %c, %s\n",
|
||||
pipe_name(pipe), pipe_crc_source_name(source));
|
||||
|
||||
pipe_crc->entries = kzalloc(sizeof(*pipe_crc->entries) *
|
||||
INTEL_PIPE_CRC_ENTRIES_NR,
|
||||
GFP_KERNEL);
|
||||
if (!pipe_crc->entries)
|
||||
entries = kzalloc(sizeof(*pipe_crc->entries) *
|
||||
INTEL_PIPE_CRC_ENTRIES_NR,
|
||||
GFP_KERNEL);
|
||||
if (!entries)
|
||||
return -ENOMEM;
|
||||
|
||||
/*
|
||||
@ -3428,6 +3430,7 @@ static int pipe_crc_set_source(struct drm_device *dev, enum pipe pipe,
|
||||
hsw_disable_ips(crtc);
|
||||
|
||||
spin_lock_irq(&pipe_crc->lock);
|
||||
pipe_crc->entries = entries;
|
||||
pipe_crc->head = 0;
|
||||
pipe_crc->tail = 0;
|
||||
spin_unlock_irq(&pipe_crc->lock);
|
||||
|
Loading…
x
Reference in New Issue
Block a user