DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] vhost: make the page logging atomic
@ 2017-08-01  9:01 Tiwei Bie
  2017-08-01 12:05 ` Maxime Coquelin
  0 siblings, 1 reply; 3+ messages in thread
From: Tiwei Bie @ 2017-08-01  9:01 UTC (permalink / raw)
  To: dev; +Cc: yliu, maxime.coquelin, stable

Each dirty page logging operation should be atomic. But it's not
atomic in current implementation. So it's possible that some dirty
pages can't be logged successfully when different threads try to
log different pages into the same byte of the log buffer concurrently.
This patch fixes this issue.

Fixes: b171fad1ffa5 ("vhost: log used vring changes")
Cc: stable@dpdk.org

Reported-by: Xiao Wang <xiao.w.wang@intel.com>
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
---
 lib/librte_vhost/vhost.h | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/lib/librte_vhost/vhost.h b/lib/librte_vhost/vhost.h
index 0f294f3..6fe72ae 100644
--- a/lib/librte_vhost/vhost.h
+++ b/lib/librte_vhost/vhost.h
@@ -201,10 +201,19 @@ struct virtio_net {
 
 #define VHOST_LOG_PAGE	4096
 
+/*
+ * Atomically set a bit in memory.
+ */
+static __rte_always_inline void
+vhost_set_bit(unsigned int nr, volatile uint8_t *addr)
+{
+	__sync_fetch_and_or_8(addr, (1U << nr));
+}
+
 static __rte_always_inline void
 vhost_log_page(uint8_t *log_base, uint64_t page)
 {
-	log_base[page / 8] |= 1 << (page % 8);
+	vhost_set_bit(page % 8, &log_base[page / 8]);
 }
 
 static __rte_always_inline void
-- 
2.7.4

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: make the page logging atomic
  2017-08-01  9:01 [dpdk-dev] [PATCH] vhost: make the page logging atomic Tiwei Bie
@ 2017-08-01 12:05 ` Maxime Coquelin
  2017-08-03 20:10   ` Thomas Monjalon
  0 siblings, 1 reply; 3+ messages in thread
From: Maxime Coquelin @ 2017-08-01 12:05 UTC (permalink / raw)
  To: Tiwei Bie, dev; +Cc: yliu, stable



On 08/01/2017 11:01 AM, Tiwei Bie wrote:
> Each dirty page logging operation should be atomic. But it's not
> atomic in current implementation. So it's possible that some dirty
> pages can't be logged successfully when different threads try to
> log different pages into the same byte of the log buffer concurrently.
> This patch fixes this issue.
> 
> Fixes: b171fad1ffa5 ("vhost: log used vring changes")
> Cc:stable@dpdk.org
> 
> Reported-by: Xiao Wang<xiao.w.wang@intel.com>
> Signed-off-by: Tiwei Bie<tiwei.bie@intel.com>
> ---
>   lib/librte_vhost/vhost.h | 11 ++++++++++-
>   1 file changed, 10 insertions(+), 1 deletion(-)

Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Thanks,
Maxime

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [dpdk-dev] [PATCH] vhost: make the page logging atomic
  2017-08-01 12:05 ` Maxime Coquelin
@ 2017-08-03 20:10   ` Thomas Monjalon
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Monjalon @ 2017-08-03 20:10 UTC (permalink / raw)
  To: Tiwei Bie; +Cc: dev, Maxime Coquelin, yliu, stable

01/08/2017 14:05, Maxime Coquelin:
> On 08/01/2017 11:01 AM, Tiwei Bie wrote:
> > Each dirty page logging operation should be atomic. But it's not
> > atomic in current implementation. So it's possible that some dirty
> > pages can't be logged successfully when different threads try to
> > log different pages into the same byte of the log buffer concurrently.
> > This patch fixes this issue.
> > 
> > Fixes: b171fad1ffa5 ("vhost: log used vring changes")
> > Cc:stable@dpdk.org
> > 
> > Reported-by: Xiao Wang<xiao.w.wang@intel.com>
> > Signed-off-by: Tiwei Bie<tiwei.bie@intel.com>
> 
> Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>

Applied, thanks

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-08-03 20:10 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-01  9:01 [dpdk-dev] [PATCH] vhost: make the page logging atomic Tiwei Bie
2017-08-01 12:05 ` Maxime Coquelin
2017-08-03 20:10   ` Thomas Monjalon

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).