diff mbox

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

Message ID 20090520204512.GB6154@nik-comp.linuxbox.cz (mailing list archive)
State New, archived
Headers show

Commit Message

Nikola Ciprich May 20, 2009, 8:45 p.m. UTC
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


On Wed, May 20, 2009 at 10:30:22PM +0200, Nikola Ciprich wrote:
> 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
> 
> On Wed, May 20, 2009 at 07:48:59PM +0200, René Pfeiffer wrote:
> > 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é.
> > 
> > -- 
> >   )\._.,--....,'``.  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
> 
> 
> 
> -- 
> -------------------------------------
> 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: servis@linuxbox.cz
> -------------------------------------
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

Comments

Chris Wright May 21, 2009, 5:33 a.m. UTC | #1
* Nikola Ciprich (extmaillist@linuxbox.cz) 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
> --- kvm-kmod-devel-86/external-module-compat-comm.h     2009-05-20 15:59:56.000000000 +0200
> +++ kvm-kmod-devel-86-disable-iommu-for-old-kernels/external-module-compat-comm.h       2009-05-20 22:37:23.632038570 +0200
> @@ -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

> diff -Naur kvm-kmod-devel-86/x86/iommu.c kvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.c
> --- kvm-kmod-devel-86/x86/iommu.c       2009-05-20 16:00:00.000000000 +0200
> +++ kvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.c 2009-05-20 22:37:43.840878726 +0200
> @@ -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
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

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
--- kvm-kmod-devel-86/external-module-compat-comm.h     2009-05-20 15:59:56.000000000 +0200
+++ kvm-kmod-devel-86-disable-iommu-for-old-kernels/external-module-compat-comm.h       2009-05-20 22:37:23.632038570 +0200
@@ -791,3 +791,7 @@ 
 }

 #endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+#undef CONFIG_IOMMU_API
+#endif
diff -Naur kvm-kmod-devel-86/x86/iommu.c kvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.c
--- kvm-kmod-devel-86/x86/iommu.c       2009-05-20 16:00:00.000000000 +0200
+++ kvm-kmod-devel-86-disable-iommu-for-old-kernels/x86/iommu.c 2009-05-20 22:37:43.840878726 +0200
@@ -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