Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ycai
simbricks
Commits
73e902b5
Commit
73e902b5
authored
Sep 14, 2020
by
Antoine Kaufmann
Browse files
i40e: fix descriptor queue hangs (hopefully)
parent
be75ba68
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
14 additions
and
6 deletions
+14
-6
i40e_bm/i40e_bm.h
i40e_bm/i40e_bm.h
+1
-0
i40e_bm/i40e_lan.cc
i40e_bm/i40e_lan.cc
+1
-0
i40e_bm/i40e_queues.cc
i40e_bm/i40e_queues.cc
+12
-6
No files found.
i40e_bm/i40e_bm.h
View file @
73e902b5
...
...
@@ -177,6 +177,7 @@ class queue_base {
void
trigger_fetch
();
void
trigger_process
();
void
trigger_writeback
();
void
trigger
();
// returns how many descriptors the queue can fetch max during the next
// fetch: default UINT32_MAX, but can be overriden by child classes
...
...
i40e_bm/i40e_lan.cc
View file @
73e902b5
...
...
@@ -524,5 +524,6 @@ void lan_queue_tx::dma_hwb::done()
queue
.
log
<<
" tx head written back"
<<
logger
::
endl
;
#endif
queue
.
writeback_done
(
pos
,
cnt
);
queue
.
trigger
();
delete
this
;
}
i40e_bm/i40e_queues.cc
View file @
73e902b5
...
...
@@ -138,6 +138,13 @@ void queue_base::trigger_writeback()
do_writeback
(
active_first_idx
,
active_first_pos
,
cnt
);
}
void
queue_base
::
trigger
()
{
trigger_fetch
();
trigger_process
();
trigger_writeback
();
}
void
queue_base
::
reset
()
{
#ifdef DEBUG_QUEUES
...
...
@@ -159,7 +166,7 @@ void queue_base::reg_updated()
if
(
!
enabled
)
return
;
trigger
_fetch
();
trigger
();
}
bool
queue_base
::
is_enabled
()
...
...
@@ -243,9 +250,6 @@ void queue_base::writeback_done(uint32_t first_pos, uint32_t cnt)
reg_head
=
active_first_idx
;
interrupt
();
trigger_fetch
();
trigger_writeback
();
}
queue_base
::
desc_ctx
::
desc_ctx
(
queue_base
&
queue_
)
...
...
@@ -274,7 +278,6 @@ void queue_base::desc_ctx::prepared()
#endif
assert
(
state
==
DESC_PREPARING
);
state
=
DESC_PREPARED
;
queue
.
trigger_process
();
}
void
queue_base
::
desc_ctx
::
processed
()
...
...
@@ -284,7 +287,6 @@ void queue_base::desc_ctx::processed()
#endif
assert
(
state
==
DESC_PROCESSING
);
state
=
DESC_PROCESSED
;
queue
.
trigger_writeback
();
}
void
queue_base
::
desc_ctx
::
data_fetch
(
uint64_t
addr
,
size_t
data_len
)
...
...
@@ -367,6 +369,7 @@ void queue_base::dma_fetch::done()
ctx
.
state
=
desc_ctx
::
DESC_PREPARING
;
ctx
.
prepare
();
}
queue
.
trigger
();
delete
this
;
}
...
...
@@ -385,6 +388,7 @@ queue_base::dma_data_fetch::~dma_data_fetch()
void
queue_base
::
dma_data_fetch
::
done
()
{
ctx
.
data_fetched
(
dma_addr
,
len
);
ctx
.
queue
.
trigger
();
delete
this
;
}
...
...
@@ -403,6 +407,7 @@ queue_base::dma_wb::~dma_wb()
void
queue_base
::
dma_wb
::
done
()
{
queue
.
writeback_done
(
pos
,
len
/
queue
.
desc_len
);
queue
.
trigger
();
delete
this
;
}
...
...
@@ -422,5 +427,6 @@ queue_base::dma_data_wb::~dma_data_wb()
void
queue_base
::
dma_data_wb
::
done
()
{
ctx
.
data_written
(
dma_addr
,
len
);
ctx
.
queue
.
trigger
();
delete
this
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment