Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 11:08:40 UTC 2021

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_engine.h
            intel_engine_cs.c

Log Message:
NetBSD-ize execlists_active_{un,}lock_bh

Author: Maya Rashish <m...@netbsd.org>
Committer: Taylor R Campbell <riastr...@netbsd.org>


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine.h
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine.h:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine.h	Sun Dec 19 11:08:40 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_engine.h,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_engine.h,v 1.3 2021/12/19 11:08:40 riastradh Exp $	*/
 
 /* SPDX-License-Identifier: MIT */
 #ifndef _INTEL_RINGBUFFER_H_
@@ -112,6 +112,7 @@ execlists_active(const struct intel_engi
 	return *READ_ONCE(execlists->active);
 }
 
+#ifdef __linux__
 static inline void
 execlists_active_lock_bh(struct intel_engine_execlists *execlists)
 {
@@ -125,6 +126,22 @@ execlists_active_unlock_bh(struct intel_
 	tasklet_unlock(&execlists->tasklet);
 	local_bh_enable(); /* restore softirq, and kick ksoftirqd! */
 }
+#else
+static inline int
+execlists_active_lock_bh(struct intel_engine_execlists *execlists)
+{
+	int s = splsoftserial(); /* prevent local softirq and lock recursion */
+	tasklet_lock(&execlists->tasklet);
+	return s;
+}
+
+static inline void
+execlists_active_unlock_bh(struct intel_engine_execlists *execlists, int s)
+{
+	tasklet_unlock(&execlists->tasklet);
+	splraise(s); /* restore softirq, and kick ksoftirqd! */
+}
+#endif
 
 struct i915_request *
 execlists_unwind_incomplete_requests(struct intel_engine_execlists *execlists);

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.3	Sun Dec 19 01:21:53 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c	Sun Dec 19 11:08:40 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_engine_cs.c,v 1.3 2021/12/19 01:21:53 riastradh Exp $	*/
+/*	$NetBSD: intel_engine_cs.c,v 1.4 2021/12/19 11:08:40 riastradh Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_engine_cs.c,v 1.3 2021/12/19 01:21:53 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_engine_cs.c,v 1.4 2021/12/19 11:08:40 riastradh Exp $");
 
 #include <drm/drm_print.h>
 
@@ -1345,7 +1345,11 @@ static void intel_engine_print_registers
 				   idx, hws[idx * 2], hws[idx * 2 + 1]);
 		}
 
+#ifdef __linux__
 		execlists_active_lock_bh(execlists);
+#else
+		int s = execlists_active_lock_bh(execlists);
+#endif
 		rcu_read_lock();
 		for (port = execlists->active; (rq = *port); port++) {
 			char hdr[80];
@@ -1385,7 +1389,11 @@ static void intel_engine_print_registers
 				intel_timeline_put(tl);
 		}
 		rcu_read_unlock();
+#ifdef __linux__
 		execlists_active_unlock_bh(execlists);
+#else
+		execlists_active_unlock_bh(execlists, s);
+#endif
 	} else if (INTEL_GEN(dev_priv) > 6) {
 		drm_printf(m, "\tPP_DIR_BASE: 0x%08x\n",
 			   ENGINE_READ(engine, RING_PP_DIR_BASE));
@@ -1548,7 +1556,11 @@ int intel_enable_engine_stats(struct int
 	if (!intel_engine_supports_stats(engine))
 		return -ENODEV;
 
+#ifdef __linux__
 	execlists_active_lock_bh(execlists);
+#else
+	int s = execlists_active_lock_bh(execlists);
+#endif
 	write_seqlock_irqsave(&engine->stats.lock, flags);
 
 	if (unlikely(engine->stats.enabled == ~0)) {
@@ -1578,7 +1590,11 @@ int intel_enable_engine_stats(struct int
 
 unlock:
 	write_sequnlock_irqrestore(&engine->stats.lock, flags);
+#ifdef __linux__
 	execlists_active_unlock_bh(execlists);
+#else
+	execlists_active_unlock_bh(execlists, s);
+#endif
 
 	return err;
 }

Reply via email to