Module Name:    src
Committed By:   riastradh
Date:           Sun Dec 19 11:38:37 UTC 2021

Modified Files:
        src/sys/external/bsd/common/include/linux: printk.h
        src/sys/external/bsd/drm2/dist/drm/i915: i915_priolist_types.h
        src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_engine_cs.c
            intel_engine_heartbeat.c intel_engine_user.c
        src/sys/external/bsd/drm2/i915drm: files.i915drmkms
        src/sys/external/bsd/drm2/include/linux: hardirq.h lockdep.h spinlock.h

Log Message:
i915: hack hack hack


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/external/bsd/common/include/linux/printk.h
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c
cvs rdiff -u -r1.2 -r1.3 \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_heartbeat.c \
    src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_user.c
cvs rdiff -u -r1.75 -r1.76 src/sys/external/bsd/drm2/i915drm/files.i915drmkms
cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/include/linux/hardirq.h
cvs rdiff -u -r1.7 -r1.8 src/sys/external/bsd/drm2/include/linux/lockdep.h
cvs rdiff -u -r1.11 -r1.12 src/sys/external/bsd/drm2/include/linux/spinlock.h

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/common/include/linux/printk.h
diff -u src/sys/external/bsd/common/include/linux/printk.h:1.10 src/sys/external/bsd/common/include/linux/printk.h:1.11
--- src/sys/external/bsd/common/include/linux/printk.h:1.10	Sun Dec 19 10:57:05 2021
+++ src/sys/external/bsd/common/include/linux/printk.h	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: printk.h,v 1.10 2021/12/19 10:57:05 riastradh Exp $	*/
+/*	$NetBSD: printk.h,v 1.11 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -67,12 +67,12 @@ struct va_format {
 #define	DUMP_PREFIX_OFFSET	1
 #define	DUMP_PREFIX_ADDRESS	2
 
-static inline void
+static inline size_t
 hex_dump_to_buffer(const void *buf, size_t buf_size, int bytes_per_line,
     int bytes_per_group, char *output, size_t output_size, bool ascii __unused)
 {
 	const uint8_t *bytes = buf;
-	size_t i = 0, n;
+	int i = 0, t = 0, n;
 
 	KASSERT(output_size >= 1);
 	KASSERT((bytes_per_line == 16) || (bytes_per_line == 32));
@@ -83,6 +83,7 @@ hex_dump_to_buffer(const void *buf, size
 	output[output_size - 1] = '\0';
 	while (i < buf_size) {
 		n = snprintf(output, output_size, "%02x", bytes[i++]);
+		t += n;
 		if (n >= output_size)
 			break;
 		output += n; output_size -= n;
@@ -92,10 +93,13 @@ hex_dump_to_buffer(const void *buf, size
 			n = snprintf(output, output_size, " ");
 		else
 			n = 0;
+		t += n;
 		if (n >= output_size)
 			break;
 		output += n; output_size -= n;
 	}
+
+	return t;
 }
 
 static inline void

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h:1.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h:1.2	Sat Dec 18 23:45:28 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_priolist_types.h	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_priolist_types.h,v 1.2 2021/12/18 23:45:28 riastradh Exp $	*/
+/*	$NetBSD: i915_priolist_types.h,v 1.3 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -27,7 +27,7 @@ enum {
 };
 
 #define I915_USER_PRIORITY_SHIFT 2
-#define I915_USER_PRIORITY(x) ((x) << I915_USER_PRIORITY_SHIFT)
+#define I915_USER_PRIORITY(x) ((x) * (1 << I915_USER_PRIORITY_SHIFT))
 
 #define I915_PRIORITY_COUNT BIT(I915_USER_PRIORITY_SHIFT)
 #define I915_PRIORITY_MASK (I915_PRIORITY_COUNT - 1)

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.4 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.4	Sun Dec 19 11:08:40 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_engine_cs.c,v 1.4 2021/12/19 11:08:40 riastradh Exp $	*/
+/*	$NetBSD: intel_engine_cs.c,v 1.5 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_engine_cs.c,v 1.4 2021/12/19 11:08:40 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_engine_cs.c,v 1.5 2021/12/19 11:38:37 riastradh Exp $");
 
 #include <drm/drm_print.h>
 
@@ -1059,14 +1059,22 @@ void intel_engine_flush_submission(struc
 	struct tasklet_struct *t = &engine->execlists.tasklet;
 
 	if (__tasklet_is_scheduled(t)) {
+#ifdef __NetBSD__
+		int s = splsoftserial();
+#else
 		local_bh_disable();
+#endif
 		if (tasklet_trylock(t)) {
 			/* Must wait for any GPU reset in progress. */
 			if (__tasklet_is_enabled(t))
 				t->func(t->data);
 			tasklet_unlock(t);
 		}
