I believe it really happened, 
and I fix this by replace call to 
map_Address_to_DMA()
with in_msg.OriginalRequestorMachId.
I also changed the OriginalRequestorMachId field to store DMA's machid instead 
of directory's. 
Some other modification on L2 have been made for DMA dirty-data operation, like 
add OriginalRequestorMachId to ResponseMsg and L2 TBE.

This work fine for my code, but I'm not sure about it.


> 在 2013年12月16日,7:24,"Jennifer Crabtree" <[email protected]> 写道:
> 
> Really?
> 
> 
> On Friday, December 6, 2013 6:36 PM, 马久跃 <[email protected]> wrote:
> Hi everyone, 
> 
> I'm working on attach a NIC (IGbE_e1000) to X86 full system, and make a dual 
> x86 system.
> After modify FSConfig.py, everything work fine in classic memory model.
> 
> But when I switch to ruby model(MESI_CMP_Directory), gem5 crashed and report 
> "Invalid transition, event: Data, state: READY" for dma_cntrl0, but my NIC is 
> attached to dma_cntrl1. dma_cntrl0 is for IDE controller.
> 
> after add --debug-flags=EthernetAll, DMA, the debug output is as following:
> 
> ---------------------------------------------------------------------------------------------------------------------------------
> 7589782415000: testsys.pc.eth0: IGbE: -------------- Cycle --------------
> 7589782415000: testsys.pc.eth0.RxDesc: Fetching descriptors head: 0 tail: 0 
> len: 256 cachePnt: 0 max_to_fetch: 0 descleft: 0
> 7589782415000: testsys.pc.eth0: RXS: No descriptors available in cache, 
> stopping ticking
> 7589782415000: testsys.pc.eth0: RXS: No descriptors available, fetching
> 7591043314500: testsys.pc.eth0: Wrote device register 0X2818 value 0XFE
> 7591043314500: testsys.pc.eth0: RXS: RDT Updated.
> 7591043314500: testsys.pc.eth0: RXS: RDT Fetching Descriptors!
> 7591043314500: testsys.pc.eth0.RxDesc: Fetching descriptors head: 0 tail: 254 
> len: 256 cachePnt: 0 max_to_fetch: 64 descleft: 254
> 7591043324500: testsys.pc.eth0.RxDesc: Fetching descriptors at 0x7f8db000 
> (0x7f8db000), size: 0x400
> 7591043324500: testsys.pc.eth0.dma: Starting DMA for addr: 0x7f8db000 size: 
> 1024 sched: 0
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db000 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db040 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db080 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db0c0 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db100 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db140 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db180 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db1c0 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db200 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db240 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db280 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db2c0 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db300 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db340 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db380 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: --Queuing DMA for addr: 0x7f8db3c0 size: 
> 64
> 7591043324500: testsys.pc.eth0.dma: Trying to send ReadReq addr 0x7f8db000
> 7591043324500: testsys.pc.eth0.dma: -- Done
> 7591043324500: testsys.pc.eth0.dma: TransmitList: 15, inRetry: 0
> 7591043326000: testsys.pc.eth0.dma: Trying to send ReadReq addr 0x7f8db040
> 7591043326000: testsys.pc.eth0.dma: -- Failed, waiting for retry
> 7591043326000: testsys.pc.eth0.dma: TransmitList: 15, inRetry: 1
> fatal: Invalid transition
> testsys.ruby.dma_cntrl0 time: 15182086689 addr: [0x7f8db000, line 0x7f8db000] 
> event: Data state: READY
>  @ cycle 7591043344500
> [doTransitionWorker:build/PARDX86/mem/protocol/DMA_Transitions.cc, line 103]
> Memory Usage: 5160656 KBytes
> ---------------------------------------------------------------------------------------------------------------------------------
> 
> It seems eth0 send this DMA request to directory, but directory return the 
> response to dma_cntrl0 (connected to IDE).
> 
> I check protocol file MESI_CMP_directory-dir.sm, in dr_sendDMAData action, it 
> use 
>  
>     out_msg.Destination.add(map_Address_to_DMA(address));
> 
> set the destination, but map_Address_to_DMA() is just a static function which 
> always return 0 in MachineType.cc
> 
> 186 MachineID
> 187 map_Address_to_DMA(const Address &addr)
> 188 {
> 189       MachineID dma = {MachineType_DMA, 0};
> 190       return dma;
> 191 }
> 
> Is this a Ruby's BUG, or I miss something?
> 
> Thanks.
> 
> Best Regards, Jiuyue                         
> _______________________________________________
> gem5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
> 
> _______________________________________________
> gem5-users mailing list
> [email protected]
> http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to