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

Reply via email to