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