+#ifdef __NetBSD__
+		splx(s);
+#else
 		local_bh_enable();
+#endif
 	}
 
 	/* Otherwise flush the tasklet if it was running on another cpu */
@@ -1091,7 +1099,11 @@ bool intel_engine_is_idle(struct intel_e
 
 	/* Waiting to drain ELSP? */
 	if (execlists_active(&engine->execlists)) {
+#ifdef __NetBSD__
+		xc_barrier(XC_HIGHPRI);
+#else
 		synchronize_hardirq(engine->i915->drm.pdev->irq);
+#endif
 
 		intel_engine_flush_submission(engine);
 
@@ -1180,9 +1192,9 @@ static void print_request(struct drm_pri
 
 	x = print_sched_attr(rq->i915, &rq->sched.attr, buf, x, sizeof(buf));
 
-	drm_printf(m, "%s %llx:%llx%s%s %s @ %dms: %s\n",
+	drm_printf(m, "%s %"PRIx64":%"PRIx64"%s%s %s @ %dms: %s\n",
 		   prefix,
-		   rq->fence.context, rq->fence.seqno,
+		   (uint64_t)rq->fence.context, (uint64_t)rq->fence.seqno,
 		   i915_request_completed(rq) ? "!" :
 		   i915_request_started(rq) ? "*" :
 		   "",
@@ -1196,6 +1208,8 @@ static void print_request(struct drm_pri
 		   name);
 }
 
+#define	hexdump	intel_hexdump
+
 static void hexdump(struct drm_printer *m, const void *buf, size_t len)
 {
 	const size_t rowsize = 8 * sizeof(u32);
@@ -1248,11 +1262,19 @@ static struct intel_timeline *get_timeli
 
 static const char *repr_timer(const struct timer_list *t)
 {
+#ifdef __NetBSD__
+	if (!callout_active(__UNCONST(&t->tl_callout)))
+		return "inactive";
+
+	if (callout_pending(__UNCONST(&t->tl_callout)))
+		return "pending";
+#else
 	if (!READ_ONCE(t->expires))
 		return "inactive";
 
 	if (timer_pending(t))
 		return "active";
+#endif
 
 	return "expired";
 }
@@ -1319,9 +1341,14 @@ static void intel_engine_print_registers
 		u8 read, write;
 
 		drm_printf(m, "\tExeclist tasklet queued? %s (%s), preempt? %s, timeslice? %s\n",
+#ifdef __NetBSD__		/* XXX sigh */
+			   "<abstraction violation>",
+			   "<abstraction violation>",
+#else
 			   yesno(test_bit(TASKLET_STATE_SCHED,
 					  &engine->execlists.tasklet.state)),
 			   enableddisabled(!atomic_read(&engine->execlists.tasklet.count)),
+#endif
 			   repr_timer(&engine->execlists.preempt),
 			   repr_timer(&engine->execlists.timer));
 
@@ -1389,10 +1416,10 @@ static void intel_engine_print_registers
 				intel_timeline_put(tl);
 		}
 		rcu_read_unlock();
-#ifdef __linux__
-		execlists_active_unlock_bh(execlists);
-#else
+#ifdef __NetBSD__
 		execlists_active_unlock_bh(execlists, s);
+#else
+		execlists_active_unlock_bh(execlists);
 #endif
 	} else if (INTEL_GEN(dev_priv) > 6) {
 		drm_printf(m, "\tPP_DIR_BASE: 0x%08x\n",
@@ -1556,10 +1583,10 @@ int intel_enable_engine_stats(struct int
 	if (!intel_engine_supports_stats(engine))
 		return -ENODEV;
 
-#ifdef __linux__
-	execlists_active_lock_bh(execlists);
-#else
+#ifdef __NetBSD__
 	int s = execlists_active_lock_bh(execlists);
+#else
+	execlists_active_lock_bh(execlists);
 #endif
 	write_seqlock_irqsave(&engine->stats.lock, flags);
 
@@ -1590,10 +1617,10 @@ int intel_enable_engine_stats(struct int
 
 unlock:
 	write_sequnlock_irqrestore(&engine->stats.lock, flags);
-#ifdef __linux__
-	execlists_active_unlock_bh(execlists);
-#else
+#ifdef __NetBSD__
 	execlists_active_unlock_bh(execlists, s);
+#else
+	execlists_active_unlock_bh(execlists);
 #endif
 
 	return err;

Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_heartbeat.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_heartbeat.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_heartbeat.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_heartbeat.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_heartbeat.c	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_engine_heartbeat.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_engine_heartbeat.c,v 1.3 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_engine_heartbeat.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_engine_heartbeat.c,v 1.3 2021/12/19 11:38:37 riastradh Exp $");
 
 #include "i915_request.h"
 
@@ -95,9 +95,17 @@ static void heartbeat(struct work_struct
 			if (rq->sched.attr.priority >= attr.priority)
 				attr.priority = I915_PRIORITY_BARRIER;
 
+#ifdef __NetBSD__
+			int s = splsoftserial();
+#else
 			local_bh_disable();
+#endif
 			engine->schedule(rq, &attr);
+#ifdef __NetBSD__
+			splx(s);
+#else
 			local_bh_enable();
+#endif
 		} else {
 			if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_GEM))
 				show_heartbeat(rq, engine);
Index: src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_user.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_user.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_user.c:1.3
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_user.c:1.2	Sat Dec 18 23:45:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_user.c	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: intel_engine_user.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $	*/
+/*	$NetBSD: intel_engine_user.c,v 1.3 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_engine_user.c,v 1.2 2021/12/18 23:45:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_engine_user.c,v 1.3 2021/12/19 11:38:37 riastradh Exp $");
 
 #include <linux/list.h>
 #include <linux/list_sort.h>
@@ -18,6 +18,8 @@ __KERNEL_RCSID(0, "$NetBSD: intel_engine
 #include "intel_engine_user.h"
 #include "intel_gt.h"
 
+#include <linux/nbsd-namespace.h>
+
 struct intel_engine_cs *
 intel_engine_lookup_user(struct drm_i915_private *i915, u8 class, u8 instance)
 {

Index: src/sys/external/bsd/drm2/i915drm/files.i915drmkms
diff -u src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.75 src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.76
--- src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.75	Sun Dec 19 11:38:26 2021
+++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i915drmkms,v 1.75 2021/12/19 11:38:26 riastradh Exp $
+#	$NetBSD: files.i915drmkms,v 1.76 2021/12/19 11:38:37 riastradh Exp $
 
 version	20180827
 
@@ -33,6 +33,9 @@ makeoptions	i915drmkms	"CPPFLAGS.i915drm
 makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_FORCE_PROBE=0"
 makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_SPIN_REQUEST=0"
 makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_SW_FENCE_CHECK_DAG=1" # XXX expensive debug option?
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500" # milliseconds
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_STOP_TIMEOUT=100" # milliseconds
+makeoptions	i915drmkms	"CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_I915_PREEMPT_TIMEOUT=640" # milliseconds
 
 makeoptions	i915drmkms	"CWARNFLAGS.i915drmkms"+="-Wno-missing-field-initializers"
 makeoptions	i915drmkms	"CWARNFLAGS.i915drmkms"+="-Wno-pointer-arith"
@@ -89,8 +92,8 @@ file	external/bsd/drm2/dist/drm/i915/dis
 file	external/bsd/drm2/dist/drm/i915/display/intel_dpll_mgr.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_dsb.c	i915drmkms
 #file	external/bsd/drm2/dist/drm/i915/display/intel_dsi.c	i915drmkms
-file	external/bsd/drm2/dist/drm/i915/display/intel_dsi_dcs_backlight.c	i915drmkms
-file	external/bsd/drm2/dist/drm/i915/display/intel_dsi_vbt.c	i915drmkms
+#file	external/bsd/drm2/dist/drm/i915/display/intel_dsi_dcs_backlight.c	i915drmkms
+#file	external/bsd/drm2/dist/drm/i915/display/intel_dsi_vbt.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_dvo.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_fbc.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c	i915drmkms
@@ -114,7 +117,7 @@ file	external/bsd/drm2/dist/drm/i915/dis
 file	external/bsd/drm2/dist/drm/i915/display/intel_tv.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_vdsc.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/display/intel_vga.c	i915drmkms
-file	external/bsd/drm2/dist/drm/i915/display/vlv_dsi.c	i915drmkms
+#file	external/bsd/drm2/dist/drm/i915/display/vlv_dsi.c	i915drmkms
 #file	external/bsd/drm2/dist/drm/i915/display/vlv_dsi_pll.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/gem/i915_gem_busy.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/gem/i915_gem_clflush.c	i915drmkms

Index: src/sys/external/bsd/drm2/include/linux/hardirq.h
diff -u src/sys/external/bsd/drm2/include/linux/hardirq.h:1.2 src/sys/external/bsd/drm2/include/linux/hardirq.h:1.3
--- src/sys/external/bsd/drm2/include/linux/hardirq.h:1.2	Mon Aug 27 13:37:37 2018
+++ src/sys/external/bsd/drm2/include/linux/hardirq.h	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: hardirq.h,v 1.2 2018/08/27 13:37:37 riastradh Exp $	*/
+/*	$NetBSD: hardirq.h,v 1.3 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -34,16 +34,10 @@
 
 #include <sys/types.h>
 #include <sys/kernel.h>
-#include <sys/null.h>
 #include <sys/xcall.h>
 
-static inline void
-synchronize_irq_xc(void *a, void *b)
-{
-}
-
 /*
- * synchronize(irq)
+ * synchronize_irq(irq)
  *
  *	Wait for all interrupt handlers servicing irq to complete on
  *	all CPUs.  We just do a low-priority cross-call broadcast to
@@ -55,7 +49,15 @@ synchronize_irq(int irq)
 {
 
 	if (!cold)
-		xc_wait(xc_broadcast(0, synchronize_irq_xc, NULL, NULL));
+		xc_barrier(0);
+}
+
+static inline void
+synchronize_hardirq(int irq)
+{
+
+	if (!cold)
+		xc_barrier(XC_HIGHPRI);
 }
 
 #endif	/* _LINUX_HARDIRQ_H_ */

Index: src/sys/external/bsd/drm2/include/linux/lockdep.h
diff -u src/sys/external/bsd/drm2/include/linux/lockdep.h:1.7 src/sys/external/bsd/drm2/include/linux/lockdep.h:1.8
--- src/sys/external/bsd/drm2/include/linux/lockdep.h:1.7	Sun Dec 19 11:35:44 2021
+++ src/sys/external/bsd/drm2/include/linux/lockdep.h	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: lockdep.h,v 1.7 2021/12/19 11:35:44 riastradh Exp $	*/
+/*	$NetBSD: lockdep.h,v 1.8 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -37,6 +37,7 @@
 
 #include <lib/libkern/libkern.h>
 
+struct lock_class_key;
 struct mutex;
 struct spinlock;
 
@@ -88,4 +89,14 @@ lockdep_unpin_lock(struct mutex *m, stru
 	KASSERT(cookie.dummy == (int)(intptr_t)m);
 }
 
+static inline void
+lockdep_set_class(void *m, struct lock_class_key *ck)
+{
+}
+
+static inline void
+lockdep_set_subclass(void *m, unsigned subclass)
+{
+}
+
 #endif	/* _LINUX_LOCKDEP_H_ */

Index: src/sys/external/bsd/drm2/include/linux/spinlock.h
diff -u src/sys/external/bsd/drm2/include/linux/spinlock.h:1.11 src/sys/external/bsd/drm2/include/linux/spinlock.h:1.12
--- src/sys/external/bsd/drm2/include/linux/spinlock.h:1.11	Sun Dec 19 11:35:51 2021
+++ src/sys/external/bsd/drm2/include/linux/spinlock.h	Sun Dec 19 11:38:37 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: spinlock.h,v 1.11 2021/12/19 11:35:51 riastradh Exp $	*/
+/*	$NetBSD: spinlock.h,v 1.12 2021/12/19 11:38:37 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -187,4 +187,14 @@ read_unlock(rwlock_t *rw)
 	mutex_spin_exit(&rw->rw_lock);
 }
 
+static inline void
+local_bh_disable(void)
+{
+}
+
+static inline void
+local_bh_enable(void)
+{
+}
+
 #endif  /* _LINUX_SPINLOCK_H_ */

Reply via email to