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

Modified Files:
        src/sys/external/bsd/common/include/linux: list.h
        src/sys/external/bsd/drm2/dist/drm/i915: i915_scheduler.c i915_utils.c
            i915_vgpu.c i915_vma.c i915_vma.h
        src/sys/external/bsd/drm2/dist/drm/i915/gem: i915_gem_object.c
        src/sys/external/bsd/drm2/i915drm: files.i915drmkms i915_sysfs.c
        src/sys/external/bsd/drm2/include/linux: atomic.h
Added Files:
        src/sys/external/bsd/drm2/i915drm: i915_switcheroo.c

Log Message:
i915: More progress.


To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 src/sys/external/bsd/common/include/linux/list.h
cvs rdiff -u -r1.3 -r1.4 \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.c
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/i915/i915_vgpu.c \
    src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.c
cvs rdiff -u -r1.6 -r1.7 src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.h
cvs rdiff -u -r1.4 -r1.5 \
    src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c
cvs rdiff -u -r1.72 -r1.73 src/sys/external/bsd/drm2/i915drm/files.i915drmkms
cvs rdiff -u -r0 -r1.1 src/sys/external/bsd/drm2/i915drm/i915_switcheroo.c
cvs rdiff -u -r1.3 -r1.4 src/sys/external/bsd/drm2/i915drm/i915_sysfs.c
cvs rdiff -u -r1.39 -r1.40 src/sys/external/bsd/drm2/include/linux/atomic.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/list.h
diff -u src/sys/external/bsd/common/include/linux/list.h:1.29 src/sys/external/bsd/common/include/linux/list.h:1.30
--- src/sys/external/bsd/common/include/linux/list.h:1.29	Sun Dec 19 11:36:32 2021
+++ src/sys/external/bsd/common/include/linux/list.h	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: list.h,v 1.29 2021/12/19 11:36:32 riastradh Exp $	*/
+/*	$NetBSD: list.h,v 1.30 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -132,6 +132,22 @@ list_add(struct list_head *node, struct 
 }
 
 static inline void
+list_add_rcu(struct list_head *node, struct list_head *head)
+{
+	struct list_head *next = head->next;
+
+	/* Initialize the new node first.  */
+	node->next = next;
+	node->prev = head;
+
+	/* Now publish it.  */
+	atomic_store_release(&head->next, node);
+
+	/* Fix up back pointers, not protected by RCU.  */
+	next->prev = node;
+}
+
+static inline void
 list_add_tail(struct list_head *node, struct list_head *head)
 {
 	__list_add_between(head->prev, node, head);

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.3 src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c:1.3	Sun Dec 19 11:37:05 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_scheduler.c	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_scheduler.c,v 1.3 2021/12/19 11:37:05 riastradh Exp $	*/
+/*	$NetBSD: i915_scheduler.c,v 1.4 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*
  * SPDX-License-Identifier: MIT
@@ -7,7 +7,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_scheduler.c,v 1.3 2021/12/19 11:37:05 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_scheduler.c,v 1.4 2021/12/19 11:37:41 riastradh Exp $");
 
 #include <linux/mutex.h>
 
@@ -16,6 +16,8 @@ __KERNEL_RCSID(0, "$NetBSD: i915_schedul
 #include "i915_request.h"
 #include "i915_scheduler.h"
 
+#include <linux/nbsd-namespace.h>
+
 static struct i915_global_scheduler {
 	struct i915_global base;
 	struct kmem_cache *slab_dependencies;
@@ -62,7 +64,9 @@ static void assert_priolists(struct inte
 		   rb_first(&execlists->queue.rb_root));
 
 	last_prio = (INT_MAX >> I915_USER_PRIORITY_SHIFT) + 1;
-	for (rb = rb_first_cached(&execlists->queue); rb; rb = rb_next(rb)) {
+	for (rb = rb_first_cached(&execlists->queue);
+	     rb;
+	     rb = rb_next2(&execlists->queue.rb_root, rb)) {
 		const struct i915_priolist *p = to_priolist(rb);
 
 		GEM_BUG_ON(p->priority >= last_prio);
@@ -97,6 +101,15 @@ i915_sched_lookup_priolist(struct intel_
 		prio = I915_PRIORITY_NORMAL;
 
 find_priolist:
+#ifdef __NetBSD__
+	/* XXX  */
+	__USE(first);
+	__USE(parent);
+	__USE(rb);
+	p = rb_tree_find_node(&execlists->queue.rb_root.rbr_tree, &prio);
+	if (p)
+		goto out;
+#else
 	/* most positive priority is scheduled first, equal priorities fifo */
 	rb = NULL;
 	parent = &execlists->queue.rb_root.rb_node;
@@ -112,6 +125,7 @@ find_priolist:
 			goto out;
 		}
 	}
