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

Martin J. Bligh
2006-05-09T14:50:19Z

> +#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?

> +
> +#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.