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

Re: [XenPPC] [RFC] fix stupid grant table flags




On Jun 22, 2006, at 5:27 PM, Hollis Blanchard wrote:

On Wed, 2006-06-21 at 13:49 -0500, Hollis Blanchard wrote:
diff -r 6f3d44537b76 include/asm-powerpc/xen/asm/synch_bitops.h
--- a/include/asm-powerpc/xen/asm/synch_bitops.h Fri Jun 16 16:07:38 2006 -0500 +++ b/include/asm-powerpc/xen/asm/synch_bitops.h Wed Jun 21 13:42:56 2006 -0500
@@ -6,6 +6,8 @@

 #ifdef CONFIG_SMP
 #include <asm/bitops.h>
+
+#define gnttab_cmpxchg_flags(ptr,o,n) synch_cmpxchg((int *) (ptr),o,n)

 #define synch_change_bit(a,b) change_bit(a,b)
 #define synch_clear_bit(a,b) clear_bit(a,b)

Of course, this won't work. This should be better:

static inline __u16 gnttab_cmpxchg_flags(__u16 *ptr, __u16 o, __u16 n)
{
        unsigned long *laddr;

cmpxchg will actually allow a u32 so there is no need to take it to a ulong, less bits to mess with and we expect the other short (the domid) to be relatively static, if fact xen uses cmpxch on both fields simultaneously.

        old = ((unsigned long)o << shift) | (*laddr & ((1UL<<shift)-1));
        new = ((unsigned long)n << shift) | (*laddr & ((1UL<<shift)-1));
Good Catch!
It might be prudent to deref laddr only once and make it volatile.

BTW: I'm not sure if you did, but just in case, this endian issue will need addressing (cscope): common/grant_table.c gnttab_prepare_for_transfer 567 scombo = ((u32)sdom << 16) | (u32)sflags;

I plan on getting it eventually, I mention it so it does not get dropped.

-JX

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


 


Rackspace

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