From f54020eb8155371725ab75b0fc5c419287eca084 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Mon, 4 Jun 2018 09:40:19 +0100 Subject: misc: Using smart pointers for memory Requests This patch is changing the underlying type for RequestPtr from Request* to shared_ptr. Having memory requests being managed by smart pointers will simplify the code; it will also prevent memory leakage and dangling pointers. Change-Id: I7749af38a11ac8eb4d53d8df1252951e0890fde3 Signed-off-by: Giacomo Travaglini Reviewed-by: Andreas Sandberg Reviewed-on: https://gem5-review.googlesource.com/10996 Reviewed-by: Nikos Nikoleris Maintainer: Nikos Nikoleris --- src/arch/arm/tlb.hh | 51 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 21 deletions(-) (limited to 'src/arch/arm/tlb.hh') diff --git a/src/arch/arm/tlb.hh b/src/arch/arm/tlb.hh index b8ea99054..336b31b78 100644 --- a/src/arch/arm/tlb.hh +++ b/src/arch/arm/tlb.hh @@ -77,7 +77,7 @@ class TlbTestInterface * @param mode Access type * @param domain Domain type */ - virtual Fault translationCheck(RequestPtr req, bool is_priv, + virtual Fault translationCheck(const RequestPtr &req, bool is_priv, BaseTLB::Mode mode, TlbEntry::DomainType domain) = 0; @@ -227,16 +227,18 @@ class TLB : public BaseTLB void insert(Addr vaddr, TlbEntry &pte); - Fault getTE(TlbEntry **te, RequestPtr req, ThreadContext *tc, Mode mode, + Fault getTE(TlbEntry **te, const RequestPtr &req, + ThreadContext *tc, Mode mode, Translation *translation, bool timing, bool functional, bool is_secure, ArmTranslationType tranType); - Fault getResultTe(TlbEntry **te, RequestPtr req, ThreadContext *tc, - Mode mode, Translation *translation, bool timing, + Fault getResultTe(TlbEntry **te, const RequestPtr &req, + ThreadContext *tc, Mode mode, + Translation *translation, bool timing, bool functional, TlbEntry *mergeTe); - Fault checkPermissions(TlbEntry *te, RequestPtr req, Mode mode); - Fault checkPermissions64(TlbEntry *te, RequestPtr req, Mode mode, + Fault checkPermissions(TlbEntry *te, const RequestPtr &req, Mode mode); + Fault checkPermissions64(TlbEntry *te, const RequestPtr &req, Mode mode, ThreadContext *tc); @@ -292,9 +294,13 @@ class TLB : public BaseTLB */ void flushIpaVmid(Addr ipa, bool secure_lookup, bool hyp, uint8_t target_el); - Fault trickBoxCheck(RequestPtr req, Mode mode, TlbEntry::DomainType domain); - Fault walkTrickBoxCheck(Addr pa, bool is_secure, Addr va, Addr sz, bool is_exec, - bool is_write, TlbEntry::DomainType domain, LookupLevel lookup_level); + Fault trickBoxCheck(const RequestPtr &req, Mode mode, + TlbEntry::DomainType domain); + + Fault walkTrickBoxCheck(Addr pa, bool is_secure, Addr va, Addr sz, + bool is_exec, bool is_write, + TlbEntry::DomainType domain, + LookupLevel lookup_level); void printTlb() const; @@ -318,10 +324,11 @@ class TLB : public BaseTLB * Do a functional lookup on the TLB (for checker cpu) that * behaves like a normal lookup without modifying any page table state. */ - Fault translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode, - ArmTranslationType tranType); + Fault translateFunctional(const RequestPtr &req, ThreadContext *tc, + Mode mode, ArmTranslationType tranType); Fault - translateFunctional(RequestPtr req, ThreadContext *tc, Mode mode) override + translateFunctional(const RequestPtr &req, + ThreadContext *tc, Mode mode) override { return translateFunctional(req, tc, mode, NormalTran); } @@ -340,33 +347,35 @@ class TLB : public BaseTLB return _attr; } - Fault translateFs(RequestPtr req, ThreadContext *tc, Mode mode, + Fault translateFs(const RequestPtr &req, ThreadContext *tc, Mode mode, Translation *translation, bool &delay, bool timing, ArmTranslationType tranType, bool functional = false); - Fault translateSe(RequestPtr req, ThreadContext *tc, Mode mode, + Fault translateSe(const RequestPtr &req, ThreadContext *tc, Mode mode, Translation *translation, bool &delay, bool timing); - Fault translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode, + Fault translateAtomic(const RequestPtr &req, ThreadContext *tc, Mode mode, ArmTranslationType tranType); Fault - translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode) override + translateAtomic(const RequestPtr &req, + ThreadContext *tc, Mode mode) override { return translateAtomic(req, tc, mode, NormalTran); } void translateTiming( - RequestPtr req, ThreadContext *tc, + const RequestPtr &req, ThreadContext *tc, Translation *translation, Mode mode, ArmTranslationType tranType); void - translateTiming(RequestPtr req, ThreadContext *tc, + translateTiming(const RequestPtr &req, ThreadContext *tc, Translation *translation, Mode mode) override { translateTiming(req, tc, translation, mode, NormalTran); } - Fault translateComplete(RequestPtr req, ThreadContext *tc, + Fault translateComplete(const RequestPtr &req, ThreadContext *tc, Translation *translation, Mode mode, ArmTranslationType tranType, bool callFromS2); Fault finalizePhysical( - RequestPtr req, ThreadContext *tc, Mode mode) const override; + const RequestPtr &req, + ThreadContext *tc, Mode mode) const override; void drainResume() override; @@ -446,7 +455,7 @@ private: bool checkELMatch(uint8_t target_el, uint8_t tentry_el, bool ignore_el); public: /* Testing */ - Fault testTranslation(RequestPtr req, Mode mode, + Fault testTranslation(const RequestPtr &req, Mode mode, TlbEntry::DomainType domain); Fault testWalk(Addr pa, Addr size, Addr va, bool is_secure, Mode mode, TlbEntry::DomainType domain, -- cgit v1.2.3