diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c index 4e4a476593e8..6738df836a70 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | |||
@@ -114,18 +114,19 @@ void amdgpu_virt_init_setting(struct amdgpu_device *adev) | |||
114 | uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) | 114 | uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) |
115 | { | 115 | { |
116 | signed long r; | 116 | signed long r; |
117 | unsigned long flags; | ||
117 | uint32_t val, seq; | 118 | uint32_t val, seq; |
118 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; | 119 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; |
119 | struct amdgpu_ring *ring = &kiq->ring; | 120 | struct amdgpu_ring *ring = &kiq->ring; |
120 | 121 | ||
121 | BUG_ON(!ring->funcs->emit_rreg); | 122 | BUG_ON(!ring->funcs->emit_rreg); |
122 | 123 | ||
123 | spin_lock(&kiq->ring_lock); | 124 | spin_lock_irqsave(&kiq->ring_lock, flags); |
124 | amdgpu_ring_alloc(ring, 32); | 125 | amdgpu_ring_alloc(ring, 32); |
125 | amdgpu_ring_emit_rreg(ring, reg); | 126 | amdgpu_ring_emit_rreg(ring, reg); |
126 | amdgpu_fence_emit_polling(ring, &seq); | 127 | amdgpu_fence_emit_polling(ring, &seq); |
127 | amdgpu_ring_commit(ring); | 128 | amdgpu_ring_commit(ring); |
128 | spin_unlock(&kiq->ring_lock); | 129 | spin_unlock_irqrestore(&kiq->ring_lock, flags); |
129 | 130 | ||
130 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); | 131 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); |
131 | if (r < 1) { | 132 | if (r < 1) { |
@@ -140,18 +141,19 @@ uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg) | |||
140 | void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) | 141 | void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v) |
141 | { | 142 | { |
142 | signed long r; | 143 | signed long r; |
144 | unsigned long flags; | ||
143 | uint32_t seq; | 145 | uint32_t seq; |
144 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; | 146 | struct amdgpu_kiq *kiq = &adev->gfx.kiq; |
145 | struct amdgpu_ring *ring = &kiq->ring; | 147 | struct amdgpu_ring *ring = &kiq->ring; |
146 | 148 | ||
147 | BUG_ON(!ring->funcs->emit_wreg); | 149 | BUG_ON(!ring->funcs->emit_wreg); |
148 | 150 | ||
149 | spin_lock(&kiq->ring_lock); | 151 | spin_lock_irqsave(&kiq->ring_lock, flags); |
150 | amdgpu_ring_alloc(ring, 32); | 152 | amdgpu_ring_alloc(ring, 32); |
151 | amdgpu_ring_emit_wreg(ring, reg, v); | 153 | amdgpu_ring_emit_wreg(ring, reg, v); |
152 | amdgpu_fence_emit_polling(ring, &seq); | 154 | amdgpu_fence_emit_polling(ring, &seq); |
153 | amdgpu_ring_commit(ring); | 155 | amdgpu_ring_commit(ring); |
154 | spin_unlock(&kiq->ring_lock); | 156 | spin_unlock_irqrestore(&kiq->ring_lock, flags); |
155 | 157 | ||
156 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); | 158 | r = amdgpu_fence_wait_polling(ring, seq, MAX_KIQ_REG_WAIT); |
157 | if (r < 1) | 159 | if (r < 1) |