diff options
author | Brad Beckmann <Brad.Beckmann@amd.com> | 2011-03-19 14:17:48 -0700 |
---|---|---|
committer | Brad Beckmann <Brad.Beckmann@amd.com> | 2011-03-19 14:17:48 -0700 |
commit | 541fa1091a42b5148bc98d25ca50f9206226e025 (patch) | |
tree | 7849da55add21f381d5d7f20303f705aa5eaac44 /src/mem/ruby/system/DMASequencer.cc | |
parent | d1cecc22417abfa05c77bc5945cf52cb46352fdd (diff) | |
download | gem5-541fa1091a42b5148bc98d25ca50f9206226e025.tar.xz |
Ruby: dma retry fix
This patch fixes the problem where Ruby would fail to call sendRetry on ports
after it nacked the port. This patch is particularly helpful for bursty dma
requests which often include several packets.
Diffstat (limited to 'src/mem/ruby/system/DMASequencer.cc')
-rw-r--r-- | src/mem/ruby/system/DMASequencer.cc | 8 |
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; } |