--- qc-memory.c.bad 2003-12-15 03:31:46.000000000 -0600 +++ qc-memory.c 2005-02-23 21:13:26.508462651 -0600 @@ -62,10 +62,19 @@ #endif #endif -#if !HAVE_VMA -static inline int qc_remap_page_range(unsigned long from, unsigned long addr, unsigned long size, pgprot_t prot) { return remap_page_range(from, addr, size, prot); } -#undef remap_page_range -#define remap_page_range(vma, start, addr, size, prot) qc_remap_page_range((start),(addr),(size),(prot)) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) +#if HAVE_VMA +#warning "HAVE_VMA=1" +/* remap_page_range is still emulated in 2.6.10, in 2.6.11 it's completely removed */ +static inline int qc_remap_page_range(struct vm_area_struct *vma, unsigned long from, unsigned long pfn, unsigned long size, pgprot_t prot) { return remap_page_range(vma, from, pfn<=KERNEL_VERSION(2,5,3) || defined(pte_offset_map) @@ -230,7 +239,13 @@ pos = (unsigned long)src; while ((long)size > 0) { physaddr = kvirt_to_pa(pos); - if (remap_page_range(vma, start, physaddr, PAGE_SIZE, PAGE_SHARED)) +#if 1 + if ((physaddr & ~PAGE_MASK)!=0) { + printk(KERN_CRIT "qc_mm_remap: physaddr=%08X not page aligned!\n", (int)physaddr); + return -EIO; + } +#endif + if (remap_pfn_range(vma, start, physaddr>>PAGE_SHIFT, PAGE_SIZE, PAGE_SHARED)) return -EAGAIN; start += PAGE_SIZE; pos += PAGE_SIZE;