Zachary Amsden wrote: > On 05/25/2010 09:40 PM, Jan Kiszka wrote: >> Zachary Amsden wrote: >> >>> On 05/25/2010 05:36 PM, Zachary Amsden wrote: >>> >>>> Not for the faint of heart, this patch subverts the code by >>>> reassigning a local variable from a macro. >>>> >>> This time, with patch. >>> >>> >>> From 97b9230f699aba1c5f47972032b2d4d935a83054 Mon Sep 17 00:00:00 2001 >>> From: Zachary Amsden<zamsden@xxxxxxxxxx> >>> Date: Tue, 25 May 2010 17:17:32 -1000 >>> Subject: [PATCH 4/5] IOMMU API changed >>> >>> Ugly, dirty, disease ridden fix for IOMMU changes; the module >>> is now trying to use larger IOMMU intervals; deny it this, and >>> stick to page size. This requires forcibly setting page_size >>> variable through knowledge of the code. Yuck. If you have a >>> better solution, implement it. >>> >>> Signed-off-by: Zachary Amsden<zamsden@xxxxxxxxxx> >>> --- >>> external-module-compat-comm.h | 12 ++++++++++++ >>> 1 files changed, 12 insertions(+), 0 deletions(-) >>> >>> diff --git a/external-module-compat-comm.h >>> b/external-module-compat-comm.h >>> index c5284e5..708019e 100644 >>> --- a/external-module-compat-comm.h >>> +++ b/external-module-compat-comm.h >>> @@ -1128,3 +1128,15 @@ perf_unregister_guest_info_callbacks(struct >>> perf_guest_info_callbacks *cbs) >>> #if LINUX_VERSION_CODE< KERNEL_VERSION(2,6,32) >>> #define lockdep_is_held(m) (1) >>> #endif >>> + >>> +#if LINUX_VERSION_CODE< KERNEL_VERSION(2,6,34) >>> +/* This is a dirty, nasty trick */ >>> +#define iommu_map(domain, iova, paddr, gfp_order, prot) \ >>> +({ \ >>> + int _r = iommu_map_range(domain, iova, paddr, PAGE_SIZE, prot); \ >>> >> This should be (PAGE_SIZE<< gfp_order) according to my current >> understanding. >> > > It should, but can't be. >> >>> + page_size = PAGE_SIZE; \ >>> >> And what is this for? >> > > iommu_unmap is now passed an unreasonable value for order: PAGE_SIZE. Indeed. This is an upstream bug and has to be fixed instead of worked around. I'll send a patch. Jan PS: If there were already a KVM release with this included, the more appropriate way for kvm-kmod to deal with it would be patching the particular code line during sync.
Attachment:
signature.asc
Description: OpenPGP digital signature