summaryrefslogtreecommitdiff
path: root/src/mem/ruby/system/DMASequencer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/ruby/system/DMASequencer.cc')
-rw-r--r--src/mem/ruby/system/DMASequencer.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/mem/ruby/system/DMASequencer.cc b/src/mem/ruby/system/DMASequencer.cc
index fbaf5f1d1..e8e279043 100644
--- a/src/mem/ruby/system/DMASequencer.cc
+++ b/src/mem/ruby/system/DMASequencer.cc
@@ -116,9 +116,13 @@ DMASequencer::issueNext()
assert(m_is_busy == true);
active_request.bytes_completed = active_request.bytes_issued;
if (active_request.len == active_request.bytes_completed) {
- DPRINTF(RubyDma, "DMA request completed\n");
- ruby_hit_callback(active_request.pkt);
+ //
+ // Must unset the busy flag before calling back the dma port because
+ // the callback may cause a previously nacked request to be reissued
+ //
+ DPRINTF(RubyDma, "DMA request completed\n");
m_is_busy = false;
+ ruby_hit_callback(active_request.pkt);
return;
}