kvm-86 fails to compile with "'IOMMU_CACHE' undeclared"
Hello!
I just tried to compile kvm-86 on two test machines and I get the following error:
[...]
CC [M] /usr/src/build/kvm-86/kvm/kernel/x86/iommu.o/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c: In function ‘kvm_iommu_map_pages’:/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: ‘IOMMU_CACHE’ undeclared (first use in this function) /usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: (Each undeclared identifier is reported only once /usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: for each function it appears in.) /usr/src/build/kvm-86/kvm/kernel/x86/iommu.c: In function ‘kvm_assign_device’:/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:155: error: implicit declaration of function ‘iommu_domain_has_cap’ /usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:156: error: ‘IOMMU_CAP_CACHE_COHERENCY’ undeclared (first use in this function) make[4]: *** [/usr/src/build/kvm-86/kvm/kernel/x86/iommu.o] Error 1
make[3]: *** [/usr/src/build/kvm-86/kvm/kernel/x86] Error 2
make[2]: *** [_module_/usr/src/build/kvm-86/kvm/kernel] Error 2
make[1]: *** [all] Error 2
make: *** [kvm-kmod] Error 2
Both machines run Debian Lenny with a custom kernel (2.6.29.1 and 2.6.29.3). One machine is Intel-based (Core2Duo), one is AMD-based. Both compiled earlier versions of kvm just fine. configure was run without options.
Best,
René.
Signature · 4 lines
)\._.,--....,'``. fL Let GNU/Linux work for you while you take a nap. /, _.. \ _\ (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs.at/ `._.-(,_..'--(,_..'`-.;.' - System administration + Consulting + Teaching - Got mail delivery problems? http://web.luchs.at/information/blockedmail.php
Hi Rene,
as a workaround, You can disable
AMD IOMMU support (AMD_IOMMU) and
Support for DMA Remapping Devices (EXPERIMENTAL) (DMAR)
in Your host kernel.
I'll post patch to disable KVM IOMMU support for kernels <2.6.30 soon. BR
nik
Quoted 33 lines · René Pfeiffer
Hello!
I just tried to compile kvm-86 on two test machines and I get the following error:
[...]
CC [M]/usr/src/build/kvm-86/kvm/kernel/x86/iommu.o/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c: In function ‘kvm_iommu_map_pages’:/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: ‘IOMMU_CACHE’ undeclared (first use in this function)/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: (Each undeclared identifier is reported only once/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: for each function it appears in.)/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c: In function ‘kvm_assign_device’:/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:155: error: implicit declaration of function ‘iommu_domain_has_cap’/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:156: error: ‘IOMMU_CAP_CACHE_COHERENCY’ undeclared (first use in this function) make[4]: *** [/usr/src/build/kvm-86/kvm/kernel/x86/iommu.o] Error 1
make[3]: *** [/usr/src/build/kvm-86/kvm/kernel/x86] Error 2
make[2]: *** [_module_/usr/src/build/kvm-86/kvm/kernel] Error 2
make[1]: *** [all] Error 2
make: *** [kvm-kmod] Error 2Both machines run Debian Lenny with a custom kernel (2.6.29.1 and 2.6.29.3). One machine is Intel-based (Core2Duo), one is AMD-based. Both compiled earlier versions of kvm just fine. configure was run without options.
Best,
René.Signature · 4 lines
)\._.,--....,'``. fL Let GNU/Linux work for you while you take a nap. /, _.. \ _\ (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs.at/ `._.-(,_..'--(,_..'`-.;.' - System administration + Consulting + Teaching - Got mail delivery problems? http://web.luchs.at/information/blockedmail.php
Signature · 14 lines
------------------------------------- Nikola CIPRICH LinuxBox.cz, s.r.o. 28. rijna 168, 709 01 Ostrava tel.: +420 596 603 142 fax: +420 596 621 273 mobil: +420 777 093 799 www.linuxbox.cz mobil servis: +420 737 238 656 email servis: [email protected] -------------------------------------
Hi,
KVM-86 IOMMU uses features available since 2.6.30-rcXX, attached patch disables its compilation on older kernels. I'm not sure if this is the best way to disable it, but You can use it as a workaround. Avi, is this OK? if so, please apply.
nik
external-module-compat-comm.h 2009-05-20 22:37:23.632038570 +0200 renamed from external-module-compat-comm.h 2009-05-20 15:59:56.000000000 +0200 +4 -0
@@ -791,3 +791,7 @@ } #endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) +#undef CONFIG_IOMMU_API +#endif
x86/iommu.c 2009-05-20 22:37:43.840878726 +0200 renamed from x86/iommu.c 2009-05-20 16:00:00.000000000 +0200 +2 -0
@@ -1,3 +1,4 @@ +#ifdef CONFIG_IOMMU_API #ifndef KVM_UNIFDEF_H #define KVM_UNIFDEF_H
@@ -271,3 +272,4 @@ iommu_domain_free(domain); return 0; } +#endif
Quoted 66 lines · Nikola Ciprich
Hi Rene,
as a workaround, You can disable
AMD IOMMU support (AMD_IOMMU) and
Support for DMA Remapping Devices (EXPERIMENTAL) (DMAR)
in Your host kernel.
I'll post patch to disable KVM IOMMU support for kernels <2.6.30 soon. BR
nikQuoted 33 lines · René Pfeiffer
Hello!
I just tried to compile kvm-86 on two test machines and I get the following error:
[...]
CC [M]/usr/src/build/kvm-86/kvm/kernel/x86/iommu.o/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c: In function ‘kvm_iommu_map_pages’:/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: ‘IOMMU_CACHE’ undeclared (first use in this function)/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: (Each undeclared identifier is reported only once/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:90: error: for each function it appears in.)/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c: In function ‘kvm_assign_device’:/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:155: error: implicit declaration of function ‘iommu_domain_has_cap’/usr/src/build/kvm-86/kvm/kernel/x86/iommu.c:156: error: ‘IOMMU_CAP_CACHE_COHERENCY’ undeclared (first use in this function) make[4]: *** [/usr/src/build/kvm-86/kvm/kernel/x86/iommu.o] Error 1
make[3]: *** [/usr/src/build/kvm-86/kvm/kernel/x86] Error 2
make[2]: *** [_module_/usr/src/build/kvm-86/kvm/kernel] Error 2
make[1]: *** [all] Error 2
make: *** [kvm-kmod] Error 2Both machines run Debian Lenny with a custom kernel (2.6.29.1 and 2.6.29.3). One machine is Intel-based (Core2Duo), one is AMD-based. Both compiled earlier versions of kvm just fine. configure was run without options.
Best,
René.Signature · 4 lines
)\._.,--....,'``. fL Let GNU/Linux work for you while you take a nap. /, _.. \ _\ (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs.at/ `._.-(,_..'--(,_..'`-.;.' - System administration + Consulting + Teaching - Got mail delivery problems? http://web.luchs.at/information/blockedmail.phpSignature · 18 lines
------------------------------------- Nikola CIPRICH LinuxBox.cz, s.r.o. 28. rijna 168, 709 01 Ostrava tel.: +420 596 603 142 fax: +420 596 621 273 mobil: +420 777 093 799 www.linuxbox.cz mobil servis: +420 737 238 656 email servis: [email protected] ------------------------------------- -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 14 lines
------------------------------------- Nikola CIPRICH LinuxBox.cz, s.r.o. 28. rijna 168, 709 01 Ostrava tel.: +420 596 603 142 fax: +420 596 621 273 mobil: +420 777 093 799 www.linuxbox.cz mobil servis: +420 737 238 656 email servis: [email protected] -------------------------------------
external-module-compat-comm.h 2009-05-20 22:37:23.632038570 +0200 line 797
Quoted 11 lines · * Nikola Ciprich ([email protected]) wrote:
diff -Naur
kvm-kmod-devel-86/external-module-compat-comm.hkvm-kmod-devel-86-disable-iommu-for-old-kernels/external-module-compat-comm.hexternal-module-compat-comm.h 2009-05-20 22:37:23.632038570 +0200 renamed from external-module-compat-comm.h 2009-05-20 15:59:56.000000000 +0200 +4
-0@@ -791,3 +791,7 @@ } #endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) +#undef CONFIG_IOMMU_API +#endif
This is too heavy handed. The only thing that's new is newer iommu code provides a query for cache coherency. You could do something as simple as:
#ifndef IOMMU_CACHE
#define IOMMU_CACHE (4)
#define IOMMU_CAP_CACHE_COHERENCY 0x1
static inline int kvm_iommu_domain_has_cap(struct iommu_domain *domain,
unsigned long cap)
{
return 0;
}#else
#define kvm_iommu_domain_has_cap iommu_domain_has_cap #endif
and add it to the compat_api list in the sync script
x86/iommu.c 2009-05-20 22:37:43.840878726 +0200 line 275
Quoted 13 lines
diff -Naur
kvm-kmod-devel-86/x86/iommu.ckvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.cx86/iommu.c 2009-05-20 22:37:43.840878726 +0200 renamed from x86/iommu.c 2009-05-20 16:00:00.000000000 +0200 +2
-0@@ -1,3 +1,4 @@ +#ifdef CONFIG_IOMMU_API #ifndef KVM_UNIFDEF_H #define KVM_UNIFDEF_H@@ -271,3 +272,4 @@ iommu_domain_free(domain); return 0; } +#endif
BTW, just to clarify something...this file isn't part of kvm-kmod repo, it's a generated file from the 'make sync' process.
thanks,
-chris
PATCH 1/1 build fix for !#defined IOMMU_CACHE
This should fix the build for kernels that don't have IOMMU_CACHE, IOMMU_CAP_CACHE_COHERENCY or iommu_domain_has_cap defined.
--- external-module-compat-comm.h | 13 +++++++++++++ 1 file changed, 13 insertions(+)
external-module-compat-comm.h +13 -0
@@ -791,3 +793,16 @@ static inline struct page *compound_head(struct page *page) }#endif + +#include <linux/iommu.h> +#ifndef IOMMU_CACHE + +#define IOMMU_CACHE (4) +#define IOMMU_CAP_CACHE_COHERENCY 0x1 +static inline int iommu_domain_has_cap (struct iommu_domain *domain, +unsigned long cap) +{ +return 0 ; +} + +#endif
Avi Kivity
AppliedRe: [PATCH kvm-kmod] build fix for !#defined IOMMU_CACHE
Quoted 4 lines · Chris Wright
This should fix the build for kernels that don't have
IOMMU_CACHE,IOMMU_CAP_CACHE_COHERENCYoriommu_domain_has_capdefined.
Applied, thanks.
Signature · 1 line
error compiling committee.c: too many arguments to function
Quoted 5 lines · Nikola Ciprich appeared and
Hi Rene,
as a workaround, You can disable
AMD IOMMU support (AMD_IOMMU) and
Support for DMA Remapping Devices (EXPERIMENTAL) (DMAR)
in Your host kernel.
Ok, thanks for the clarification. I wasn't sure what the cause for the error was. I suspected the kernel, but I didn't check thoroughly. I'll be moving to 2.6.30 anyway on the test machines.
Thanks for the patch.
Best,
René.
Signature · 4 lines
)\._.,--....,'``. fL Let GNU/Linux work for you while you take a nap. /, _.. \ _\ (`._ ,. R. Pfeiffer <lynx at luchs.at> + http://web.luchs.at/ `._.-(,_..'--(,_..'`-.;.' - System administration + Consulting + Teaching - Got mail delivery problems? http://web.luchs.at/information/blockedmail.php