Package Details: linux-vfio 6.9.5-1

Git Clone URL: https://aur.archlinux.org/linux-vfio.git (read-only, click to copy)
Package Base: linux-vfio
Description: The Linux kernel and modules (ACS override and i915 VGA arbiter patches)
Upstream URL: https://www.kernel.org
Keywords: acs arbiter assignment gpu i915 kvm override passthrough pci qemu vfio vga
Licenses: GPL-2.0-or-later
Provides: KSMBD-MODULE, VIRTUALBOX-GUEST-MODULES, WIREGUARD-MODULE
Submitter: zman0900
Maintainer: xiota
Last Packager: xiota
Votes: 73
Popularity: 0.006650
First Submitted: 2015-01-30 06:41 (UTC)
Last Updated: 2024-06-18 11:32 (UTC)

Dependencies (19)

Required by (5)

Sources (7)

Pinned Comments

xiota commented on 2024-01-09 18:43 (UTC) (edited on 2024-01-11 16:53 (UTC) by xiota)

  • Leaving eclairvoyant's comment pinned because it contains some useful information.
  • Patch policy is different, but similar.
    • Primary purpose of this package are the ACS override and i915 VGA arbiter patches.
    • Upstream Arch patches will be applied to maintain parity with the standard kernel.
    • No other patches will be added.
  • Package does have options that can be changed, like building with clang or disabling Arch patches.
    • Defaults will match Arch packages, except when incompatible with this package's primary patches.
    • Options are subject to change. Read PKGBUILD for details.
  • Avoid commenting and flagging at the same time for the same issue.
    • Flag for common issues with standard solutions, like new releases, key changes, etc.
    • Comment for issues requiring explanation or debugging.
      • Use a pastebin for blocks of text more than a few lines.

eclairevoyant commented on 2023-04-06 21:24 (UTC) (edited on 2023-04-06 21:31 (UTC) by eclairevoyant)

This package exists for the specific purpose of adding ported patches based on those originally created by Alex Williamson for:

Arbitrary patches will not be added.

Refer to the wiki on PCI passthrough and this blog post on IOMMU groups for risks/caveats before using this package.

Regular AUR etiquette applies as well (knowledge of makepkg and searching the wiki/Arch forums is expected, and AUR helpers or Arch-based distros that are not Arch Linux are unsupported).

Latest Comments

1 2 3 4 5 6 .. 31 Next › Last »

xiota commented on 2024-06-11 02:34 (UTC)

I'm guessing you missed makepkg. The commands should be similar to the following:

sudo pacman -S base-devel git
git clone https://aur.archlinux.org/linux-vfio.git
cd linux-vfio
makepkg -s --skippgpcheck
# wait a long time for build
sudo pacman -U linux-vfio-6.9.3-1-x86_64.pkg.tar.zst linux-vfio-headers-6.9.3-1-x86_64.pkg.tar.zst

Joeythe_fish commented on 2024-06-11 02:26 (UTC)

@xiota I'm following this guide https://wiki.archlinux.org/title/Arch_User_Repository and got down to the install phase. The file you're describing isn't in the current directory. Can you point out what I've done wrong? I used git clone and PKGBUILD. PS. Thank you so much for your work maintaining this package.

xiota commented on 2024-06-11 02:16 (UTC)

@Joeythe_fish You're trying to install the wrong file. The correct files should be named similar to linux-vfio-6.9.3-1-x86_64.pkg.tar.zst and linux-vfio-headers-6.9.3-1-x86_64.pkg.tar.zst.

Joeythe_fish commented on 2024-06-11 01:49 (UTC)

When I try to run pacman -U linux-6.9.3.tar.xz, I get an error saying it's an invalid or corrupted package: [mau@archlinux linux-vfio]$ sudo pacman -U linux-6.9.3.tar.xz loading packages... error: missing package metadata in linux-6.9.3.tar.xz error: 'linux-6.9.3.tar.xz': invalid or corrupted package

Is this on me or on the package? I've attempted to build it a few times and I keep hitting that wall.

