# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Node ID e0ca9df1b65ca17f34e2ffe7aa425129503c0119 # Parent d47e2b8921557d93cb22d5cd1d063cafdde2ebc0 add defeinitions of arch_free_page() work around for PG_foreign. xen/ia64 uses PG_arch1. This work around sould be removed once PG_foreign is taken. PATCHNAME: arch_free_page_linux Signed-off-by: Isaku Yamahata diff -r d47e2b892155 -r e0ca9df1b65c linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Mon May 8 11:42:37 2006 +0900 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Mon May 8 11:42:38 2006 +0900 @@ -285,3 +285,8 @@ EXPORT_SYMBOL(balloon_update_driver_allo EXPORT_SYMBOL(balloon_update_driver_allowance); +/////////////////////////////////////////////////////////////////////////// +// PageForeign(), SetPageForeign(), ClearPageForeign() + +struct address_space xen_ia64_foreign_dummy_mapping; + diff -r d47e2b892155 -r e0ca9df1b65c linux-2.6-xen-sparse/include/asm-ia64/page.h --- a/linux-2.6-xen-sparse/include/asm-ia64/page.h Mon May 8 11:42:37 2006 +0900 +++ b/linux-2.6-xen-sparse/include/asm-ia64/page.h Mon May 8 11:42:38 2006 +0900 @@ -235,6 +235,41 @@ get_order (unsigned long size) #include #include +// XXX hack! +// Linux/IA64 uses PG_arch_1. +// This hack will be removed once PG_foreign bit is taken. +//#include +#ifdef __ASM_XEN_FOREIGN_PAGE_H__ +# error "don't include include/xen/foreign_page.h!" +#endif + +extern struct address_space xen_ia64_foreign_dummy_mapping; +#define PageForeign(page) \ + ((page)->mapping == &xen_ia64_foreign_dummy_mapping) + +#define SetPageForeign(page, dtor) do { \ + set_page_private((page), (unsigned long)(dtor)); \ + (page)->mapping = &xen_ia64_foreign_dummy_mapping; \ + smp_rmb(); \ +} while (0) + +#define ClearPageForeign(page) do { \ + (page)->mapping = NULL; \ + smp_rmb(); \ + set_page_private((page), 0); \ +} while (0) + +#define PageForeignDestructor(page) \ + ( (void (*) (struct page *)) page_private(page) ) + +#define arch_free_page(_page,_order) \ +({ int foreign = PageForeign(_page); \ + if (foreign) \ + (PageForeignDestructor(_page))(_page); \ + foreign; \ +}) +#define HAVE_ARCH_FREE_PAGE + //XXX xen page size != page size static inline unsigned long @@ -279,6 +314,9 @@ machine_to_phys_for_dma(unsigned long ma #define set_phys_to_machine(pfn, mfn) do { } while (0) #define xen_machphys_update(mfn, pfn) do { } while (0) +//XXX to compile set_phys_to_machine(vaddr, FOREIGN_FRAME(m)) +#define FOREIGN_FRAME(m) (INVALID_P2M_ENTRY) + #define mfn_to_pfn(mfn) (mfn) #define mfn_to_virt(mfn) (__va((mfn) << PAGE_SHIFT)) #define pfn_to_mfn(pfn) (pfn)