Re: [RFC PATCH 08/35] Add Xen-specific memory management definitions

Christian Limpach
2006-05-09T17:44:20Z

On Tue, May 09, 2006 at 07:49:45AM -0700, Martin J. Bligh wrote:
>
> >+#define virt_to_ptep(__va) \
> >+({ \
> >+ pgd_t *__pgd = pgd_offset_k((unsigned long)(__va)); \
> >+ pud_t *__pud = pud_offset(__pgd, (unsigned long)(__va)); \
> >+ pmd_t *__pmd = pmd_offset(__pud, (unsigned long)(__va)); \
> >+ pte_offset_kernel(__pmd, (unsigned long)(__va)); \
> >+})
>
> Do we really need yet another function to do this?
> Especially one in a mult-line #define instead of a real function call,
> and that doesn't seem to error check at each step?

Indeed, I'll use lookup_address instead.

> >+
> >+#define arbitrary_virt_to_machine(__va) \
> >+({ \
> >+ maddr_t m = (maddr_t)pte_mfn(*virt_to_ptep(__va)) << PAGE_SHIFT;\
> >+ m | ((unsigned long)(__va) & (PAGE_SIZE-1)); \
> >+})
> >+
> >+#define make_lowmem_page_readonly(va, feature) do { \
> >+ pte_t *pte; \
> >+ int rc; \
> >+ \
> >+ if (xen_feature(feature)) \
> >+ return; \
> >+ \
> >+ pte = virt_to_ptep(va); \
> >+ rc = HYPERVISOR_update_va_mapping( \
> >+ (unsigned long)va, pte_wrprotect(*pte), 0); \
> >+ BUG_ON(rc); \
> >+} while (0)
>
> Things this long should definitely not be #defines.

I've changed these to be functions and moved them into a .c file
under arch/i386/mach-xen.

christian