xiota commented on 2024-01-09 18:43 (UTC) (edited on 2024-01-11 16:53 (UTC) by xiota)

  • Leaving eclairvoyant's comment pinned because it contains some useful information.
  • Patch policy is different, but similar.
    • Primary purpose of this package are the ACS override and i915 VGA arbiter patches.
    • Upstream Arch patches will be applied to maintain parity with the standard kernel.
    • No other patches will be added.
  • Package does have options that can be changed, like building with clang or disabling Arch patches.
    • Defaults will match Arch packages, except when incompatible with this package's primary patches.
    • Options are subject to change. Read PKGBUILD for details.
  • Avoid commenting and flagging at the same time for the same issue.
    • Flag for common issues with standard solutions, like new releases, key changes, etc.
    • Comment for issues requiring explanation or debugging.
      • Use a pastebin for blocks of text more than a few lines.

fmorgner commented on 2023-12-31 13:55 (UTC)

I believe the PKGBUILD is missing Jan Alexander Steffens' key (A2FF3A36AAA56654109064AB19802F8B0D70FC30) in "validpgpkeys", causing an "invalid public key" error when trying to build it.

TieMajor commented on 2023-12-22 16:33 (UTC)

eclairevoyant I am willing to take over the package if you are not supporting it anymore.

markzz commented on 2023-10-10 23:26 (UTC)

From 488b6a80e1df6253e0c5c53453c74c9ea87c76da Mon Sep 17 00:00:00 2001
From: Mark King <mark.king@markzz.com>
Date: Tue, 10 Oct 2023 19:18:13 -0400
Subject: [PATCH] i915: Add module option to support VGA arbiter on HD devices 
 (6.5)

This is an updated version of Alex Williamson's patch from:
https://lkml.org/lkml/2014/5/9/517

I don't have i915 graphics, so this is completely untested.

Original commit message follows:
---
Commit 81b5c7bc found that the current VGA arbiter support in i915
only works for ancient GMCH-based IGD devices and attempted to update
support for newer HD devices.  Unfortunately newer devices cannot
completely opt-out of VGA arbitration like the old devices could.
The VGA I/O space cannot be disabled internally.  The only way to
route VGA I/O elsewhere is by disabling I/O at the device PCI command
register.  This means that with commit 81b5c7bc and multiple VGA
adapters, the VGA arbiter will report that multiple VGA devices are
participating in arbitration, Xorg will notice this and disable DRI.
Therefore, 81b5c7bc was reverted because DRI is more important than
being correct.

There is however an actual need for i915 to correctly participate in
VGA arbitration; VGA device assignment.  If we want to use VFIO to
assign a VGA device to a virtual machine, we need to be able to
access the VGA resources of that device.  By adding an i915 module
option we can allow i915 to continue with its charade by default, but
also allow an easy path for users who require working VGA arbitration.
Hopefully Xorg can someday be taught to behave better with multiple
VGA devices.

This also rolls in reverted commit 6e1b4fda, which corrected an
ordering issue with 81b5c7bc by delaying the disabling of VGA memory
until after vgacon->fbcon handoff.
---
 drivers/gpu/drm/i915/display/intel_display.h  |  1 +
 .../drm/i915/display/intel_display_driver.c   | 15 +++++++--
 drivers/gpu/drm/i915/display/intel_vga.c      | 31 +++++++++++++++++++
 drivers/gpu/drm/i915/display/intel_vga.h      |  4 +++
 drivers/gpu/drm/i915/i915_params.c            |  3 ++
 drivers/gpu/drm/i915/i915_params.h            |  1 +
 6 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
index c744c021af23..0e0ad65b359c 100644
--- a/drivers/gpu/drm/i915/display/intel_display.h
+++ b/drivers/gpu/drm/i915/display/intel_display.h
@@ -427,6 +427,7 @@ void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
 int vlv_get_hpll_vco(struct drm_i915_private *dev_priv);
 int vlv_get_cck_clock(struct drm_i915_private *dev_priv,
              const char *name, u32 reg, int ref_freq);
+extern void intel_vga_disable_mem(struct drm_i915_private *dev_priv);
 int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv,
               const char *name, u32 reg);
 void intel_init_display_hooks(struct drm_i915_private *dev_priv);
diff --git a/drivers/gpu/drm/i915/display/intel_display_driver.c b/drivers/gpu/drm/i915/display/intel_display_driver.c
index b909814ae02b..ee5c3c17a32d 100644
--- a/drivers/gpu/drm/i915/display/intel_display_driver.c
+++ b/drivers/gpu/drm/i915/display/intel_display_driver.c
@@ -203,9 +203,11 @@ int intel_display_driver_probe_noirq(struct drm_i915_private *i915)

    intel_bios_init(i915);

