Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F163947094
D58241.id182090.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D58241.id182090.diff
View Options
diff --git a/sys/dev/ena/ena.h b/sys/dev/ena/ena.h
--- a/sys/dev/ena/ena.h
+++ b/sys/dev/ena/ena.h
@@ -263,7 +263,7 @@
bus_dmamap_t dmamap;
/* Used to detect missing tx packets */
- struct bintime timestamp;
+ sbintime_t timestamp;
bool print_once;
#ifdef DEV_NETMAP
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -3213,7 +3213,7 @@
{
uint32_t missed_tx = 0, new_missed_tx = 0;
device_t pdev = adapter->pdev;
- struct bintime curtime, time;
+ sbintime_t curtime;
struct ena_tx_buffer *tx_buf;
int time_since_last_cleanup;
int missing_tx_comp_to;
@@ -3222,17 +3222,18 @@
enum ena_regs_reset_reason_types reset_reason = ENA_REGS_RESET_MISS_TX_CMPL;
bool cleanup_scheduled, cleanup_running;
- getbinuptime(&curtime);
+ curtime = getsbinuptime();
for (i = 0; i < tx_ring->ring_size; i++) {
+ sbintime_t ts;
+
tx_buf = &tx_ring->tx_buffer_info[i];
- if (bintime_isset(&tx_buf->timestamp) == 0)
+ ts = atomic_load_64(&tx_buf->timestamp);
+ if (ts == 0)
continue;
- time = curtime;
- bintime_sub(&time, &tx_buf->timestamp);
- time_offset = bttosbt(time);
+ time_offset = curtime - ts;
if (unlikely(!atomic_load_8(&tx_ring->first_interrupt) &&
time_offset > 2 * adapter->missing_tx_timeout)) {
diff --git a/sys/dev/ena/ena_datapath.c b/sys/dev/ena/ena_datapath.c
--- a/sys/dev/ena/ena_datapath.c
+++ b/sys/dev/ena/ena_datapath.c
@@ -274,7 +274,7 @@
mbuf = tx_info->mbuf;
tx_info->mbuf = NULL;
- bintime_clear(&tx_info->timestamp);
+ atomic_store_64(&tx_info->timestamp, 0);
bus_dmamap_sync(adapter->tx_buf_tag, tx_info->dmamap,
BUS_DMASYNC_POSTWRITE);
@@ -1055,7 +1055,7 @@
counter_exit();
tx_info->tx_descs = nb_hw_desc;
- getbinuptime(&tx_info->timestamp);
+ atomic_store_64(&tx_info->timestamp, getsbinuptime());
tx_info->print_once = true;
tx_ring->next_to_use = ENA_TX_RING_IDX_NEXT(next_to_use,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Jul 28, 9:37 AM (48 m, 22 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35625030
Default Alt Text
D58241.id182090.diff (1 KB)
Attached To
Mode
D58241: ena: Fix false 'missing TX completions' warnings due to timestamp race
Attached
Detach File
Event Timeline
Log In to Comment