[Intel-gfx] [bug report] drm/i915: Preallocate our mmu notifier workequeu to unbreak cpu hotplug deadlock
Dan Carpenter
dan.carpenter at oracle.com
Tue Oct 17 12:37:38 UTC 2017
Hello Daniel Vetter,
The patch 7741b547b6e0: "drm/i915: Preallocate our mmu notifier
workequeu to unbreak cpu hotplug deadlock" from Oct 9, 2017, leads to
the following static checker warning:
drivers/gpu/drm/i915/i915_gem_userptr.c:233 i915_mmu_notifier_find()
error: 'mn' dereferencing possible ERR_PTR()
drivers/gpu/drm/i915/i915_gem_userptr.c
201 static struct i915_mmu_notifier *
202 i915_mmu_notifier_find(struct i915_mm_struct *mm)
203 {
204 struct i915_mmu_notifier *mn;
205 int err = 0;
206
207 mn = mm->mn;
208 if (mn)
209 return mn;
210
211 mn = i915_mmu_notifier_create(mm->mm);
212 if (IS_ERR(mn))
213 err = PTR_ERR(mn);
^^^^^^^^^^^^^^^^
error pointer here.
214
215 down_write(&mm->mm->mmap_sem);
216 mutex_lock(&mm->i915->mm_lock);
217 if (mm->mn == NULL && !err) {
218 /* Protected by mmap_sem (write-lock) */
219 err = __mmu_notifier_register(&mn->mn, mm->mm);
220 if (!err) {
221 /* Protected by mm_lock */
222 mm->mn = fetch_and_zero(&mn);
223 }
224 } else {
225 /* someone else raced and successfully installed the mmu
226 * notifier, we can cancel our own errors */
227 err = 0;
^^^^^^^
We clear "err" here.
228 }
229 mutex_unlock(&mm->i915->mm_lock);
230 up_write(&mm->mm->mmap_sem);
231
232 if (mn) {
233 destroy_workqueue(mn->wq);
^^^^^^^^^^^^^^^^^^^^^^^^
dereference.
234 kfree(mn);
235 }
236
237 return err ? ERR_PTR(err) : mm->mn;
238 }
regards,
dan carpenter
More information about the Intel-gfx
mailing list