-   ret = intel_vga_register(i915);
-   if (ret)
-       goto cleanup_bios;
+   if (!i915_modparams.enable_hd_vgaarb || !HAS_PCH_SPLIT(i915)) {
+       ret = intel_vga_register(i915);
+       if (ret)
+           goto cleanup_bios;
+   }

    /* FIXME: completely on the wrong abstraction layer */
    ret = intel_power_domains_init(i915);
@@ -364,6 +366,12 @@ int intel_display_driver_probe(struct drm_i915_private *i915)
    if (ret)
        return ret;

+   /*
+    * Must do this after fbcon init so that
+    * vgacon_save_screen() works during the handover.
+    */
+   intel_vga_disable_mem(i915);
+
    /* Only enable hotplug handling once the fbdev is fully set up. */
    intel_hpd_init(i915);
    intel_hpd_poll_disable(i915);
@@ -410,6 +418,7 @@ void intel_display_driver_remove(struct drm_i915_private *i915)
    if (!HAS_DISPLAY(i915))
        return;

+   intel_vga_enable_mem(i915);
    flush_workqueue(i915->display.wq.flip);
    flush_workqueue(i915->display.wq.modeset);

diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c
index 286a0bdd28c6..18d30ee84c04 100644
--- a/drivers/gpu/drm/i915/display/intel_vga.c
+++ b/drivers/gpu/drm/i915/display/intel_vga.c
@@ -47,6 +47,36 @@ void intel_vga_disable(struct drm_i915_private *dev_priv)
    intel_de_posting_read(dev_priv, vga_reg);
 }

+void intel_vga_enable_mem(struct drm_i915_private *dev_priv)
+{
+   struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+
+   /* Enable VGA memory on Intel HD */
+   if (i915_modparams.enable_hd_vgaarb && HAS_PCH_SPLIT(dev_priv)) {
+       vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO);
+       outb(inb(VGA_MIS_R) | (1 << 1), VGA_MIS_W);
+       vga_set_legacy_decoding(pdev, VGA_RSRC_LEGACY_IO |
+                       VGA_RSRC_LEGACY_MEM |
+                       VGA_RSRC_NORMAL_IO |
+                       VGA_RSRC_NORMAL_MEM);
+       vga_put(pdev, VGA_RSRC_LEGACY_IO);
+   }
+}
+
+void intel_vga_disable_mem(struct drm_i915_private *dev_priv)
+{
+   struct pci_dev *pdev = to_pci_dev(dev_priv->drm.dev);
+   /* Disable VGA memory on Intel HD */
+   if (i915_modparams.enable_hd_vgaarb && HAS_PCH_SPLIT(dev_priv)) {
+       vga_get_uninterruptible(pdev, VGA_RSRC_LEGACY_IO);
+       outb(inb(VGA_MIS_R) & ~(1 << 1), VGA_MIS_W);
+       vga_set_legacy_decoding(pdev, VGA_RSRC_LEGACY_IO |
+                          VGA_RSRC_NORMAL_IO |
+                          VGA_RSRC_NORMAL_MEM);
+       vga_put(pdev, VGA_RSRC_LEGACY_IO);
+   }
+}
+
 void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv)
 {
    i915_reg_t vga_reg = intel_vga_cntrl_reg(dev_priv);
@@ -55,6 +85,7 @@ void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv)
        drm_dbg_kms(&dev_priv->drm,
                "Something enabled VGA plane, disabling it\n");
        intel_vga_disable(dev_priv);
+       intel_vga_disable_mem(dev_priv);
    }
 }

diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h
index ba5b55b917f0..7e2af7924e99 100644
--- a/drivers/gpu/drm/i915/display/intel_vga.h
+++ b/drivers/gpu/drm/i915/display/intel_vga.h
@@ -15,4 +15,8 @@ void intel_vga_redisable_power_on(struct drm_i915_private *i915);
 int intel_vga_register(struct drm_i915_private *i915);
 void intel_vga_unregister(struct drm_i915_private *i915);

+/* i915 vga arb patch */
+void intel_vga_enable_mem(struct drm_i915_private *i915);
+void intel_vga_disable_mem(struct drm_i915_private *i915);
+
 #endif /* __INTEL_VGA_H__ */
diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
index 0a171b57fd8f..739d31067b6b 100644
--- a/drivers/gpu/drm/i915/i915_params.c
+++ b/drivers/gpu/drm/i915/i915_params.c
@@ -160,6 +160,9 @@ i915_param_named_unsafe(invert_brightness, int, 0400,
 i915_param_named(disable_display, bool, 0400,
    "Disable display (default: false)");

+i915_param_named(enable_hd_vgaarb, bool, 0444,
+   "Enable support for VGA arbitration on Intel HD IGD. (default: false)");
+
 i915_param_named(memtest, bool, 0400,
    "Perform a read/write test of all device memory on module load (default: off)");

diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
index 68abf0ad6c00..507d29c52f61 100644
--- a/drivers/gpu/drm/i915/i915_params.h
+++ b/drivers/gpu/drm/i915/i915_params.h
@@ -79,6 +79,7 @@ struct drm_printer;
    param(unsigned int, lmem_size, 0, 0400) \
    param(unsigned int, lmem_bar_size, 0, 0400) \
    /* leave bools at the end to not create holes */ \
+   param(bool, enable_hd_vgaarb, false, 0600) \
    param(bool, enable_hangcheck, true, 0600) \
    param(bool, load_detect_test, false, 0600) \
    param(bool, force_reset_modeset_test, false, 0600) \
-- 
2.42.0

fmorgner commented on 2023-09-01 08:12 (UTC)

Since this has been lagging behind the mainline kernel, I decided to try and update to the current kernel release. I am using the following patch and from what I can tell, it works perfectly fine:

From 473511d01b02b0d946a2f336f0e0ead28b62b95b Mon Sep 17 00:00:00 2001
From: Felix Morgner <felix.morgner@gmail.com>
Date: Fri, 1 Sep 2023 10:09:54 +0200
Subject: [PATCH] pkg: update to Linux 6.4.12-arch1

---
 0001-add-acs-overrides.patch | 34 ++++-----------
 0002-i915-vga-arbiter.patch  | 80 +++++++++++++-----------------------
 PKGBUILD                     | 23 ++++++-----
 3 files changed, 50 insertions(+), 87 deletions(-)

diff --git a/0001-add-acs-overrides.patch b/0001-add-acs-overrides.patch
index 2b270d5..2624b05 100644
--- a/0001-add-acs-overrides.patch
+++ b/0001-add-acs-overrides.patch
@@ -1,19 +1,7 @@
-From b41eb63d48790c92ac171fd92ad6355cb724e7ad Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=C3=A9clairevoyant?=
- <848000+eclairevoyant@users.noreply.github.com>
-Date: Tue, 14 Mar 2023 17:06:39 -0400
-Subject: [PATCH 1/2] add-acs-overrides
-
----
- .../admin-guide/kernel-parameters.txt         |   8 ++
- drivers/pci/quirks.c                          | 102 ++++++++++++++++++
- 2 files changed, 110 insertions(+)
-
-diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
-index 6cfa6e3996cf..fdbe34c0fbf3 100644
---- a/Documentation/admin-guide/kernel-parameters.txt
-+++ b/Documentation/admin-guide/kernel-parameters.txt
-@@ -4178,6 +4178,14 @@
+diff --unified --recursive --text a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
+--- a/Documentation/admin-guide/kernel-parameters.txt  2023-08-26 21:41:59.900155485 +0200
++++ b/Documentation/admin-guide/kernel-parameters.txt  2023-08-26 21:42:33.030920840 +0200
+@@ -4256,6 +4256,14 @@
        nomsi       [MSI] If the PCI_MSI kernel config parameter is
                enabled, this kernel boot option can be used to
                disable the use of MSI interrupts system-wide.
@@ -28,11 +16,10 @@ index 6cfa6e3996cf..fdbe34c0fbf3 100644
        noioapicquirk   [APIC] Disable all boot interrupt quirks.
                Safety option to keep boot IRQs enabled. This
                should never be necessary.
-diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
-index 494fa46f5767..41150eb8bd4c 100644
---- a/drivers/pci/quirks.c
-+++ b/drivers/pci/quirks.c
-@@ -194,6 +194,106 @@ static int __init pci_apply_final_quirks(void)
+diff --unified --recursive --text a/drivers/pci/quirks.c b/drivers/pci/quirks.c
+--- a/drivers/pci/quirks.c 2023-08-26 21:42:01.850200571 +0200
++++ b/drivers/pci/quirks.c 2023-08-26 21:42:33.030920840 +0200
+@@ -194,6 +194,106 @@
  }
  fs_initcall_sync(pci_apply_final_quirks);

