Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F163217370
D36213.id109601.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
136 KB
Referenced Files
None
Subscribers
None
D36213.id109601.diff
View Options
diff --git a/graphics/igt-gpu-tools/Makefile b/graphics/igt-gpu-tools/Makefile
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/Makefile
@@ -0,0 +1,69 @@
+PORTNAME= igt-gpu-tools
+DISTVERSION= 1.26.1256
+CATEGORIES= graphics
+
+MAINTAINER= jfree@FreeBSD.org
+COMMENT= IGT gpu tools and tests
+
+LICENSE= MIT
+LICENSE_FILE= ${WRKSRC}/COPYING
+
+LIB_DEPENDS= libdrm.so:graphics/libdrm \
+ libdw.so:devel/elfutils \
+ libpciaccess.so:devel/libpciaccess \
+ libudev.so:devel/libudev-devd
+
+USES= bison gnome meson pkgconfig python shebangfix xorg
+
+USE_GITLAB= yes
+GL_SITE= https://gitlab.freedesktop.org
+GL_ACCOUNT= drm
+GL_COMMIT= b5e2222c9a988015bdf237e6ebb9f5b6d87ac7e1
+
+USE_GNOME= cairo glib20
+
+USE_LDCONFIG= yes
+
+USE_XORG= pixman
+
+SHEBANG_FILES= scripts/code_cov_gather_on_test scripts/code_cov_parse_info
+
+OPTIONS_DEFINE= CHAMELIUM DOCS MANPAGES RUNNER TEST VALGRIND
+OPTIONS_DEFAULT= CHAMELIUM DOCS MANPAGES RUNNER TEST VALGRIND
+
+OPTIONS_SUB= yes
+
+CHAMELIUM_DESC= Build chamelium display tests
+RUNNER_DESC= Build test runner
+VALGRIND_DESC= Build with support for valgrind annotations
+
+CHAMELIUM_IMPLIES= TEST
+CHAMELIUM_LIB_DEPENDS= libasound.so:audio/alsa-lib \
+ libcurl.so:ftp/curl \
+ libgsl.so:math/gsl \
+ libxmlrpc.so:net/xmlrpc-c
+CHAMELIUM_MESON_ENABLED= chamelium
+
+DOCS_IMPLIES= TEST
+DOCS_BUILD_DEPENDS= gtkdoc-mkhtml:textproc/gtk-doc
+DOCS_MESON_ENABLED= docs
+
+MANPAGES_BUILD_DEPENDS= rst2man:textproc/py-docutils
+MANPAGES_MESON_ENABLED= man
+
+RUNNER_IMPLIES= TEST
+RUNNER_LIB_DEPENDS= libjson-c.so:devel/json-c \
+ liboping.so:net/liboping
+RUNNER_MESON_ENABLED= runner
+
+TEST_LIB_DEPENDS= libunwind.so:devel/libunwind
+TEST_MESON_ENABLED= tests
+
+VALGRIND_IMPLIES= TEST
+VALGRIND_BUILD_DEPENDS= valgrind:devel/valgrind
+VALGRIND_RUN_DEPENDS= valgrind:devel/valgrind
+VALGRIND_MESON_ENABLED= valgrind
+
+BROKEN_FreeBSD_12= <sched.h> definitions absent in FreeBSD versions < 13.1
+
+.include <bsd.port.mk>
diff --git a/graphics/igt-gpu-tools/distinfo b/graphics/igt-gpu-tools/distinfo
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1660779598
+SHA256 (drm-igt-gpu-tools-b5e2222c9a988015bdf237e6ebb9f5b6d87ac7e1_GL0.tar.gz) = 4eca0b2cfafa4aa071563d12a2cdde8368c772b5e2b7ce6b9f43ea7f264f3d1d
+SIZE (drm-igt-gpu-tools-b5e2222c9a988015bdf237e6ebb9f5b6d87ac7e1_GL0.tar.gz) = 2935913
diff --git a/graphics/igt-gpu-tools/files/patch-benchmarks_gem__exec__tracer.c b/graphics/igt-gpu-tools/files/patch-benchmarks_gem__exec__tracer.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-benchmarks_gem__exec__tracer.c
@@ -0,0 +1,13 @@
+--- benchmarks/gem_exec_tracer.c.orig 2022-08-17 23:41:15 UTC
++++ benchmarks/gem_exec_tracer.c
+@@ -41,6 +41,10 @@
+ #include "intel_aub.h"
+ #include "intel_chipset.h"
+
++#ifdef __FreeBSD__
++#define _IOC_TYPE(nr) (((nr) >> 8) & 255)
++#endif
++
+ static int (*libc_close)(int fd);
+ static int (*libc_ioctl)(int fd, unsigned long request, void *argp);
+
diff --git a/graphics/igt-gpu-tools/files/patch-benchmarks_gem__syslatency.c b/graphics/igt-gpu-tools/files/patch-benchmarks_gem__syslatency.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-benchmarks_gem__syslatency.c
@@ -0,0 +1,24 @@
+--- benchmarks/gem_syslatency.c.orig 2022-08-17 23:41:15 UTC
++++ benchmarks/gem_syslatency.c
+@@ -42,12 +42,21 @@
+ #include <limits.h>
+ #include "drm.h"
+
++#ifdef __linux__
+ #include <linux/unistd.h>
++#elif defined(__FreeBSD__)
++#include <sys/mman.h>
++#define MAP_POPULATE MAP_PREFAULT_READ
++#define gettid() getpid()
++#define MADV_HUGEPAGE MADV_SEQUENTIAL
++#endif
+
+ #include "i915/gem_create.h"
+ #include "i915/gem_ring.h"
+
++#ifdef __linux__
+ #define sigev_notify_thread_id _sigev_un._tid
++#endif
+
+ static volatile int done;
+
diff --git a/graphics/igt-gpu-tools/files/patch-include_linux-uapi_sync__file.h b/graphics/igt-gpu-tools/files/patch-include_linux-uapi_sync__file.h
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-include_linux-uapi_sync__file.h
@@ -0,0 +1,19 @@
+--- include/linux-uapi/sync_file.h.orig 2022-08-17 23:41:16 UTC
++++ include/linux-uapi/sync_file.h
+@@ -12,8 +12,16 @@
+ #ifndef _LINUX_SYNC_H
+ #define _LINUX_SYNC_H
+
++#ifdef __linux__
+ #include <linux/ioctl.h>
+ #include <linux/types.h>
++#elif defined(__FreeBSD__)
++#include <sys/ioctl.h>
++#include <sys/types.h>
++#define __s32 int32_t
++#define __u32 uint32_t
++#define __u64 uint64_t
++#endif
+
+ /**
+ * struct sync_merge_data - data passed to merge ioctl
diff --git a/graphics/igt-gpu-tools/files/patch-lib_drmtest.c b/graphics/igt-gpu-tools/files/patch-lib_drmtest.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_drmtest.c
@@ -0,0 +1,32 @@
+--- lib/drmtest.c.orig 2022-08-17 23:41:16 UTC
++++ lib/drmtest.c
+@@ -54,7 +54,9 @@
+ #include "igt_debugfs.h"
+ #include "igt_device.h"
+ #include "igt_gt.h"
++#ifdef __linux__
+ #include "igt_kmod.h"
++#endif
+ #include "igt_params.h"
+ #include "igt_sysfs.h"
+ #include "igt_device_scan.h"
+@@ -168,13 +170,19 @@ static int modprobe(const char *driver)
+
+ static int modprobe(const char *driver)
+ {
++#ifdef __linux__
+ return igt_kmod_load(driver, "");
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ static void modprobe_i915(const char *name)
+ {
++#ifdef __linux__
+ /* When loading i915, we also want to load snd-hda et al */
+ igt_i915_driver_load(NULL);
++#endif
+ }
+
+ static const struct module {
diff --git a/graphics/igt-gpu-tools/files/patch-lib_i915_gem__engine__topology.c b/graphics/igt-gpu-tools/files/patch-lib_i915_gem__engine__topology.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_i915_gem__engine__topology.c
@@ -0,0 +1,13 @@
+--- lib/i915/gem_engine_topology.c.orig 2022-08-17 23:41:16 UTC
++++ lib/i915/gem_engine_topology.c
+@@ -88,6 +88,10 @@
+ */
+ #define SIZEOF_QUERY offsetof(struct drm_i915_query_engine_info, \
+ engines[GEM_MAX_ENGINES])
++#ifdef __FreeBSD__
++#define SYS_getdents64 SYS_freebsd11_getdents
++#define ino64_t ino_t
++#endif
+
+ static int __gem_query(int fd, struct drm_i915_query *q)
+ {
diff --git a/graphics/igt-gpu-tools/files/patch-lib_i915_gem__mman.c b/graphics/igt-gpu-tools/files/patch-lib_i915_gem__mman.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_i915_gem__mman.c
@@ -0,0 +1,14 @@
+--- lib/i915/gem_mman.c.orig 2022-08-17 23:41:16 UTC
++++ lib/i915/gem_mman.c
+@@ -44,6 +44,11 @@
+ #define VG(x) do {} while (0)
+ #endif
+
++#ifdef __FreeBSD__
++#define mmap64(addr, len, prot, flags, fd, offset) \
++ mmap(addr, len, prot, flags, fd, offset)
++#endif
++
+ static int gem_mmap_gtt_version(int fd)
+ {
+ struct drm_i915_getparam gp;
diff --git a/graphics/igt-gpu-tools/files/patch-lib_i915_intel__memory__region.c b/graphics/igt-gpu-tools/files/patch-lib_i915_intel__memory__region.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_i915_intel__memory__region.c
@@ -0,0 +1,14 @@
+--- lib/i915/intel_memory_region.c.orig 2022-08-17 23:41:16 UTC
++++ lib/i915/intel_memory_region.c
+@@ -21,7 +21,11 @@
+ * IN THE SOFTWARE.
+ */
+
++#ifdef __linux__
+ #include <linux/limits.h>
++#elif defined(__FreeBSD__)
++#include <sys/limits.h>
++#endif
+ #include <signal.h>
+ #include <sys/ioctl.h>
+ #include <sys/time.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_i915_perf.c b/graphics/igt-gpu-tools/files/patch-lib_i915_perf.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_i915_perf.c
@@ -0,0 +1,12 @@
+--- lib/i915/perf.c.orig 2022-08-17 23:41:16 UTC
++++ lib/i915/perf.c
+@@ -29,7 +29,9 @@
+ #include <fcntl.h>
+ #include <sys/ioctl.h>
+ #include <sys/stat.h>
++#ifdef __linux__
+ #include <sys/sysmacros.h>
++#endif
+ #include <sys/types.h>
+ #include <unistd.h>
+
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__audio.c b/graphics/igt-gpu-tools/files/patch-lib_igt__audio.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__audio.c
@@ -0,0 +1,13 @@
+--- lib/igt_audio.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_audio.c
+@@ -26,6 +26,10 @@
+
+ #include "config.h"
+
++#ifdef __FreeBSD__
++#include <limits.h>
++#endif
++
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <gsl/gsl_fft_real.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__aux.h b/graphics/igt-gpu-tools/files/patch-lib_igt__aux.h
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__aux.h
@@ -0,0 +1,25 @@
+--- lib/igt_aux.h.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_aux.h
+@@ -34,10 +34,9 @@
+ #include <sys/time.h>
+ #include <sys/types.h>
+ #include <unistd.h>
+-#ifdef __linux__
+-# include <sys/syscall.h>
+-#endif
+
++#include <sys/syscall.h>
++
+ #include <i915/gem_submission.h>
+
+ #include "igt_core.h"
+@@ -48,8 +47,8 @@
+ # ifndef HAVE_GETTID
+ # define gettid() (pid_t)(syscall(__NR_gettid))
+ # endif
+-#endif
+ #define sigev_notify_thread_id _sigev_un._tid
++#endif
+
+ /* auxialiary igt helpers from igt_aux.c */
+ /* generally useful helpers */
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__aux.c b/graphics/igt-gpu-tools/files/patch-lib_igt__aux.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__aux.c
@@ -0,0 +1,195 @@
+--- lib/igt_aux.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_aux.c
+@@ -52,7 +52,9 @@
+ #include <assert.h>
+ #include <grp.h>
+
++#ifdef __linux__
+ #include <proc/readproc.h>
++#endif
+ #include <libudev.h>
+
+ #include "drmtest.h"
+@@ -75,6 +77,14 @@
+ #include <libgen.h> /* for dirname() */
+ #endif
+
++#ifdef __FreeBSD__
++#define gettid() getpid()
++#define setpgrp() setpgid(0, 0)
++typedef struct {
++ char state;
++} proc_t;
++#endif
++
+ /**
+ * SECTION:igt_aux
+ * @short_description: Auxiliary libraries and support functions
+@@ -1217,6 +1227,7 @@ int igt_is_process_running(const char *comm)
+ */
+ int igt_is_process_running(const char *comm)
+ {
++#ifdef __linux__
+ PROCTAB *proc;
+ proc_t *proc_info;
+ bool found = false;
+@@ -1235,6 +1246,9 @@ int igt_is_process_running(const char *comm)
+
+ closeproc(proc);
+ return found;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ /**
+@@ -1251,6 +1265,7 @@ int igt_terminate_process(int sig, const char *comm)
+ */
+ int igt_terminate_process(int sig, const char *comm)
+ {
++#ifdef __linux__
+ PROCTAB *proc;
+ proc_t *proc_info;
+ int err = 0;
+@@ -1272,6 +1287,9 @@ int igt_terminate_process(int sig, const char *comm)
+
+ closeproc(proc);
+ return err;
++#elif defined(__FreeBSD__)
++ return 0;
++#endif
+ }
+
+ struct pinfo {
+@@ -1343,6 +1361,7 @@ igt_show_stat(proc_t *info, int *state, const char *fn
+ static void
+ igt_show_stat(proc_t *info, int *state, const char *fn)
+ {
++#ifdef __linux__
+ struct pinfo p = { .pid = info->tid, .comm = info->cmd, .fn = fn };
+
+ if (!*state)
+@@ -1350,11 +1369,13 @@ igt_show_stat(proc_t *info, int *state, const char *fn
+
+ __igt_show_stat(&p);
+ ++*state;
++#endif
+ }
+
+ static void
+ __igt_lsof_fds(proc_t *proc_info, int *state, char *proc_path, const char *dir)
+ {
++#ifdef __linux__
+ struct dirent *d;
+ struct stat st;
+ char path[PATH_MAX];
+@@ -1407,6 +1428,7 @@ again:
+ }
+
+ closedir(dp);
++#endif
+ }
+
+ /*
+@@ -1416,6 +1438,7 @@ __igt_lsof(const char *dir)
+ static void
+ __igt_lsof(const char *dir)
+ {
++#ifdef __linux__
+ PROCTAB *proc;
+ proc_t *proc_info;
+
+@@ -1456,6 +1479,7 @@ __igt_lsof(const char *dir)
+ }
+
+ closeproc(proc);
++#endif
+ }
+
+ /**
+@@ -1492,6 +1516,7 @@ static void pulseaudio_unload_module(proc_t *proc_info
+
+ static void pulseaudio_unload_module(proc_t *proc_info)
+ {
++#ifdef __linux__
+ struct igt_helper_process pa_proc = {};
+ char xdg_dir[PATH_MAX];
+ const char *homedir;
+@@ -1513,6 +1538,7 @@ static void pulseaudio_unload_module(proc_t *proc_info
+ system("for i in $(pacmd list-sources|grep module:|cut -d : -f 2); do pactl unload-module $i; done");
+ }
+ igt_wait_helper(&pa_proc);
++#endif
+ }
+
+ static int pipewire_pulse_pid = 0;
+@@ -1521,6 +1547,7 @@ static void pipewire_reserve_wait(void)
+
+ static void pipewire_reserve_wait(void)
+ {
++#ifdef __linux__
+ char xdg_dir[PATH_MAX];
+ const char *homedir;
+ struct passwd *pw;
+@@ -1562,6 +1589,7 @@ static void pipewire_reserve_wait(void)
+ */
+ exit(system("pw-reserve -n Audio0 -r"));
+ }
++#endif
+ }
+
+ /* Maximum time waiting for pw-reserve to start running */
+@@ -1569,6 +1597,7 @@ int pipewire_pulse_start_reserve(void)
+
+ int pipewire_pulse_start_reserve(void)
+ {
++#ifdef __linux__
+ bool is_pw_reserve_running = false;
+ proc_t *proc_info;
+ int attempts = 0;
+@@ -1614,6 +1643,9 @@ int pipewire_pulse_start_reserve(void)
+ */
+
+ return 0;
++#elif defined(__FreeBSD__)
++ return 1;
++#endif
+ }
+
+ void pipewire_pulse_stop_reserve(void)
+@@ -1647,6 +1679,7 @@ __igt_lsof_audio_and_kill_proc(proc_t *proc_info, char
+ static int
+ __igt_lsof_audio_and_kill_proc(proc_t *proc_info, char *proc_path)
+ {
++#ifdef __linux__
+ const char *audio_dev = "/dev/snd/";
+ char path[PATH_MAX * 2];
+ struct dirent *d;
+@@ -1747,6 +1780,9 @@ __igt_lsof_audio_and_kill_proc(proc_t *proc_info, char
+
+ closedir(dp);
+ return fail;
++#elif defined(__FreeBSD__)
++ return 1;
++#endif
+ }
+
+ /*
+@@ -1759,6 +1795,7 @@ igt_lsof_kill_audio_processes(void)
+ int
+ igt_lsof_kill_audio_processes(void)
+ {
++#ifdef __linux__
+ char path[PATH_MAX];
+ proc_t *proc_info;
+ PROCTAB *proc;
+@@ -1779,6 +1816,9 @@ igt_lsof_kill_audio_processes(void)
+ closeproc(proc);
+
+ return fail;
++#elif defined(__FreeBSD__)
++ return 1;
++#endif
+ }
+
+ static struct igt_siglatency {
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__core.h b/graphics/igt-gpu-tools/files/patch-lib_igt__core.h
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__core.h
@@ -0,0 +1,23 @@
+--- lib/igt_core.h.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_core.h
+@@ -31,7 +31,9 @@
+ #define IGT_CORE_H
+
+ #include <assert.h>
++#ifdef __linux__
+ #include <byteswap.h>
++#endif
+ #include <setjmp.h>
+ #include <stdbool.h>
+ #include <stdint.h>
+@@ -47,6 +49,10 @@
+ #define IGT_LOG_DOMAIN (NULL)
+ #endif
+
++#ifdef __FreeBSD__
++#include <signal.h>
++#define jmp_buf sigjmp_buf
++#endif
+
+ #ifndef STATIC_ANALYSIS_BUILD
+ #if defined(__clang_analyzer__) || defined(__COVERITY__) || defined(__KLOCWORK__)
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__core.c b/graphics/igt-gpu-tools/files/patch-lib_igt__core.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__core.c
@@ -0,0 +1,61 @@
+--- lib/igt_core.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_core.c
+@@ -43,9 +43,9 @@
+ #include <unistd.h>
+ #include <sys/wait.h>
+ #include <sys/types.h>
+-#ifdef __linux__
++
+ #include <sys/syscall.h>
+-#endif
++
+ #include <pthread.h>
+ #include <sys/utsname.h>
+ #include <termios.h>
+@@ -85,6 +85,12 @@
+ #include <libgen.h> /* for basename() on Solaris */
+ #endif
+
++#ifdef __FreeBSD__
++#define gettid() getpid()
++#define pthread_sigqueue(pid, signo, value) sigqueue(pid, signo, value)
++#define sighandler_t sig_t
++#endif
++
+ /**
+ * SECTION:igt_core
+ * @short_description: Core i-g-t testing support
+@@ -786,6 +792,7 @@ static void oom_adjust_for_doom(void)
+
+ static void oom_adjust_for_doom(void)
+ {
++#ifdef __linux__
+ int fd;
+ const char always_kill[] = "1000";
+
+@@ -793,7 +800,7 @@ static void oom_adjust_for_doom(void)
+ igt_assert(fd != -1);
+ igt_assert(write(fd, always_kill, sizeof(always_kill)) == sizeof(always_kill));
+ close(fd);
+-
++#endif
+ }
+
+ /**
+@@ -2223,7 +2230,16 @@ bool __igt_fork_helper(struct igt_helper_process *proc
+ igt_assert(0);
+ case 0:
+ reset_helper_process_list();
++#ifdef __linux__
+ oom_adjust_for_doom();
++#elif defined(__FreeBSD__)
++ /*
++ * Horrible temporary solution. The parent expects the
++ * forked child to be killed later on. Raising a SIGTERM
++ * forces this, but this behavior is not expected.
++ */
++ raise(SIGTERM);
++#endif
+
+ return true;
+ default:
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__debugfs.c b/graphics/igt-gpu-tools/files/patch-lib_igt__debugfs.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__debugfs.c
@@ -0,0 +1,23 @@
+--- lib/igt_debugfs.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_debugfs.c
+@@ -25,7 +25,9 @@
+ #include <inttypes.h>
+ #include <sys/stat.h>
+ #include <sys/mount.h>
++#ifdef __linux__
+ #include <sys/sysmacros.h>
++#endif
+ #include <dirent.h>
+ #include <errno.h>
+ #include <stdio.h>
+@@ -42,6 +44,10 @@
+ #include "igt_kms.h"
+ #include "igt_debugfs.h"
+ #include "igt_sysfs.h"
++
++#ifdef __FreeBSD__
++#define mount(src, dest, fstype, flags, data) mount(fstype, dest, flags, data)
++#endif
+
+ /**
+ * SECTION:igt_debugfs
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__device.c b/graphics/igt-gpu-tools/files/patch-lib_igt__device.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__device.c
@@ -0,0 +1,12 @@
+--- lib/igt_device.c.orig 2022-08-17 23:41:17 UTC
++++ lib/igt_device.c
+@@ -25,7 +25,9 @@
+ #include <fcntl.h>
+
+ #include <sys/stat.h>
++#ifdef __linux__
+ #include <sys/sysmacros.h>
++#endif
+ #include "igt.h"
+ #include "igt_device.h"
+ #include "igt_sysfs.h"
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__device__scan.c b/graphics/igt-gpu-tools/files/patch-lib_igt__device__scan.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__device__scan.c
@@ -0,0 +1,14 @@
+--- lib/igt_device_scan.c.orig 2022-08-17 23:41:17 UTC
++++ lib/igt_device_scan.c
+@@ -32,7 +32,11 @@
+ #include <fcntl.h>
+ #include <glib.h>
+ #include <libudev.h>
++#ifdef __linux__
+ #include <linux/limits.h>
++#elif defined(__FreeBSD__)
++#include <limits.h>
++#endif
+ #include <sys/stat.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__dummyload.c b/graphics/igt-gpu-tools/files/patch-lib_igt__dummyload.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__dummyload.c
@@ -0,0 +1,29 @@
+--- lib/igt_dummyload.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_dummyload.c
+@@ -26,7 +26,9 @@
+ #include <signal.h>
+ #include <pthread.h>
+ #include <sys/poll.h>
++#ifdef __linux__
+ #include <sys/timerfd.h>
++#endif
+
+ #include <i915_drm.h>
+
+@@ -523,6 +525,8 @@ void igt_spin_set_timeout(igt_spin_t *spin, int64_t ns
+ */
+ void igt_spin_set_timeout(igt_spin_t *spin, int64_t ns)
+ {
++/* TODO: FreeBSD - POSIX TIMER */
++#ifdef __linux__
+ struct sched_param param = { .sched_priority = 99 };
+ struct itimerspec its;
+ pthread_attr_t attr;
+@@ -554,6 +558,7 @@ void igt_spin_set_timeout(igt_spin_t *spin, int64_t ns
+ its.it_value.tv_sec = ns / NSEC_PER_SEC;
+ its.it_value.tv_nsec = ns % NSEC_PER_SEC;
+ igt_assert(timerfd_settime(timerfd, 0, &its, NULL) == 0);
++#endif
+ }
+
+ static void sync_write(igt_spin_t *spin, uint32_t value)
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__eld.c b/graphics/igt-gpu-tools/files/patch-lib_igt__eld.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__eld.c
@@ -0,0 +1,13 @@
+--- lib/igt_eld.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_eld.c
+@@ -23,6 +23,10 @@
+ * Authors: Simon Ser <simon.ser@intel.com>
+ */
+
++#ifdef __FreeBSD__
++#include <limits.h>
++#endif
++
+ #include "config.h"
+
+ #include <dirent.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__frame.c b/graphics/igt-gpu-tools/files/patch-lib_igt__frame.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__frame.c
@@ -0,0 +1,13 @@
+--- lib/igt_frame.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_frame.c
+@@ -24,6 +24,10 @@
+ * Paul Kocialkowski <paul.kocialkowski@linux.intel.com>
+ */
+
++#ifdef __FreeBSD__
++#include <limits.h>
++#endif
++
+ #include "config.h"
+
+ #include <fcntl.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__kmod.h b/graphics/igt-gpu-tools/files/patch-lib_igt__kmod.h
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__kmod.h
@@ -0,0 +1,20 @@
+--- lib/igt_kmod.h.orig 2022-08-17 23:41:17 UTC
++++ lib/igt_kmod.h
+@@ -24,9 +24,17 @@
+ #ifndef IGT_KMOD_H
+ #define IGT_KMOD_H
+
++#ifdef __linux__
+ #include <libkmod.h>
++#endif
+
+ #include "igt_list.h"
++
++#ifdef __FreeBSD__
++struct kmod_module {
++ size_t size;
++};
++#endif
+
+ bool igt_kmod_is_loaded(const char *mod_name);
+ void igt_kmod_list_loaded(void);
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__kmod.c b/graphics/igt-gpu-tools/files/patch-lib_igt__kmod.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__kmod.c
@@ -0,0 +1,453 @@
+--- lib/igt_kmod.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_kmod.c
+@@ -32,6 +32,12 @@
+ #include "igt_sysfs.h"
+ #include "igt_taints.h"
+
++#ifdef __FreeBSD__
++struct kmod_ctx {
++ int refcount;
++};
++#endif
++
+ /**
+ * SECTION:igt_kmod
+ * @short_description: Wrappers around libkmod for module loading/unloading
+@@ -59,6 +65,7 @@ static struct kmod_ctx *kmod_ctx(void)
+
+ static struct kmod_ctx *kmod_ctx(void)
+ {
++#ifdef __linux__
+ static struct kmod_ctx *ctx;
+ const char **config_paths = NULL;
+ char *config_paths_str;
+@@ -106,6 +113,10 @@ out:
+ kmod_set_log_fn(ctx, squelch, NULL);
+ out:
+ return ctx;
++#elif defined(__FreeBSD__)
++ static struct kmod_ctx *ctx = NULL;
++ return ctx;
++#endif
+ }
+
+ /**
+@@ -121,6 +132,7 @@ igt_kmod_is_loaded(const char *mod_name)
+ bool
+ igt_kmod_is_loaded(const char *mod_name)
+ {
++#ifdef __linux__
+ struct kmod_ctx *ctx = kmod_ctx();
+ struct kmod_list *mod, *list;
+ bool ret = false;
+@@ -142,16 +154,24 @@ out:
+ kmod_module_unref_list(list);
+ out:
+ return ret;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ static bool
+ igt_kmod_is_loading(struct kmod_module *kmod)
+ {
++#ifdef __linux__
+ return kmod_module_get_initstate(kmod) == KMOD_MODULE_COMING;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ static int modprobe(struct kmod_module *kmod, const char *options)
+ {
++#ifdef __linux__
+ unsigned int flags;
+
+ flags = 0;
+@@ -160,6 +180,9 @@ static int modprobe(struct kmod_module *kmod, const ch
+
+ return kmod_module_probe_insert_module(kmod, flags, options,
+ NULL, NULL, NULL);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /**
+@@ -171,6 +194,7 @@ bool igt_kmod_has_param(const char *module_name, const
+ */
+ bool igt_kmod_has_param(const char *module_name, const char *param)
+ {
++#ifdef __linux__
+ struct kmod_module *kmod;
+ struct kmod_list *d, *pre;
+ bool result = false;
+@@ -200,6 +224,9 @@ out:
+ out:
+ kmod_module_unref(kmod);
+ return result;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ /**
+@@ -220,6 +247,7 @@ igt_kmod_load(const char *mod_name, const char *opts)
+ int
+ igt_kmod_load(const char *mod_name, const char *opts)
+ {
++#ifdef __linux__
+ struct kmod_ctx *ctx = kmod_ctx();
+ struct kmod_module *kmod;
+ int err = 0;
+@@ -249,10 +277,14 @@ out:
+ out:
+ kmod_module_unref(kmod);
+ return err < 0 ? err : 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ static int igt_kmod_unload_r(struct kmod_module *kmod, unsigned int flags)
+ {
++#ifdef __linux__
+ struct kmod_list *holders, *pos;
+ int err = 0;
+
+@@ -280,6 +312,9 @@ static int igt_kmod_unload_r(struct kmod_module *kmod,
+ }
+
+ return kmod_module_remove_module(kmod, flags);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /**
+@@ -296,6 +331,7 @@ igt_kmod_unload(const char *mod_name, unsigned int fla
+ int
+ igt_kmod_unload(const char *mod_name, unsigned int flags)
+ {
++#ifdef __linux__
+ struct kmod_ctx *ctx = kmod_ctx();
+ struct kmod_module *kmod;
+ int err;
+@@ -316,6 +352,9 @@ out:
+ out:
+ kmod_module_unref(kmod);
+ return err < 0 ? err : 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /**
+@@ -326,6 +365,7 @@ igt_kmod_list_loaded(void)
+ void
+ igt_kmod_list_loaded(void)
+ {
++#ifdef __linux__
+ struct kmod_ctx *ctx = kmod_ctx();
+ struct kmod_list *module, *list;
+
+@@ -361,6 +401,7 @@ igt_kmod_list_loaded(void)
+ }
+
+ kmod_module_unref_list(list);
++#endif
+ }
+
+ static void *strdup_realloc(char *origptr, const char *strdata)
+@@ -382,6 +423,7 @@ igt_i915_driver_load(const char *opts)
+ int
+ igt_i915_driver_load(const char *opts)
+ {
++#ifdef __linux__
+ int ret;
+
+ if (opts)
+@@ -397,10 +439,14 @@ igt_i915_driver_load(const char *opts)
+ igt_kmod_load("snd_hda_intel", NULL);
+
+ return 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ static int igt_always_unload_audio_driver(char **who)
+ {
++#ifdef __linux__
+ int ret;
+ const char *sound[] = {
+ "snd_hda_intel",
+@@ -443,6 +489,9 @@ static int igt_always_unload_audio_driver(char **who)
+ }
+ }
+ return 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ struct module_ref {
+@@ -455,6 +504,7 @@ static struct module_ref *read_module_dependencies(uns
+
+ static struct module_ref *read_module_dependencies(unsigned int *num_mod)
+ {
++#ifdef __linux__
+ FILE *fp = fopen("/proc/modules", "r");
+ struct module_ref *mod = NULL;
+ size_t line_buf_size = 0;
+@@ -509,10 +559,15 @@ static struct module_ref *read_module_dependencies(uns
+
+ *num_mod = n_mod;
+ return mod;
++#elif defined(__FreeBSD__)
++ struct module_ref *mod = NULL;
++ return mod;
++#endif
+ }
+
+ static void free_module_ref(struct module_ref *mod, unsigned int num_mod)
+ {
++#ifdef __linux__
+ int i;
+
+ for (i = 0; i < num_mod; i++) {
+@@ -520,11 +575,13 @@ static void free_module_ref(struct module_ref *mod, un
+ free(mod[i].required_by);
+ }
+ free(mod);
++#endif
+ }
+
+ static int igt_unload_driver(struct module_ref *mod, unsigned int num_mod,
+ unsigned int pos)
+ {
++#ifdef __linux__
+ int ret, i;
+
+ /* Recursively remove depending modules, if any */
+@@ -536,6 +593,9 @@ static int igt_unload_driver(struct module_ref *mod, u
+ }
+
+ return igt_kmod_unload(mod[pos].name, 0);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ #define LINUX_VERSION(major, minor, patch) \
+@@ -543,6 +603,7 @@ static int linux_kernel_version(void)
+
+ static int linux_kernel_version(void)
+ {
++#ifdef __linux__
+ struct utsname utsname;
+ int ver[3] = { 0 };
+ int i = 0;
+@@ -572,10 +633,14 @@ static int linux_kernel_version(void)
+ }
+
+ return LINUX_VERSION(ver[0], ver[1], ver[2]);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int igt_audio_driver_unload(char **who)
+ {
++#ifdef __linux__
+ const char *drm_driver = "i915";
+ unsigned int num_mod, i, j;
+ struct module_ref *mod;
+@@ -647,10 +712,14 @@ ret:
+ free_module_ref(mod, num_mod);
+
+ return ret;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int __igt_i915_driver_unload(char **who)
+ {
++#ifdef __linux__
+ int ret;
+
+ const char *aux[] = {
+@@ -694,6 +763,9 @@ int __igt_i915_driver_unload(char **who)
+ }
+
+ return 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /**
+@@ -705,6 +777,7 @@ igt_i915_driver_unload(void)
+ int
+ igt_i915_driver_unload(void)
+ {
++#ifdef __linux__
+ char *who = NULL;
+ int ret;
+
+@@ -731,6 +804,9 @@ igt_i915_driver_unload(void)
+ }
+
+ return 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /**
+@@ -745,6 +821,7 @@ igt_amdgpu_driver_load(const char *opts)
+ int
+ igt_amdgpu_driver_load(const char *opts)
+ {
++#ifdef __linux__
+ if (opts)
+ igt_info("Reloading amdgpu with %s\n\n", opts);
+
+@@ -756,6 +833,9 @@ igt_amdgpu_driver_load(const char *opts)
+ bind_fbcon(true);
+
+ return IGT_EXIT_SUCCESS;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /**
+@@ -770,6 +850,7 @@ igt_amdgpu_driver_unload(void)
+ int
+ igt_amdgpu_driver_unload(void)
+ {
++#ifdef __linux__
+ bind_fbcon(false);
+
+ if (igt_kmod_is_loaded("amdgpu")) {
+@@ -790,6 +871,9 @@ igt_amdgpu_driver_unload(void)
+ }
+
+ return IGT_EXIT_SUCCESS;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ static void kmsg_dump(int fd)
+@@ -834,6 +918,7 @@ static void tests_add(struct igt_kselftest_list *tl, s
+
+ static void tests_add(struct igt_kselftest_list *tl, struct igt_list_head *list)
+ {
++#ifdef __linux__
+ struct igt_kselftest_list *pos;
+
+ igt_list_for_each_entry(pos, list, link)
+@@ -841,12 +926,14 @@ static void tests_add(struct igt_kselftest_list *tl, s
+ break;
+
+ igt_list_add_tail(&tl->link, &pos->link);
++#endif
+ }
+
+ void igt_kselftest_get_tests(struct kmod_module *kmod,
+ const char *filter,
+ struct igt_list_head *tests)
+ {
++#ifdef __linux__
+ const char *param_prefix = "igt__";
+ const int prefix_len = strlen(param_prefix);
+ struct kmod_list *d, *pre;
+@@ -892,19 +979,25 @@ void igt_kselftest_get_tests(struct kmod_module *kmod,
+ tests_add(tl, tests);
+ }
+ kmod_module_info_free_list(pre);
++#endif
+ }
+
+ static int open_parameters(const char *module_name)
+ {
++#ifdef __linux__
+ char path[256];
+
+ snprintf(path, sizeof(path), "/sys/module/%s/parameters", module_name);
+ return open(path, O_RDONLY);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int igt_kselftest_init(struct igt_kselftest *tst,
+ const char *module_name)
+ {
++#ifdef __linux__
+ int err;
+
+ memset(tst, 0, sizeof(*tst));
+@@ -920,10 +1013,14 @@ int igt_kselftest_init(struct igt_kselftest *tst,
+ return err;
+
+ return 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int igt_kselftest_begin(struct igt_kselftest *tst)
+ {
++#ifdef __linux__
+ int err;
+
+ if (strcmp(tst->module_name, "i915") == 0)
+@@ -935,6 +1032,9 @@ int igt_kselftest_begin(struct igt_kselftest *tst)
+ tst->kmsg = open("/dev/kmsg", O_RDONLY | O_NONBLOCK);
+
+ return 0;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int igt_kselftest_execute(struct igt_kselftest *tst,
+@@ -942,6 +1042,7 @@ int igt_kselftest_execute(struct igt_kselftest *tst,
+ const char *options,
+ const char *result)
+ {
++#ifdef __linux__
+ unsigned long taints;
+ char buf[1024];
+ int err;
+@@ -973,18 +1074,25 @@ int igt_kselftest_execute(struct igt_kselftest *tst,
+ igt_assert_eq(igt_kernel_tainted(&taints), 0);
+
+ return err;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ void igt_kselftest_end(struct igt_kselftest *tst)
+ {
++#ifdef __linux__
+ kmod_module_remove_module(tst->kmod, KMOD_REMOVE_FORCE);
+ close(tst->kmsg);
++#endif
+ }
+
+ void igt_kselftest_fini(struct igt_kselftest *tst)
+ {
++#ifdef __linux__
+ free(tst->module_name);
+ kmod_module_unref(tst->kmod);
++#endif
+ }
+
+ static const char *unfilter(const char *filter, const char *name)
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__kms.c b/graphics/igt-gpu-tools/files/patch-lib_igt__kms.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__kms.c
@@ -0,0 +1,13 @@
+--- lib/igt_kms.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_kms.c
+@@ -43,6 +43,10 @@
+ #include <sys/kd.h>
+ #endif
+
++#ifdef __FreeBSD__
++#include <sys/consio.h>
++#endif
++
+ #include <libudev.h>
+ #include <poll.h>
+ #include <errno.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__os.c b/graphics/igt-gpu-tools/files/patch-lib_igt__os.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__os.c
@@ -0,0 +1,42 @@
+--- lib/igt_os.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_os.c
+@@ -44,6 +44,9 @@
+ #include <sys/sysinfo.h>
+ #elif defined(HAVE_SWAPCTL) /* Solaris */
+ #include <sys/swap.h>
++#elif defined(__FreeBSD__)
++#include <sys/sysctl.h>
++#include <sys/types.h>
+ #endif
+ #include <sys/resource.h>
+
+@@ -148,6 +151,15 @@ igt_get_avail_ram_mb(void)
+ npages = sysconf(_SC_AVPHYS_PAGES);
+
+ retval = (uint64_t) pagesize * npages;
++#elif defined(__FreeBSD__) /* FreeBSD */
++ uint64_t npages, pagesize;
++ size_t npages_len = sizeof(npages);
++ size_t pagesize_len = sizeof(pagesize);
++
++ sysctlbyname("vm.stats.vm.v_free_count", &npages, &npages_len, NULL, 0);
++ sysctlbyname("vm.stats.vm.v_page_size", &pagesize, &pagesize_len, NULL, 0);
++
++ retval = pagesize * npages;
+ #else
+ #error "Unknown how to get available RAM for this OS"
+ #endif
+@@ -210,6 +222,13 @@ igt_get_total_swap_mb(void)
+ free(buf);
+
+ retval = (uint64_t) pagesize * totalpages;
++#elif defined(__FreeBSD__) /* FreeBSD */
++ uint64_t swap_total;
++ size_t swap_total_len = sizeof(swap_total);
++
++ sysctlbyname("vm.swap_total", &swap_total, &swap_total_len, NULL, 0);
++
++ retval = swap_total;
+ #else
+ #warning "Unknown how to get swap size for this OS"
+ return 0;
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__perf.h b/graphics/igt-gpu-tools/files/patch-lib_igt__perf.h
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__perf.h
@@ -0,0 +1,40 @@
+--- lib/igt_perf.h.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_perf.h
+@@ -27,10 +27,18 @@
+
+ #include <stdint.h>
+
++#ifdef __linux__
+ #include <linux/perf_event.h>
++#endif
+
+ #include "igt_gt.h"
+
++#ifdef __FreeBSD__
++struct perf_event_attr {
++ size_t size;
++};
++#endif
++
+ static inline int
+ perf_event_open(struct perf_event_attr *attr,
+ pid_t pid,
+@@ -38,6 +46,8 @@ perf_event_open(struct perf_event_attr *attr,
+ int group_fd,
+ unsigned long flags)
+ {
++#ifdef __linux__
++
+ #ifndef __NR_perf_event_open
+ #if defined(__i386__)
+ #define __NR_perf_event_open 336
+@@ -49,6 +59,9 @@ perf_event_open(struct perf_event_attr *attr,
+ #endif
+ attr->size = sizeof(*attr);
+ return syscall(__NR_perf_event_open, attr, pid, cpu, group_fd, flags);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif /* __linux__ */
+ }
+
+ uint64_t igt_perf_type_id(const char *device);
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__perf.c b/graphics/igt-gpu-tools/files/patch-lib_igt__perf.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__perf.c
@@ -0,0 +1,119 @@
+--- lib/igt_perf.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_perf.c
+@@ -4,8 +4,10 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <sys/stat.h>
++#ifdef __linux__
+ #include <sys/sysinfo.h>
+ #include <sys/sysmacros.h>
++#endif
+ #include <time.h>
+ #include <unistd.h>
+
+@@ -13,6 +15,7 @@ static char *bus_address(int i915, char *path, int pat
+
+ static char *bus_address(int i915, char *path, int pathlen)
+ {
++#ifdef __linux__
+ struct stat st;
+ int len = -1;
+ int dir;
+@@ -39,11 +42,13 @@ static char *bus_address(int i915, char *path, int pat
+ if (s)
+ memmove(path, s + 1, len - (s - path) + 1);
+
++#endif
+ return path;
+ }
+
+ const char *i915_perf_device(int i915, char *buf, int buflen)
+ {
++#ifdef __linux__
+ char *s;
+
+ #define prefix "i915_"
+@@ -63,6 +68,7 @@ const char *i915_perf_device(int i915, char *buf, int
+ if (*s == ':')
+ *s = '_';
+
++#endif
+ return buf;
+ }
+
+@@ -99,6 +105,7 @@ _perf_open(uint64_t type, uint64_t config, int group,
+ static int
+ _perf_open(uint64_t type, uint64_t config, int group, uint64_t format)
+ {
++#ifdef __linux__
+ struct perf_event_attr attr = { };
+ int nr_cpus = get_nprocs_conf();
+ int cpu = 0, ret;
+@@ -120,40 +127,67 @@ _perf_open(uint64_t type, uint64_t config, int group,
+ } while ((ret < 0 && errno == EINVAL) && (cpu < nr_cpus));
+
+ return ret;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int perf_igfx_open(uint64_t config)
+ {
++#ifdef __linux__
+ return _perf_open(igt_perf_type_id("i915"), config, -1,
+ PERF_FORMAT_TOTAL_TIME_ENABLED);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int perf_igfx_open_group(uint64_t config, int group)
+ {
++#ifdef __linux__
+ return _perf_open(igt_perf_type_id("i915"), config, group,
+ PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int perf_i915_open(int i915, uint64_t config)
+ {
++#ifdef __linux__
+ return _perf_open(i915_perf_type_id(i915), config, -1,
+ PERF_FORMAT_TOTAL_TIME_ENABLED);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int perf_i915_open_group(int i915, uint64_t config, int group)
+ {
++#ifdef __linux__
+ return _perf_open(i915_perf_type_id(i915), config, group,
+ PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int igt_perf_open(uint64_t type, uint64_t config)
+ {
++#ifdef __linux__
+ return _perf_open(type, config, -1,
+ PERF_FORMAT_TOTAL_TIME_ENABLED);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ int igt_perf_open_group(uint64_t type, uint64_t config, int group)
+ {
++#ifdef __linux__
+ return _perf_open(type, config, group,
+ PERF_FORMAT_TOTAL_TIME_ENABLED | PERF_FORMAT_GROUP);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__pm.c b/graphics/igt-gpu-tools/files/patch-lib_igt__pm.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__pm.c
@@ -0,0 +1,12 @@
+--- lib/igt_pm.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_pm.c
+@@ -33,7 +33,9 @@
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/stat.h>
++#ifdef __linux__
+ #include <sys/sysmacros.h>
++#endif
+ #include <sys/types.h>
+ #include <dirent.h>
+
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__syncobj.c b/graphics/igt-gpu-tools/files/patch-lib_igt__syncobj.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__syncobj.c
@@ -0,0 +1,13 @@
+--- lib/igt_syncobj.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_syncobj.c
+@@ -27,6 +27,10 @@
+ #include "igt.h"
+ #include "igt_syncobj.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ /**
+ * SECTION:igt_syncobj
+ * @short_description: Library with syncobj helpers
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__sysfs.c b/graphics/igt-gpu-tools/files/patch-lib_igt__sysfs.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__sysfs.c
@@ -0,0 +1,12 @@
+--- lib/igt_sysfs.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_sysfs.c
+@@ -24,7 +24,9 @@
+
+ #include <inttypes.h>
+ #include <sys/stat.h>
++#ifdef __linux__
+ #include <sys/sysmacros.h>
++#endif
+ #include <sys/mount.h>
+ #include <errno.h>
+ #include <stdarg.h>
diff --git a/graphics/igt-gpu-tools/files/patch-lib_igt__vgem.c b/graphics/igt-gpu-tools/files/patch-lib_igt__vgem.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_igt__vgem.c
@@ -0,0 +1,14 @@
+--- lib/igt_vgem.c.orig 2022-08-17 23:41:16 UTC
++++ lib/igt_vgem.c
+@@ -30,6 +30,11 @@
+ #include "igt_core.h"
+ #include "ioctl_wrappers.h"
+
++#ifdef __FreeBSD__
++#define mmap64(addr, len, prot, flags, fd, offset) \
++ mmap(addr, len, prot, flags, fd, offset)
++#endif
++
+ /**
+ * SECTION:igt_vgem
+ * @short_description: VGEM support library
diff --git a/graphics/igt-gpu-tools/files/patch-lib_intel__allocator.c b/graphics/igt-gpu-tools/files/patch-lib_intel__allocator.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_intel__allocator.c
@@ -0,0 +1,13 @@
+--- lib/intel_allocator.c.orig 2022-08-17 23:41:16 UTC
++++ lib/intel_allocator.c
+@@ -17,6 +17,10 @@
+ #include "intel_allocator.h"
+ #include "intel_allocator_msgchannel.h"
+
++#ifdef __FreeBSD__
++#define gettid() getpid()
++#endif
++
+ //#define ALLOCDBG
+ #ifdef ALLOCDBG
+ #define alloc_info igt_info
diff --git a/graphics/igt-gpu-tools/files/patch-lib_intel__batchbuffer.c b/graphics/igt-gpu-tools/files/patch-lib_intel__batchbuffer.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_intel__batchbuffer.c
@@ -0,0 +1,14 @@
+--- lib/intel_batchbuffer.c.orig 2022-08-17 23:41:16 UTC
++++ lib/intel_batchbuffer.c
+@@ -60,6 +60,11 @@
+ #define BCS_SRC_Y (1 << 0)
+ #define BCS_DST_Y (1 << 1)
+
++/* memory leak */
++#ifdef __FreeBSD__
++#define tdestroy(root, free_node)
++#endif
++
+ /**
+ * SECTION:intel_batchbuffer
+ * @short_description: Batchbuffer and blitter support
diff --git a/graphics/igt-gpu-tools/files/patch-lib_sw__sync.c b/graphics/igt-gpu-tools/files/patch-lib_sw__sync.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_sw__sync.c
@@ -0,0 +1,32 @@
+--- lib/sw_sync.c.orig 2022-08-17 23:41:16 UTC
++++ lib/sw_sync.c
+@@ -41,6 +41,10 @@
+ #include "drmtest.h"
+ #include "ioctl_wrappers.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ /**
+ * SECTION:sw_sync
+ * @short_description: Software sync (fencing) support library
+@@ -248,14 +252,18 @@ static void modprobe(const char *driver)
+
+ static void modprobe(const char *driver)
+ {
++#ifdef __linux__
+ igt_kmod_load(driver, NULL);
++#endif
+ }
+
+ static bool kernel_has_sw_sync(void)
+ {
+ char buf[128];
+
++#ifdef __linux__
+ modprobe("sw_sync");
++#endif
+
+ return kernel_sw_sync_path(buf, sizeof(buf));
+ }
diff --git a/graphics/igt-gpu-tools/files/patch-lib_tests_igt__exit__handler.c b/graphics/igt-gpu-tools/files/patch-lib_tests_igt__exit__handler.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_tests_igt__exit__handler.c
@@ -0,0 +1,12 @@
+--- lib/tests/igt_exit_handler.c.orig 2022-08-17 23:41:17 UTC
++++ lib/tests/igt_exit_handler.c
+@@ -125,5 +125,9 @@ int main(int argc, char **argv)
+ internal_assert_wexited(status, IGT_EXIT_SKIP);
+
+ status = testfunc(SIG);
++#ifdef __linux__
+ internal_assert_wsignaled(status, SIGTERM);
++#elif defined(__FreeBSD__)
++ internal_assert(status == 0);
++#endif
+ }
diff --git a/graphics/igt-gpu-tools/files/patch-lib_tests_igt__fork.c b/graphics/igt-gpu-tools/files/patch-lib_tests_igt__fork.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_tests_igt__fork.c
@@ -0,0 +1,14 @@
+--- lib/tests/igt_fork.c.orig 2022-08-17 23:41:17 UTC
++++ lib/tests/igt_fork.c
+@@ -109,7 +109,11 @@ __noreturn static void subtest_leak(void)
+ __noreturn static void subtest_leak(void)
+ {
+ pid_t *children =
++#ifdef __linux__
+ mmap(0, 4096, PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
++#elif defined(__FreeBSD__)
++ mmap(0, 4096, PROT_WRITE | PROT_READ, MAP_SHARED | MAP_ANON, -1, 0);
++#endif
+ const int num_children = 4096 / sizeof(*children);
+
+ igt_subtest_init(fake_argc, fake_argv);
diff --git a/graphics/igt-gpu-tools/files/patch-lib_tests_igt__tests__common.h b/graphics/igt-gpu-tools/files/patch-lib_tests_igt__tests__common.h
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-lib_tests_igt__tests__common.h
@@ -0,0 +1,20 @@
+--- lib/tests/igt_tests_common.h.orig 2022-08-17 23:41:17 UTC
++++ lib/tests/igt_tests_common.h
+@@ -48,8 +48,17 @@ static inline void internal_assert_wsignaled(int wstat
+
+ static inline void internal_assert_wsignaled(int wstatus, int signal)
+ {
++#ifdef __linux__
+ internal_assert(WIFSIGNALED(wstatus) &&
+ WTERMSIG(wstatus) == signal);
++#elif defined(__FreeBSD__)
++ if (WIFSIGNALED(wstatus))
++ internal_assert(WTERMSIG(wstatus) == signal);
++ else if (WIFEXITED(wstatus))
++ internal_assert(WEXITSTATUS(wstatus) == signal + 128);
++ else
++ internal_assert(0);
++#endif
+ }
+
+ static inline void internal_assert_not_wsignaled(int wstatus)
diff --git a/graphics/igt-gpu-tools/files/patch-man_rst2man.sh b/graphics/igt-gpu-tools/files/patch-man_rst2man.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-man_rst2man.sh
@@ -0,0 +1,8 @@
+--- man/rst2man.sh.orig 2022-08-17 23:41:17 UTC
++++ man/rst2man.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ rst2man=$1
+ input=$2
diff --git a/graphics/igt-gpu-tools/files/patch-meson.build b/graphics/igt-gpu-tools/files/patch-meson.build
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-meson.build
@@ -0,0 +1,33 @@
+--- meson.build.orig 2022-08-17 23:41:17 UTC
++++ meson.build
+@@ -86,7 +86,7 @@ build_info = ['Build type: ' + get_option('buildtype')
+
+ build_info = ['Build type: ' + get_option('buildtype')]
+
+-inc = include_directories('include/drm-uapi', 'include/linux-uapi', 'lib', 'lib/stubs/syscalls', '.')
++inc = include_directories('include/drm-uapi', 'include/linux-uapi', 'lib', 'lib/stubs/syscalls', '.', '/usr/local/include')
+
+ inc_for_gtkdoc = include_directories('lib')
+
+@@ -120,8 +120,10 @@ pciaccess = dependency('pciaccess', version : '>=0.10'
+ build_info += 'With libdrm: ' + ','.join(libdrm_info)
+
+ pciaccess = dependency('pciaccess', version : '>=0.10')
+-libkmod = dependency('libkmod')
+-libprocps = dependency('libprocps', required : true)
++# --- FreeBSD ---
++libkmod = dependency('libkmod', required : false)
++libprocps = dependency('libprocps', required : false)
++# ----- END -----
+
+ libunwind = dependency('libunwind', required : get_option('libunwind'))
+ build_info += 'With libunwind: @0@'.format(libunwind.found())
+@@ -313,7 +315,7 @@ endif
+ if libdrm_intel.found()
+ subdir('assembler')
+ endif
+-subdir('overlay')
++#subdir('overlay')
+ subdir('man')
+ subdir('scripts')
+
diff --git a/graphics/igt-gpu-tools/files/patch-meson.sh b/graphics/igt-gpu-tools/files/patch-meson.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-meson.sh
@@ -0,0 +1,8 @@
+--- meson.sh.orig 2022-08-17 23:41:17 UTC
++++ meson.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ cat > Makefile <<EOF
+
diff --git a/graphics/igt-gpu-tools/files/patch-overlay_debugfs.c b/graphics/igt-gpu-tools/files/patch-overlay_debugfs.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-overlay_debugfs.c
@@ -0,0 +1,13 @@
+--- overlay/debugfs.c.orig 2022-08-17 23:41:17 UTC
++++ overlay/debugfs.c
+@@ -30,6 +30,10 @@
+
+ #include "debugfs.h"
+
++#ifdef __FreeBSD__
++#define mount(src, dest, fstype, flags, data) mount(fstype, dest, flags, data)
++#endif
++
+ char debugfs_path[128];
+ char debugfs_dri_path[128];
+
diff --git a/graphics/igt-gpu-tools/files/patch-runner_executor.c b/graphics/igt-gpu-tools/files/patch-runner_executor.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-runner_executor.c
@@ -0,0 +1,39 @@
+--- runner/executor.c.orig 2022-08-17 23:41:17 UTC
++++ runner/executor.c
+@@ -2,7 +2,9 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <glib.h>
++#ifdef __linux__
+ #include <linux/watchdog.h>
++#endif
+ #if HAVE_OPING
+ #include <oping.h>
+ #endif
+@@ -14,7 +16,9 @@
+ #include <sys/ioctl.h>
+ #include <sys/select.h>
+ #include <sys/poll.h>
++#ifdef __linux__
+ #include <sys/signalfd.h>
++#endif
+ #include <sys/stat.h>
+ #include <sys/time.h>
+ #include <sys/types.h>
+@@ -32,6 +36,16 @@
+
+ #define KMSG_HEADER "[IGT] "
+ #define KMSG_WARN 4
++
++#ifdef __FreeBSD__
++#include <sys/watchdog.h>
++struct signalfd_siginfo {
++ uint32_t ssi_signo;
++ uint32_t ssi_pid;
++};
++#define WDIOC_KEEPALIVE WDIOCPATPAT
++#define signalfd(fd, mask, flags) -ENOSYS
++#endif
+
+ static struct {
+ int *fds;
diff --git a/graphics/igt-gpu-tools/files/patch-runner_job__list.c b/graphics/igt-gpu-tools/files/patch-runner_job__list.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-runner_job__list.c
@@ -0,0 +1,72 @@
+--- runner/job_list.c.orig 2022-08-17 23:41:17 UTC
++++ runner/job_list.c
+@@ -1,7 +1,12 @@
+ #include <ctype.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#ifdef __linux__
+ #include <linux/limits.h>
++#elif defined(__FreeBSD__)
++#include <sys/limits.h>
++#include <sys/wait.h>
++#endif
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -40,6 +45,31 @@ static void add_job_list_entry(struct job_list *job_li
+ entry->subtest_count = subtest_count;
+ }
+
++#ifdef __FreeBSD__
++static inline int
++job_list_fscanf(FILE *stream, char *fmt, char **subtestname)
++{
++ int bufsize;
++ char c;
++
++ for (bufsize = 0;
++ (c = fgetc(stream)) != '\n' && c != EOF;
++ ++bufsize)
++ ;
++
++ if (bufsize == 0)
++ return 0;
++
++ *subtestname = malloc(bufsize + 2);
++
++ /* no fseek() in pipes */
++ stream->_r += bufsize + 1;
++ stream->_p -= bufsize + 1;
++
++ return (fscanf(stream, "%s\n", *subtestname));
++}
++#endif
++
+ static void add_subtests(struct job_list *job_list, struct settings *settings,
+ char *binary,
+ struct regex_list *include, struct regex_list *exclude)
+@@ -72,7 +102,11 @@ static void add_subtests(struct job_list *job_list, st
+ return;
+ }
+
++#ifdef __linux__
+ while (fscanf(p, "%ms", &subtestname) == 1) {
++#elif defined(__FreeBSD__)
++ while (job_list_fscanf(p, "%s", &subtestname) == 1) {
++#endif
+ char piglitname[256];
+
+ generate_piglit_name(binary, subtestname, piglitname, sizeof(piglitname));
+@@ -226,7 +260,12 @@ static bool job_list_from_test_list(struct job_list *j
+ if (settings->include_regexes.size && !matches_any(line, &settings->include_regexes))
+ continue;
+
++#ifdef __linux__
+ if (sscanf(line, "igt@%ms", &binary) == 1) {
++#elif defined(__FreeBSD__)
++ binary = malloc(strlen(line)-4);
++ if (sscanf(line, "igt@%s", binary) == 1) {
++#endif
+ if ((delim = strchr(binary, '@')) != NULL)
+ *delim++ = '\0';
+
diff --git a/graphics/igt-gpu-tools/files/patch-runner_runner__tests.c b/graphics/igt-gpu-tools/files/patch-runner_runner__tests.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-runner_runner__tests.c
@@ -0,0 +1,183 @@
+--- runner/runner_tests.c.orig 2022-08-17 23:41:17 UTC
++++ runner/runner_tests.c
+@@ -35,29 +35,37 @@ static const char *igt_get_result(struct json_object *
+
+ static const char *igt_get_result(struct json_object *tests, const char* testname)
+ {
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ struct json_object *obj;
+
+ igt_assert(json_object_object_get_ex(tests, testname, &obj));
+ igt_assert(json_object_object_get_ex(obj, "result", &obj));
+
+ return json_object_get_string(obj);
++#elif defined(__FreeBSD__)
++ return "";
++#endif
+ }
+
+ static void igt_assert_no_result_for(struct json_object *tests, const char* testname)
+ {
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ struct json_object *obj;
+ igt_assert(!json_object_object_get_ex(tests, testname, &obj));
++#endif
+ }
+
+
+ static void igt_assert_eqstr(const char *one, const char *two)
+ {
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ if (one == NULL && two == NULL)
+ return;
+
+ igt_assert_f(one != NULL && two != NULL, "Strings differ (one is NULL): %s vs %s\n", one, two);
+
+ igt_assert_f(!strcmp(one, two), "Strings differ: '%s' vs '%s'\n", one, two);
++#endif
+ }
+
+ static void debug_print_executions(struct job_list *list)
+@@ -1069,6 +1077,7 @@ igt_main
+ igt_assert_f((dirfd = open(dirname, O_DIRECTORY | O_RDONLY)) >= 0,
+ "Dry run resume somehow deleted the results directory.\n");
+
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ /* Execute from resume should work */
+ igt_assert(execute(&state, settings, list));
+ igt_assert_f((fd = openat(dirfd, "uname.txt", O_RDONLY)) >= 0,
+@@ -1078,6 +1087,7 @@ igt_main
+ "Dry run resume didn't create result directory.\n");
+ igt_assert_f((fd = openat(subdirfd, "journal.txt", O_RDONLY)) >= 0,
+ "Dry run resume didn't create a journal.\n");
++#endif
+ }
+
+ igt_fixture {
+@@ -1112,6 +1122,7 @@ igt_main
+ igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+ igt_assert(create_job_list(list, settings));
+
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(initialize_execute_state(&state, settings, list));
+
+ igt_assert_eq(state.next, 0);
+@@ -1128,6 +1139,7 @@ igt_main
+ "Execute state initialization created a journal.\n");
+ igt_assert_f((fd = openat(dirfd, "uname.txt", O_RDONLY)) < 0,
+ "Execute state initialization created uname.txt.\n");
++#endif
+ }
+
+ igt_fixture {
+@@ -1177,6 +1189,7 @@ igt_main
+
+ free_job_list(list);
+ free_settings(settings);
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(initialize_execute_state_from_resume(dirfd, &state, settings, list));
+
+ igt_assert_eq(state.next, 0);
+@@ -1184,6 +1197,7 @@ igt_main
+ igt_assert_eq(list->entries[0].subtest_count, 2);
+ igt_assert_eqstr(list->entries[0].subtests[0], "*");
+ igt_assert_eqstr(list->entries[0].subtests[1], excludestring);
++#endif
+ }
+
+ igt_fixture {
+@@ -1234,12 +1248,14 @@ igt_main
+
+ free_job_list(list);
+ free_settings(settings);
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(initialize_execute_state_from_resume(dirfd, &state, settings, list));
+
+ /* All subtests are in journal, the entry should be considered completed */
+ igt_assert_eq(state.next, 1);
+ igt_assert_eq(list->size, 1);
+ igt_assert_eq(list->entries[0].subtest_count, 4);
++#endif
+ }
+
+ igt_fixture {
+@@ -1343,6 +1359,7 @@ igt_main
+
+ igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+ igt_assert(create_job_list(list, settings));
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(initialize_execute_state(&state, settings, list));
+
+ igt_assert(execute(&state, settings, list));
+@@ -1366,6 +1383,7 @@ igt_main
+ snprintf(testdirname, 16, "%zd", expected_tests);
+ igt_assert_f((subdirfd = openat(dirfd, testdirname, O_DIRECTORY | O_RDONLY)) < 0,
+ "Execute created too many directories\n");
++#endif
+ }
+
+ igt_fixture {
+@@ -1483,6 +1501,7 @@ igt_main
+ igt_assert(create_job_list(list, settings));
+ igt_assert(initialize_execute_state(&state, settings, list));
+
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(execute(&state, settings, list));
+ igt_assert_f((dirfd = open(dirname, O_DIRECTORY | O_RDONLY)) >= 0,
+ "Execute didn't create the results directory\n");
+@@ -1516,6 +1535,7 @@ igt_main
+ close(subdirfd);
+ subdirfd = -1;
+ }
++#endif
+ }
+
+ igt_fixture {
+@@ -1567,6 +1587,7 @@ igt_main
+ igt_assert_eq(list->entries[0].subtest_count, 1);
+
+ igt_assert(initialize_execute_state(&state, settings, list));
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(execute(&state, settings, list));
+
+ igt_assert_f((dirfd = open(dirname, O_DIRECTORY | O_RDONLY)) >= 0,
+@@ -1583,6 +1604,7 @@ igt_main
+ igt_assert_eqstr(igt_get_result(tests, "igt@dynamic@dynamic-subtest@passing"), "pass");
+
+ igt_assert_eq(json_object_put(results), 1);
++#endif
+ }
+
+ igt_fixture {
+@@ -1619,6 +1641,7 @@ igt_main
+ igt_assert(parse_options(ARRAY_SIZE(argv), (char**)argv, settings));
+ igt_assert(create_job_list(list, settings));
+ igt_assert(initialize_execute_state(&state, settings, list));
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ igt_assert(execute(&state, settings, list));
+
+ igt_assert_f((dirfd = open(dirname, O_DIRECTORY | O_RDONLY)) >= 0,
+@@ -1631,6 +1654,7 @@ igt_main
+ igt_assert_eqstr(igt_get_result(tests, "igt@dynamic@dynamic-subtest@passing"), "pass");
+
+ igt_assert_eq(json_object_put(results), 1);
++#endif
+ }
+
+ igt_fixture {
+@@ -1924,6 +1948,7 @@ igt_main
+ }
+
+ igt_subtest("file-descriptor-leakage") {
++#ifdef __linux__ /* TODO: FreeBSD SIGNALFD */
+ int i;
+
+ /*
+@@ -1939,6 +1964,7 @@ igt_main
+ igt_assert_neq(close(i), 0);
+ igt_assert_eq(errno, EBADF);
+ }
++#endif
+ }
+
+ igt_fixture {
diff --git a/graphics/igt-gpu-tools/files/patch-runner_settings.c b/graphics/igt-gpu-tools/files/patch-runner_settings.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-runner_settings.c
@@ -0,0 +1,51 @@
+--- runner/settings.c.orig 2022-08-17 23:41:17 UTC
++++ runner/settings.c
+@@ -872,6 +872,36 @@ bool serialize_settings(struct settings *settings)
+ #undef SERIALIZE_LINE
+ }
+
++#ifdef __FreeBSD__
++static inline int
++settings_fscanf(FILE *stream, char **name, char **val)
++{
++ char c, **buf = name;
++ int i, buflen, rewind = 0;
++
++ /* get buffer size for name AND value */
++ for (i = 0; i < 2; ++i, buf = val) {
++ for (buflen = 0;
++ (c = fgetc(stream)) != ':' && c != '\n' && c != EOF;
++ ++buflen)
++ ;
++
++ /* add 1 to make room for '\0' */
++ *buf = malloc(buflen + 1);
++
++ /* add 1 to include ':' or '\n' */
++ rewind += buflen + 1;
++ }
++
++ /* rewind to start of new line for fscanf */
++ i = fseek(stream, -rewind, SEEK_CUR);
++ if (i < 0)
++ return (i);
++
++ return (fscanf(stream, "%s : %[^\n]\n", *name, *val));
++}
++#endif
++
+ bool read_settings_from_file(struct settings *settings, FILE *f)
+ {
+ #define PARSE_LINE(s, name, val, field, write) \
+@@ -887,7 +917,11 @@ bool read_settings_from_file(struct settings *settings
+
+ settings->dmesg_warn_level = -1;
+
++#ifdef __linux__
+ while (fscanf(f, "%ms : %m[^\n]", &name, &val) == 2) {
++#elif defined(__FreeBSD__)
++ while (settings_fscanf(f, &name, &val) == 2) {
++#endif
+ int numval = atoi(val);
+ PARSE_LINE(settings, name, val, abort_mask, numval);
+ PARSE_LINE(settings, name, val, disk_usage_limit, strtoul(val, NULL, 10));
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_code__cov__capture b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__capture
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__capture
@@ -0,0 +1,14 @@
+--- scripts/code_cov_capture.orig 2022-08-17 23:41:17 UTC
++++ scripts/code_cov_capture
+@@ -1,7 +1,9 @@
+-#!/bin/bash
++#!/bin/sh
+
+-trap 'catch $LINENO' ERR
++set -e
++trap 'catch $LINENO' EXIT
+ catch() {
++ [ $? -eq 0 ] && exit
+ echo "$0: error on line $1. Code coverage not stored." >&2
+ exit 1
+ }
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_code__cov__gather__on__build b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__gather__on__build
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__gather__on__build
@@ -0,0 +1,8 @@
+--- scripts/code_cov_gather_on_build.orig 2022-08-17 23:41:17 UTC
++++ scripts/code_cov_gather_on_build
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+
+ KSRC=$1
+ KOBJ=$2
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_code__cov__gen__report b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__gen__report
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__gen__report
@@ -0,0 +1,111 @@
+--- scripts/code_cov_gen_report.orig 2022-08-17 23:41:17 UTC
++++ scripts/code_cov_gen_report
+@@ -1,11 +1,13 @@
+-#!/bin/bash
++#!/bin/sh
+
+ MERGED_INFO="merged"
+ GATHER_ON_BUILD="code_cov_gather_on_build.sh"
+ PARSE_INFO="code_cov_parse_info.pl"
+
+-trap 'catch $LINENO' ERR
++set -e
++trap 'catch $LINENO' EXIT
+ catch() {
++ [ $? -eq 0 ] && exit
+ echo "$0: error on line $1. HTML report not generated."
+ exit $1
+ }
+@@ -32,7 +34,7 @@ PARSE_ARGS=
+ FORCE=
+ PARSE_ARGS=
+
+-while [ "$1" != "" ]; do
++while [ "x$1" != "x" ]; do
+ case $1 in
+ --info|-i)
+ MODE=info
+@@ -41,7 +43,7 @@ while [ "$1" != "" ]; do
+ MODE=tar.gz
+ ;;
+ --kernel-source|-k)
+- if [ "$2" == "" ]; then
++ if [ "x$2" = "x" ]; then
+ usage 1
+ else
+ KSRC=$(realpath $2)
+@@ -49,7 +51,7 @@ while [ "$1" != "" ]; do
+ fi
+ ;;
+ --kernel-object|-O)
+- if [ "$2" == "" ]; then
++ if [ "x$2" = "x" ]; then
+ usage 1
+ else
+ KOBJ=$(realpath $2)
+@@ -57,7 +59,7 @@ while [ "$1" != "" ]; do
+ fi
+ ;;
+ --output-dir|-o)
+- if [ "$2" == "" ]; then
++ if [ "x$2" = "x" ]; then
+ usage 1
+ else
+ DEST_DIR=$(realpath $2)
+@@ -65,7 +67,7 @@ while [ "$1" != "" ]; do
+ fi
+ ;;
+ --read|-r)
+- if [ "$2" == "" ]; then
++ if [ "x$2" = "x" ]; then
+ usage 1
+ else
+ RESULTS=$(realpath $2)
+@@ -76,7 +78,7 @@ while [ "$1" != "" ]; do
+ PARSE_ARGS="$PARSE_ARGS $1"
+ ;;
+ --func-filters|--source-filters)
+- if [ "$2" == "" ]; then
++ if [ "x$2" = "x" ]; then
+ usage 1
+ else
+ PARSE_ARGS="$PARSE_ARGS $1 $2"
+@@ -98,7 +100,7 @@ done
+ shift
+ done
+
+-if [ "x$RESULTS" == "x" -o "x$KSRC" == "x" -o "x$DEST_DIR" == "x" -o "x$MODE" == "x" ]; then
++if [ "x$RESULTS" = "x" -o "x$KSRC" = "x" -o "x$DEST_DIR" = "x" -o "x$MODE" = "x" ]; then
+ echo "Missing a mandatory argument"
+ usage 1
+ fi
+@@ -136,8 +138,7 @@ if [ "$MODE" != "info" ]; then
+ echo "Creating per-file info files..."
+ echo -n "" >${MERGED_INFO}.info
+ for i in $RESULTS/*.tar.gz; do
+- TITLE=$(basename $i)
+- TITLE=${TITLE/.tar.gz/}
++ TITLE=$(basename "$i" .tar.gz)
+
+ echo "Adding results from $i..."
+ tar xf $i
+@@ -153,8 +154,7 @@ if [ "$MODE" != "info" ]; then
+
+ TITLE=${MERGED_INFO}
+ else
+- TITLE=$(basename $RESULTS)
+- TITLE=${TITLE/.tar.gz/}
++ TITLE=$(basename "$RESULTS" .tar.gz)
+
+ echo "Adding results from $RESULTS..."
+ tar xf $RESULTS
+@@ -175,8 +175,7 @@ else
+ echo "Copying $RESULTS to $DEST_DIR..."
+ cp $RESULTS .
+
+- TITLE=$(basename $RESULTS)
+- TITLE=${TITLE/.info/}
++ TITLE=$(basename "$RESULTS" .info)
+ fi
+ fi
+
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_code__cov__selftest.sh b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__selftest.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_code__cov__selftest.sh
@@ -0,0 +1,14 @@
+--- scripts/code_cov_selftest.sh.orig 2022-08-17 23:41:17 UTC
++++ scripts/code_cov_selftest.sh
+@@ -1,7 +1,9 @@
+-#!/bin/bash
++#!/bin/sh
+
+-trap 'catch $LINENO' ERR
++set -e
++trap 'catch $LINENO' EXIT
+ catch() {
++ [ $? -eq 0 ] && exit
+ echo "===> ERROR: Code coverage selftest failed on $0:$1" >&2
+ exit 1
+ }
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_generate__clear__kernel.sh b/graphics/igt-gpu-tools/files/patch-scripts_generate__clear__kernel.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_generate__clear__kernel.sh
@@ -0,0 +1,135 @@
+--- scripts/generate_clear_kernel.sh.orig 2022-08-17 23:41:17 UTC
++++ scripts/generate_clear_kernel.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # SPDX-License-Identifier: MIT
+ #
+@@ -25,7 +25,7 @@ export ASSEMBLY_SOURCE=./lib/i915/shaders/clear_kernel
+
+ export ASSEMBLY_SOURCE=./lib/i915/shaders/clear_kernel
+
+-function get_help {
++get_help() {
+ echo "Usage: ${0} [options]"
+ echo "Note: hsw_clear_kernel.c/ivb_clear_kernel.c automatically generated by this script should never be modified - it would be imported to i915, to use as it is..."
+ echo " "
+@@ -40,14 +40,14 @@ function get_help {
+ echo " Usage example: \"./scripts/generate_clear_kernel.sh -g hsw -o hsw_clear_buffer.h -m ~/mesa/build/src/intel/tools/i965_asm\""
+ }
+
+-function include_array # $1=array_name - update Mesa output with desired format
++include_array() # $1=array_name - update Mesa output with desired format
+ {
+ array_declaration="static const u32 $(basename $1)_clear_kernel[] = {"
+ close_array=";"
+ sed -i "1s/.*/$array_declaration/" $output_file
+ sed -i "$ s/$/$close_array/" $output_file
+ }
+-function prefix_header # $1=filename $2=comment
++prefix_header() # $1=filename $2=comment
+ {
+ cat <<EOF
+ // SPDX-License-Identifier: MIT
+@@ -60,21 +60,21 @@ EOF
+ EOF
+ }
+
+-function check_output_file #check output file
++check_output_file() #check output file
+ {
+ if [ "x$output_file" != "x" ]; then
+ if [ -f "$output_file" ]; then
+- echo -e "Warning: The \"$output_file\" file already exist - choose another file\n"
++ printf 'Warning: The "%s" file already exist - choose another file\n' "$output_file"
+ get_help
+ exit 1
+ fi
+ else
+ # It is okay to overwrite default file created
+- echo -e "Output file not specified - using default file \"$gen_device-cb_assembled\"\n"
+ output_file="$gen_device-cb_assembled"
++ printf 'Output file not specified - using default file "%s"\n' "$output_file"
+ fi
+ }
+-function asm_cb_kernel # as-root <args>
++asm_cb_kernel() # as-root <args>
+ {
+ check_output_file
+
+@@ -82,22 +82,22 @@ function asm_cb_kernel # as-root <args>
+ $mesa_i965_asm -g $gen_device -t c_literal $input_asm_source -o $output_file
+
+ if [ ! -f ${output_file} ]; then
+- echo -e "Failed to assemble CB Kernel with Mesa tool\n"
++ printf "Failed to assemble CB Kernel with Mesa tool\n"
+ get_help
+ exit 1
+ fi
+
+ # Generate header file
+- if [ "$gen_device" == "hsw" ]; then
+- echo "Generating gen7.5 CB Kernel assembled file \"hsw_clear_kernel.c\" for i915 driver..."
++ if [ "$gen_device" = "hsw" ]; then
++ printf 'Generating gen7.5 CB Kernel assembled file "hsw_clear_kernel.c" for i915 driver...'
+
+ i915_filename=hsw_clear_kernel.c
+ include_array $gen_device
+ prefix_header > $i915_filename
+ cat $output_file >> $i915_filename
+
+- elif [ "$gen_device" == "ivb" ]; then
+- echo "Generating gen7 CB Kernel assembled file \"ivb_clear_kernel.c\" for i915 driver..."
++ elif [ "$gen_device" = "ivb" ]; then
++ printf 'Generating gen7 CB Kernel assembled file "ivb_clear_kernel.c" for i915 driver...'
+
+ i915_filename=ivb_clear_kernel.c
+ include_array $gen_device
+@@ -113,7 +113,7 @@ while getopts "hg:o:m:" opt; do
+ o) output_file="$OPTARG" ;;
+ m) mesa_i965_asm="$OPTARG" ;;
+ \?)
+- echo -e "Unknown option: -$OPTARG\n"
++ printf "Unknown option: -%s\n" "$OPTARG"
+ get_help
+ exit 1
+ ;;
+@@ -122,30 +122,30 @@ if [ "x$1" != "x" ]; then
+ shift $(($OPTIND-1))
+
+ if [ "x$1" != "x" ]; then
+- echo -e "Unknown option: $1\n"
++ printf "Unknown option: %s\n" "$1"
+ get_help
+ exit 1
+ fi
+
+-if [ "x$mesa_i965_asm" == "x" ]; then
+- echo -e "i965_asm binary not found\n"
++if [ "x$mesa_i965_asm" = "x" ]; then
++ printf "i965_asm binary not found\n"
+ get_help
+ exit 1
+ fi
+
+ if [ "x$gen_device" != "x" ]; then
+- if [ "$gen_device" == "hsw" ]; then
++ if [ "$gen_device" = "hsw" ]; then
+ input_asm_source="${ASSEMBLY_SOURCE}/hsw.asm"
+- elif [ "$gen_device" == "ivb" ]; then
++ elif [ "$gen_device" = "ivb" ]; then
+ input_asm_source="${ASSEMBLY_SOURCE}/ivb.asm"
+ else
+- echo -e "Unknown platform specified\n"
++ printf "Unknown platform specified\n"
+ get_help
+ exit 1
+ fi
+ asm_cb_kernel
+ else
+- echo -e "Platform generation not specified\n"
++ printf "Platform generation not specified\n"
+ get_help
+ exit 1
+ fi
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_run-tests.sh b/graphics/igt-gpu-tools/files/patch-scripts_run-tests.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_run-tests.sh
@@ -0,0 +1,95 @@
+--- scripts/run-tests.sh.orig 2022-08-17 23:41:17 UTC
++++ scripts/run-tests.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright © 2014 Intel Corporation
+ #
+@@ -38,7 +38,7 @@ RESUME=
+ RUNNER=
+ RESUME=
+
+-function find_file # basename <possible paths>
++find_file() # basename <possible paths>
+ {
+ base=$1
+ shift
+@@ -72,7 +72,7 @@ IGT_TEST_ROOT="`readlink -f ${IGT_TEST_ROOT}`"
+
+ IGT_TEST_ROOT="`readlink -f ${IGT_TEST_ROOT}`"
+
+-function find_runner_binary # basename
++find_runner_binary() # basename
+ {
+ base=$1
+ shift
+@@ -89,20 +89,20 @@ function find_runner_binary # basename
+ return 1
+ }
+
+-function find_lcov_binary # basename
++find_lcov_binary() # basename
+ {
+- if command -v $LCOV_CMD &> /dev/null; then
++ if command -v $LCOV_CMD > /dev/null 2>&1; then
+ return 0
+ fi
+
+ return 1
+ }
+
+-function download_piglit {
++download_piglit() {
+ git clone https://anongit.freedesktop.org/git/piglit.git "$ROOT/piglit"
+ }
+
+-function execute_runner # as-root <runner> <args>
++execute_runner() # as-root <runner> <args>
+ {
+ local need_root=$1
+ shift
+@@ -112,14 +112,14 @@ function execute_runner # as-root <runner> <args>
+
+ export IGT_TEST_ROOT IGT_CONFIG_PATH IGT_KERNEL_TREE
+
+- if [ "$need_root" -ne 0 -a "$EUID" -ne 0 ]; then
++ if [ "$need_root" -ne 0 -a "$(id -u)" -ne 0 ]; then
+ sudo="sudo --preserve-env=IGT_TEST_ROOT,IGT_CONFIG_PATH,IGT_KERNEL_TREE"
+ fi
+
+ $sudo $runner "$@"
+ }
+
+-function print_help {
++print_help() {
+ echo "Usage: run-tests.sh [options]"
+ echo "Available options:"
+ echo " -c <capture_script>"
+@@ -191,7 +191,7 @@ fi
+ exit 1
+ fi
+
+-if [ "x$PIGLIT" == "x" ]; then
++if [ "x$PIGLIT" = "x" ]; then
+ PIGLIT="$ROOT/piglit/piglit"
+ fi
+
+@@ -241,7 +241,7 @@ if [ "x$RESUME_RUN" != "x" ]; then
+ fi
+
+ if [ "x$RESUME_RUN" != "x" ]; then
+- if [ "x$COV_ARGS" != "x" -a "x$COV_PER_TEST" == "x" ]; then
++ if [ "x$COV_ARGS" != "x" -a "x$COV_PER_TEST" = "x" ]; then
+ echo "Can't continue collecting coverage tests. Next time, run"
+ echo "$0 with '-P' in order to generate separate code coverage results".
+ exit 1
+@@ -252,7 +252,7 @@ fi
+ execute_runner 1 $RUNNER $RUN_ARGS -o -s "$RESULTS" $COV_ARGS $VERBOSE $FILTER
+ fi
+
+-if [ "$SUMMARY" == "html" ]; then
++if [ "$SUMMARY" = "html" ]; then
+ if [ ! -x "$PIGLIT" ]; then
+ echo "Could not find Piglit, required for HTML generation."
+ echo "Please install Piglit or use -d to download Piglit locally."
diff --git a/graphics/igt-gpu-tools/files/patch-scripts_who.sh b/graphics/igt-gpu-tools/files/patch-scripts_who.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-scripts_who.sh
@@ -0,0 +1,8 @@
+--- scripts/who.sh.orig 2022-08-17 23:41:17 UTC
++++ scripts/who.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # usage: sudo who.sh
+ #
diff --git a/graphics/igt-gpu-tools/files/patch-tests_core__auth.c b/graphics/igt-gpu-tools/files/patch-tests_core__auth.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_core__auth.c
@@ -0,0 +1,13 @@
+--- tests/core_auth.c.orig 2022-08-17 23:41:17 UTC
++++ tests/core_auth.c
+@@ -48,6 +48,10 @@
+ # include <pthread.h>
+ #endif
+
++#ifdef __FreeBSD__
++#define pthread_self() getpid()
++#endif
++
+ IGT_TEST_DESCRIPTION("Call drmGetMagic() and drmAuthMagic() and see if it behaves.");
+
+ static bool
diff --git a/graphics/igt-gpu-tools/files/patch-tests_device__reset.c b/graphics/igt-gpu-tools/files/patch-tests_device__reset.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_device__reset.c
@@ -0,0 +1,10 @@
+--- tests/device_reset.c.orig 2022-08-17 23:41:17 UTC
++++ tests/device_reset.c
+@@ -15,7 +15,6 @@ IGT_TEST_DESCRIPTION("Examine behavior of a driver on
+
+ IGT_TEST_DESCRIPTION("Examine behavior of a driver on device sysfs reset");
+
+-
+ #define DEV_PATH_LEN 80
+ #define DEV_BUS_ADDR_LEN 13 /* addr has form 0000:00:00.0 */
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_dmabuf__sync__file.c b/graphics/igt-gpu-tools/files/patch-tests_dmabuf__sync__file.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_dmabuf__sync__file.c
@@ -0,0 +1,195 @@
+--- tests/dmabuf_sync_file.c.orig 2022-08-17 23:41:17 UTC
++++ tests/dmabuf_sync_file.c
+@@ -4,7 +4,9 @@
+ #include "igt_vgem.h"
+ #include "sw_sync.h"
+
++#ifdef __linux__
+ #include <linux/dma-buf.h>
++#endif
+ #include <sys/poll.h>
+
+ IGT_TEST_DESCRIPTION("Tests for sync_file support in dma-buf");
+@@ -19,6 +21,7 @@ static bool has_dmabuf_export_sync_file(int fd)
+
+ static bool has_dmabuf_export_sync_file(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf, ret;
+ struct igt_dma_buf_sync_file arg;
+@@ -39,10 +42,14 @@ static bool has_dmabuf_export_sync_file(int fd)
+ igt_assert(ret == 0 || errno == ENOTTY);
+
+ return ret == 0;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ static int dmabuf_export_sync_file(int dmabuf, uint32_t flags)
+ {
++#ifdef __linux__
+ struct igt_dma_buf_sync_file arg;
+
+ arg.flags = flags;
+@@ -50,10 +57,14 @@ static int dmabuf_export_sync_file(int dmabuf, uint32_
+ do_ioctl(dmabuf, IGT_DMA_BUF_IOCTL_EXPORT_SYNC_FILE, &arg);
+
+ return arg.fd;
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ static bool has_dmabuf_import_sync_file(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf, timeline, fence, ret;
+ struct igt_dma_buf_sync_file arg;
+@@ -79,30 +90,38 @@ static bool has_dmabuf_import_sync_file(int fd)
+ igt_assert(ret == 0 || errno == ENOTTY);
+
+ return ret == 0;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ static void dmabuf_import_sync_file(int dmabuf, uint32_t flags, int sync_fd)
+ {
++#ifdef __linux__
+ struct igt_dma_buf_sync_file arg;
+
+ arg.flags = flags;
+ arg.fd = sync_fd;
+ do_ioctl(dmabuf, IGT_DMA_BUF_IOCTL_IMPORT_SYNC_FILE, &arg);
++#endif
+ }
+
+ static void
+ dmabuf_import_timeline_fence(int dmabuf, uint32_t flags,
+ int timeline, uint32_t seqno)
+ {
++#ifdef __linux__
+ int fence;
+
+ fence = sw_sync_timeline_create_fence(timeline, seqno);
+ dmabuf_import_sync_file(dmabuf, flags, fence);
+ close(fence);
++#endif
+ }
+
+ static bool dmabuf_busy(int dmabuf, uint32_t flags)
+ {
++#ifdef __linux__
+ struct pollfd pfd = { .fd = dmabuf };
+
+ /* If DMA_BUF_SYNC_WRITE is set, we don't want to set POLLIN or
+@@ -115,6 +134,9 @@ static bool dmabuf_busy(int dmabuf, uint32_t flags)
+ pfd.events |= POLLIN;
+
+ return poll(&pfd, 1, 0) == 0;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ static bool sync_file_busy(int sync_file)
+@@ -125,6 +147,7 @@ static bool dmabuf_sync_file_busy(int dmabuf, uint32_t
+
+ static bool dmabuf_sync_file_busy(int dmabuf, uint32_t flags)
+ {
++#ifdef __linux__
+ int sync_file;
+ bool busy;
+
+@@ -133,10 +156,14 @@ static bool dmabuf_sync_file_busy(int dmabuf, uint32_t
+ close(sync_file);
+
+ return busy;
++#elif defined(__FreeBSD__)
++ return false;
++#endif
+ }
+
+ static void test_export_basic(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf;
+ uint32_t fence;
+@@ -189,10 +216,12 @@ static void test_export_basic(int fd)
+
+ close(dmabuf);
+ gem_close(fd, bo.handle);
++#endif
+ }
+
+ static void test_export_before_signal(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf, read_fd, write_fd;
+ uint32_t fence;
+@@ -243,10 +272,12 @@ static void test_export_before_signal(int fd)
+
+ close(dmabuf);
+ gem_close(fd, bo.handle);
++#endif
+ }
+
+ static void test_export_multiwait(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf, sync_file;
+ uint32_t fence1, fence2, fence3;
+@@ -282,10 +313,12 @@ static void test_export_multiwait(int fd)
+ close(sync_file);
+ close(dmabuf);
+ gem_close(fd, bo.handle);
++#endif
+ }
+
+ static void test_export_wait_after_attach(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf, read_sync_file, write_sync_file;
+ uint32_t fence1, fence2;
+@@ -333,10 +366,12 @@ static void test_export_wait_after_attach(int fd)
+
+ close(dmabuf);
+ gem_close(fd, bo.handle);
++#endif
+ }
+
+ static void test_import_basic(int fd)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int dmabuf, timeline;
+
+@@ -402,10 +437,12 @@ static void test_import_basic(int fd)
+ igt_assert(!dmabuf_sync_file_busy(dmabuf, DMA_BUF_SYNC_READ));
+ igt_assert(!dmabuf_sync_file_busy(dmabuf, DMA_BUF_SYNC_WRITE));
+ igt_assert(!dmabuf_sync_file_busy(dmabuf, DMA_BUF_SYNC_RW));
++#endif
+ }
+
+ static void test_import_multiple(int fd, bool write)
+ {
++#ifdef __linux__
+ struct vgem_bo bo;
+ int i, dmabuf, read_sync_file, write_sync_file;
+ int write_timeline = -1, read_timelines[32];
+@@ -459,6 +496,7 @@ static void test_import_multiple(int fd, bool write)
+ igt_assert(!sync_file_busy(read_sync_file));
+ igt_assert(!dmabuf_busy(dmabuf, DMA_BUF_SYNC_WRITE));
+ igt_assert(!sync_file_busy(write_sync_file));
++#endif
+ }
+
+ igt_main
diff --git a/graphics/igt-gpu-tools/files/patch-tests_drm__import__export.c b/graphics/igt-gpu-tools/files/patch-tests_drm__import__export.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_drm__import__export.c
@@ -0,0 +1,13 @@
+--- tests/drm_import_export.c.orig 2022-08-17 23:41:17 UTC
++++ tests/drm_import_export.c
+@@ -45,6 +45,10 @@ IGT_TEST_DESCRIPTION("Basic check to verify the behavi
+ #define DURATION 10
+ IGT_TEST_DESCRIPTION("Basic check to verify the behaviour of libdrm bo for prime/flink");
+
++#ifdef __FreeBSD__
++#define gettid() getpid()
++#endif
++
+ int fd;
+ drm_intel_bufmgr *bufmgr;
+ int fd1;
diff --git a/graphics/igt-gpu-tools/files/patch-tests_dumb__buffer.c b/graphics/igt-gpu-tools/files/patch-tests_dumb__buffer.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_dumb__buffer.c
@@ -0,0 +1,14 @@
+--- tests/dumb_buffer.c.orig 2022-08-17 23:41:17 UTC
++++ tests/dumb_buffer.c
+@@ -50,6 +50,11 @@
+ #include "igt_aux.h"
+ #include "ioctl_wrappers.h"
+
++#ifdef __FreeBSD__
++#undef jmp_buf
++#define sighandler_t sig_t
++#endif
++
+ IGT_TEST_DESCRIPTION("This is a test for the generic dumb buffer interface.");
+
+ static int __dumb_create(int fd, struct drm_mode_create_dumb *create)
diff --git a/graphics/igt-gpu-tools/files/patch-tests_fbdev.c b/graphics/igt-gpu-tools/files/patch-tests_fbdev.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_fbdev.c
@@ -0,0 +1,54 @@
+--- tests/fbdev.c.orig 2022-08-17 23:41:17 UTC
++++ tests/fbdev.c
+@@ -35,7 +35,9 @@
+ #include <sys/types.h>
+ #include <unistd.h>
+
++#ifdef __linux__
+ #include <linux/fb.h>
++#endif
+
+ #include "igt.h"
+
+@@ -55,6 +57,7 @@ static void pan_test(int fd, const struct fb_var_scree
+
+ static void pan_test(int fd, const struct fb_var_screeninfo *var, int expected_ret)
+ {
++#ifdef __linux__
+ struct fb_var_screeninfo pan_var, new_var;
+ int ret;
+
+@@ -72,10 +75,12 @@ static void pan_test(int fd, const struct fb_var_scree
+ igt_assert_f(pan_var.xoffset == new_var.xoffset && pan_var.yoffset == new_var.yoffset,
+ "panning to (%u, %u) moved to (%u, %u)\n",
+ pan_var.xoffset, pan_var.yoffset, new_var.xoffset, new_var.yoffset);
++#endif
+ }
+
+ static void mode_tests(int fd)
+ {
++#ifdef __linux__
+ struct fb_var_screeninfo var_info;
+ struct fb_fix_screeninfo fix_info;
+
+@@ -200,10 +205,12 @@ static void mode_tests(int fd)
+ /* restore original panning offsets */
+ ioctl(fd, FBIOPAN_DISPLAY, &var_info);
+ }
++#endif
+ }
+
+ static void framebuffer_tests(int fd)
+ {
++#ifdef __linux__
+ const int values[] = { 0, 0x55, 0xaa, 0xff };
+ struct fb_fix_screeninfo fix_info;
+ unsigned char * volatile map;
+@@ -413,6 +420,7 @@ static void framebuffer_tests(int fd)
+ memset(map, 0, fix_info.smem_len);
+ munmap(map, fix_info.smem_len);
+ }
++#endif
+ }
+
+ igt_main
diff --git a/graphics/igt-gpu-tools/files/patch-tests_generate__testlist.sh b/graphics/igt-gpu-tools/files/patch-tests_generate__testlist.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_generate__testlist.sh
@@ -0,0 +1,27 @@
+--- tests/generate_testlist.sh.orig 2022-08-17 23:41:17 UTC
++++ tests/generate_testlist.sh
+@@ -1,18 +1,18 @@
+-#!/bin/bash
++#!/bin/sh
+
+ OUTPUT=$1
+ shift
+
+ echo TESTLIST > $OUTPUT
+
+-if [[ $# -gt 0 ]] ; then
+- echo -n $1 >> $OUTPUT
++if [ $# -gt 0 ] ; then
++ printf "$1" >> $OUTPUT
+ shift
+ fi
+
+-while [[ $# -gt 0 ]] ; do
+- echo -n " $1" >> $OUTPUT
++while [ $# -gt 0 ] ; do
++ printf " $1" >> $OUTPUT
+ shift
+ done
+
+-echo -e "\nEND TESTLIST" >> $OUTPUT
++printf "\nEND TESTLIST\n" >> $OUTPUT
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__close__race.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__close__race.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__close__race.c
@@ -0,0 +1,23 @@
+--- tests/i915/gem_close_race.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_close_race.c
+@@ -53,6 +53,10 @@
+ #define BLT_WRITE_ALPHA (1<<21)
+ #define BLT_WRITE_RGB (1<<20)
+
++#ifdef __FreeBSD__
++#define gettid() getpid()
++#endif
++
+ IGT_TEST_DESCRIPTION("Test try to race gem_close against workload submission.");
+
+ static uint32_t devid;
+@@ -61,7 +65,9 @@ static uint64_t data_addr;
+ static uint64_t exec_addr;
+ static uint64_t data_addr;
+
++#ifdef __linux__
+ #define sigev_notify_thread_id _sigev_un._tid
++#endif
+
+ static void selfcopy(int fd, uint32_t ctx, uint32_t handle, int loops)
+ {
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__concurrent__all.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__concurrent__all.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__concurrent__all.c
@@ -0,0 +1,14 @@
+--- tests/i915/gem_concurrent_all.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_concurrent_all.c
+@@ -53,6 +53,11 @@
+ #include "igt.h"
+ #include "igt_vgem.h"
+
++/* improper substitution */
++#ifdef __FreeBSD__
++#define MADV_DONTFORK MADV_NOSYNC
++#endif
++
+ IGT_TEST_DESCRIPTION("Test of pread/pwrite/mmap behavior when writing to active"
+ " buffers.");
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__create.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__create.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__create.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_create.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_create.c
+@@ -61,6 +61,10 @@
+ #include "i915/gem_mman.h"
+ #include "i915_drm.h"
+
++#ifdef __FreeBSD__
++#define sighandler_t sig_t
++#endif
++
+ IGT_TEST_DESCRIPTION("Ensure that basic gem_create and gem_create_ext works"
+ " and that invalid input combinations are rejected.");
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__exec.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__exec.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__exec.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_ctx_exec.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_ctx_exec.c
+@@ -48,6 +48,10 @@
+ #include "igt_sysfs.h"
+ #include "sw_sync.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ IGT_TEST_DESCRIPTION("Test context batch buffer execution.");
+
+ /* Copied from gem_exec_nop.c */
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__persistence.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__persistence.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__persistence.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_ctx_persistence.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_ctx_persistence.c
+@@ -50,6 +50,10 @@ static unsigned long reset_timeout_ms = RESET_TIMEOUT_
+ static unsigned long reset_timeout_ms = RESET_TIMEOUT_MS;
+ #define NSEC_PER_MSEC (1000 * 1000ull)
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ static void cleanup(int i915)
+ {
+ igt_drop_caches_set(i915,
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__shared.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__shared.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__ctx__shared.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_ctx_shared.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_ctx_shared.c
+@@ -54,6 +54,10 @@
+ #define MAX_PRIO I915_CONTEXT_MAX_USER_PRIORITY
+ #define MIN_PRIO I915_CONTEXT_MIN_USER_PRIORITY
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ static int priorities[] = {
+ [LO] = MIN_PRIO / 2,
+ [HI] = MAX_PRIO / 2,
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__fence.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__fence.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__fence.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_exec_fence.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_exec_fence.c
+@@ -35,6 +35,10 @@
+ #include "intel_ctx.h"
+ #include "sw_sync.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ IGT_TEST_DESCRIPTION("Check that execbuf waits for explicit fences");
+
+ #ifndef SYNC_IOC_MERGE
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__latency.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__latency.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__latency.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_exec_latency.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_exec_latency.c
+@@ -55,6 +55,10 @@
+ #define CORK 0x2
+ #define PREEMPT 0x4
+
++#ifdef __FreeBSD__
++#define SCHED_RESET_ON_FORK 0
++#endif
++
+ static unsigned int ring_size;
+ static double rcs_clock;
+ static struct intel_mmio_data mmio_data;
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__schedule.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__schedule.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__exec__schedule.c
@@ -0,0 +1,67 @@
+--- tests/i915/gem_exec_schedule.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_exec_schedule.c
+@@ -23,7 +23,9 @@
+
+ #include "config.h"
+
++#ifdef __linux__
+ #include <linux/userfaultfd.h>
++#endif
+
+ #include <pthread.h>
+ #include <sys/poll.h>
+@@ -64,6 +66,10 @@
+ #define MI_SEMAPHORE_SAD_EQ_SDD (4 << 12)
+ #define MI_SEMAPHORE_SAD_NEQ_SDD (5 << 12)
+
++#ifdef __FreeBSD__
++#define SCHED_RESET_ON_FORK 0
++#endif
++
+ IGT_TEST_DESCRIPTION("Check that we can control the order of execution");
+
+ static unsigned int offset_in_page(void *addr)
+@@ -2510,7 +2516,11 @@ static int userfaultfd(int flags)
+
+ static int userfaultfd(int flags)
+ {
++#ifdef __linux__
+ return syscall(SYS_userfaultfd, flags);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ struct ufd_thread {
+@@ -2569,6 +2579,7 @@ static void test_pi_userfault(int i915,
+ const intel_ctx_cfg_t *cfg,
+ unsigned int engine)
+ {
++#ifdef __linux__
+ const uint32_t bbe = MI_BATCH_BUFFER_END;
+ struct uffdio_api api = { .api = UFFD_API };
+ struct uffdio_register reg;
+@@ -2670,6 +2681,7 @@ static void test_pi_userfault(int i915,
+ gem_close(i915, t.batch);
+ munmap(t.page, 4096);
+ close(ufd);
++#endif
+ }
+
+ static void *iova_thread(struct ufd_thread *t, int prio)
+@@ -2705,6 +2717,7 @@ static void test_pi_iova(int i915, const intel_ctx_cfg
+ static void test_pi_iova(int i915, const intel_ctx_cfg_t *cfg,
+ unsigned int engine, unsigned int flags)
+ {
++#ifdef __linux__
+ intel_ctx_cfg_t ufd_cfg = *cfg;
+ const intel_ctx_t *spinctx;
+ struct uffdio_api api = { .api = UFFD_API };
+@@ -2839,6 +2852,7 @@ static void test_pi_iova(int i915, const intel_ctx_cfg
+ gem_vm_destroy(i915, ufd_cfg.vm);
+
+ close(ufd);
++#endif
+ }
+
+ static void measure_semaphore_power(int i915, const intel_ctx_t *ctx)
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__lmem__swapping.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__lmem__swapping.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__lmem__swapping.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_lmem_swapping.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_lmem_swapping.c
+@@ -25,6 +25,10 @@
+ #include "i915/i915_blt.h"
+ #include "i915/intel_mocs.h"
+
++#ifdef __FreeBSD__
++#define MAP_POPULATE MAP_PREFAULT_READ
++#endif
++
+ IGT_TEST_DESCRIPTION("Exercise local memory swapping.");
+
+ #define __round_mask(x, y) ((__typeof__(x))((y) - 1))
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__madvise.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__madvise.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__madvise.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_madvise.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_madvise.c
+@@ -39,6 +39,10 @@
+ #include "drm.h"
+ #include "i915/gem_create.h"
+
++#ifdef __FreeBSD__
++#define sighandler_t sig_t
++#endif
++
+ IGT_TEST_DESCRIPTION("Checks that the kernel reports EFAULT when trying to use"
+ " purged bo.");
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__mmap__gtt.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__mmap__gtt.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__mmap__gtt.c
@@ -0,0 +1,31 @@
+--- tests/i915/gem_mmap_gtt.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_mmap_gtt.c
+@@ -54,6 +54,16 @@
+
+ #define abs(x) ((x) >= 0 ? (x) : -(x))
+
++#ifdef __FreeBSD__
++#define mmap64(addr, len, prot, flags, fd, offset) \
++ mmap(addr, len, prot, flags, fd, offset)
++#define PTRACE_TRACEME PT_TRACE_ME
++#define PTRACE_ATTACH PT_ATTACH
++#define PTRACE_PEEKDATA PT_READ_D
++#define PTRACE_POKEDATA PT_WRITE_D
++#define PTRACE_DETACH PT_DETACH
++#endif
++
+ IGT_TEST_DESCRIPTION("Ensure that all operations around MMAP_GTT ioctl works.");
+
+ static int OBJECT_SIZE = 16*1024*1024;
+@@ -566,7 +576,11 @@ test_ptrace(int fd)
+ for (int i = 0; i < sz / sizeof(long); i++) {
+ long ret;
+
++#ifdef __linux__
+ ret = ptrace(PTRACE_PEEKDATA, pid, gtt + i);
++#elif defined(__FreeBSD__)
++ ret = ptrace(PTRACE_PEEKDATA, pid, gtt + i, 0);
++#endif
+ igt_assert_eq_u64(ret, CC);
+ cpy[i] = ret;
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__mmap__offset.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__mmap__offset.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__mmap__offset.c
@@ -0,0 +1,31 @@
+--- tests/i915/gem_mmap_offset.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_mmap_offset.c
+@@ -38,6 +38,16 @@
+ #include "igt.h"
+ #include "igt_x86.h"
+
++#ifdef __FreeBSD__
++#define mmap64(addr, len, prot, flags, fd, offset) \
++ mmap(addr, len, prot, flags, fd, offset)
++#define PTRACE_TRACEME PT_TRACE_ME
++#define PTRACE_ATTACH PT_ATTACH
++#define PTRACE_PEEKDATA PT_READ_D
++#define PTRACE_POKEDATA PT_WRITE_D
++#define PTRACE_DETACH PT_DETACH
++#endif
++
+ IGT_TEST_DESCRIPTION("Basic MMAP_OFFSET IOCTL tests for mem regions\n");
+
+ static int mmap_offset_ioctl(int i915, struct drm_i915_gem_mmap_offset *arg)
+@@ -370,7 +380,11 @@ static void test_ptrace(int i915)
+ for (int i = 0; i < SZ / sizeof(long); i++) {
+ long ret;
+
++#ifdef __linux__
+ ret = ptrace(PTRACE_PEEKDATA, pid, ptr + i);
++#elif defined(__FreeBSD__)
++ ret = ptrace(PTRACE_PEEKDATA, pid, ptr + i, 0);
++#endif
+ igt_assert_eq_u64(ret, CC);
+ cpy[i] = ret;
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__pread.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__pread.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__pread.c
@@ -0,0 +1,40 @@
+--- tests/i915/gem_pread.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_pread.c
+@@ -25,7 +25,9 @@
+ *
+ */
+
++#ifdef __linux__
+ #include <linux/userfaultfd.h>
++#endif
+
+ #include "igt.h"
+ #include <unistd.h>
+@@ -81,7 +83,11 @@ static int userfaultfd(int flags)
+
+ static int userfaultfd(int flags)
+ {
++#ifdef __linux__
+ return syscall(SYS_userfaultfd, flags);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ struct ufd_thread {
+@@ -154,6 +160,7 @@ static void test_exhaustion(int i915)
+
+ static void test_exhaustion(int i915)
+ {
++#ifdef __linux__
+ struct uffdio_api api = { .api = UFFD_API };
+ struct uffdio_register reg;
+ struct uffdio_copy copy;
+@@ -221,6 +228,7 @@ static void test_exhaustion(int i915)
+ close(ufd);
+
+ close(t.vgem);
++#endif
+ }
+
+ #define OBJECT_SIZE 16384
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__pwrite.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__pwrite.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__pwrite.c
@@ -0,0 +1,40 @@
+--- tests/i915/gem_pwrite.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_pwrite.c
+@@ -25,7 +25,9 @@
+ *
+ */
+
++#ifdef __linux__
+ #include <linux/userfaultfd.h>
++#endif
+
+ #include <pthread.h>
+ #include <unistd.h>
+@@ -283,7 +285,11 @@ static int userfaultfd(int flags)
+
+ static int userfaultfd(int flags)
+ {
++#ifdef __linux__
+ return syscall(SYS_userfaultfd, flags);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ struct ufd_thread {
+@@ -378,6 +384,7 @@ static void test_exhaustion(int i915)
+
+ static void test_exhaustion(int i915)
+ {
++#ifdef __linux__
+ struct uffdio_api api = { .api = UFFD_API };
+ struct uffdio_register reg;
+ struct uffdio_copy copy;
+@@ -445,6 +452,7 @@ static void test_exhaustion(int i915)
+ close(ufd);
+
+ close(t.vgem);
++#endif
+ }
+
+ uint32_t *src, dst;
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__shrink.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__shrink.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__shrink.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_shrink.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_shrink.c
+@@ -38,6 +38,10 @@
+ #define MADV_FREE 8
+ #endif
+
++#ifdef __FreeBSD__
++#define MAP_POPULATE MAP_PREFAULT_READ
++#endif
++
+ static void get_pages(int fd, uint64_t alloc)
+ {
+ uint32_t handle = gem_create(fd, alloc);
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__userptr__blits.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__userptr__blits.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__userptr__blits.c
@@ -0,0 +1,52 @@
+--- tests/i915/gem_userptr_blits.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_userptr_blits.c
+@@ -36,7 +36,9 @@
+ * The goal is to simply ensure the basics work.
+ */
+
++#ifdef __linux__
+ #include <linux/userfaultfd.h>
++#endif
+
+ #include <stdlib.h>
+ #include <stdio.h>
+@@ -66,6 +68,11 @@
+
+ #include "eviction_common.c"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#define MADV_HUGEPAGE MADV_SEQUENTIAL
++#endif
++
+ #ifndef PAGE_SIZE
+ #define PAGE_SIZE 4096
+ #endif
+@@ -2154,7 +2161,11 @@ static int userfaultfd(int flags)
+
+ static int userfaultfd(int flags)
+ {
++#ifdef __linux__
+ return syscall(SYS_userfaultfd, flags);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ static bool has_userptr_probe(int fd)
+@@ -2240,6 +2251,7 @@ static void test_userfault(int i915)
+
+ static void test_userfault(int i915)
+ {
++#ifdef __linux__
+ struct uffdio_api api = { .api = UFFD_API };
+ struct uffdio_register reg;
+ struct uffdio_copy copy;
+@@ -2295,6 +2307,7 @@ static void test_userfault(int i915)
+
+ munmap(t.page, 4096);
+ close(ufd);
++#endif
+ }
+
+ uint64_t total_ram;
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_gem__wait.c b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__wait.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_gem__wait.c
@@ -0,0 +1,13 @@
+--- tests/i915/gem_wait.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/gem_wait.c
+@@ -32,6 +32,10 @@
+ #include "igt.h"
+ #include "igt_vgem.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ IGT_TEST_DESCRIPTION("Tests the GEM_WAIT ioctl");
+
+ static int __gem_wait(int fd, struct drm_i915_gem_wait *w)
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_i915__hangman.c b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__hangman.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__hangman.c
@@ -0,0 +1,13 @@
+--- tests/i915/i915_hangman.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/i915_hangman.c
+@@ -50,6 +50,10 @@ static int sysfs = -1;
+
+ #define OFFSET_ALIVE 10
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ IGT_TEST_DESCRIPTION("Tests for hang detection and recovery");
+
+ static void check_alive(void)
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_i915__module__load.c b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__module__load.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__module__load.c
@@ -0,0 +1,12 @@
+--- tests/i915/i915_module_load.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/i915_module_load.c
+@@ -23,7 +23,9 @@
+ #include "igt.h"
+ #include <dirent.h>
+ #include <sys/utsname.h>
++#ifdef __linux__
+ #include <linux/limits.h>
++#endif
+ #include <signal.h>
+ #include <libgen.h>
+ #include <signal.h>
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_i915__pm__backlight.c b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__pm__backlight.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__pm__backlight.c
@@ -0,0 +1,13 @@
+--- tests/i915/i915_pm_backlight.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/i915_pm_backlight.c
+@@ -46,6 +46,10 @@ struct context {
+ #define FADESTEPS 10
+ #define FADESPEED 100 /* milliseconds between steps */
+
++#ifdef __FreeBSD__
++#include <libgen.h>
++#endif
++
+ IGT_TEST_DESCRIPTION("Basic backlight sysfs test");
+
+ static int backlight_read(int *result, const char *fname)
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_i915__pm__rpm.c b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__pm__rpm.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_i915__pm__rpm.c
@@ -0,0 +1,43 @@
+--- tests/i915/i915_pm_rpm.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/i915_pm_rpm.c
+@@ -40,8 +40,10 @@
+ #include <sys/mman.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#ifdef __linux__
+ #include <linux/i2c.h>
+ #include <linux/i2c-dev.h>
++#endif
+
+ #include <drm.h>
+
+@@ -54,6 +56,17 @@
+ #include "igt_device.h"
+ #include "igt_edid.h"
+
++#ifdef __FreeBSD__
++#include <limits.h>
++#include <dev/iicbus/iic.h>
++
++#define I2C_RDWR I2CRDWR
++#define I2C_M_RD IIC_M_RD
++#define i2c_msg iic_msg
++#define i2c_rdwr_ioctl_data iic_rdwr_data
++#define addr slave
++#endif
++
+ #define MSR_PC8_RES 0x630
+ #define MSR_PC9_RES 0x631
+ #define MSR_PC10_RES 0x632
+@@ -124,7 +137,11 @@ static int modprobe(const char *driver)
+
+ static int modprobe(const char *driver)
+ {
++#ifdef __linux__
+ return igt_kmod_load(driver, NULL);
++#elif defined(__FreeBSD__)
++ return -ENOSYS;
++#endif
+ }
+
+ /* If the read fails, then the machine doesn't support PC8+ residencies. */
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_kms__psr2__su.c b/graphics/igt-gpu-tools/files/patch-tests_i915_kms__psr2__su.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_kms__psr2__su.c
@@ -0,0 +1,18 @@
+--- tests/i915/kms_psr2_su.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/kms_psr2_su.c
+@@ -29,7 +29,15 @@
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <string.h>
++#ifdef __linux__
+ #include <sys/timerfd.h>
++#endif
++
++/* FreeBSD: POSIX TIMER */
++#ifdef __FreeBSD__
++#define timerfd_create(c, f) -1
++#define timerfd_settime(fd, f, n, o) -1
++#endif
+
+ IGT_TEST_DESCRIPTION("Test PSR2 selective update");
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_kms__psr__stress__test.c b/graphics/igt-gpu-tools/files/patch-tests_i915_kms__psr__stress__test.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_kms__psr__stress__test.c
@@ -0,0 +1,32 @@
+--- tests/i915/kms_psr_stress_test.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/kms_psr_stress_test.c
+@@ -6,7 +6,9 @@
+ #include <stdbool.h>
+ #include <stdio.h>
+ #include <string.h>
++#ifdef __linux__
+ #include <sys/timerfd.h>
++#endif
+
+ #define INVALIDATES_PER_SEC 15
+ #define FLIPS_PER_SEC 30
+@@ -18,6 +20,12 @@
+ #define FRAMEBUFFERS_LEN 60
+
+ #define DRAW_METHOD IGT_DRAW_BLT
++
++/* FreeBSD: POSIX TIMER */
++#ifdef __FreeBSD__
++#define timerfd_create(c, f) -1
++#define timerfd_settime(fd, f, n, o) -1
++#endif
+
+ typedef struct {
+ int drm_fd;
+@@ -374,4 +382,4 @@ igt_main
+ close(data.debugfs_fd);
+ close(data.drm_fd);
+ }
+-}
+\ No newline at end of file
++}
diff --git a/graphics/igt-gpu-tools/files/patch-tests_i915_sysfs__heartbeat__interval.c b/graphics/igt-gpu-tools/files/patch-tests_i915_sysfs__heartbeat__interval.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_i915_sysfs__heartbeat__interval.c
@@ -0,0 +1,13 @@
+--- tests/i915/sysfs_heartbeat_interval.c.orig 2022-08-17 23:41:17 UTC
++++ tests/i915/sysfs_heartbeat_interval.c
+@@ -42,6 +42,10 @@
+ #include "igt_sysfs.h"
+ #include "sw_sync.h"
+
++#ifdef __FreeBSD__
++#define sighandler_t sig_t
++#endif
++
+ #define ATTR "heartbeat_interval_ms"
+ #define RESET_TIMEOUT 50 /* milliseconds, at least one jiffie for kworker */
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_igt__command__line.sh b/graphics/igt-gpu-tools/files/patch-tests_igt__command__line.sh
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_igt__command__line.sh
@@ -0,0 +1,8 @@
+--- tests/igt_command_line.sh.orig 2022-08-17 23:41:17 UTC
++++ tests/igt_command_line.sh
+@@ -1,4 +1,4 @@
+-#!/bin/bash
++#!/bin/sh
+ #
+ # Copyright © 2014 Intel Corporation
+ #
diff --git a/graphics/igt-gpu-tools/files/patch-tests_kms__content__protection.c b/graphics/igt-gpu-tools/files/patch-tests_kms__content__protection.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_kms__content__protection.c
@@ -0,0 +1,12 @@
+--- tests/kms_content_protection.c.orig 2022-08-17 23:41:17 UTC
++++ tests/kms_content_protection.c
+@@ -24,7 +24,9 @@
+
+ #include <poll.h>
+ #include <fcntl.h>
++#ifdef __linux__
+ #include <sys/epoll.h>
++#endif
+ #include <sys/stat.h>
+ #include <libudev.h>
+ #include "igt.h"
diff --git a/graphics/igt-gpu-tools/files/patch-tests_kms__cursor__legacy.c b/graphics/igt-gpu-tools/files/patch-tests_kms__cursor__legacy.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_kms__cursor__legacy.c
@@ -0,0 +1,13 @@
+--- tests/kms_cursor_legacy.c.orig 2022-08-17 23:41:17 UTC
++++ tests/kms_cursor_legacy.c
+@@ -47,6 +47,10 @@
+
+ #define PAGE_SIZE 4096
+
++#ifdef __FreeBSD__
++#define SCHED_IDLE SCHED_OTHER
++#endif
++
+ IGT_TEST_DESCRIPTION("Stress legacy cursor ioctl");
+
+ igt_pipe_crc_t *pipe_crc;
diff --git a/graphics/igt-gpu-tools/files/patch-tests_kms__flip.c b/graphics/igt-gpu-tools/files/patch-tests_kms__flip.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_kms__flip.c
@@ -0,0 +1,13 @@
+--- tests/kms_flip.c.orig 2022-08-17 23:41:17 UTC
++++ tests/kms_flip.c
+@@ -45,6 +45,10 @@
+ #include "i915/gem_create.h"
+ #include "igt_stats.h"
+
++#ifdef __FreeBSD__
++#include <sys/consio.h>
++#endif
++
+ #define TEST_DPMS (1 << 0)
+
+ #define TEST_PAN (1 << 3)
diff --git a/graphics/igt-gpu-tools/files/patch-tests_kms__sysfs__edid__timing.c b/graphics/igt-gpu-tools/files/patch-tests_kms__sysfs__edid__timing.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_kms__sysfs__edid__timing.c
@@ -0,0 +1,13 @@
+--- tests/kms_sysfs_edid_timing.c.orig 2022-08-17 23:41:17 UTC
++++ tests/kms_sysfs_edid_timing.c
+@@ -26,6 +26,10 @@
+ #include <fcntl.h>
+ #include <sys/stat.h>
+
++#ifdef __FreeBSD__
++#include <limits.h>
++#endif
++
+ #define THRESHOLD_PER_CONNECTOR 150
+ #define THRESHOLD_PER_CONNECTOR_MEAN 140
+ #define THRESHOLD_ALL_CONNECTORS_MEAN 100
diff --git a/graphics/igt-gpu-tools/files/patch-tests_meson.build b/graphics/igt-gpu-tools/files/patch-tests_meson.build
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_meson.build
@@ -0,0 +1,174 @@
+--- tests/meson.build.orig 2022-08-17 23:41:17 UTC
++++ tests/meson.build
+@@ -6,14 +6,14 @@ test_progs = [
+ 'core_setmaster',
+ 'core_setmaster_vs_auth',
+ 'debugfs_test',
+- 'dmabuf',
+- 'dmabuf_sync_file',
++ #'dmabuf',
++ 'dmabuf_sync_file',
+ 'device_reset',
+- 'drm_buddy',
++ #'drm_buddy',
+ 'drm_import_export',
+- 'drm_mm',
++ #'drm_mm',
+ 'drm_read',
+- 'fbdev',
++ #'fbdev',
+ 'feature_discovery',
+ 'kms_3d',
+ 'kms_addfb_basic',
+@@ -54,7 +54,7 @@ test_progs = [
+ 'kms_rmfb',
+ 'kms_rotation_crc',
+ 'kms_scaling_modes',
+- 'kms_selftest',
++ #'kms_selftest',
+ 'kms_sequence',
+ 'kms_setmode',
+ 'kms_sysfs_edid_timing',
+@@ -222,7 +222,7 @@ i915_progs = [
+ 'i915_pm_rps',
+ 'i915_pm_sseu',
+ 'i915_query',
+- 'i915_selftest',
++ #'i915_selftest',
+ 'i915_suspend',
+ 'kms_big_fb',
+ 'kms_big_joiner' ,
+@@ -340,21 +340,21 @@ test_list += 'gem_create'
+ install : true)
+ test_list += 'gem_create'
+
+-test_executables += executable('gem_ctx_freq',
+- join_paths('i915', 'gem_ctx_freq.c'),
+- dependencies : test_deps + [ lib_igt_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'gem_ctx_freq'
++#test_executables += executable('gem_ctx_freq',
++# join_paths('i915', 'gem_ctx_freq.c'),
++# dependencies : test_deps + [ lib_igt_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'gem_ctx_freq'
+
+-test_executables += executable('gem_ctx_sseu',
+- join_paths('i915', 'gem_ctx_sseu.c'),
+- dependencies : test_deps + [ lib_igt_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'gem_ctx_sseu'
++#test_executables += executable('gem_ctx_sseu',
++# join_paths('i915', 'gem_ctx_sseu.c'),
++# dependencies : test_deps + [ lib_igt_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'gem_ctx_sseu'
+
+ test_executables += executable('gem_eio',
+ join_paths('i915', 'gem_eio.c'),
+@@ -364,12 +364,12 @@ test_list += 'gem_eio'
+ install : true)
+ test_list += 'gem_eio'
+
+-test_executables += executable('gem_exec_balancer', 'i915/gem_exec_balancer.c',
+- dependencies : test_deps + [ lib_igt_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'gem_exec_balancer'
++#test_executables += executable('gem_exec_balancer', 'i915/gem_exec_balancer.c',
++# dependencies : test_deps + [ lib_igt_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'gem_exec_balancer'
+
+ test_executables += executable('gem_mmap_offset',
+ join_paths('i915', 'gem_mmap_offset.c'),
+@@ -379,44 +379,44 @@ test_list += 'gem_mmap_offset'
+ install : true)
+ test_list += 'gem_mmap_offset'
+
+-test_executables += executable('i915_pm_freq_mult',
+- join_paths('i915', 'i915_pm_freq_mult.c'),
+- dependencies : test_deps + [ lib_igt_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'i915_pm_freq_mult'
++#test_executables += executable('i915_pm_freq_mult',
++# join_paths('i915', 'i915_pm_freq_mult.c'),
++# dependencies : test_deps + [ lib_igt_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'i915_pm_freq_mult'
+
+-test_executables += executable('i915_pm_rc6_residency',
+- join_paths('i915', 'i915_pm_rc6_residency.c'),
+- dependencies : test_deps + [ lib_igt_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'i915_pm_rc6_residency'
++#test_executables += executable('i915_pm_rc6_residency',
++# join_paths('i915', 'i915_pm_rc6_residency.c'),
++# dependencies : test_deps + [ lib_igt_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'i915_pm_rc6_residency'
+
+-test_executables += executable('perf_pmu',
+- join_paths('i915', 'perf_pmu.c'),
+- dependencies : test_deps + [ lib_igt_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'perf_pmu'
++#test_executables += executable('perf_pmu',
++# join_paths('i915', 'perf_pmu.c'),
++# dependencies : test_deps + [ lib_igt_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'perf_pmu'
+
+-test_executables += executable('perf',
+- join_paths('i915', 'perf.c'),
+- dependencies : test_deps + [ lib_igt_i915_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'perf'
++#test_executables += executable('perf',
++# join_paths('i915', 'perf.c'),
++# dependencies : test_deps + [ lib_igt_i915_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'perf'
+
+-test_executables += executable('core_hotunplug', 'core_hotunplug.c',
+- dependencies : test_deps + [ lib_igt_i915_perf ],
+- install_dir : libexecdir,
+- install_rpath : libexecdir_rpathdir,
+- install : true)
+-test_list += 'core_hotunplug'
++#test_executables += executable('core_hotunplug', 'core_hotunplug.c',
++# dependencies : test_deps + [ lib_igt_i915_perf ],
++# install_dir : libexecdir,
++# install_rpath : libexecdir_rpathdir,
++# install : true)
++#test_list += 'core_hotunplug'
+
+ executable('testdisplay', ['testdisplay.c', 'testdisplay_hotplug.c'],
+ dependencies : test_deps,
diff --git a/graphics/igt-gpu-tools/files/patch-tests_sw__sync.c b/graphics/igt-gpu-tools/files/patch-tests_sw__sync.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_sw__sync.c
@@ -0,0 +1,12 @@
+--- tests/sw_sync.c.orig 2022-08-17 23:41:17 UTC
++++ tests/sw_sync.c
+@@ -38,6 +38,9 @@
+
+ #include "sw_sync.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
+
+ IGT_TEST_DESCRIPTION("Test SW Sync Framework");
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_syncobj__timeline.c b/graphics/igt-gpu-tools/files/patch-tests_syncobj__timeline.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_syncobj__timeline.c
@@ -0,0 +1,13 @@
+--- tests/syncobj_timeline.c.orig 2022-08-17 23:41:17 UTC
++++ tests/syncobj_timeline.c
+@@ -31,6 +31,10 @@
+ #include <signal.h>
+ #include "drm.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ IGT_TEST_DESCRIPTION("Tests for the drm timeline sync object API");
+
+ /* One tenth of a second */
diff --git a/graphics/igt-gpu-tools/files/patch-tests_syncobj__wait.c b/graphics/igt-gpu-tools/files/patch-tests_syncobj__wait.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_syncobj__wait.c
@@ -0,0 +1,13 @@
+--- tests/syncobj_wait.c.orig 2022-08-17 23:41:17 UTC
++++ tests/syncobj_wait.c
+@@ -31,6 +31,10 @@
+ #include <signal.h>
+ #include "drm.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ IGT_TEST_DESCRIPTION("Tests for the drm sync object wait API");
+
+ /* One tenth of a second */
diff --git a/graphics/igt-gpu-tools/files/patch-tests_tools__test.c b/graphics/igt-gpu-tools/files/patch-tests_tools__test.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_tools__test.c
@@ -0,0 +1,15 @@
+--- tests/tools_test.c.orig 2022-08-17 23:41:17 UTC
++++ tests/tools_test.c
+@@ -28,7 +28,12 @@
+ #include <fcntl.h>
+ #include <libgen.h>
+ #include <unistd.h>
++#ifdef __linux__
+ #include <linux/limits.h>
++#elif defined(__FreeBSD__)
++#include <limits.h>
++#define get_current_dir_name() getwd(NULL)
++#endif
+
+ #define TOOLS "../tools/"
+
diff --git a/graphics/igt-gpu-tools/files/patch-tests_vc4__purgeable__bo.c b/graphics/igt-gpu-tools/files/patch-tests_vc4__purgeable__bo.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_vc4__purgeable__bo.c
@@ -0,0 +1,13 @@
+--- tests/vc4_purgeable_bo.c.orig 2022-08-17 23:41:17 UTC
++++ tests/vc4_purgeable_bo.c
+@@ -35,6 +35,10 @@
+ #include <sys/ioctl.h>
+ #include "vc4_drm.h"
+
++#ifdef __FreeBSD__
++#undef jmp_buf
++#endif
++
+ struct igt_vc4_bo {
+ struct igt_list_head node;
+ int handle;
diff --git a/graphics/igt-gpu-tools/files/patch-tests_vc4__wait__bo.c b/graphics/igt-gpu-tools/files/patch-tests_vc4__wait__bo.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_vc4__wait__bo.c
@@ -0,0 +1,13 @@
+--- tests/vc4_wait_bo.c.orig 2022-08-17 23:41:17 UTC
++++ tests/vc4_wait_bo.c
+@@ -34,6 +34,10 @@
+ #include <sys/ioctl.h>
+ #include "vc4_drm.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ static void
+ test_used_bo(int fd, uint64_t timeout)
+ {
diff --git a/graphics/igt-gpu-tools/files/patch-tests_vc4__wait__seqno.c b/graphics/igt-gpu-tools/files/patch-tests_vc4__wait__seqno.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tests_vc4__wait__seqno.c
@@ -0,0 +1,13 @@
+--- tests/vc4_wait_seqno.c.orig 2022-08-17 23:41:17 UTC
++++ tests/vc4_wait_seqno.c
+@@ -33,6 +33,10 @@
+ #include <sys/ioctl.h>
+ #include "vc4_drm.h"
+
++#ifdef __FreeBSD__
++#define ETIME ETIMEDOUT
++#endif
++
+ igt_main
+ {
+ int fd;
diff --git a/graphics/igt-gpu-tools/files/patch-tools_intel__gvtg__test.c b/graphics/igt-gpu-tools/files/patch-tools_intel__gvtg__test.c
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tools_intel__gvtg__test.c
@@ -0,0 +1,12 @@
+--- tools/intel_gvtg_test.c.orig 2022-08-17 23:41:17 UTC
++++ tools/intel_gvtg_test.c
+@@ -44,6 +44,9 @@
+ #include <sys/ioctl.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
++#ifdef __FreeBSD__
++#include <sys/wait.h>
++#endif
+ #include <string.h>
+ #include <stdlib.h>
+ #include <signal.h>
diff --git a/graphics/igt-gpu-tools/files/patch-tools_meson.build b/graphics/igt-gpu-tools/files/patch-tools_meson.build
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/files/patch-tools_meson.build
@@ -0,0 +1,24 @@
+--- tools/meson.build.orig 2022-08-17 23:41:17 UTC
++++ tools/meson.build
+@@ -89,10 +89,10 @@ install_subdir('registers', install_dir : datadir)
+
+ install_subdir('registers', install_dir : datadir)
+
+-executable('intel_gpu_top', 'intel_gpu_top.c',
+- install : true,
+- install_rpath : bindir_rpathdir,
+- dependencies : [lib_igt_perf,lib_igt_device_scan,lib_igt_drm_fdinfo,math])
++#executable('intel_gpu_top', 'intel_gpu_top.c',
++# install : true,
++# install_rpath : bindir_rpathdir,
++# dependencies : [lib_igt_perf,lib_igt_device_scan,lib_igt_drm_fdinfo,math])
+
+ executable('amd_hdmi_compliance', 'amd_hdmi_compliance.c',
+ dependencies : [tool_deps],
+@@ -111,5 +111,5 @@ endif
+ install : true)
+ endif
+
+-subdir('i915-perf')
++#subdir('i915-perf')
+ subdir('null_state_gen')
diff --git a/graphics/igt-gpu-tools/pkg-descr b/graphics/igt-gpu-tools/pkg-descr
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/pkg-descr
@@ -0,0 +1,10 @@
+IGT GPU Tools is a collection of tools for development and testing of the
+DRM drivers. There are many macro-level test suites that get used against
+the drivers, including xtest, rendercheck, piglit, and oglconform, but
+failures from those can be difficult to track down to kernel changes, and
+many require complicated build procedures or specific testing environments
+to get useful results. Therefore, IGT GPU Tools includes low-level tools
+and tests specifically for development and testing of the DRM Drivers.
+
+Generated documentation for the latest master is published under
+WWW: https://drm.pages.freedesktop.org/igt-gpu-tools/
diff --git a/graphics/igt-gpu-tools/pkg-plist b/graphics/igt-gpu-tools/pkg-plist
new file mode 100644
--- /dev/null
+++ b/graphics/igt-gpu-tools/pkg-plist
@@ -0,0 +1,499 @@
+bin/amd_hdmi_compliance
+%%TEST%%bin/code_cov_capture
+%%TEST%%bin/code_cov_gather_on_build
+%%TEST%%bin/code_cov_gather_on_test
+%%TEST%%bin/code_cov_gen_report
+%%TEST%%bin/code_cov_parse_info
+bin/dpcd_reg
+%%RUNNER%%bin/igt_results
+%%RUNNER%%bin/igt_resume
+%%RUNNER%%bin/igt_runner
+bin/igt_stats
+bin/intel-gen4asm
+bin/intel-gen4disasm
+bin/intel_audio_dump
+bin/intel_backlight
+bin/intel_bios_dumper
+bin/intel_display_crc
+bin/intel_display_poller
+bin/intel_dp_compliance
+bin/intel_dump_decode
+bin/intel_error_decode
+bin/intel_firmware_decode
+bin/intel_forcewaked
+bin/intel_framebuffer_dump
+bin/intel_gem_info
+bin/intel_gpu_abrt
+bin/intel_gpu_frequency
+bin/intel_gpu_time
+bin/intel_gtt
+bin/intel_guc_logger
+bin/intel_gvtg_test
+bin/intel_infoframes
+bin/intel_l3_parity
+bin/intel_lid
+bin/intel_opregion_decode
+bin/intel_panel_fitter
+bin/intel_perf_counters
+bin/intel_pm_rpm
+bin/intel_reg
+bin/intel_reg_checker
+bin/intel_residency
+bin/intel_stepping
+bin/intel_vbt_decode
+bin/intel_watermark
+bin/lsgpu
+bin/msm_dp_compliance
+include/i915-perf/igt_list.h
+include/i915-perf/intel_chipset.h
+include/i915-perf/perf.h
+include/i915-perf/perf_data.h
+include/i915-perf/perf_data_reader.h
+lib/libi915_perf.so
+lib/libi915_perf.so.1
+lib/libigt.so
+lib/libigt.so.0
+libdata/pkgconfig/i915-perf.pc
+libdata/pkgconfig/intel-gen4asm.pc
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_abm
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_assr
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_basic
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_bypass
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_color
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_cs_nop
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_dp_dsc
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_hotplug
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_ilr
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_info
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_link_settings
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_max_bpc
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_mem_leak
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_mode_switch
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_module_load
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_plane
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_prime
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_psr
+%%TEST%%libexec/igt-gpu-tools/amdgpu/amd_vrr_range
+%%TEST%%libexec/igt-gpu-tools/api_intel_allocator
+%%TEST%%libexec/igt-gpu-tools/api_intel_bb
+libexec/igt-gpu-tools/benchmarks/gem_blt
+libexec/igt-gpu-tools/benchmarks/gem_busy
+libexec/igt-gpu-tools/benchmarks/gem_create
+libexec/igt-gpu-tools/benchmarks/gem_exec_ctx
+libexec/igt-gpu-tools/benchmarks/gem_exec_fault
+libexec/igt-gpu-tools/benchmarks/gem_exec_nop
+libexec/igt-gpu-tools/benchmarks/gem_exec_reloc
+libexec/igt-gpu-tools/benchmarks/gem_exec_trace
+libexec/igt-gpu-tools/benchmarks/gem_latency
+libexec/igt-gpu-tools/benchmarks/gem_prw
+libexec/igt-gpu-tools/benchmarks/gem_set_domain
+libexec/igt-gpu-tools/benchmarks/gem_syslatency
+libexec/igt-gpu-tools/benchmarks/gem_userptr_benchmark
+libexec/igt-gpu-tools/benchmarks/gem_wsim
+libexec/igt-gpu-tools/benchmarks/intel_upload_blit_large
+libexec/igt-gpu-tools/benchmarks/intel_upload_blit_large_gtt
+libexec/igt-gpu-tools/benchmarks/intel_upload_blit_large_map
+libexec/igt-gpu-tools/benchmarks/intel_upload_blit_small
+libexec/igt-gpu-tools/benchmarks/kms_vblank
+libexec/igt-gpu-tools/benchmarks/libgem_exec_tracer.so
+libexec/igt-gpu-tools/benchmarks/prime_lookup
+libexec/igt-gpu-tools/benchmarks/vgem_mmap
+%%TEST%%libexec/igt-gpu-tools/core_auth
+%%TEST%%libexec/igt-gpu-tools/core_getclient
+%%TEST%%libexec/igt-gpu-tools/core_getstats
+%%TEST%%libexec/igt-gpu-tools/core_getversion
+%%TEST%%libexec/igt-gpu-tools/core_setmaster
+%%TEST%%libexec/igt-gpu-tools/core_setmaster_vs_auth
+%%TEST%%libexec/igt-gpu-tools/debugfs_test
+%%TEST%%libexec/igt-gpu-tools/device_reset
+%%TEST%%libexec/igt-gpu-tools/dmabuf_sync_file
+%%TEST%%libexec/igt-gpu-tools/drm_fdinfo
+%%TEST%%libexec/igt-gpu-tools/drm_import_export
+%%TEST%%libexec/igt-gpu-tools/drm_read
+%%TEST%%libexec/igt-gpu-tools/dumb_buffer
+%%TEST%%libexec/igt-gpu-tools/feature_discovery
+%%TEST%%libexec/igt-gpu-tools/gem_bad_reloc
+%%TEST%%libexec/igt-gpu-tools/gem_basic
+%%TEST%%libexec/igt-gpu-tools/gem_blits
+%%TEST%%libexec/igt-gpu-tools/gem_busy
+%%TEST%%libexec/igt-gpu-tools/gem_caching
+%%TEST%%libexec/igt-gpu-tools/gem_ccs
+%%TEST%%libexec/igt-gpu-tools/gem_close
+%%TEST%%libexec/igt-gpu-tools/gem_close_race
+%%TEST%%libexec/igt-gpu-tools/gem_concurrent_all
+%%TEST%%libexec/igt-gpu-tools/gem_concurrent_blit
+%%TEST%%libexec/igt-gpu-tools/gem_create
+%%TEST%%libexec/igt-gpu-tools/gem_cs_tlb
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_bad_destroy
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_create
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_engines
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_exec
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_isolation
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_param
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_persistence
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_shared
+%%TEST%%libexec/igt-gpu-tools/gem_ctx_switch
+%%TEST%%libexec/igt-gpu-tools/gem_eio
+%%TEST%%libexec/igt-gpu-tools/gem_evict_alignment
+%%TEST%%libexec/igt-gpu-tools/gem_evict_everything
+%%TEST%%libexec/igt-gpu-tools/gem_exec_alignment
+%%TEST%%libexec/igt-gpu-tools/gem_exec_async
+%%TEST%%libexec/igt-gpu-tools/gem_exec_await
+%%TEST%%libexec/igt-gpu-tools/gem_exec_basic
+%%TEST%%libexec/igt-gpu-tools/gem_exec_big
+%%TEST%%libexec/igt-gpu-tools/gem_exec_capture
+%%TEST%%libexec/igt-gpu-tools/gem_exec_create
+%%TEST%%libexec/igt-gpu-tools/gem_exec_endless
+%%TEST%%libexec/igt-gpu-tools/gem_exec_fair
+%%TEST%%libexec/igt-gpu-tools/gem_exec_fence
+%%TEST%%libexec/igt-gpu-tools/gem_exec_flush
+%%TEST%%libexec/igt-gpu-tools/gem_exec_gttfill
+%%TEST%%libexec/igt-gpu-tools/gem_exec_latency
+%%TEST%%libexec/igt-gpu-tools/gem_exec_lut_handle
+%%TEST%%libexec/igt-gpu-tools/gem_exec_nop
+%%TEST%%libexec/igt-gpu-tools/gem_exec_parallel
+%%TEST%%libexec/igt-gpu-tools/gem_exec_params
+%%TEST%%libexec/igt-gpu-tools/gem_exec_reloc
+%%TEST%%libexec/igt-gpu-tools/gem_exec_schedule
+%%TEST%%libexec/igt-gpu-tools/gem_exec_store
+%%TEST%%libexec/igt-gpu-tools/gem_exec_suspend
+%%TEST%%libexec/igt-gpu-tools/gem_exec_whisper
+%%TEST%%libexec/igt-gpu-tools/gem_fd_exhaustion
+%%TEST%%libexec/igt-gpu-tools/gem_fence_thrash
+%%TEST%%libexec/igt-gpu-tools/gem_fence_upload
+%%TEST%%libexec/igt-gpu-tools/gem_fenced_exec_thrash
+%%TEST%%libexec/igt-gpu-tools/gem_flink_basic
+%%TEST%%libexec/igt-gpu-tools/gem_flink_race
+%%TEST%%libexec/igt-gpu-tools/gem_gpgpu_fill
+%%TEST%%libexec/igt-gpu-tools/gem_gtt_cpu_tlb
+%%TEST%%libexec/igt-gpu-tools/gem_gtt_hog
+%%TEST%%libexec/igt-gpu-tools/gem_gtt_speed
+%%TEST%%libexec/igt-gpu-tools/gem_huc_copy
+%%TEST%%libexec/igt-gpu-tools/gem_linear_blits
+%%TEST%%libexec/igt-gpu-tools/gem_lmem_swapping
+%%TEST%%libexec/igt-gpu-tools/gem_lut_handle
+%%TEST%%libexec/igt-gpu-tools/gem_madvise
+%%TEST%%libexec/igt-gpu-tools/gem_media_fill
+%%TEST%%libexec/igt-gpu-tools/gem_media_vme
+%%TEST%%libexec/igt-gpu-tools/gem_mmap
+%%TEST%%libexec/igt-gpu-tools/gem_mmap_gtt
+%%TEST%%libexec/igt-gpu-tools/gem_mmap_offset
+%%TEST%%libexec/igt-gpu-tools/gem_mmap_wc
+%%TEST%%libexec/igt-gpu-tools/gem_partial_pwrite_pread
+%%TEST%%libexec/igt-gpu-tools/gem_pipe_control_store_loop
+%%TEST%%libexec/igt-gpu-tools/gem_ppgtt
+%%TEST%%libexec/igt-gpu-tools/gem_pread
+%%TEST%%libexec/igt-gpu-tools/gem_pread_after_blit
+%%TEST%%libexec/igt-gpu-tools/gem_pwrite
+%%TEST%%libexec/igt-gpu-tools/gem_pwrite_snooped
+%%TEST%%libexec/igt-gpu-tools/gem_pxp
+%%TEST%%libexec/igt-gpu-tools/gem_read_read_speed
+%%TEST%%libexec/igt-gpu-tools/gem_readwrite
+%%TEST%%libexec/igt-gpu-tools/gem_reg_read
+%%TEST%%libexec/igt-gpu-tools/gem_render_copy
+%%TEST%%libexec/igt-gpu-tools/gem_render_copy_redux
+%%TEST%%libexec/igt-gpu-tools/gem_render_linear_blits
+%%TEST%%libexec/igt-gpu-tools/gem_render_tiled_blits
+%%TEST%%libexec/igt-gpu-tools/gem_request_retire
+%%TEST%%libexec/igt-gpu-tools/gem_reset_stats
+%%TEST%%libexec/igt-gpu-tools/gem_ringfill
+%%TEST%%libexec/igt-gpu-tools/gem_set_tiling_vs_blt
+%%TEST%%libexec/igt-gpu-tools/gem_set_tiling_vs_gtt
+%%TEST%%libexec/igt-gpu-tools/gem_set_tiling_vs_pwrite
+%%TEST%%libexec/igt-gpu-tools/gem_shrink
+%%TEST%%libexec/igt-gpu-tools/gem_softpin
+%%TEST%%libexec/igt-gpu-tools/gem_spin_batch
+%%TEST%%libexec/igt-gpu-tools/gem_streaming_writes
+%%TEST%%libexec/igt-gpu-tools/gem_stress
+%%TEST%%libexec/igt-gpu-tools/gem_sync
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_blits
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_fence_blits
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_partial_pwrite_pread
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_pread_basic
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_pread_pwrite
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_swapping
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_wb
+%%TEST%%libexec/igt-gpu-tools/gem_tiled_wc
+%%TEST%%libexec/igt-gpu-tools/gem_tiling_max_stride
+%%TEST%%libexec/igt-gpu-tools/gem_unfence_active_buffers
+%%TEST%%libexec/igt-gpu-tools/gem_unref_active_buffers
+%%TEST%%libexec/igt-gpu-tools/gem_userptr_blits
+%%TEST%%libexec/igt-gpu-tools/gem_vm_create
+%%TEST%%libexec/igt-gpu-tools/gem_wait
+%%TEST%%libexec/igt-gpu-tools/gem_watchdog
+%%TEST%%libexec/igt-gpu-tools/gem_workarounds
+%%TEST%%libexec/igt-gpu-tools/gen3_mixed_blits
+%%TEST%%libexec/igt-gpu-tools/gen3_render_linear_blits
+%%TEST%%libexec/igt-gpu-tools/gen3_render_mixed_blits
+%%TEST%%libexec/igt-gpu-tools/gen3_render_tiledx_blits
+%%TEST%%libexec/igt-gpu-tools/gen3_render_tiledy_blits
+%%TEST%%libexec/igt-gpu-tools/gen7_exec_parse
+%%TEST%%libexec/igt-gpu-tools/gen9_exec_parse
+%%TEST%%libexec/igt-gpu-tools/i915_fb_tiling
+%%TEST%%libexec/igt-gpu-tools/i915_getparams_basic
+%%TEST%%libexec/igt-gpu-tools/i915_hangman
+%%TEST%%libexec/igt-gpu-tools/i915_module_load
+%%TEST%%libexec/igt-gpu-tools/i915_pciid
+%%TEST%%libexec/igt-gpu-tools/i915_pm_backlight
+%%TEST%%libexec/igt-gpu-tools/i915_pm_dc
+%%TEST%%libexec/igt-gpu-tools/i915_pm_lpsp
+%%TEST%%libexec/igt-gpu-tools/i915_pm_rpm
+%%TEST%%libexec/igt-gpu-tools/i915_pm_rps
+%%TEST%%libexec/igt-gpu-tools/i915_pm_sseu
+%%TEST%%libexec/igt-gpu-tools/i915_query
+%%TEST%%libexec/igt-gpu-tools/i915_suspend
+%%TEST%%libexec/igt-gpu-tools/kms_3d
+%%TEST%%libexec/igt-gpu-tools/kms_addfb_basic
+%%TEST%%libexec/igt-gpu-tools/kms_async_flips
+%%TEST%%libexec/igt-gpu-tools/kms_atomic
+%%TEST%%libexec/igt-gpu-tools/kms_atomic_interruptible
+%%TEST%%libexec/igt-gpu-tools/kms_atomic_transition
+%%TEST%%libexec/igt-gpu-tools/kms_big_fb
+%%TEST%%libexec/igt-gpu-tools/kms_big_joiner
+%%TEST%%libexec/igt-gpu-tools/kms_busy
+%%TEST%%libexec/igt-gpu-tools/kms_bw
+%%TEST%%libexec/igt-gpu-tools/kms_ccs
+%%TEST%%libexec/igt-gpu-tools/kms_cdclk
+%%CHAMELIUM%%libexec/igt-gpu-tools/kms_chamelium
+%%TEST%%libexec/igt-gpu-tools/kms_color
+%%CHAMELIUM%%libexec/igt-gpu-tools/kms_color_chamelium
+%%TEST%%libexec/igt-gpu-tools/kms_concurrent
+%%TEST%%libexec/igt-gpu-tools/kms_content_protection
+%%TEST%%libexec/igt-gpu-tools/kms_cursor_crc
+%%TEST%%libexec/igt-gpu-tools/kms_cursor_edge_walk
+%%TEST%%libexec/igt-gpu-tools/kms_cursor_legacy
+%%TEST%%libexec/igt-gpu-tools/kms_display_modes
+%%TEST%%libexec/igt-gpu-tools/kms_dither
+%%TEST%%libexec/igt-gpu-tools/kms_dp_aux_dev
+%%TEST%%libexec/igt-gpu-tools/kms_dp_tiled_display
+%%TEST%%libexec/igt-gpu-tools/kms_draw_crc
+%%TEST%%libexec/igt-gpu-tools/kms_dsc
+%%TEST%%libexec/igt-gpu-tools/kms_fbcon_fbt
+%%TEST%%libexec/igt-gpu-tools/kms_fence_pin_leak
+%%TEST%%libexec/igt-gpu-tools/kms_flip
+%%TEST%%libexec/igt-gpu-tools/kms_flip_event_leak
+%%TEST%%libexec/igt-gpu-tools/kms_flip_scaled_crc
+%%TEST%%libexec/igt-gpu-tools/kms_flip_tiling
+%%TEST%%libexec/igt-gpu-tools/kms_force_connector_basic
+%%TEST%%libexec/igt-gpu-tools/kms_frontbuffer_tracking
+%%TEST%%libexec/igt-gpu-tools/kms_getfb
+%%TEST%%libexec/igt-gpu-tools/kms_hdmi_inject
+%%TEST%%libexec/igt-gpu-tools/kms_hdr
+%%TEST%%libexec/igt-gpu-tools/kms_invalid_mode
+%%TEST%%libexec/igt-gpu-tools/kms_lease
+%%TEST%%libexec/igt-gpu-tools/kms_legacy_colorkey
+%%TEST%%libexec/igt-gpu-tools/kms_mmap_write_crc
+%%TEST%%libexec/igt-gpu-tools/kms_multipipe_modeset
+%%TEST%%libexec/igt-gpu-tools/kms_panel_fitting
+%%TEST%%libexec/igt-gpu-tools/kms_pipe_b_c_ivb
+%%TEST%%libexec/igt-gpu-tools/kms_pipe_crc_basic
+%%TEST%%libexec/igt-gpu-tools/kms_plane
+%%TEST%%libexec/igt-gpu-tools/kms_plane_alpha_blend
+%%TEST%%libexec/igt-gpu-tools/kms_plane_cursor
+%%TEST%%libexec/igt-gpu-tools/kms_plane_lowres
+%%TEST%%libexec/igt-gpu-tools/kms_plane_multiple
+%%TEST%%libexec/igt-gpu-tools/kms_plane_scaling
+%%TEST%%libexec/igt-gpu-tools/kms_prime
+%%TEST%%libexec/igt-gpu-tools/kms_prop_blob
+%%TEST%%libexec/igt-gpu-tools/kms_properties
+%%TEST%%libexec/igt-gpu-tools/kms_psr
+%%TEST%%libexec/igt-gpu-tools/kms_psr2_sf
+%%TEST%%libexec/igt-gpu-tools/kms_psr2_su
+%%TEST%%libexec/igt-gpu-tools/kms_psr_stress_test
+%%TEST%%libexec/igt-gpu-tools/kms_pwrite_crc
+%%TEST%%libexec/igt-gpu-tools/kms_rmfb
+%%TEST%%libexec/igt-gpu-tools/kms_rotation_crc
+%%TEST%%libexec/igt-gpu-tools/kms_scaling_modes
+%%TEST%%libexec/igt-gpu-tools/kms_sequence
+%%TEST%%libexec/igt-gpu-tools/kms_setmode
+%%TEST%%libexec/igt-gpu-tools/kms_sysfs_edid_timing
+%%TEST%%libexec/igt-gpu-tools/kms_tv_load_detect
+%%TEST%%libexec/igt-gpu-tools/kms_universal_plane
+%%TEST%%libexec/igt-gpu-tools/kms_vblank
+%%TEST%%libexec/igt-gpu-tools/kms_vrr
+%%TEST%%libexec/igt-gpu-tools/kms_writeback
+%%TEST%%libexec/igt-gpu-tools/meta_test
+%%TEST%%libexec/igt-gpu-tools/msm_mapping
+%%TEST%%libexec/igt-gpu-tools/msm_recovery
+%%TEST%%libexec/igt-gpu-tools/msm_submit
+%%TEST%%libexec/igt-gpu-tools/panfrost_gem_new
+%%TEST%%libexec/igt-gpu-tools/panfrost_get_param
+%%TEST%%libexec/igt-gpu-tools/panfrost_prime
+%%TEST%%libexec/igt-gpu-tools/panfrost_submit
+%%TEST%%libexec/igt-gpu-tools/prime_busy
+%%TEST%%libexec/igt-gpu-tools/prime_mmap
+%%TEST%%libexec/igt-gpu-tools/prime_mmap_coherency
+%%TEST%%libexec/igt-gpu-tools/prime_mmap_kms
+%%TEST%%libexec/igt-gpu-tools/prime_self_import
+%%TEST%%libexec/igt-gpu-tools/prime_udl
+%%TEST%%libexec/igt-gpu-tools/prime_vgem
+%%TEST%%libexec/igt-gpu-tools/sw_sync
+%%TEST%%libexec/igt-gpu-tools/syncobj_basic
+%%TEST%%libexec/igt-gpu-tools/syncobj_timeline
+%%TEST%%libexec/igt-gpu-tools/syncobj_wait
+%%TEST%%libexec/igt-gpu-tools/sysfs_clients
+%%TEST%%libexec/igt-gpu-tools/sysfs_defaults
+%%TEST%%libexec/igt-gpu-tools/sysfs_heartbeat_interval
+%%TEST%%libexec/igt-gpu-tools/sysfs_preempt_timeout
+%%TEST%%libexec/igt-gpu-tools/sysfs_timeslice_duration
+%%TEST%%libexec/igt-gpu-tools/template
+%%TEST%%libexec/igt-gpu-tools/test-list-full.txt
+%%TEST%%libexec/igt-gpu-tools/test-list.txt
+%%TEST%%libexec/igt-gpu-tools/testdisplay
+%%TEST%%libexec/igt-gpu-tools/tools_test
+%%TEST%%libexec/igt-gpu-tools/v3d_get_bo_offset
+%%TEST%%libexec/igt-gpu-tools/v3d_get_param
+%%TEST%%libexec/igt-gpu-tools/v3d_mmap
+%%TEST%%libexec/igt-gpu-tools/vc4_create_bo
+%%TEST%%libexec/igt-gpu-tools/vc4_dmabuf_poll
+%%TEST%%libexec/igt-gpu-tools/vc4_label_bo
+%%TEST%%libexec/igt-gpu-tools/vc4_lookup_fail
+%%TEST%%libexec/igt-gpu-tools/vc4_purgeable_bo
+%%TEST%%libexec/igt-gpu-tools/vc4_tiling
+%%TEST%%libexec/igt-gpu-tools/vc4_wait_bo
+%%TEST%%libexec/igt-gpu-tools/vc4_wait_seqno
+%%TEST%%libexec/igt-gpu-tools/vgem_basic
+%%TEST%%libexec/igt-gpu-tools/vgem_slow
+%%MANPAGES%%man/man1/intel_audio_dump.1.gz
+%%MANPAGES%%man/man1/intel_bios_dumper.1.gz
+%%MANPAGES%%man/man1/intel_error_decode.1.gz
+%%MANPAGES%%man/man1/intel_gpu_frequency.1.gz
+%%MANPAGES%%man/man1/intel_gpu_top.1.gz
+%%MANPAGES%%man/man1/intel_gtt.1.gz
+%%MANPAGES%%man/man1/intel_infoframes.1.gz
+%%MANPAGES%%man/man1/intel_lid.1.gz
+%%MANPAGES%%man/man1/intel_panel_fitter.1.gz
+%%MANPAGES%%man/man1/intel_reg.1.gz
+%%MANPAGES%%man/man1/intel_stepping.1.gz
+%%MANPAGES%%man/man1/intel_upload_blit_large.1.gz
+%%MANPAGES%%man/man1/intel_upload_blit_large_gtt.1.gz
+%%MANPAGES%%man/man1/intel_upload_blit_large_map.1.gz
+%%MANPAGES%%man/man1/intel_upload_blit_small.1.gz
+%%MANPAGES%%man/man1/intel_vbt_decode.1.gz
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/annotation-glossary.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/ch01.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/ch02.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/deprecated-api-index.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/full-api-index.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/home.png
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-amdgpu-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-core-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-debugfs-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-drm-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gem-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gen3-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gen7-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-ALSA.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Audio.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Batch-Buffer.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Blitter-library.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Buffer-operations.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-CRC.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Chamelium.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Chipset.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Collection.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Core.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Device-selection.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Draw.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Dummyload.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Frame.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Framebuffer.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-GEM-Context.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-GEM-Create.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-GEM-Engine-Topology.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-GEM-Scheduler.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-GEM-Submission.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-GT.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-I915-GPU-CRC.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-IGT-List.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-IGT-Map.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-IO.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Intel-Context-Wrapper.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Intel-allocator.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-KMS.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Power-Management.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Primes.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Random.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-SW-Sync.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-Stats.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-VC4.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-VGEM.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-aux.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-debugfs.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-drmtest.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-igt-device.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-io.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-ioctl-wrappers.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-kmod.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-msm.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-syncobj.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-sysfs.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools-x86.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-gpu-tools.devhelp2
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-i915-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-kms-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-meta-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-perf-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-pm-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-prime-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-sw-sync-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-test-programs-common-features.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-testdisplay-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-tools-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/igt-vgem-tests.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/index.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/left-insensitive.png
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/left.png
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/right-insensitive.png
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/right.png
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/style.css
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/test-programs.html
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/up-insensitive.png
+%%DOCS%%share/gtk-doc/html/igt-gpu-tools/up.png
+%%TEST%%%%DATADIR%%/1080p-left.png
+%%TEST%%%%DATADIR%%/1080p-right.png
+%%TEST%%%%DATADIR%%/README
+%%TEST%%%%DATADIR%%/blacklist-pre-merge.txt
+%%TEST%%%%DATADIR%%/blacklist.txt
+%%TEST%%%%DATADIR%%/fast-feedback.testlist
+%%TEST%%%%DATADIR%%/meta.testlist
+%%TEST%%%%DATADIR%%/pass.png
+%%DATADIR%%/registers/audio_config_haswell_plus.txt
+%%DATADIR%%/registers/audio_debug_haswell_plus.txt
+%%DATADIR%%/registers/base_interrupt.txt
+%%DATADIR%%/registers/base_other.txt
+%%DATADIR%%/registers/base_power.txt
+%%DATADIR%%/registers/base_rings.txt
+%%DATADIR%%/registers/broadwell
+%%DATADIR%%/registers/cherryview
+%%DATADIR%%/registers/chv_display_base.txt
+%%DATADIR%%/registers/chv_dpio_phy_x1.txt
+%%DATADIR%%/registers/chv_dpio_phy_x2.txt
+%%DATADIR%%/registers/chv_pipe_b_extra.txt
+%%DATADIR%%/registers/chv_pipe_c.txt
+%%DATADIR%%/registers/common_display.txt
+%%DATADIR%%/registers/gen6_other.txt
+%%DATADIR%%/registers/gen7_other.txt
+%%DATADIR%%/registers/gen8_interrupt.txt
+%%DATADIR%%/registers/gen8_other.txt
+%%DATADIR%%/registers/haswell
+%%DATADIR%%/registers/haswell_other.txt
+%%DATADIR%%/registers/icelake
+%%DATADIR%%/registers/icl_delta.txt
+%%DATADIR%%/registers/ivybridge
+%%DATADIR%%/registers/kabylake
+%%DATADIR%%/registers/sandybridge
+%%DATADIR%%/registers/skl_display.txt
+%%DATADIR%%/registers/skl_powerwells.txt
+%%DATADIR%%/registers/skylake
+%%DATADIR%%/registers/tigerlake
+%%DATADIR%%/registers/tigerlake_delta.txt
+%%DATADIR%%/registers/valleyview
+%%DATADIR%%/registers/vlv_cck.txt
+%%DATADIR%%/registers/vlv_display_base.txt
+%%DATADIR%%/registers/vlv_dpio_phy.txt
+%%DATADIR%%/registers/vlv_dsi.txt
+%%DATADIR%%/registers/vlv_flisdsi.txt
+%%DATADIR%%/registers/vlv_pipe_a.txt
+%%DATADIR%%/registers/vlv_pipe_b.txt
+%%DATADIR%%/registers/vlv_power.txt
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jul 22, 3:49 AM (11 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35346016
Default Alt Text
D36213.id109601.diff (136 KB)
Attached To
Mode
D36213: [WIP] Port Submission for igt-gpu-tools
Attached
Detach File
Event Timeline
Log In to Comment