mem: Add privilege info to request class
authorPrakash Ramrakhyani <prakash.ramrakhyani@arm.com>
Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)
committerPrakash Ramrakhyani <prakash.ramrakhyani@arm.com>
Thu, 31 Oct 2013 18:41:13 +0000 (13:41 -0500)
This patch adds a flag in the request class that indicates if the request
was made in privileged mode.

src/arch/arm/tlb.cc
src/mem/request.hh

index 7a79725e17b0f5b3371c13e7ec96158c17ac6b47..107901f99801050a58540f94771f6119682b1482 100644 (file)
@@ -474,6 +474,8 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode,
     bool is_priv = isPriv && !(flags & UserMode);
 
     req->setAsid(contextId.asid);
+    if (is_priv)
+        req->setFlags(Request::PRIVILEGED);
 
     DPRINTF(TLBVerbose, "CPSR is priv:%d UserMode:%d\n",
             isPriv, flags & UserMode);
index f37e34dd45c6bc12f78947df4b316d04b070765b..a0ff50910663b92a870e5190bde431382c904bd4 100644 (file)
@@ -111,6 +111,8 @@ class Request
     static const FlagsType MMAPPED_IPR                  = 0x00002000;
     /** This request is a clear exclusive. */
     static const FlagsType CLEAR_LL                    = 0x00004000;
+    /** This request is made in privileged mode. */
+    static const FlagsType PRIVILEGED                   = 0x00008000;
 
     /** The request should not cause a memory access. */
     static const FlagsType NO_ACCESS                   = 0x00080000;
@@ -539,6 +541,7 @@ class Request
     bool isInstFetch() const { return _flags.isSet(INST_FETCH); }
     bool isPrefetch() const { return _flags.isSet(PREFETCH); }
     bool isLLSC() const { return _flags.isSet(LLSC); }
+    bool isPriv() const { return _flags.isSet(PRIVILEGED); }
     bool isLocked() const { return _flags.isSet(LOCKED); }
     bool isSwap() const { return _flags.isSet(MEM_SWAP|MEM_SWAP_COND); }
     bool isCondSwap() const { return _flags.isSet(MEM_SWAP_COND); }