|
Pablo Greco |
12bf56 |
From 5d658937ce874422c66ac4c7d9723df8bb69ecd7 Mon Sep 17 00:00:00 2001
|
|
Pablo Greco |
12bf56 |
From: Nathan Hjelm <hjelmn@me.com>
|
|
Pablo Greco |
12bf56 |
Date: Fri, 5 Oct 2018 16:30:06 -0600
|
|
Pablo Greco |
12bf56 |
Subject: [PATCH 40/52] btl/vader: fix race condition in writing header
|
|
Pablo Greco |
12bf56 |
|
|
Pablo Greco |
12bf56 |
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
|
|
Pablo Greco |
12bf56 |
(cherry picked from commit 8291f6722d890efd15333bf7b26f0d07952fa41e)
|
|
Pablo Greco |
12bf56 |
Signed-off-by: Nathan Hjelm <hjelmn@me.com>
|
|
Pablo Greco |
12bf56 |
---
|
|
Pablo Greco |
12bf56 |
opal/mca/btl/vader/btl_vader_fbox.h | 19 ++++++++++++-------
|
|
Pablo Greco |
12bf56 |
1 file changed, 12 insertions(+), 7 deletions(-)
|
|
Pablo Greco |
12bf56 |
|
|
Pablo Greco |
12bf56 |
diff --git a/opal/mca/btl/vader/btl_vader_fbox.h b/opal/mca/btl/vader/btl_vader_fbox.h
|
|
Pablo Greco |
12bf56 |
index 6df9a2d..4ebfde8 100644
|
|
Pablo Greco |
12bf56 |
--- a/opal/mca/btl/vader/btl_vader_fbox.h
|
|
Pablo Greco |
12bf56 |
+++ b/opal/mca/btl/vader/btl_vader_fbox.h
|
|
Pablo Greco |
12bf56 |
@@ -29,6 +29,10 @@ typedef union mca_btl_vader_fbox_hdr_t {
|
|
Pablo Greco |
12bf56 |
/** sequence number */
|
|
Pablo Greco |
12bf56 |
uint16_t seq;
|
|
Pablo Greco |
12bf56 |
} data;
|
|
Pablo Greco |
12bf56 |
+ struct {
|
|
Pablo Greco |
12bf56 |
+ uint32_t value0;
|
|
Pablo Greco |
12bf56 |
+ uint32_t value1;
|
|
Pablo Greco |
12bf56 |
+ } data_i32;
|
|
Pablo Greco |
12bf56 |
uint64_t ival;
|
|
Pablo Greco |
12bf56 |
} mca_btl_vader_fbox_hdr_t;
|
|
Pablo Greco |
12bf56 |
|
|
Pablo Greco |
12bf56 |
@@ -50,19 +54,20 @@ void mca_btl_vader_poll_handle_frag (mca_btl_vader_hdr_t *hdr, mca_btl_base_endp
|
|
Pablo Greco |
12bf56 |
static inline void mca_btl_vader_fbox_set_header (mca_btl_vader_fbox_hdr_t *hdr, uint16_t tag,
|
|
Pablo Greco |
12bf56 |
uint16_t seq, uint32_t size)
|
|
Pablo Greco |
12bf56 |
{
|
|
Pablo Greco |
12bf56 |
- mca_btl_vader_fbox_hdr_t tmp = {.data = {.tag = 0, .seq = seq, .size = size}};
|
|
Pablo Greco |
12bf56 |
- hdr->ival = tmp.ival;
|
|
Pablo Greco |
12bf56 |
+ mca_btl_vader_fbox_hdr_t tmp = {.data = {.tag = tag, .seq = seq, .size = size}};
|
|
Pablo Greco |
12bf56 |
+ /* clear out existing tag/seq */
|
|
Pablo Greco |
12bf56 |
+ hdr->data_i32.value1 = 0;
|
|
Pablo Greco |
12bf56 |
+ opal_atomic_wmb ();
|
|
Pablo Greco |
12bf56 |
+ hdr->data_i32.value0 = size;
|
|
Pablo Greco |
12bf56 |
opal_atomic_wmb ();
|
|
Pablo Greco |
12bf56 |
- hdr->data.tag = tag;
|
|
Pablo Greco |
12bf56 |
+ hdr->data_i32.value1 = tmp.data_i32.value1;
|
|
Pablo Greco |
12bf56 |
}
|
|
Pablo Greco |
12bf56 |
|
|
Pablo Greco |
12bf56 |
static inline mca_btl_vader_fbox_hdr_t mca_btl_vader_fbox_read_header (mca_btl_vader_fbox_hdr_t *hdr)
|
|
Pablo Greco |
12bf56 |
{
|
|
Pablo Greco |
12bf56 |
- mca_btl_vader_fbox_hdr_t tmp;
|
|
Pablo Greco |
12bf56 |
- uint16_t tag = hdr->data.tag;
|
|
Pablo Greco |
12bf56 |
+ mca_btl_vader_fbox_hdr_t tmp = {.data_i32 = {.value1 = hdr->data_i32.value1}};;
|
|
Pablo Greco |
12bf56 |
opal_atomic_rmb ();
|
|
Pablo Greco |
12bf56 |
- tmp.ival = hdr->ival;
|
|
Pablo Greco |
12bf56 |
- tmp.data.tag = tag;
|
|
Pablo Greco |
12bf56 |
+ tmp.data_i32.value0 = hdr->data_i32.value0;
|
|
Pablo Greco |
12bf56 |
return tmp;
|
|
Pablo Greco |
12bf56 |
}
|
|
Pablo Greco |
12bf56 |
|
|
Pablo Greco |
12bf56 |
--
|
|
Pablo Greco |
12bf56 |
1.8.3.1
|
|
Pablo Greco |
12bf56 |
|