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)
+{
+}