@@ -139,7 +126,7 @@ index 494fa46f5767..41150eb8bd4c 100644
  /*
   * Decoding should be disabled for a PCI device during BAR sizing to avoid
   * conflict. But doing so may cause problems on host bridge and perhaps other
-@@ -5002,6 +5102,8 @@ static const struct pci_dev_acs_enabled {
+@@ -5017,6 +5117,8 @@
    { PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
    /* Wangxun nics */
    { PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
@@ -148,6 +135,3 @@ index 494fa46f5767..41150eb8bd4c 100644
    { 0 }
  };

--- 
-2.39.2
-
diff --git a/0002-i915-vga-arbiter.patch b/0002-i915-vga-arbiter.patch
index fc546d8..b82eed5 100644
--- a/0002-i915-vga-arbiter.patch
+++ b/0002-i915-vga-arbiter.patch
@@ -1,23 +1,7 @@
-From 61009bd54ec93d15f9c26325cf5e5c68ac98becc Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?=C3=A9clairevoyant?=
- <848000+eclairevoyant@users.noreply.github.com>
-Date: Tue, 14 Mar 2023 17:07:40 -0400
-Subject: [PATCH 2/2] i915-vga-arbiter
-
----
- drivers/gpu/drm/i915/display/intel_display.c | 15 ++++++++--
- drivers/gpu/drm/i915/display/intel_display.h |  1 +
- drivers/gpu/drm/i915/display/intel_vga.c     | 31 ++++++++++++++++++++
- drivers/gpu/drm/i915/display/intel_vga.h     |  4 +++
- drivers/gpu/drm/i915/i915_params.c           |  3 ++
- drivers/gpu/drm/i915/i915_params.h           |  1 +
- 6 files changed, 52 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
-index dedbdb175f8b..e7e95308f6e6 100644
---- a/drivers/gpu/drm/i915/display/intel_display.c
-+++ b/drivers/gpu/drm/i915/display/intel_display.c
-@@ -8646,9 +8646,11 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915)
+diff --unified --recursive --text package.orig/drivers/gpu/drm/i915/display/intel_display.c package.new/drivers/gpu/drm/i915/display/intel_display.c
+--- package.orig/drivers/gpu/drm/i915/display/intel_display.c  2023-08-26 21:42:01.223519415 +0200
++++ package.new/drivers/gpu/drm/i915/display/intel_display.c   2023-08-26 21:47:01.677083488 +0200
+@@ -8372,9 +8372,11 @@

    intel_bios_init(i915);

@@ -31,8 +15,8 @@ index dedbdb175f8b..e7e95308f6e6 100644
 +  }

    /* FIXME: completely on the wrong abstraction layer */
-   intel_power_domains_init_hw(i915, false);
-@@ -8796,6 +8798,12 @@ int intel_modeset_init(struct drm_i915_private *i915)
+   ret = intel_power_domains_init(i915);
+@@ -8527,6 +8529,12 @@
    if (ret)
        return ret;

@@ -45,7 +29,7 @@ index dedbdb175f8b..e7e95308f6e6 100644
    /* Only enable hotplug handling once the fbdev is fully set up. */
    intel_hpd_init(i915);
    intel_hpd_poll_disable(i915);
-@@ -8966,6 +8974,7 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915)
+@@ -8705,6 +8713,7 @@
    if (!HAS_DISPLAY(i915))
        return;

@@ -53,11 +37,10 @@ index dedbdb175f8b..e7e95308f6e6 100644
    flush_workqueue(i915->display.wq.flip);
    flush_workqueue(i915->display.wq.modeset);

-diff --git a/drivers/gpu/drm/i915/display/intel_display.h b/drivers/gpu/drm/i915/display/intel_display.h
-index 714030136b7f..fbd500249ab1 100644
---- a/drivers/gpu/drm/i915/display/intel_display.h
-+++ b/drivers/gpu/drm/i915/display/intel_display.h
-@@ -535,6 +535,7 @@ void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe);
+diff --unified --recursive --text package.orig/drivers/gpu/drm/i915/display/intel_display.h package.new/drivers/gpu/drm/i915/display/intel_display.h
+--- package.orig/drivers/gpu/drm/i915/display/intel_display.h  2023-08-26 21:42:01.223519415 +0200
++++ package.new/drivers/gpu/drm/i915/display/intel_display.h   2023-08-26 21:47:01.677083488 +0200
+@@ -426,6 +426,7 @@
  int vlv_get_hpll_vco(struct drm_i915_private *dev_priv);
  int vlv_get_cck_clock(struct drm_i915_private *dev_priv,
              const char *name, u32 reg, int ref_freq);
