> On 25 May 2016, at 11:04 AM, Jason Wang <jasow...@redhat.com> wrote: > > > > On 2016年05月24日 21:41, Peter Maydell wrote: >> On 24 May 2016 at 08:49, Jason Wang <jasow...@redhat.com> wrote: >>> The following changes since commit 3a2da52a99582ac2c0e29e548bb1fc28e2cdb84a: >>> >>> net/tap: Allocating Large sized arrays to heap (2016-05-24 15:30:41 +0800) >>> >>> are available in the git repository at: >>> >>> https://github.com/jasowang/qemu.git tags/net-pull-request >>> >>> for you to fetch changes up to f99d30aaf53e5b501dd3405007232db963ba65c6: >>> >>> net/net: Add SocketReadState for reuse codes (2016-05-24 15:30:42 +0800) >>> >>> ---------------------------------------------------------------- >>> >>> Main changes: >>> - e1000e emulation >>> - convet vmxnet3 to use DMA api >>> Changes from V1: >>> - fix 32bit build >> Hi; I'm afraid this doesn't build on clang, which dislikes duplicate >> typedefs: >> >> In file included from >> /home/petmay01/linaro/qemu-for-merges/hw/net/e1000e.c:47: >> /home/petmay01/linaro/qemu-for-merges/hw/net/e1000e_core.h:110:3: >> error: redefinition of typedef 'E1000ECore' is a C11 feature >> [-Werror,-Wtypedef-redefinition] >> } E1000ECore; >> ^ >> /home/petmay01/linaro/qemu-for-merges/hw/net/e1000e_core.h:43:29: >> note: previous definition is here >> typedef struct E1000Core_st E1000ECore; >> ^ >> >> thanks >> -- PMM >> > > Have a try on my machine, but looks like it works for me (./configure > --cc=clang). version is > > clang version 3.8.0-2ubuntu3 (tags/RELEASE_380/final) > Target: x86_64-pc-linux-gnu > Thread model: posix > InstalledDir: /usr/bin > Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1 > Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0 > Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.3.1 > Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0 > Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1 > Candidate multilib: .;@m64 > Selected multilib: .;@m64 > > Looks like "-Werror,-Wtypedef-redefinition" was not used by default. After I > add them to extra_cflags, e1000e can still build successfully. > > Is there anything I missed?
Hi Jason, My clang 3.7.0 compiles this code fine as well. I just tried an older clang (3.4.2) and it produces build error as reported by Peter. The problematic patch is “net: Introduce e1000e device emulation" Fix is simple: diff --git a/hw/net/e1000e_core.h b/hw/net/e1000e_core.h index ff0ffbe..7a885e4 100644 --- a/hw/net/e1000e_core.h +++ b/hw/net/e1000e_core.h @@ -55,7 +55,7 @@ typedef struct E1000IntrDelayTimer_st { E1000ECore *core; } E1000IntrDelayTimer; -typedef struct E1000Core_st { +struct E1000Core_st { uint32_t mac[E1000E_MAC_SIZE]; uint16_t phy[E1000E_PHY_PAGES][E1000E_PHY_PAGE_SIZE]; uint16_t eeprom[E1000E_EEPROM_SIZE]; @@ -107,7 +107,7 @@ typedef struct E1000Core_st { NICState *owner_nic; PCIDevice *owner; void (*owner_start_recv)(PCIDevice *d); -} E1000ECore; +}; Would you amend it yourself or should we send updated series? Thanks, Dmitry > > Thanks > >