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; }