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

RE: [Xen-ia64-devel] RE: [Xen-devel] RE: Linux PG_arch_1 conflict



>From: Isaku Yamahata
>Sent: 2006年3月14日 12:43
>> >
>> >What do you think of the followings? Too hacky?
>> >
>> >
>> >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;      \
>> >} while (0)
>> >
>> >#define ClearPageForeign(page) do { \
>> >    (page)->mapping = NULL;         \
>> >    set_page_private((page), 0);    \
>> >} while (0)
>> >
>> >#define PageForeignDestructor(page) \
>> >    ( (void (*) (struct page *)) page_private((page)) )
>> >
>>
>> Hi, Isaku,
>>      (page)->mapping is used to keep special destructor since that
>foreign page needs to be freed differently as normal linux pages, as you
>see in foreign_page.h. Your hack only ensures the check. Agree right
>way to go to propose PG_foreign upstream.
>
>A special destructor is kept in page->private by set_page_private() and
>get by page_private(). page->private is unsigned long so that it can
>hold pointer value.
>
>They are just defined as
>#define page_private(page)              ((page)->private)
>#define set_page_private(page, v)       ((page)->private = (v))

Oops, I didn't note that. :-)

Thanks,
Kevin

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.