Module Name: src
Committed By: riastradh
Date: Sun Dec 19 11:39:25 UTC 2021
Modified Files:
src/sys/external/bsd/common/include/linux: list.h
src/sys/external/bsd/drm2/dist/drm/i915: i915_scheduler.c
src/sys/external/bsd/drm2/dist/drm/i915/gt: intel_engine_cs.c
src/sys/external/bsd/drm2/i915drm: files.i915drmkms
src/sys/external/bsd/drm2/include/linux: llist.h notifier.h
src/sys/external/bsd/drm2/linux: files.drmkms_linux
Added Files:
src/sys/external/bsd/drm2/linux: linux_notifier.c
Log Message:
i915: more work
To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/external/bsd/common/include/linux/list.h
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c
cvs rdiff -u -r1.76 -r1.77 src/sys/external/bsd/drm2/i915drm/files.i915drmkms
cvs rdiff -u -r1.4 -r1.5 src/sys/external/bsd/drm2/include/linux/llist.h
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/include/linux/notifier.h
cvs rdiff -u -r1.32 -r1.33 src/sys/external/bsd/drm2/linux/files.drmkms_linux
cvs rdiff -u -r0 -r1.1 src/sys/external/bsd/drm2/linux/linux_notifier.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/common/include/linux/list.h
diff -u src/sys/external/bsd/common/include/linux/list.h:1.31 src/sys/external/bsd/common/include/linux/list.h:1.32
--- src/sys/external/bsd/common/include/linux/list.h:1.31 Sun Dec 19 11:38:03 2021
+++ src/sys/external/bsd/common/include/linux/list.h Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: list.h,v 1.31 2021/12/19 11:38:03 riastradh Exp $ */
+/* $NetBSD: list.h,v 1.32 2021/12/19 11:39:24 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -47,6 +47,8 @@
#include <linux/kernel.h>
#include <linux/types.h>
+#define POISON_INUSE 0x5a /* XXX */
+
/*
* Doubly-linked lists. Type defined in <linux/types.h>.
*/
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c:1.5 Sun Dec 19 11:37:50 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: i915_scheduler.c,v 1.5 2021/12/19 11:37:50 riastradh Exp $ */
+/* $NetBSD: i915_scheduler.c,v 1.6 2021/12/19 11:39:24 riastradh Exp $ */
/*
* SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_scheduler.c,v 1.5 2021/12/19 11:37:50 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_scheduler.c,v 1.6 2021/12/19 11:39:24 riastradh Exp $");
#include <linux/mutex.h>
@@ -116,15 +116,19 @@ static const rb_tree_ops_t i915_priolist
.rbto_node_offset = offsetof(struct i915_priolist, node),
};
+#endif
+
void
i915_sched_init(struct intel_engine_execlists *execlists)
{
+#ifdef __NetBSD__
rb_tree_init(&execlists->queue.rb_root.rbr_tree,
&i915_priolist_rb_ops);
-}
-
+#else
+ execlists->queue = RB_ROOT_CACHED;
#endif
+}
struct list_head *
i915_sched_lookup_priolist(struct intel_engine_cs *engine, int prio)
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.5 src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c:1.5 Sun Dec 19 11:38:37 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gt/intel_engine_cs.c Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: intel_engine_cs.c,v 1.5 2021/12/19 11:38:37 riastradh Exp $ */
+/* $NetBSD: intel_engine_cs.c,v 1.6 2021/12/19 11:39:24 riastradh Exp $ */
/*
* Copyright © 2016 Intel Corporation
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intel_engine_cs.c,v 1.5 2021/12/19 11:38:37 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intel_engine_cs.c,v 1.6 2021/12/19 11:39:24 riastradh Exp $");
#include <drm/drm_print.h>
@@ -490,7 +490,7 @@ void intel_engine_init_execlists(struct
memset(execlists->inflight, 0, sizeof(execlists->inflight));
execlists->queue_priority_hint = INT_MIN;
- execlists->queue = RB_ROOT_CACHED;
+ i915_sched_init(execlists);
}
static void cleanup_status_page(struct intel_engine_cs *engine)
Index: src/sys/external/bsd/drm2/i915drm/files.i915drmkms
diff -u src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.76 src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.77
--- src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.76 Sun Dec 19 11:38:37 2021
+++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-# $NetBSD: files.i915drmkms,v 1.76 2021/12/19 11:38:37 riastradh Exp $
+# $NetBSD: files.i915drmkms,v 1.77 2021/12/19 11:39:24 riastradh Exp $
version 20180827
@@ -13,10 +13,7 @@ attach intelfb at intelfbbus
# overflow is OK.
makeoptions i915drmkms "COPTS.i915drmkms"+="-fwrapv"
-makeoptions intelfb "CPPFLAGS.intelfb"+="-I$S/external/bsd/drm2/i915drm"
makeoptions i915drmkms "CPPFLAGS.i915drmkms"+="-I$S/external/bsd/drm2/i915drm"
-
-makeoptions intelfb "CPPFLAGS.intelfb"+="-I$S/external/bsd/drm2/dist/drm/i915"
makeoptions i915drmkms "CPPFLAGS.i915drmkms"+="-I$S/external/bsd/drm2/dist/drm/i915"
makeoptions i915drmkms "CPPFLAGS.i915drmkms"+="-DCONFIG_DRM_FBDEV_EMULATION=1"
@@ -50,6 +47,9 @@ makeoptions i915drmkms "CWARNFLAGS.int
makeoptions i915drmkms "CWARNFLAGS.intel_display.c"+="${${ACTIVE_CC} == gcc && ${HAVE_GCC:U0} >= 7:? -Wno-implicit-fallthrough :}"
makeoptions i915drmkms "CWARNFLAGS.intel_sdvo.c"+="${${ACTIVE_CC} == gcc && ${HAVE_GCC:U0} >= 7:? -Wno-implicit-fallthrough :}"
+makeoptions intelfb "CPPFLAGS.intelfb"+="${CPPFLAGS.i915drmkms}"
+makeoptions intelfb "CWARNFLAGS.intelfb"+="${CWARNFLAGS.i915drmkms}"
+
file external/bsd/drm2/i915drm/i915_gem_userptr.c i915drmkms
file external/bsd/drm2/i915drm/i915_gemfs.c i915drmkms
file external/bsd/drm2/i915drm/i915_module.c i915drmkms
Index: src/sys/external/bsd/drm2/include/linux/llist.h
diff -u src/sys/external/bsd/drm2/include/linux/llist.h:1.4 src/sys/external/bsd/drm2/include/linux/llist.h:1.5
--- src/sys/external/bsd/drm2/include/linux/llist.h:1.4 Sun Dec 19 11:36:48 2021
+++ src/sys/external/bsd/drm2/include/linux/llist.h Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: llist.h,v 1.4 2021/12/19 11:36:48 riastradh Exp $ */
+/* $NetBSD: llist.h,v 1.5 2021/12/19 11:39:24 riastradh Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -110,6 +110,11 @@ llist_del_first(struct llist_head *head)
llist_entry(_NODE, __typeof__(*(ENTRY)), FIELD)); \
})
+#define llist_for_each_safe(NODE, TMP, HEAD) \
+ for ((NODE) = (HEAD); \
+ (NODE) && ((TMP) = (NODE)->next, 1); \
+ (NODE) = (TMP))
+
#define llist_for_each_entry(ENTRY, NODE, FIELD) \
for ((ENTRY) = ((NODE) == NULL ? NULL : \
(membar_datadep_consumer(), \
Index: src/sys/external/bsd/drm2/include/linux/notifier.h
diff -u src/sys/external/bsd/drm2/include/linux/notifier.h:1.3 src/sys/external/bsd/drm2/include/linux/notifier.h:1.4
--- src/sys/external/bsd/drm2/include/linux/notifier.h:1.3 Mon Aug 27 07:18:18 2018
+++ src/sys/external/bsd/drm2/include/linux/notifier.h Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: notifier.h,v 1.3 2018/08/27 07:18:18 riastradh Exp $ */
+/* $NetBSD: notifier.h,v 1.4 2021/12/19 11:39:24 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -34,30 +34,38 @@
#include <sys/cdefs.h>
+#include <sys/pslist.h>
+
+#include <linux/spinlock.h>
+
+/* namespace */
+#define ATOMIC_INIT_NOTIFIER_HEAD linux_ATOMIC_INIT_NOTIFIER_HEAD
+#define ATOMIC_CLEANUP_NOTIFIER_HEAD linux_ATOMIC_CLEANUP_NOTIFIER_HEAD
+#define atomic_notifier_call_chain linux_atomic_notifier_call_chain
+#define atomic_notifier_chain_register linux_atomic_notifier_chain_register
+#define atomic_notifier_chain_unregister linux_atomic_notifier_chain_unregister
+
#define NOTIFY_DONE 0
#define NOTIFY_OK 1
struct notifier_block {
- int (*notifier_call)(struct notifier_block *, unsigned long,
- void *);
+ int (*notifier_call)(struct notifier_block *, unsigned long, void *);
+ struct pslist_entry nb_entry;
};
struct atomic_notifier_head {
- char anh_blahdittyblahblah;
+ spinlock_t anh_lock;
+ struct pslist_head anh_list;
};
-static struct atomic_notifier_head panic_notifier_list __unused;
+void ATOMIC_INIT_NOTIFIER_HEAD(struct atomic_notifier_head *);
+void ATOMIC_CLEANUP_NOTIFIER_HEAD(struct atomic_notifier_head *);
-static inline void
-atomic_notifier_chain_register(struct atomic_notifier_head *head __unused,
- struct notifier_block *block __unused)
-{
-}
-
-static inline void
-atomic_notifier_chain_unregister(struct atomic_notifier_head *head __unused,
- struct notifier_block *block __unused)
-{
-}
+void atomic_notifier_chain_register(struct atomic_notifier_head *,
+ struct notifier_block *);
+void atomic_notifier_chain_unregister(struct atomic_notifier_head *,
+ struct notifier_block *);
+void atomic_notifier_chain_call(struct atomic_notifier_head *, unsigned long,
+ void *);
#endif /* _LINUX_NOTIFIER_H_ */
Index: src/sys/external/bsd/drm2/linux/files.drmkms_linux
diff -u src/sys/external/bsd/drm2/linux/files.drmkms_linux:1.32 src/sys/external/bsd/drm2/linux/files.drmkms_linux:1.33
--- src/sys/external/bsd/drm2/linux/files.drmkms_linux:1.32 Sun Dec 19 11:33:31 2021
+++ src/sys/external/bsd/drm2/linux/files.drmkms_linux Sun Dec 19 11:39:24 2021
@@ -1,4 +1,4 @@
-# $NetBSD: files.drmkms_linux,v 1.32 2021/12/19 11:33:31 riastradh Exp $
+# $NetBSD: files.drmkms_linux,v 1.33 2021/12/19 11:39:24 riastradh Exp $
define drmkms_linux: i2cexec, i2c_bitbang
@@ -19,6 +19,7 @@ file external/bsd/drm2/linux/linux_idr.c
file external/bsd/drm2/linux/linux_kmap.c drmkms_linux
file external/bsd/drm2/linux/linux_list_sort.c drmkms_linux
file external/bsd/drm2/linux/linux_module.c drmkms_linux
+file external/bsd/drm2/linux/linux_notifier.c drmkms_linux
file external/bsd/drm2/linux/linux_pci.c drmkms_linux
file external/bsd/drm2/linux/linux_rwsem.c drmkms_linux
file external/bsd/drm2/linux/linux_sg.c drmkms_linux
Added files:
Index: src/sys/external/bsd/drm2/linux/linux_notifier.c
diff -u /dev/null src/sys/external/bsd/drm2/linux/linux_notifier.c:1.1
--- /dev/null Sun Dec 19 11:39:25 2021
+++ src/sys/external/bsd/drm2/linux/linux_notifier.c Sun Dec 19 11:39:24 2021
@@ -0,0 +1,95 @@
+/* $NetBSD: linux_notifier.c,v 1.1 2021/12/19 11:39:24 riastradh Exp $ */
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Taylor R. Campbell.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: linux_notifier.c,v 1.1 2021/12/19 11:39:24 riastradh Exp $");
+
+#include <sys/types.h>
+
+#include <sys/pserialize.h>
+#include <sys/xcall.h>
+
+#include <linux/notifier.h>
+#include <linux/spinlock.h>
+
+void
+ATOMIC_INIT_NOTIFIER_HEAD(struct atomic_notifier_head *H)
+{
+
+ spin_lock_init(&H->anh_lock);
+ PSLIST_INIT(&H->anh_list);
+}
+
+void
+ATOMIC_CLEANUP_NOTIFIER_HEAD(struct atomic_notifier_head *H)
+{
+
+ PSLIST_DESTROY(&H->anh_list);
+ spin_lock_destroy(&H->anh_lock);
+}
+
+void
+atomic_notifier_chain_register(struct atomic_notifier_head *H,
+ struct notifier_block *B)
+{
+
+ spin_lock(&H->anh_lock);
+ PSLIST_WRITER_INSERT_HEAD(&H->anh_list, B, nb_entry);
+ spin_unlock(&H->anh_lock);
+}
+
+void
+atomic_notifier_chain_unregister(struct atomic_notifier_head *H,
+ struct notifier_block *B)
+{
+
+ spin_lock(&H->anh_lock);
+ PSLIST_WRITER_REMOVE(B, nb_entry);
+ spin_unlock(&H->anh_lock);
+
+ xc_barrier(0);
+}
+
+void
+atomic_notifier_chain_call(struct atomic_notifier_head *H,
+ unsigned long arg0, void *arg1)
+{
+ struct notifier_block *B;
+ int s;
+
+ s = pserialize_read_enter();
+ PSLIST_READER_FOREACH(B, &H->anh_list, struct notifier_block, nb_entry)
+ {
+ if ((*B->notifier_call)(B, arg0, arg1) == NOTIFY_DONE)
+ break;
+ }
+ pserialize_read_exit(s);
+}