Tiago Mück has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/18792

Change subject: mem: Add invalid context id check on LLSC checks
......................................................................

mem: Add invalid context id check on LLSC checks

If the request's address is in the LLSC list, its context Id was being
fetched unconditionally, which could cause the assert at
Request::contextId() to fail.

Change-Id: Iae9791f81c8fe9a7fcd842cd8ab7db18f34f2808
Signed-off-by: Tiago Muck <[email protected]>
---
M src/mem/abstract_mem.cc
1 file changed, 6 insertions(+), 2 deletions(-)



diff --git a/src/mem/abstract_mem.cc b/src/mem/abstract_mem.cc
index a998530..ce40dca 100644
--- a/src/mem/abstract_mem.cc
+++ b/src/mem/abstract_mem.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2012,2017-2018 ARM Limited
+ * Copyright (c) 2010-2012,2017-2019 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -258,6 +258,7 @@

     if (isLLSC) {
         while (i != lockedAddrList.end()) {
+            assert(req->hasContextId());
             if (i->addr == paddr && i->matchesContext(req)) {
// it's a store conditional, and as far as the memory system can
                 // tell, the requesting context's lock is still valid.
@@ -284,7 +285,10 @@
                 DPRINTF(LLSC, "Erasing lock record: context %d addr %#x\n",
                         i->contextId, paddr);
                 ContextID owner_cid = i->contextId;
-                ContextID requester_cid = pkt->req->contextId();
+                assert(owner_cid != InvalidContextID);
+                ContextID requester_cid = pkt->req->hasContextId()
+                                           ? pkt->req->contextId()
+                                           : InvalidContextID;
                 if (owner_cid != requester_cid) {
ThreadContext* ctx = system()->getThreadContext(owner_cid);
                     TheISA::globalClearExclusive(ctx);

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/18792
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Iae9791f81c8fe9a7fcd842cd8ab7db18f34f2808
Gerrit-Change-Number: 18792
Gerrit-PatchSet: 1
Gerrit-Owner: Tiago Mück <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to