[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-ia64-devel] Need cmpxchg_user for ia64
Anybody want to write a fancy macro? I need a cmpxchg_user() macro that corresponds to the following x86 code used in grant_table.c and defined in include/asm-x86/system.h, but (of course) works for ia64. It must also conform to the ia64 __ex_table convention. Please include a Signed-off-by as this will be new code for Xen. Thanks! Dan /* * This function causes value _o to be changed to _n at location _p. * If this access causes a fault then we return 1, otherwise we return 0. * If no fault occurs then _o is updated to the value we saw at _p. If this * is the same as the initial value of _o then _n is written to location _p. */ #define __cmpxchg_user(_p,_o,_n,_isuff,_oppre,_regtype) \ __asm__ __volatile__ ( \ "1: " LOCK_PREFIX "cmpxchg"_isuff" %"_oppre"2,%3\n" \ "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: movl $1,%1\n" \ " jmp 2b\n" \ ".previous\n" \ ".section __ex_table,\"a\"\n" \ " .align 4\n" \ " .long 1b,3b\n" \ ".previous" \ : "=a" (_o), "=r" (_rc) \ : _regtype (_n), "m" (*__xg((volatile void *)_p)), "0" (_o), "1" (0) \ : "memory"); #define cmpxchg_user(_p,_o,_n) \ ({ \ int _rc; \ switch ( sizeof(*(_p)) ) { \ case 1: \ __cmpxchg_user(_p,_o,_n,"b","b","q"); \ break; \ case 2: \ __cmpxchg_user(_p,_o,_n,"w","w","r"); \ break; \ case 4: \ __cmpxchg_user(_p,_o,_n,"l","","r"); \ break; \ case 8: \ __asm__ __volatile__ ( \ "1: " LOCK_PREFIX "cmpxchg8b %4\n" \ "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: movl $1,%1\n" \ " jmp 2b\n" \ ".previous\n" \ ".section __ex_table,\"a\"\n" \ " .align 4\n" \ " .long 1b,3b\n" \ ".previous" \ : "=A" (_o), "=r" (_rc) \ : "c" ((u32)((u64)(_n)>>32)), "b" ((u32)(_n)), \ "m" (*__xg((volatile void *)(_p))), "0" (_o), "1" (0) \ : "memory"); \ break; \ } \ _rc; \ }) _______________________________________________ Xen-ia64-devel mailing list Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-ia64-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |