On Sat, 2008-06-28 at 06:43 +0300, Avi Kivity wrote: > Anthony Liguori wrote: > > Hypercalls can modify arbitrary regions of memory. Make sure to indicate > > this > > in the clobber list. This fixes a hang when using KVM_GUEST kernel built > > with > > GCC 4.3.0. > > > > This was originally spotted and analyzed by Marcelo. > > > > Since v1, I've also added a "m" constraint for the inputs to the hypercall. > > This was suggested by Christian since it's not entirely clear whether a > > memory > > clobber will force the data to be in memory before the asm statement. In > > the > > very least, it helps to be more conservative. > > > > Signed-off-by: Anthony Liguori <[EMAIL PROTECTED]> > > > > @@ -80,7 +81,9 @@ static inline long kvm_hypercall1(unsigned int nr, > > unsigned long p1) > > long ret; > > asm volatile(KVM_HYPERCALL > > : "=a"(ret) > > - : "a"(nr), "b"(p1)); > > + : "a"(nr), "b"(p1), > > + "m"(*(char *)p1) > > + : "memory"); > > return ret; > > } > > > > > > Those are physical addresses, not virtual, and on i386 the addresses are > split across multiple registers. > > However a small test program shows that the memory clobber does work > with gcc 4.3, so I'll pick the earlier patch.
What about gcc 4.4? 4.5? 5.0? -- Hollis Blanchard IBM Linux Technology Center -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html