Yes exactly, did that help? Gabe
On Mon, Mar 15, 2021 at 10:29 PM Liyichao <liyic...@huawei.com> wrote: > Hi Gabe: > > You mean that the code to be modified just like this? > > > > void > > PciVirtIO::kick() > > { > > DPRINTF(VIOIface, "kick(): Sending interrupt...\n"); > > EventQueue::ScopedMigration migrate(eventQueue()); > > interruptDeliveryPending = true; > > intrPost(); > > } > > > > > > void > > MmioVirtIO::kick() > > { > > DPRINTF(VIOIface, "kick(): Sending interrupt...\n"); > > EventQueue::ScopedMigration migrate(eventQueue()); > > setInterrupts(interruptStatus | INT_USED_RING); > > } > > > > *发件人:* Gabe Black [mailto:gabe.bl...@gmail.com] > *发送时间:* 2021年3月16日 8:44 > *收件人:* Liyichao <liyic...@huawei.com> > *抄送:* gem5 users mailing list <gem5-users@gem5.org> > *主题:* Re: [gem5-users] gem5 crash when mount by vio-9p protocol in KVM > mode with more than 1 core > > > > I think what you want to do is in the kick() functions in MmioVirtIO and > PciVirtIO, you want to declare a ScopedMigration at the start of the > function, and pass its constructor the result of the eventQueue() method. > The SimObject class inherits from EventManager and knows what event queue > it's supposed to use, and that's what eventQueue returns. When you declare > a ScopedMigration, it will handle the locking correctly and move over to > that queue, and when it goes out of scope (at the end of the function) it > will put everything back. > > > > Please give that a try, and if it works for you (I don't have a way to > test it myself) put up a review so we can get a fix checked in. > > > > Gabe > > > > On Mon, Mar 15, 2021 at 5:28 PM Liyichao <liyic...@huawei.com> wrote: > > Thanks for your explaination.In O3 type with multi-core 9P is ok. > > > > *发件人: *Gabe Black<gabe.bl...@gmail.com> > > *收件人: *gem5 users mailing list<gem5-users@gem5.org> > > *抄送: *Liyichao<liyic...@huawei.com> > > *主题: *Re: [gem5-users] gem5 crash when mount by vio-9p protocol in KVM > mode with more than 1 core > > *时间: *2021-03-16 07:24:15 > > > > I haven't looked at the code yet, but this is probably because the v9 > implementation is getting asynchronous input which might be received by one > thread, which then tries to schedule an event on an event queue associated > with another queue. Most of the time this is not an issue since gem5 is > usually single threaded, but when using multiple cores with KVM, each core > runs in its own thread. There's a way to add events to the event queue in > another thread safely (ScopedMigration) which I'm assuming the v9 code is > not using. > > > > Gabe > > > > On Sun, Mar 7, 2021 at 8:38 PM Liyichao via gem5-users < > gem5-users@gem5.org> wrote: > > Hi All: > > > > When I use –vio-9p with fs_bigLITTLE.py, 1 core the mount cmd was > ok, but more than 1 core, mount cmd will cause GEM5 crash > > > > 1core: > > Gem5 cmd: ./build/ARM/gem5.opt --debug-flags=Exec -d > /home/l00515693/m5out configs/example/arm/fs_bigLITTLE.py --cpu-type=kvm > --kernel=vmlinux --machine-type=VExpress_GEM5_V1 > --disk=expanded-aarch64-ubuntu-trusty-headless.img --caches > --big-cpu-clock=2.6GHz --little-cpu-clock=2.6GHz --big-cpus=1 > --little-cpus=0 --mem-size=4GB --param 'system.realview.gic.gem5_extensions > = True' --bootscript=./test.rcS --vio-9p > > Mount cmd in guest OS: mount -t 9p -o > trans=virtio,version=9p2000.L,aname=/home/l00515693/m5out/9p/share gem5 > /mnt/9p > > root@charlie:~# df -h > > Filesystem Size Used Avail Use% Mounted on > > /dev/root 9.9G 3.3G 6.2G 35% / > > devtmpfs 2.0G 4.0K 2.0G 1% /dev > > none 4.0K 0 4.0K 0% /sys/fs/cgroup > > none 396M 52K 396M 1% /run > > none 5.0M 0 5.0M 0% /run/lock > > none 2.0G 0 2.0G 0% /run/shm > > none 100M 0 100M 0% /run/user > > gem5 2.9T 1.8T 989G 65% /mnt/9p > > > > > > > > 2core: > > Gem5 cmd: ./build/ARM/gem5.opt --debug-flags=Exec -d > /home/l00515693/m5out configs/example/arm/fs_bigLITTLE.py --cpu-type=kvm > --kernel=vmlinux --machine-type=VExpress_GEM5_V1 > --disk=expanded-aarch64-ubuntu-trusty-headless.img --caches > --big-cpu-clock=2.6GHz --little-cpu-clock=2.6GHz --big-cpus=2 > --little-cpus=0 --mem-size=4GB --param 'system.realview.gic.gem5_extensions > = True' --bootscript=./test.rcS --vio-9p > > > > Mount cmd in guest OS: mount -t 9p -o > trans=virtio,version=9p2000.L,aname=/home/l00515693/m5out/9p/share gem5 > /mnt/9p > > > > GEM5 crash info: > > gem5.opt: build/ARM/sim/eventq_impl.hh:40: void > EventQueue::schedule(Event*, Tick, bool): Assertion `when >= getCurTick()' > failed. > > Program aborted at tick 476281849910020 > > --- BEGIN LIBC BACKTRACE --- > > ./build/ARM/gem5.opt(_Z15print_backtracev+0x40)[0xaaaadd24e418] > > ./build/ARM/gem5.opt(_Z12abortHandleri+0x5c)[0xaaaadd25efa4] > > linux-vdso.so.1(__kernel_rt_sigreturn+0x0)[0xffff9fea5688] > > /lib/aarch64-linux-gnu/libc.so.6(raise+0xb0)[0xffff9f6634f8] > > --- END LIBC BACKTRACE --- > > Aborted (core dumped) > > > > _______________________________________________ > gem5-users mailing list -- gem5-users@gem5.org > To unsubscribe send an email to gem5-users-le...@gem5.org > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s > >
_______________________________________________ gem5-users mailing list -- gem5-users@gem5.org To unsubscribe send an email to gem5-users-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s