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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux