Skip to contentSkip to conversation

kvm-86 fails to compile with "'IOMMU_CACHE' undeclared"

PATCH Applied René Pfeiffer 4 participants 7 messages May 20, 2009 – May 22, 2009 KVM

lore
Share & tools
lore
#0 lore raw

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
#1 lore raw

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 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
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]
-------------------------------------
#2 lore raw

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
diff -Naur kvm-kmod-devel-86/external-module-compat-comm.h kvm-kmod-devel-86-disable-iommu-for-old-kernels/external-module-compat-comm.h
@@ -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
diff -Naur kvm-kmod-devel-86/x86/iommu.c kvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.c
@@ -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
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 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
Signature · 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]
-------------------------------------
#3 lore raw

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.h kvm-kmod-devel-86-disable-iommu-for-old-kernels/external-module-compat-comm.h

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

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.c kvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.c

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

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

#4 lore raw

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
index f6975e0..adf45c5 100644
@@ -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
Applied
#5 lore raw

Re: [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_COHERENCY or iommu_domain_has_cap defined.

Applied, thanks.

Signature · 1 line
error compiling committee.c: too many arguments to function
#6 lore raw
In reply to Nikola Ciprich
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