Michael S. Tsirkin
2018-Jan-25 23:36 UTC
[PATCH net-next 12/12] tools/virtio: fix smp_mb on x86
Offset 128 overlaps the last word of the redzone.
Use 132 which is always beyond that.
Signed-off-by: Michael S. Tsirkin <mst at redhat.com>
---
tools/virtio/ringtest/main.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/virtio/ringtest/main.h b/tools/virtio/ringtest/main.h
index 593a328..301d59b 100644
--- a/tools/virtio/ringtest/main.h
+++ b/tools/virtio/ringtest/main.h
@@ -111,7 +111,7 @@ static inline void busy_wait(void)
}
#if defined(__x86_64__) || defined(__i386__)
-#define smp_mb() asm volatile("lock; addl $0,-128(%%rsp)" :::
"memory", "cc")
+#define smp_mb() asm volatile("lock; addl $0,-132(%%rsp)" :::
"memory", "cc")
#else
/*
* Not using __ATOMIC_SEQ_CST since gcc docs say they are only synchronized
--
MST
On 2018?01?26? 07:36, Michael S. Tsirkin wrote:> Offset 128 overlaps the last word of the redzone. > Use 132 which is always beyond that. > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com> > --- > tools/virtio/ringtest/main.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/virtio/ringtest/main.h b/tools/virtio/ringtest/main.h > index 593a328..301d59b 100644 > --- a/tools/virtio/ringtest/main.h > +++ b/tools/virtio/ringtest/main.h > @@ -111,7 +111,7 @@ static inline void busy_wait(void) > } > > #if defined(__x86_64__) || defined(__i386__) > -#define smp_mb() asm volatile("lock; addl $0,-128(%%rsp)" ::: "memory", "cc")Just wonder did "rsp" work for __i386__ ? Thanks> +#define smp_mb() asm volatile("lock; addl $0,-132(%%rsp)" ::: "memory", "cc") > #else > /* > * Not using __ATOMIC_SEQ_CST since gcc docs say they are only synchronized
Michael S. Tsirkin
2018-Jan-26 13:45 UTC
[PATCH net-next 12/12] tools/virtio: fix smp_mb on x86
On Fri, Jan 26, 2018 at 11:56:14AM +0800, Jason Wang wrote:> > > On 2018?01?26? 07:36, Michael S. Tsirkin wrote: > > Offset 128 overlaps the last word of the redzone. > > Use 132 which is always beyond that. > > > > Signed-off-by: Michael S. Tsirkin <mst at redhat.com> > > --- > > tools/virtio/ringtest/main.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/tools/virtio/ringtest/main.h b/tools/virtio/ringtest/main.h > > index 593a328..301d59b 100644 > > --- a/tools/virtio/ringtest/main.h > > +++ b/tools/virtio/ringtest/main.h > > @@ -111,7 +111,7 @@ static inline void busy_wait(void) > > } > > #if defined(__x86_64__) || defined(__i386__) > > -#define smp_mb() asm volatile("lock; addl $0,-128(%%rsp)" ::: "memory", "cc") > > Just wonder did "rsp" work for __i386__ ? > > ThanksOh you are right of course. Probably no one ever run this one on i386 :) I'll add a patch on top as this is not a new bug.> > +#define smp_mb() asm volatile("lock; addl $0,-132(%%rsp)" ::: "memory", "cc") > > #else > > /* > > * Not using __ATOMIC_SEQ_CST since gcc docs say they are only synchronized