Hello all,

I have been using gem5 for about 2 years now, and have run into a problem that 
I cannot seem to surmount, though I have located the root cause. I have been 
using workload automation to mount a local folder from host into my gem5 fs 
simulation, allowing me to modify and cross compile applications on the host 
and then run them easily in gem5. To do this, I followed the instructions on 
http://gem5.org/WA-gem5#Using_gem5_with_Workload_Automation, and run the command

mount -t 9p -n gem5 /mnt 
-oaname=/home/wsimon/temp,version=9p2000.L,uname=root,access=user

To mount 9p filesystem within gem5. This has worked very well up until recently 
updating the the newest version of gem5. Now, while mounting still works in the 
O3 CPU, I get a simulation timout in the Minor CPU:

Exiting @ tick 18446744073709551615 because simulate() limit reached
diod: caught SIGTERM: shutting down
info: Trying to kill diod with SIGKILL as SIGTERM failed

I tracked down the cause of this error to git commit 
59e3585a84ef172eba57c9936680c0248f9a97db<https://github.com/gem5/gem5/commit/59e3585a84ef172eba57c9936680c0248f9a97db#diff-e43d16de0f4ee528cd758d7ae8513ed8>,
 in which Prefetching for stores is added to the ARM ISA (I am using aarch64 
ISA), specifically the 4 lines in src/arch/arm/isa/insts/ldr64.isa.

    LoadImm64("prfm", "PRFM64_IMM", 8, flavor="mprefetch").emit()
    LoadReg64("prfm", "PRFM64_REG", 8, flavor="mprefetch").emit()
    LoadLit64("prfm", "PRFM64_LIT", 8, literal=True,
              flavor="mprefetch").emit()
    LoadImm64("prfum", "PRFUM64_IMM", 8, flavor="mprefetch").emit()

The "mprefetch" flavor modifies the memFlags in the following way (also in 
src/arch/arm/isa/insts/ldr64.isa):

            if self.flavor == "dprefetch":
                self.memFlags.append("Request::PREFETCH")
                self.instFlags = ['IsDataPrefetch']
            elif self.flavor == "iprefetch":
                self.memFlags.append("Request::PREFETCH")
                self.instFlags = ['IsInstPrefetch']
            elif self.flavor == "mprefetch":
                self.memFlags.append("((((dest>>3)&3)==2)? \
                     (Request::PF_EXCLUSIVE):(Request::PREFETCH))")
                self.instFlags = ['IsDataPrefetch']
            if self.micro:
                self.instFlags.append("IsMicroop")

If I modify the emit commands above to emit with the flavor "dprefetch", as was 
previously the case, I have no problems, so the timeout error must arise from a 
memory request being tagged as PF_EXCLUSIVE instead of PREFETCH.

If I understand correctly, the PF_EXCLUSIVE tag requests that a memory location 
be prefetched and marked as exclusive, to allow storing. I'm not sure why this 
would cause a hang in the code. Can anyone shed further light on the possible 
cause of this?

Sincerely,
William
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to