Patrick Sheridan has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/46339 )
Change subject: mem-dram: Kick refresh on rank after each response
......................................................................
mem-dram: Kick refresh on rank after each response
Currently the MemCtrl::processRespondEvent calls dram->checkRefreshState
only if respQueue is empty.
This causes an issue in a multi-rank DRAM device if a rank is waiting for a
refresh but the mem_pkt for that rank
is not the last one in the respQueue. This change will call
checkRefreshState for every mem_pkt, and adds an
additional check in checkRefreshState so that if oustandingEvents > 1, it
does not start the refresh.
Jira Issue: https://gem5.atlassian.net/browse/GEM5-1005
Change-Id: Id6160ec4e9429b4317b26d81283ec5d0688583a7
---
M src/mem/mem_ctrl.cc
M src/mem/mem_interface.cc
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/mem/mem_ctrl.cc b/src/mem/mem_ctrl.cc
index f663fa7..1e139de 100644
--- a/src/mem/mem_ctrl.cc
+++ b/src/mem/mem_ctrl.cc
@@ -535,12 +535,14 @@
DPRINTF(Drain, "Controller done draining\n");
signalDrainDone();
- } else if (mem_pkt->isDram()) {
+ }
+ }
+
+ if (mem_pkt->isDram() && drainState() != DrainState::Draining) {
// check the refresh state and kick the refresh event loop
// into action again if banks already closed and just waiting
// for read to complete
dram->checkRefreshState(mem_pkt->rank);
- }
}
// We have made a location in the queue available at this point,
diff --git a/src/mem/mem_interface.cc b/src/mem/mem_interface.cc
index 2a2ae18..7073069 100644
--- a/src/mem/mem_interface.cc
+++ b/src/mem/mem_interface.cc
@@ -989,7 +989,8 @@
Rank& rank_ref = *ranks[rank];
if ((rank_ref.refreshState == REF_PRE) &&
- !rank_ref.prechargeEvent.scheduled()) {
+ !rank_ref.prechargeEvent.scheduled() &&
+ rank_ref.outstandingEvents == 1) {
// kick the refresh event loop into action again if banks already
// closed and just waiting for read to complete
schedule(rank_ref.refreshEvent, curTick());
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/46339
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Id6160ec4e9429b4317b26d81283ec5d0688583a7
Gerrit-Change-Number: 46339
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Sheridan <sher...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s