Patch NPT For Ryzen CPU Arch Linux

Published 2017-10-28 on Anjan's Homepage

Note: This patch has been merged with upstream. Simply update your archlinux machine and npt should just work.

The new npt patch allows you to enable npt on ryzen cpus and get native performance in a virtual machine. Please be advised that this patch is not mainline and may cause other problems. As always, make backups.

For this procedure we will be using the Arch Build System so that pacman will manage all of the files and so we can rollback a kernel by looking into /var/cache/pacman/pkg/ and using pacman -U.

mkdir builds
cd builds

Make sure you have subversion installed and then:

svn checkout --depth=empty svn://svn.archlinux.org/packages
cd packages
svn update linux
cd linux/repos/core-x86_64/

Edit the PKGBUILD file to include the following near prepare(){

# add upstream patch
patch -p1 -i ../patch-${pkgver}

# ADD THE FOLLOWING LINE TO THE PKGBUILD
patch -p1 -i ../patch-ryzen

Next, we put the npt patch into the src folder.

cd src
vim patch-ryzen

and copy paste the following lines:

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index af256b786a70..af09baa3d736 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -3626,6 +3626,13 @@  static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
  u32 ecx = msr->index;
  u64 data = msr->data;
  switch (ecx) {
+ case MSR_IA32_CR_PAT:
+   if (!kvm_mtrr_valid(vcpu, MSR_IA32_CR_PAT, data))
+     return 1;
+   vcpu->arch.pat = data;
+   svm->vmcb->save.g_pat = data;
+   mark_dirty(svm->vmcb, VMCB_NPT);
+   break;
  case MSR_IA32_TSC:
    kvm_write_tsc(vcpu, msr);
    break;

Finally, in order to build the package and install the new patched kernel:

cd ..
makepkg -si

Make sure `/etc/modprobe.d/kvmamd.conf` has npt enabled:

options kvm_amd npt=1

and reboot

References:

https://wiki.archlinux.org/index.php/Creating_packages

https://wiki.archlinux.org/index.php/Arch_Build_System

https://level1techs.com/article/patch-npt-ryzen-better-performance

Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~anjan/public-inbox@lists.sr.ht [mailing list etiquette]

Articles from blogs I follow around the net

These articles/blogs do not represent my own opinions or views.

Web analytics should at least meet the standards of informed consent

Research conducted on human beings, at least outside of the domain of technology, has to meet a minimum standard of ethical reasoning called informed consent. Details vary, but the general elements of informed consent are: Disclosure of the nature and purpose…

via Drew DeVault's blog December 4, 2020

How to Make Biomass Energy Sustainable Again

From the Neolithic to the beginning of the twentieth century, coppiced woodlands, pollarded trees, and hedgerows provided people with a sustainable supply of energy, materials, and food.

via LOW←TECH MAGAZINE September 20, 2020

Eshell versus M-x shell

I’ve used and defended Eshell for years. Sadly, Eshell has some long standing issues that I grew tired of in the long run. So I’ve decided to switch to M-x shell and see how much of my Eshell workflow I could port. Language and the underlying shell pr…

via Pierre Neidhardt's homepage June 26, 2020

Generated by openring