Update virtio network driver
Jinhyun
jinhyun at konkuk.ac.kr
Fri Nov 11 04:29:44 UTC 2016
We use __sync_synchronize() to generate hardware memory barrier same as mb() of FreeBSD does.
And we know that RTEMS_COMPILER_MEMORY_BARRIER() generates compiler memory barrier not hardware memory barrier, doesn't it?
On PowerPC, it seems that RTEMS_COMPILER_MEMORY_BARRIER() is replaced by __asm__ volatile("":::"memory").
But mb() of FreeBSD is replaced by __asm__ volatile("sync":::"memory").
And __sync_synchronize() generates assembly code "sync".
So we use __sync_synchronize() to replace mb() of FreeBSD.
However the driver also works well when we use RTEMS_COMPILER_MEMORY_BARRIER() because the driver almost works well without any barrier, too.
-----Original Message-----
From: gedare at gwmail.gwu.edu [mailto:gedare at gwmail.gwu.edu] On Behalf Of Gedare Bloom
Sent: Friday, November 11, 2016 3:27 AM
To: Jinhyun <jinhyun at konkuk.ac.kr>
Cc: devel at rtems.org; jinh at konkuk.ac.kr
Subject: Re: Update virtio network driver
On Thu, Nov 10, 2016 at 4:42 AM, Jinhyun <jinhyun at konkuk.ac.kr> wrote:
> Hi, all!
>
> We removed our RTEMS-virtio driver's dependencies on architecture. We
> used built-in function of gcc, __sync_synchronize(). This function
> generates proper memory barrier for target architecture on compile
> time. In addition,
Would RTEMS_COMPILER_MEMORY_BARRIER() work for you?
> we replaced pcib_conf_read/write functions to pci_read/write_config
> functions. We added several lines of codes for exception handling
> suggested by Pavel Pisa. Thank you, Pavel Pisa. As we removed
> dependencies on CPU architectures, we moved the virtio source
> directory located at c/src/lib/libbsp/i386/pc386/ to c/src/lib/libbsp/shared.
>
> We plan to enhance the virtio driver for RTEMS, and we have several
> additional patches for it. To easily manage this project from our
> side, we created Github repository. You can see the latest version of
> our virtio driver in our Github:
> https://github.com/sslab-konkuk/RTEMS-virtio
>
> Recently, we succeeded to test the virtio with Motorola_powerpc BSP.
> For this, we made additional modifications. Motorola_powerpc BSP
> doesn't support functions such as rtems_insterrupt_handler_install, so
> we used functions such as BSP_install_rtems_irq_handler instead of
> those. Moreover, in order to make our virtio work on PowerPC, we added
> initialization codes to virtio_pci.c because qemu_fakerom, which is
> the PowerPC bios of Motorola_powerpc BSP, doesn't initialize the
> virtio back-end driver. But some runtime error is occurred on RTEMS
> master branch, so we will submit about it again soon.
>
> Best regards,
> Jin-Hyun.
>
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list