From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from wes1-so1.wedos.net (wes1-so1.wedos.net [46.28.106.15]) by dpdk.org (Postfix) with ESMTP id 79BA6559C for ; Mon, 14 Dec 2015 15:32:20 +0100 (CET) Received: from pcviktorin.fit.vutbr.cz (pcviktorin.fit.vutbr.cz [147.229.13.147]) by wes1-so1.wedos.net (Postfix) with ESMTPSA id 3pK4tX1Jfpz5DR; Mon, 14 Dec 2015 15:32:20 +0100 (CET) Date: Mon, 14 Dec 2015 15:31:36 +0100 From: Jan Viktorin To: Santosh Shukla Message-ID: <20151214153136.701b224c@pcviktorin.fit.vutbr.cz> In-Reply-To: <1450098032-21198-1-git-send-email-sshukla@mvista.com> References: <1450098032-21198-1-git-send-email-sshukla@mvista.com> Organization: RehiveTech MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: dev@dpdk.org Subject: Re: [dpdk-dev] [ [PATCH v2] 00/13] Add virtio support in arm/arm64 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Dec 2015 14:32:20 -0000 Hello, this patch set increases the number of warnings for the armv7 build. I believe that most of them are false-positives. virtio_ethdev.c:729, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] xstats[count].value = *(uint64_t *)(((char *)rxvq) + * Can you guarantee this is not an unaligned 64-bit access? virtio_ethdev.c:747, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] ditto... virtio_pci.c:52, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] *(uint32_t *)d = VIRTIO_READ_REG_4(hw, off); * I think, here we can live with unaligned_uint32_t, don't we? virtio_pci.c:55, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] similar... virtio_pci.c:75, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] similar... virtio_pci.c:78, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] similar... virtio_ring.h:144, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] vr->desc = (struct vring_desc *) p; * What can we do here? Should we annotate vring_desc to be aligned properly? virtio_ring.h:145, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] similar... virtio_rxtx.c:733, GNU Make + GNU C Compiler (gcc), Priority: Normal cast increases required alignment of target type [-Wcast-align] header = (struct virtio_net_hdr_mrg_rxbuf *)((char *)rxm->buf_addr + RTE_PKTMBUF_HEADROOM - hdr_size); * No idea how to solve this... Any other ideas are welcome. Regards Jan On Mon, 14 Dec 2015 18:30:19 +0530 Santosh Shukla wrote: > This patch set add basic infrastrucure to run virtio-net-pci pmd driver for > arm64/arm. Tested on ThunderX platfrom. Verified for existing dpdk(s) test > applications like: > - ovs-dpdk-vhost-user: across the VM's, for the use-cases like guest2guest and > Host2Guest > - testpmd application: Tested for max virtio-net-pci interface currently > supported in kernel i.e. 31 interface. > > Builds successfully for armv7/v8/thunderX and x86_64/i686 platforms. Made sure > that patch changes donot break for x86_64 case. Done similar tests for x86_64 > too. > > Patch History: > v2: > - Removed ifdef arm.. clutter from igb_uio / virtio_ethedev files > - Introduced rte_io.h header file in generic/ and arch specifics i.e.. for > armv7 --> rte_io_32.h, for armv8 --> rte_io_64.h. > - Removed RTE_ARCH_X86 ifdef clutter too and added rte_io.h header which nothing > but wraps sys/io.h for x86_64 and i686 > - Moved all the RTE_ARCH_ARM/64 dependancy for igb_uio case to separate header > file named igbuio_ioport_misc.h. Now igb_uio.c will call only three function > - igbuio_iomap > - igbuio_ioport_register > - igbuio_ioport_unregister > - Moved ARM/64 specific definition to include/exec-env/rte_virt_ioport.h header > - Included virtio_ioport.c/h; has all private and public api required to map > iopci bar for non-x86 arch. Tested on thunderX and x86_64 both. > Private api includes: > - virtio_map_ioport > - virtio_set_ioport_addr > Public api includes: > - virtio_ioport_init > - virtio_ioport_unmap > > - Last patch is the miscllanious format specifier fix identifid for 64bit case > during regression. > > > v1: > - First patch adds RTE_VIRTIO_INC_VECTOR config, much needed for archs like > arm/arm64 as they don't support vectored implementation, also wont able to > build. > - Second patch is in-general fix for i686. > - Third patch is to emulate x86-style of {in,out}[b,w,l] api support for armv7/v8. > As virtio-net-pci pmd driver uses those apis for port rd/wr {b,w,l} > - Fourth patch to enable VIRTIO_PMD feature in armv7/v8/thunderX config. > - Fifth patch to disable iopl syscall, As arm/arm64 linux kernel doesn't support > them. > - Sixth patch introduces ioport memdevice called /dev/igb_ioport by which virtio > pmd driver could able to rd/wr PCI_IOBAR. > {applicable for arm/arm64 only, tested for arm64 as of now} > > > Santosh Shukla (13): > virtio: Introduce config RTE_VIRTIO_INC_VECTOR > config: i686: set RTE_VIRTIO_INC_VECTOR=n > rte_io: armv7/v8: Introduce api to emulate x86-style of PCI/ISA > ioport access > virtio_pci: use rte_io.h for non-x86 arch > virtio: change io_base datatype from uint32_t to uint64_type > config: armv7/v8: Enable RTE_LIBRTE_VIRTIO_PMD > linuxapp: eal: arm: Always return 0 for rte_eal_iopl_init() > rte_io: x86: Remove sys/io.h ifdef x86 clutter > igb_uio: ioport: map iopci region for armv7/v8 > include/exec-env: ioport: add rte_virt_ioport header file > virtio_ioport: armv7/v8: mmap virtio iopci bar region > virtio_ethdev: use virtio_ioport api at device init/close > virtio_ethdev : fix format specifier error for 64bit addr case > > config/common_linuxapp | 1 + > config/defconfig_arm-armv7a-linuxapp-gcc | 6 +- > config/defconfig_arm64-armv8a-linuxapp-gcc | 6 +- > config/defconfig_i686-native-linuxapp-gcc | 1 + > config/defconfig_i686-native-linuxapp-icc | 1 + > drivers/net/virtio/Makefile | 3 +- > drivers/net/virtio/virtio_ethdev.c | 10 +- > drivers/net/virtio/virtio_ioport.c | 163 ++++++++++++++++++++ > drivers/net/virtio/virtio_ioport.h | 42 +++++ > drivers/net/virtio/virtio_pci.h | 6 +- > drivers/net/virtio/virtio_rxtx.c | 7 + > lib/librte_eal/common/Makefile | 1 + > lib/librte_eal/common/include/arch/arm/rte_io.h | 60 +++++++ > lib/librte_eal/common/include/arch/arm/rte_io_32.h | 155 +++++++++++++++++++ > lib/librte_eal/common/include/arch/arm/rte_io_64.h | 155 +++++++++++++++++++ > lib/librte_eal/common/include/arch/x86/rte_io.h | 42 +++++ > lib/librte_eal/common/include/generic/rte_io.h | 81 ++++++++++ > lib/librte_eal/linuxapp/eal/Makefile | 2 +- > lib/librte_eal/linuxapp/eal/eal.c | 7 +- > .../eal/include/exec-env/rte_virt_ioport.h | 81 ++++++++++ > lib/librte_eal/linuxapp/igb_uio/igb_uio.c | 8 +- > .../linuxapp/igb_uio/igbuio_ioport_misc.h | 133 ++++++++++++++++ > 22 files changed, 957 insertions(+), 14 deletions(-) > create mode 100644 drivers/net/virtio/virtio_ioport.c > create mode 100644 drivers/net/virtio/virtio_ioport.h > create mode 100644 lib/librte_eal/common/include/arch/arm/rte_io.h > create mode 100644 lib/librte_eal/common/include/arch/arm/rte_io_32.h > create mode 100644 lib/librte_eal/common/include/arch/arm/rte_io_64.h > create mode 100644 lib/librte_eal/common/include/arch/x86/rte_io.h > create mode 100644 lib/librte_eal/common/include/generic/rte_io.h > create mode 100644 lib/librte_eal/linuxapp/eal/include/exec-env/rte_virt_ioport.h > create mode 100644 lib/librte_eal/linuxapp/igb_uio/igbuio_ioport_misc.h > -- Jan Viktorin E-mail: Viktorin@RehiveTech.com System Architect Web: www.RehiveTech.com RehiveTech Brno, Czech Republic