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. > + page_size = PAGE_SIZE; \ And what is this for? > + _r; \ > +}) > +#define iommu_unmap(domain, iova, gfp_order) \ > + (iommu_unmap_range(domain, iova, PAGE_SIZE),1) > +#endif > -- 1.7.0.1 Besides that, putting this under CONFIG_IOMMU_API and making the functions static inline would be preferred. Jan
Attachment:
signature.asc
Description: OpenPGP digital signature