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_ */