IOMMU Group Split Manjaro

Hello,

I am a fairly new member of the Linux Gaming community. Currently, I am using Manjaro 20.4 with the Linux57 kernel. Works perfectly. I started playing some games and later found out that both Civilization VI and (currently) League Of Legends doesn’t work properly. One because of Epic Games and the other one has some other issue. So I decided to throw my old GTX 750 in my gaming box (R5 2600, 16GB RAM, B350 PC Mate, RX 580 8GB) to play those games on a virtual machine. Everything worked out so far until I recieved an error message when installing the Win10. I found out that my GTX 750 does not reside in it’s own IOMMU group, its sharing one with some bridges, SATA Controller, USB Controller, Ethernet Controller and WiFi controller. I looked a bit into splitting up the IOMMU group but I found out I am a bit too stoopid to figure it out on my own :smiley: I would really appreciate the help <3

Greetings,
Noah1801

It does not always work, but you could try using the ACS kernel patch.

The linux-vfio or linux-vfio-lts AUR packages include the ACS patch.
https://aur.archlinux.org/packages/linux-vfio/
https://aur.archlinux.org/packages/linux-vfio-lts/

The patch is activated by adding the pcie_acs_override=downstream,multifunction kernel parameter. Where to add kernel parameters depends on what bootloader you are using.

I am using GRUB.

Then edit /etc/default/grub and append it to the line GRUB_CMDLINE_LINUX_DEFAULT="quiet other stuff here"

Then regenerate your config with grub-mkconfig -o /boot/grub/grub.cfg

https://wiki.archlinux.org/index.php/kernel_parameters#GRUB

So I download the linux-vfio. It says, it’s for the Linux 5.8.12 kernel. Does it still work with 5.7.19-2? I never downloaded something through the Arch website.

It will install another kernel to boot from.

See this for how to build and install packages from the AUR:
https://wiki.manjaro.org/index.php/Arch_User_Repository

Thank you. When installing it, there came up a “text editor” in the terminal. Should I just save them and not configure anything? Or do I need to do something there?

I think that is the kernel build configuration. Generally, you would not need to change anything.

I just got an error, which approximately says “running makepkg as root is not allowed, because it can have catastrophic effects to your system”. Should I ignore it or do I need to fix that?

You should fix it.

You should be running most of the commands to build AUR packages as a normal user, and only elevate when needed with sudo.

I reran the command and now I got another error :sweat_smile:

“One or more PGP signatures couldnt get verified”. Something along those lines.

Manjaro does not have every PGP key that AUR maintainers use, so you have to import the key like gpg --recv-key <key>

See here:

And here:
gpg --recv-keys 3B94A80E50A477C7
https://aur.archlinux.org/pkgbase/linux-vfio/

This is the first time I am compiling a kernel. Takes some time with even a 2600. Im excited! :smiley:

By default it compiles single-threaded. Upping that to use all your cores would speed it up quite a bit in the future.

https://wiki.archlinux.org/index.php/Makepkg#Parallel_compilation

TLDR, either MAKEFLAGS="-j$(nproc)" every time or edit ~/.makepkg.conf

I did check my system monitor and it showed all twelve cores being active at 100%. However, I did see some errors during the compiling. Is that worrysome?

Oh, I guess Manjaro already has it set up to be multicore.

Errors or warnings?

For compiling, errors are generally things that stop the compilation. Warnings are generally things that are detected as code that could cause a bug, but it will still finish compiling.

In that case, they were warnings. Right at the end, I got another warning.

WARNING: Possibly missing firmware for module: xhci_pci
WARNING: Unparseable C cross-reference: '但是因为spin_lock'-stage .. usb/text_files                                       
Invalid C declaration: Expected identifier in nested name. [error at 0]
  但是因为spin_lock

Do I have to write the patch

pcie_acs_override=downstream,multifunction

just randomly into the grub file line or do I have to put it into a specific place?

The line starting with GRUB_CMDLINE_LINUX_DEFAULT=

Put it inside the quotes.

So, for example GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pcie_acs_override=downstream,multifunction"

Does it matter if it has something else inside it or am I just allowed to put it in there?