@@ -65,11 +48,10 @@ index 714030136b7f..fbd500249ab1 100644
  int vlv_get_cck_clock_hpll(struct drm_i915_private *dev_priv,
               const char *name, u32 reg);
  void intel_init_display_hooks(struct drm_i915_private *dev_priv);
-diff --git a/drivers/gpu/drm/i915/display/intel_vga.c b/drivers/gpu/drm/i915/display/intel_vga.c
-index a69bfcac9a94..4cafe1f812f5 100644
---- a/drivers/gpu/drm/i915/display/intel_vga.c
-+++ b/drivers/gpu/drm/i915/display/intel_vga.c
-@@ -46,6 +46,36 @@ void intel_vga_disable(struct drm_i915_private *dev_priv)
+diff --unified --recursive --text package.orig/drivers/gpu/drm/i915/display/intel_vga.c package.new/drivers/gpu/drm/i915/display/intel_vga.c
+--- package.orig/drivers/gpu/drm/i915/display/intel_vga.c  2023-08-26 21:42:01.230186236 +0200
++++ package.new/drivers/gpu/drm/i915/display/intel_vga.c   2023-08-26 21:47:01.677083488 +0200
+@@ -47,6 +47,36 @@
    intel_de_posting_read(dev_priv, vga_reg);
  }

@@ -106,7 +88,7 @@ index a69bfcac9a94..4cafe1f812f5 100644
  void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv)
  {
    i915_reg_t vga_reg = intel_vga_cntrl_reg(dev_priv);
-@@ -54,6 +84,7 @@ void intel_vga_redisable_power_on(struct drm_i915_private *dev_priv)
+@@ -55,6 +85,7 @@
        drm_dbg_kms(&dev_priv->drm,
                "Something enabled VGA plane, disabling it\n");
        intel_vga_disable(dev_priv);
@@ -114,11 +96,10 @@ index a69bfcac9a94..4cafe1f812f5 100644
    }
  }

-diff --git a/drivers/gpu/drm/i915/display/intel_vga.h b/drivers/gpu/drm/i915/display/intel_vga.h
-index ba5b55b917f0..7e2af7924e99 100644
---- a/drivers/gpu/drm/i915/display/intel_vga.h
-+++ b/drivers/gpu/drm/i915/display/intel_vga.h
-@@ -15,4 +15,8 @@ void intel_vga_redisable_power_on(struct drm_i915_private *i915);
+diff --unified --recursive --text package.orig/drivers/gpu/drm/i915/display/intel_vga.h package.new/drivers/gpu/drm/i915/display/intel_vga.h
+--- package.orig/drivers/gpu/drm/i915/display/intel_vga.h  2023-08-26 21:42:01.230186236 +0200
++++ package.new/drivers/gpu/drm/i915/display/intel_vga.h   2023-08-26 21:47:01.677083488 +0200
+@@ -15,4 +15,8 @@
  int intel_vga_register(struct drm_i915_private *i915);
  void intel_vga_unregister(struct drm_i915_private *i915);

@@ -127,11 +108,10 @@ index ba5b55b917f0..7e2af7924e99 100644
 +void intel_vga_disable_mem(struct drm_i915_private *i915);
 +
  #endif /* __INTEL_VGA_H__ */
-diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c
-index d1e4d528cb17..a00cbc6591b0 100644
---- a/drivers/gpu/drm/i915/i915_params.c
-+++ b/drivers/gpu/drm/i915/i915_params.c
-@@ -154,6 +154,9 @@ i915_param_named_unsafe(invert_brightness, int, 0400,
+diff --unified --recursive --text package.orig/drivers/gpu/drm/i915/i915_params.c package.new/drivers/gpu/drm/i915/i915_params.c
+--- package.orig/drivers/gpu/drm/i915/i915_params.c    2023-08-26 21:42:01.243519878 +0200
++++ package.new/drivers/gpu/drm/i915/i915_params.c 2023-08-26 21:47:01.680416897 +0200
+@@ -160,6 +160,9 @@
  i915_param_named(disable_display, bool, 0400,
    "Disable display (default: false)");

@@ -141,11 +121,10 @@ index d1e4d528cb17..a00cbc6591b0 100644
  i915_param_named(memtest, bool, 0400,
    "Perform a read/write test of all device memory on module load (default: off)");

-diff --git a/drivers/gpu/drm/i915/i915_params.h b/drivers/gpu/drm/i915/i915_params.h
-index 2733cb6cfe09..f21c5b1529cc 100644
---- a/drivers/gpu/drm/i915/i915_params.h
-+++ b/drivers/gpu/drm/i915/i915_params.h
-@@ -76,6 +76,7 @@ struct drm_printer;
+diff --unified --recursive --text package.orig/drivers/gpu/drm/i915/i915_params.h package.new/drivers/gpu/drm/i915/i915_params.h
+--- package.orig/drivers/gpu/drm/i915/i915_params.h    2023-08-26 21:42:01.243519878 +0200
++++ package.new/drivers/gpu/drm/i915/i915_params.h 2023-08-26 21:47:01.680416897 +0200
+@@ -79,6 +79,7 @@
    param(unsigned int, lmem_size, 0, 0400) \
    param(unsigned int, lmem_bar_size, 0, 0400) \
    /* leave bools at the end to not create holes */ \
@@ -153,6 +132,3 @@ index 2733cb6cfe09..f21c5b1529cc 100644
    param(bool, enable_hangcheck, true, 0600) \
    param(bool, load_detect_test, false, 0600) \
    param(bool, force_reset_modeset_test, false, 0600) \
--- 
-2.39.2
-
diff --git a/PKGBUILD b/PKGBUILD
index 3b32c3e..879d700 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,7 +5,7 @@
 # Upstream: Jan Alexander Steffens (heftig) <heftig@archlinux.org>

 pkgbase=linux-vfio
-pkgver=6.3.7.arch1
+pkgver=6.4.12.arch1
 pkgrel=1
 pkgdesc='Linux'
 _srctag=v${pkgver%.*}-${pkgver##*.}
@@ -20,14 +20,9 @@ makedepends=(
   libelf
   pahole
   perl
+  python
   tar
   xz
-
-  # htmldocs
-  graphviz
-  imagemagick
-  python-sphinx
-  texlive-latexextra
 )
 options=('!strip')
 _srcname=archlinux-linux
@@ -45,8 +40,8 @@ validpgpkeys=(
 )
 b2sums=('SKIP'
         'c2d1c69265adc041dc0364e448f6e86dc4c9ca1207c84071abc1675dd820534a8ab5a230e579e68bfb1bf2b861f23ad34e090f8ceaef5e265ea95e2bc6946013'
-        'b1bb6028bead89c277f0e98b308574e47feee2ece5b7f0a2422d40d5b2532216550f99153fbb451c2bee2df398a1a2d596f776281243cf55d4e94c1d5d854ef2'
-        '7c99c5d965bda71f1d08e72fadc529b594d95648950aab49212daee8b34af525404bd98737d2bd715d81959fb71ed143416cb21d88075d833f931f9d0d313ab5')
+        'a8c82582eaa6b8e997022f1b2c8481d0e316c46bb12a7ff7e0df772634f24cd2da7a61b8512dddf14e9d964f9ca4ef90d7965bbec736861ab10f0b5c2b04db31'
+        '5becda768e2b6cf6f5c664b16671a3e27c4fd934e06df9545c66ee80a85533bbe4dfe85a0953217a37664d4fe18a95fc8f3ca76dbd2ef912a54ff4247ab38550')

 export KBUILD_BUILD_HOST=archlinux
 export KBUILD_BUILD_USER=$pkgbase
@@ -81,12 +76,16 @@ prepare() {
   _make olddefconfig
   diff -u ../config .config || :

+
+
+
+
   echo "Prepared $pkgbase version $(<version)"
 }

 build() {
   cd $_srcname
-  _make htmldocs all
+  _make all
 }

 _package() {
@@ -105,6 +104,10 @@ _package() {
     VIRTUALBOX-GUEST-MODULES
     WIREGUARD-MODULE
   )
+  replaces=(
+    virtualbox-guest-modules-arch
+    wireguard-arch
+  )

   cd $_srcname
   local modulesdir="$pkgdir/usr/lib/modules/$(<version)"
-- 
2.42.0