+#endif
 
 	if (prio == I915_PRIORITY_NORMAL) {
 		p = &execlists->default_priolist;
@@ -137,8 +151,15 @@ find_priolist:
 	p->priority = prio;
 	for (i = 0; i < ARRAY_SIZE(p->requests); i++)
 		INIT_LIST_HEAD(&p->requests[i]);
+#ifdef __NetBSD__
+	struct i915_priolist *collision __diagused;
+	collision = rb_tree_insert_node(&execlists->queue.rb_root.rbr_tree,
+	    p);
+	KASSERT(collision == p);
+#else
 	rb_link_node(&p->node, rb, parent);
 	rb_insert_color_cached(&p->node, &execlists->queue, first);
+#endif
 	p->used = 0;
 
 out:
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.c:1.4
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.c:1.3	Sun Dec 19 01:24:26 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.c	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_utils.c,v 1.3 2021/12/19 01:24:26 riastradh Exp $	*/
+/*	$NetBSD: i915_utils.c,v 1.4 2021/12/19 11:37:41 riastradh Exp $	*/
 
 // SPDX-License-Identifier: MIT
 /*
@@ -6,7 +6,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_utils.c,v 1.3 2021/12/19 01:24:26 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_utils.c,v 1.4 2021/12/19 11:37:41 riastradh Exp $");
 
 #include <drm/drm_drv.h>
 
@@ -105,11 +105,15 @@ bool i915_error_injected(void)
 
 void cancel_timer(struct timer_list *t)
 {
+#ifndef __NetBSD__
 	if (!READ_ONCE(t->expires))
 		return;
+#endif
 
 	del_timer(t);
+#ifndef __NetBSD__
 	WRITE_ONCE(t->expires, 0);
+#endif
 }
 
 void set_timer_ms(struct timer_list *t, unsigned long timeout)

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_vgpu.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_vgpu.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_vgpu.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_vgpu.c:1.5	Sat Dec 18 23:45:28 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_vgpu.c	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_vgpu.c,v 1.5 2021/12/18 23:45:28 riastradh Exp $	*/
+/*	$NetBSD: i915_vgpu.c,v 1.6 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*
  * Copyright(c) 2011-2015 Intel Corporation. All rights reserved.
@@ -24,10 +24,12 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_vgpu.c,v 1.5 2021/12/18 23:45:28 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_vgpu.c,v 1.6 2021/12/19 11:37:41 riastradh Exp $");
 
 #include "i915_vgpu.h"
 
+#include <linux/nbsd-namespace.h>
+
 /**
  * DOC: Intel GVT-g guest support
  *
@@ -67,7 +69,14 @@ void i915_detect_vgpu(struct drm_i915_pr
 	struct pci_dev *pdev = dev_priv->drm.pdev;
 	u64 magic;
 	u16 version_major;
+#ifdef __NetBSD__
+	bus_space_tag_t bst;
+	bus_space_handle_t bsh;
+	bus_size_t off = VGT_PVINFO_PAGE;
+	bus_size_t size = VGT_PVINFO_SIZE;
+#else
 	void __iomem *shared_area;
+#endif
 
 	BUILD_BUG_ON(sizeof(struct vgt_if) != VGT_PVINFO_SIZE);
 
@@ -80,31 +89,38 @@ void i915_detect_vgpu(struct drm_i915_pr
 	if (INTEL_GEN(dev_priv) < 6)
 		return;
 
-	shared_area = pci_iomap_range(pdev, 0, VGT_PVINFO_PAGE, VGT_PVINFO_SIZE);
-	if (!shared_area) {
+#ifdef __NetBSD__
+	bst = pdev->pd_pa.pa_memt;
+	if (off > pdev->pd_resources[0].size ||
+	    size > pdev->pd_resources[0].size - off ||
+	    bus_space_map(bst, pdev->pd_resources[0].addr + off, size,
+		pdev->pd_resources[0].flags, &bsh)) {
 		DRM_ERROR("failed to map MMIO bar to check for VGT\n");
 		return;
 	}
-
-#ifdef __NetBSD__
 #  ifdef _LP64
-	magic = bus_space_read_8(dev_priv->regs_bst, dev_priv->regs_bsh,
-	    vgtif_reg(magic));
+	magic = bus_space_read_8(bst, bsh, (bus_size_t)vgtif_offset(magic));
 #  else
-	magic = bus_space_read_4(dev_priv->regs_bst, dev_priv->regs_bsh,
-	    vgtif_reg(magic));
-	magic |= (uint64_t)bus_space_read_4(dev_priv->regs_bst,
-	    dev_priv->regs_bsh, vgtif_reg(magic) + 4) << 32;
+	magic = bus_space_read_4(bst, bsh, (bus_size_t)vgtif_offset(magic));
+	magic |= (uint64_t)bus_space_read_4(bst, bsh,
+	    (bus_size_t)vgtif_offset(magic) + 4)
+	    << 32;
 #  endif
 #else
+	shared_area = pci_iomap_range(pdev, 0, VGT_PVINFO_PAGE, VGT_PVINFO_SIZE);
+	if (!shared_area) {
+		DRM_ERROR("failed to map MMIO bar to check for VGT\n");
+		return;
+	}
 	magic = readq(shared_area + vgtif_offset(magic));
 #endif
+
 	if (magic != VGT_MAGIC)
 		goto out;
 
 #ifdef __NetBSD__
-	version_major = bus_space_read_2(dev_priv->regs_bst, dev_priv->regs_bsh,
-		    vgtif_reg(version_major));
+	version_major = bus_space_read_2(bst, bsh,
+	    (bus_size_t)vgtif_offset(version_major));
 #else
 	version_major = readw(shared_area + vgtif_offset(version_major));
 #endif
@@ -113,14 +129,23 @@ void i915_detect_vgpu(struct drm_i915_pr
 		goto out;
 	}
 
+#ifdef __NetBSD__
+	dev_priv->vgpu.caps = bus_space_read_4(bst, bsh,
+	    (bus_size_t)vgtif_offset(vgt_caps));
+#else
 	dev_priv->vgpu.caps = readl(shared_area + vgtif_offset(vgt_caps));
+#endif
 
 	dev_priv->vgpu.active = true;
 	mutex_init(&dev_priv->vgpu.lock);
 	DRM_INFO("Virtual GPU for Intel GVT-g detected.\n");
 
 out:
+#ifdef __NetBSD__
+	bus_space_unmap(bst, bsh, size);
+#else
 	pci_iounmap(pdev, shared_area);
+#endif
 }
 
 bool intel_vgpu_has_full_ppgtt(struct drm_i915_private *dev_priv)
@@ -145,7 +170,7 @@ static void vgt_deballoon_space(struct i
 	if (!drm_mm_node_allocated(node))
 		return;
 
-	DRM_DEBUG_DRIVER("deballoon space: range [0x%llx - 0x%llx] %llu KiB.\n",
+	DRM_DEBUG_DRIVER("deballoon space: range [0x%"PRIx64" - 0x%"PRIx64"] %"PRIu64" KiB.\n",
 			 node->start,
 			 node->start + node->size,
 			 node->size / 1024);
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.c:1.6
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.c:1.5	Sun Dec 19 01:44:57 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.c	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_vma.c,v 1.5 2021/12/19 01:44:57 riastradh Exp $	*/
+/*	$NetBSD: i915_vma.c,v 1.6 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_vma.c,v 1.5 2021/12/19 01:44:57 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_vma.c,v 1.6 2021/12/19 11:37:41 riastradh Exp $");
 
 #include <linux/sched/mm.h>
 #include <drm/drm_gem.h>
@@ -43,6 +43,8 @@ __KERNEL_RCSID(0, "$NetBSD: i915_vma.c,v
 #include "i915_trace.h"
 #include "i915_vma.h"
 
+#include <linux/nbsd-namespace.h>
+
 static struct i915_global_vma {
 	struct i915_global base;
 	struct kmem_cache *slab_vmas;
@@ -141,9 +143,9 @@ void
 i915_vma_tree_init(struct drm_i915_gem_object *obj)
 {
 #ifdef __NetBSD__
-	rb_tree_init(&obj->vma_tree.rbr_tree, &vma_tree_rb_ops);
+	rb_tree_init(&obj->vma.tree.rbr_tree, &vma_tree_rb_ops);
 #else
-	obj->vma_tree = RB_ROOT;
+	obj->vma.tree = RB_ROOT;
 #endif
 }
 
@@ -233,7 +235,7 @@ vma_create(struct drm_i915_gem_object *o
 	__USE(rb);
 	__USE(p);
 	struct i915_vma *collision __diagused;
-	collision = rb_tree_insert_node(&obj->vma_tree.rbr_tree, vma);
+	collision = rb_tree_insert_node(&obj->vma.tree.rbr_tree, vma);
 	KASSERT(collision == vma);
 #else
 	spin_lock(&obj->vma.lock);
@@ -296,7 +298,7 @@ vma_lookup(struct drm_i915_gem_object *o
 #ifdef __NetBSD__
 	const struct i915_vma_key key = { .vm = vm, .view = view };
 
-	return rb_tree_find_node(&obj->vma_tree.rbr_tree, &key);
+	return rb_tree_find_node(&obj->vma.tree.rbr_tree, &key);
 #else
 	struct rb_node *rb;
 
@@ -510,7 +512,11 @@ void __iomem *i915_vma_pin_iomap(struct 
 		}
 
 		if (unlikely(cmpxchg(&vma->iomap, NULL, ptr))) {
+#ifdef __NetBSD__
+			io_mapping_unmap(&i915_vm_to_ggtt(vma->vm)->iomap, ptr);
+#else
 			io_mapping_unmap(ptr);
+#endif
 			ptr = vma->iomap;
 		}
 	}
@@ -579,7 +585,7 @@ bool i915_vma_misplaced(const struct i91
 	if (!drm_mm_node_allocated(&vma->node))
 		return false;
 
-	if (test_bit(I915_VMA_ERROR_BIT, __i915_vma_flags(vma)))
+	if (test_bit(I915_VMA_ERROR_BIT, __i915_vma_flags_const(vma)))
 		return true;
 
 	if (vma->node.size < size)

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.h:1.6 src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.h:1.7
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.h:1.6	Sun Dec 19 11:33:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_vma.h	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_vma.h,v 1.6 2021/12/19 11:33:30 riastradh Exp $	*/
+/*	$NetBSD: i915_vma.h,v 1.7 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*
  * Copyright © 2016 Intel Corporation
@@ -41,6 +41,8 @@
 #include "i915_request.h"
 #include "i915_vma_types.h"
 
+void i915_vma_tree_init(struct drm_i915_gem_object *);
+
 struct i915_vma *
 i915_vma_instance(struct drm_i915_gem_object *obj,
 		  struct i915_address_space *vm,
@@ -208,7 +210,7 @@ int i915_vma_bind(struct i915_vma *vma,
 		  struct i915_vma_work *work);
 
 bool i915_gem_valid_gtt_space(struct i915_vma *vma, unsigned long color);
-bool i915_vma_misplaced(struct i915_vma *vma,
+bool i915_vma_misplaced(const struct i915_vma *vma,
 			u64 size, u64 alignment, u64 flags);
 void __i915_vma_set_map_and_fenceable(struct i915_vma *vma);
 void i915_vma_revoke_mmap(struct i915_vma *vma);

Index: src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c:1.4 src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c:1.5
--- src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c:1.4	Sun Dec 19 11:33:30 2021
+++ src/sys/external/bsd/drm2/dist/drm/i915/gem/i915_gem_object.c	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_gem_object.c,v 1.4 2021/12/19 11:33:30 riastradh Exp $	*/
+/*	$NetBSD: i915_gem_object.c,v 1.5 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*
  * Copyright © 2017 Intel Corporation
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_gem_object.c,v 1.4 2021/12/19 11:33:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_gem_object.c,v 1.5 2021/12/19 11:37:41 riastradh Exp $");
 
 #include <linux/bitmap.h>
 #include <linux/sched/mm.h>
@@ -65,6 +65,7 @@ void i915_gem_object_init(struct drm_i91
 
 	spin_lock_init(&obj->vma.lock);
 	INIT_LIST_HEAD(&obj->vma.list);
+	i915_vma_tree_init(obj);
 
 	INIT_LIST_HEAD(&obj->mm.link);
 

Index: src/sys/external/bsd/drm2/i915drm/files.i915drmkms
diff -u src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.72 src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.73
--- src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.72	Sun Dec 19 11:37:06 2021
+++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i915drmkms,v 1.72 2021/12/19 11:37:06 riastradh Exp $
+#	$NetBSD: files.i915drmkms,v 1.73 2021/12/19 11:37:41 riastradh Exp $
 
 version	20180827
 
@@ -53,6 +53,7 @@ file	external/bsd/drm2/i915drm/i915_modu
 file	external/bsd/drm2/i915drm/i915_pci_autoconf.c	i915drmkms
 file	external/bsd/drm2/i915drm/i915_perf.c	i915drmkms
 file	external/bsd/drm2/i915drm/i915_sysfs.c	i915drmkms
+file	external/bsd/drm2/i915drm/i915_switcheroo.c	i915drmkms
 file	external/bsd/drm2/i915drm/intel_gtt.c		i915drmkms
 file	external/bsd/drm2/i915drm/intelfb.c		intelfb
 file	external/bsd/drm2/i915drm/vlv_dsi.c	i915drmkms
@@ -208,7 +209,7 @@ file	external/bsd/drm2/dist/drm/i915/i91
 file	external/bsd/drm2/dist/drm/i915/i915_suspend.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_sw_fence.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_sw_fence_work.c	i915drmkms
-file	external/bsd/drm2/dist/drm/i915/i915_switcheroo.c	i915drmkms
+#file	external/bsd/drm2/dist/drm/i915/i915_switcheroo.c	i915drmkms
 file	external/bsd/drm2/dist/drm/i915/i915_syncmap.c	i915drmkms
 #file	external/bsd/drm2/dist/drm/i915/i915_sysfs.c	i915drmkms
 #file	external/bsd/drm2/dist/drm/i915/i915_trace_points.c	i915drmkms

Index: src/sys/external/bsd/drm2/i915drm/i915_sysfs.c
diff -u src/sys/external/bsd/drm2/i915drm/i915_sysfs.c:1.3 src/sys/external/bsd/drm2/i915drm/i915_sysfs.c:1.4
--- src/sys/external/bsd/drm2/i915drm/i915_sysfs.c:1.3	Sun Dec 19 01:42:55 2021
+++ src/sys/external/bsd/drm2/i915drm/i915_sysfs.c	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: i915_sysfs.c,v 1.3 2021/12/19 01:42:55 riastradh Exp $	*/
+/*	$NetBSD: i915_sysfs.c,v 1.4 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -32,9 +32,9 @@
 /* i915_sysfs.c stubs */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i915_sysfs.c,v 1.3 2021/12/19 01:42:55 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i915_sysfs.c,v 1.4 2021/12/19 11:37:41 riastradh Exp $");
 
-#include "i915_drv.h"
+#include "i915_sysfs.h"
 
 void
 i915_setup_sysfs(struct drm_i915_private *dev __unused)

Index: src/sys/external/bsd/drm2/include/linux/atomic.h
diff -u src/sys/external/bsd/drm2/include/linux/atomic.h:1.39 src/sys/external/bsd/drm2/include/linux/atomic.h:1.40
--- src/sys/external/bsd/drm2/include/linux/atomic.h:1.39	Sun Dec 19 11:31:11 2021
+++ src/sys/external/bsd/drm2/include/linux/atomic.h	Sun Dec 19 11:37:41 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: atomic.h,v 1.39 2021/12/19 11:31:11 riastradh Exp $	*/
+/*	$NetBSD: atomic.h,v 1.40 2021/12/19 11:37:41 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -188,6 +188,13 @@ atomic_or(int value, atomic_t *atomic)
 }
 
 static inline void
+atomic_and(int value, atomic_t *atomic)
+{
+	/* no membar */
+	atomic_and_uint(&atomic->a_u.au_uint, value);
+}
+
+static inline void
 atomic_andnot(int value, atomic_t *atomic)
 {
 	/* no membar */
@@ -298,6 +305,16 @@ atomic_cmpxchg(atomic_t *atomic, int exp
 	return old;
 }
 
+static inline bool
+atomic_try_cmpxchg(atomic_t *atomic, int *valuep, int new)
+{
+	int expect = *valuep;
+
+	*valuep = atomic_cmpxchg(atomic, expect, new);
+
+	return *valuep == expect;
+}
+
 struct atomic64 {
 	volatile uint64_t	a_v;
 };

Added files:

Index: src/sys/external/bsd/drm2/i915drm/i915_switcheroo.c
diff -u /dev/null src/sys/external/bsd/drm2/i915drm/i915_switcheroo.c:1.1
--- /dev/null	Sun Dec 19 11:37:41 2021
+++ src/sys/external/bsd/drm2/i915drm/i915_switcheroo.c	Sun Dec 19 11:37:41 2021
@@ -0,0 +1,43 @@
+/*	$NetBSD: i915_switcheroo.c,v 1.1 2021/12/19 11:37:41 riastradh Exp $	*/
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+/* i915_switcheroo.c stubs */
+
+#include "i915_switcheroo.h"
+
+int
+i915_switcheroo_register(struct drm_i915_private *i915)
+{
+
+	return 0;
+}
+
+void
+i915_switcheroo_unregister(struct drm_i915_private *i915)
+{
+}

Reply via email to