diff --git a/.SRCINFO b/.SRCINFO index 3b4b769..95d0c27 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = linux-vfio pkgdesc = Linux pkgver = 6.1.1.arch1 - pkgrel = 1 + pkgrel = 2 url = https://github.com/archlinux/linux/commits/v6.1.1-arch1 arch = x86_64 license = GPL2 @@ -22,16 +22,16 @@ pkgbase = linux-vfio options = !strip source = archlinux-linux::git+https://github.com/archlinux/linux?signed#tag=v6.1.1-arch1 source = config - source = add-acs-overrides.patch - source = i915-vga-arbiter.patch + source = 0001-add-acs-overrides.patch + source = 0002-i915-vga-arbiter.patch validpgpkeys = ABAF11C65A2970B130ABE3C479BE3E4300411886 validpgpkeys = 647F28654894E3BD457199BE38DBBDC86092693E validpgpkeys = A2FF3A36AAA56654109064AB19802F8B0D70FC30 validpgpkeys = C7E7849466FE2358343588377258734B41C31549 sha256sums = SKIP sha256sums = 0571ea17a2e38458096b679418197bbea8c414388f628d122517f3a1f3a31b3a - sha256sums = b90be7b79652be61f7d50691000f6a8c75a240dc2eee2667b68d984f67583f77 - sha256sums = 5092c62db5ca8f6b806996ba3db0f610d9ad73d499384394e16823dda097f9cd + sha256sums = b8f977aa923aa6076703b88262e395c56ce9df2943a52448d8a0e32cc90b1a70 + sha256sums = 750c57539f17332cafe01a978a0133fc9500dbe37a411b823dad2eee66652cfc pkgname = linux-vfio pkgdesc = The Linux kernel and modules (ACS override and i915 VGA arbiter patches) diff --git a/.gitignore b/.gitignore index 4fa2f67..e4e01a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,6 @@ -pkg -src -linux.install.pkg -*.xz -*.zst -*.sign -*.src.tar.gz -*.log -*.part -*.sig -archlinux-linux/ +* +!.gitignore +!.SRCINFO +!PKGBUILD +!config +!*.patch diff --git a/add-acs-overrides.patch b/0001-add-acs-overrides.patch similarity index 58% rename from add-acs-overrides.patch rename to 0001-add-acs-overrides.patch index f291975..91a562b 100644 --- a/add-acs-overrides.patch +++ b/0001-add-acs-overrides.patch @@ -1,58 +1,19 @@ -From 578d958c59002358abdeeb294c25ac28027b9f7a Mon Sep 17 00:00:00 2001 -From: Mark Weiman -Date: Wed, 27 Jan 2021 13:28:09 -0500 -Subject: [PATCH] pci: Enable overrides for missing ACS capabilities (5.10.11+) +From c1ed6974bffaee49ae8a82838a4cf7cd8ebad36c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=A9clairevoyant?= + <848000+eclairevoyant@users.noreply.github.com> +Date: Sun, 1 Jan 2023 16:21:00 -0500 +Subject: [PATCH 1/2] add-acs-overrides -This an updated version of Alex Williamson's patch from: -https://lkml.org/lkml/2013/5/30/513 - -Original commit message follows: ---- -PCIe ACS (Access Control Services) is the PCIe 2.0+ feature that -allows us to control whether transactions are allowed to be redirected -in various subnodes of a PCIe topology. For instance, if two -endpoints are below a root port or downsteam switch port, the -downstream port may optionally redirect transactions between the -devices, bypassing upstream devices. The same can happen internally -on multifunction devices. The transaction may never be visible to the -upstream devices. - -One upstream device that we particularly care about is the IOMMU. If -a redirection occurs in the topology below the IOMMU, then the IOMMU -cannot provide isolation between devices. This is why the PCIe spec -encourages topologies to include ACS support. Without it, we have to -assume peer-to-peer DMA within a hierarchy can bypass IOMMU isolation. - -Unfortunately, far too many topologies do not support ACS to make this -a steadfast requirement. Even the latest chipsets from Intel are only -sporadically supporting ACS. We have trouble getting interconnect -vendors to include the PCIe spec required PCIe capability, let alone -suggested features. - -Therefore, we need to add some flexibility. The pcie_acs_override= -boot option lets users opt-in specific devices or sets of devices to -assume ACS support. The "downstream" option assumes full ACS support -on root ports and downstream switch ports. The "multifunction" -option assumes the subset of ACS features available on multifunction -endpoints and upstream switch ports are supported. The "id:nnnn:nnnn" -option enables ACS support on devices matching the provided vendor -and device IDs, allowing more strategic ACS overrides. These options -may be combined in any order. A maximum of 16 id specific overrides -are available. It's suggested to use the most limited set of options -necessary to avoid completely disabling ACS across the topology. -Note to hardware vendors, we have facilities to permanently quirk -specific devices which enforce isolation but not provide an ACS -capability. Please contact me to have your devicstarting --- .../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 26bfe7ae711b..7babcf646686 100644 +index 42af9ca0127e..4f94a9f2cff0 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt -@@ -3629,6 +3629,14 @@ +@@ -4145,6 +4145,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. @@ -68,10 +29,10 @@ index 26bfe7ae711b..7babcf646686 100644 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 fb1dc11e7cc5..8748df0fe1e1 100644 +index 285acc4aaccc..7ad267e87c34 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c -@@ -192,6 +192,106 @@ static int __init pci_apply_final_quirks(void) +@@ -194,6 +194,106 @@ static int __init pci_apply_final_quirks(void) } fs_initcall_sync(pci_apply_final_quirks); @@ -178,8 +139,8 @@ index fb1dc11e7cc5..8748df0fe1e1 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 -@@ -4769,6 +4869,8 @@ static const struct pci_dev_acs_enabled { - { PCI_VENDOR_ID_ZHAOXIN, 0x9083, pci_quirk_mf_endpoint_acs }, +@@ -4980,6 +5080,8 @@ static const struct pci_dev_acs_enabled { + { PCI_VENDOR_ID_NXP, 0x8d9b, pci_quirk_nxp_rp_acs }, /* Zhaoxin Root/Downstream Ports */ { PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs }, + /* allow acs for any */ @@ -188,5 +149,5 @@ index fb1dc11e7cc5..8748df0fe1e1 100644 }; -- -2.30.0 +2.38.1 diff --git a/i915-vga-arbiter.patch b/0002-i915-vga-arbiter.patch similarity index 68% rename from i915-vga-arbiter.patch rename to 0002-i915-vga-arbiter.patch index 392e91f..0467c13 100644 --- a/i915-vga-arbiter.patch +++ b/0002-i915-vga-arbiter.patch @@ -1,40 +1,9 @@ -From 07af9476bf0b340df883f558a5c5c1ecad05b406 Mon Sep 17 00:00:00 2001 -From: Mark King -Date: Thu, 29 Sep 2022 10:30:20 -0400 -Subject: [PATCH] i915: Add module option to support VGA arbiter on HD devices - (5.19) +From c8894968896294c7ced91b86fb59ca2c1aa6e031 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=C3=A9clairevoyant?= + <848000+eclairevoyant@users.noreply.github.com> +Date: Sun, 1 Jan 2023 16:21:24 -0500 +Subject: [PATCH 2/2] i915-vga-arbiter -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.c | 15 ++++++++-- drivers/gpu/drm/i915/display/intel_display.h | 1 + @@ -45,10 +14,10 @@ until after vgacon->fbcon handoff. 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 806d50b302ab..8b07e45c9693 100644 +index de77054195c6..507ee4e0d1dc 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c +++ b/drivers/gpu/drm/i915/display/intel_display.c -@@ -9581,9 +9581,11 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915) +@@ -8656,9 +8656,11 @@ int intel_modeset_init_noirq(struct drm_i915_private *i915) intel_bios_init(i915); @@ -63,7 +32,7 @@ index 806d50b302ab..8b07e45c9693 100644 /* FIXME: completely on the wrong abstraction layer */ intel_power_domains_init_hw(i915, false); -@@ -9734,6 +9736,12 @@ int intel_modeset_init(struct drm_i915_private *i915) +@@ -8807,6 +8809,12 @@ int intel_modeset_init(struct drm_i915_private *i915) if (ret) return ret; @@ -76,19 +45,19 @@ index 806d50b302ab..8b07e45c9693 100644 /* Only enable hotplug handling once the fbdev is fully set up. */ intel_hpd_init(i915); intel_hpd_poll_disable(i915); -@@ -10467,6 +10475,7 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915) +@@ -8977,6 +8985,7 @@ void intel_modeset_driver_remove(struct drm_i915_private *i915) if (!HAS_DISPLAY(i915)) return; + intel_vga_enable_mem(i915); - flush_workqueue(i915->flip_wq); - flush_workqueue(i915->modeset_wq); + 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 187910d94ec6..82b17d7fee91 100644 +index 884e8e67b17c..90f932db61f0 100644 --- a/drivers/gpu/drm/i915/display/intel_display.h +++ b/drivers/gpu/drm/i915/display/intel_display.h -@@ -568,6 +568,7 @@ void i830_disable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe); +@@ -576,6 +576,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); @@ -159,10 +128,10 @@ index ba5b55b917f0..7e2af7924e99 100644 + #endif /* __INTEL_VGA_H__ */ diff --git a/drivers/gpu/drm/i915/i915_params.c b/drivers/gpu/drm/i915/i915_params.c -index 701fbc98afa0..4c3701e18a4a 100644 +index d1e4d528cb17..a00cbc6591b0 100644 --- a/drivers/gpu/drm/i915/i915_params.c +++ b/drivers/gpu/drm/i915/i915_params.c -@@ -142,6 +142,9 @@ i915_param_named_unsafe(invert_brightness, int, 0400, +@@ -154,6 +154,9 @@ i915_param_named_unsafe(invert_brightness, int, 0400, i915_param_named(disable_display, bool, 0400, "Disable display (default: false)"); @@ -173,17 +142,17 @@ index 701fbc98afa0..4c3701e18a4a 100644 "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 b5e7ea45d191..82d0a75da970 100644 +index 2733cb6cfe09..f21c5b1529cc 100644 --- a/drivers/gpu/drm/i915/i915_params.h +++ b/drivers/gpu/drm/i915/i915_params.h -@@ -75,6 +75,7 @@ struct drm_printer; - param(unsigned int, request_timeout_ms, CONFIG_DRM_I915_REQUEST_TIMEOUT, CONFIG_DRM_I915_REQUEST_TIMEOUT ? 0600 : 0) \ +@@ -76,6 +76,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.37.3 +2.38.1 diff --git a/PKGBUILD b/PKGBUILD index 624ae53..73a9faa 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -6,7 +6,7 @@ pkgbase=linux-vfio pkgver=6.1.1.arch1 -pkgrel=1 +pkgrel=2 pkgdesc='Linux' _srctag=v${pkgver%.*}-${pkgver##*.} url="https://github.com/archlinux/linux/commits/$_srctag" @@ -21,9 +21,9 @@ options=('!strip') _srcname=archlinux-linux source=( "$_srcname::git+https://github.com/archlinux/linux?signed#tag=$_srctag" - config # the main kernel config file - add-acs-overrides.patch - i915-vga-arbiter.patch + config # the main kernel config file + 0001-add-acs-overrides.patch # updated from https://lkml.org/lkml/2013/5/30/513 + 0002-i915-vga-arbiter.patch # updated from https://lkml.org/lkml/2014/5/9/517 ) validpgpkeys=( 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds @@ -33,8 +33,8 @@ validpgpkeys=( ) sha256sums=('SKIP' '0571ea17a2e38458096b679418197bbea8c414388f628d122517f3a1f3a31b3a' - 'b90be7b79652be61f7d50691000f6a8c75a240dc2eee2667b68d984f67583f77' - '5092c62db5ca8f6b806996ba3db0f610d9ad73d499384394e16823dda097f9cd') + 'b8f977aa923aa6076703b88262e395c56ce9df2943a52448d8a0e32cc90b1a70' + '750c57539f17332cafe01a978a0133fc9500dbe37a411b823dad2eee66652cfc') export KBUILD_BUILD_HOST=archlinux export KBUILD_BUILD_USER=$pkgbase @@ -207,6 +207,3 @@ for _p in "${pkgname[@]}"; do _package${_p#$pkgbase} }" done - -# vim:set ts=8 sts=2 sw=2 et: -