Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/external/bsd/drm2/dist/drm/amd/scheduler Fix locking in ...
details: https://anonhg.NetBSD.org/src/rev/30efe86719a0
branches: trunk
changeset: 366295:30efe86719a0
user: riastradh <riastradh%NetBSD.org@localhost>
date: Mon Aug 27 14:42:07 2018 +0000
description:
Fix locking in amd_sched_wakeup and amd_sched_entity_in.
diffstat:
sys/external/bsd/drm2/dist/drm/amd/scheduler/amdgpu_gpu_scheduler.c | 15 +++++----
1 files changed, 8 insertions(+), 7 deletions(-)
diffs (60 lines):
diff -r 98125d2033fc -r 30efe86719a0 sys/external/bsd/drm2/dist/drm/amd/scheduler/amdgpu_gpu_scheduler.c
--- a/sys/external/bsd/drm2/dist/drm/amd/scheduler/amdgpu_gpu_scheduler.c Mon Aug 27 14:41:53 2018 +0000
+++ b/sys/external/bsd/drm2/dist/drm/amd/scheduler/amdgpu_gpu_scheduler.c Mon Aug 27 14:42:07 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: amdgpu_gpu_scheduler.c,v 1.1 2018/08/27 14:10:14 riastradh Exp $ */
+/* $NetBSD: amdgpu_gpu_scheduler.c,v 1.2 2018/08/27 14:42:07 riastradh Exp $ */
/*
* Copyright 2015 Advanced Micro Devices, Inc.
@@ -24,7 +24,7 @@
*
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdgpu_gpu_scheduler.c,v 1.1 2018/08/27 14:10:14 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdgpu_gpu_scheduler.c,v 1.2 2018/08/27 14:42:07 riastradh Exp $");
#include <sys/kthread.h>
@@ -239,7 +239,9 @@
{
entity->dependency = NULL;
fence_put(f);
+ spin_lock(&entity->sched->job_lock);
amd_sched_wakeup(entity->sched);
+ spin_unlock(&entity->sched->job_lock);
}
static void amd_sched_entity_wakeup(struct fence *f, struct fence_cb *cb)
@@ -313,15 +315,14 @@
struct amd_sched_entity *entity = sched_job->s_entity;
bool added, first = false;
- spin_lock(&entity->queue_lock);
+ BUG_ON(!spin_is_locked(&sched->job_lock));
+
added = kfifo_in(&entity->job_queue, &sched_job,
sizeof(sched_job)) == sizeof(sched_job);
if (added && kfifo_len(&entity->job_queue) == sizeof(sched_job))
first = true;
- spin_unlock(&entity->queue_lock);
-
/* first job wakes up scheduler */
if (first)
amd_sched_wakeup(sched);
@@ -368,11 +369,11 @@
*/
static void amd_sched_wakeup(struct amd_gpu_scheduler *sched)
{
+
+ BUG_ON(!spin_is_locked(&sched->job_lock));
if (amd_sched_ready(sched)) {
#ifdef __NetBSD__
- spin_lock(&sched->job_lock);
DRM_SPIN_WAKEUP_ONE(&sched->wake_up_worker, &sched->job_lock);
- spin_unlock(&sched->job_lock);
#else
wake_up_interruptible(&sched->wake_up_worker);
#endif
Home |
Main Index |
Thread Index |
Old Index