diff mbox series

[1/2] include/hw/ppc: Fix compilation with clang -std=gnu99

Message ID 1547051976-13982-2-git-send-email-thuth@redhat.com (mailing list archive)
State New, archived
Headers show
Series Force the C standard to gnu99 | expand

Commit Message

Thomas Huth Jan. 9, 2019, 4:39 p.m. UTC
When compiling with Clang and -std=gnu99, I get the following errors:

  CC      ppc64-softmmu/hw/intc/xics_spapr.o
In file included from hw/intc/xics_spapr.c:34:
include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
      [-Werror,-Wtypedef-redefinition]
typedef struct ICSState ICSState;
                        ^
include/hw/ppc/spapr.h:18:25: note: previous definition is here
typedef struct ICSState ICSState;
                        ^
In file included from hw/intc/xics_spapr.c:34:
include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
      [-Werror,-Wtypedef-redefinition]
typedef struct sPAPRMachineState sPAPRMachineState;
                                 ^
include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
typedef struct sPAPRMachineState sPAPRMachineState;
                                 ^
  CC      ppc64-softmmu/hw/intc/spapr_xive.o
In file included from hw/intc/spapr_xive.c:19:
include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
      [-Werror,-Wtypedef-redefinition]
} sPAPRXive;
  ^
include/hw/ppc/spapr.h:20:26: note: previous definition is here
typedef struct sPAPRXive sPAPRXive;
                         ^
In file included from hw/intc/spapr_xive.c:19:
include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
      [-Werror,-Wtypedef-redefinition]
typedef struct sPAPRMachineState sPAPRMachineState;
                                 ^
include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
typedef struct sPAPRMachineState sPAPRMachineState;
                                 ^
  CC      ppc64-softmmu/hw/char/spapr_vty.o
In file included from hw/char/spapr_vty.c:8:
In file included from include/hw/ppc/spapr.h:12:
include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
      [-Werror,-Wtypedef-redefinition]
typedef struct sPAPRMachineState sPAPRMachineState;
                                 ^
include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
typedef struct sPAPRMachineState sPAPRMachineState;
                                 ^

Since we're going to make -std=gnu99 mandatory, fix these issues
by including the right header files indead of typedeffing stuff twice.

Signed-off-by: Thomas Huth <thuth@redhat.com>
---
 include/hw/ppc/spapr.h      | 4 ++--
 include/hw/ppc/spapr_xive.h | 2 +-
 include/hw/ppc/xics.h       | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

Comments

Cédric Le Goater Jan. 9, 2019, 5:13 p.m. UTC | #1
On 1/9/19 5:39 PM, Thomas Huth wrote:
> When compiling with Clang and -std=gnu99, I get the following errors:
> 
>   CC      ppc64-softmmu/hw/intc/xics_spapr.o
> In file included from hw/intc/xics_spapr.c:34:
> include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct ICSState ICSState;
>                         ^
> include/hw/ppc/spapr.h:18:25: note: previous definition is here
> typedef struct ICSState ICSState;
>                         ^
> In file included from hw/intc/xics_spapr.c:34:
> include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
>   CC      ppc64-softmmu/hw/intc/spapr_xive.o
> In file included from hw/intc/spapr_xive.c:19:
> include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> } sPAPRXive;
>   ^
> include/hw/ppc/spapr.h:20:26: note: previous definition is here
> typedef struct sPAPRXive sPAPRXive;
>                          ^
> In file included from hw/intc/spapr_xive.c:19:
> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
>   CC      ppc64-softmmu/hw/char/spapr_vty.o
> In file included from hw/char/spapr_vty.c:8:
> In file included from include/hw/ppc/spapr.h:12:
> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> 
> Since we're going to make -std=gnu99 mandatory, fix these issues
> by including the right header files indead of typedeffing stuff twice.
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  include/hw/ppc/spapr.h      | 4 ++--
>  include/hw/ppc/spapr_xive.h | 2 +-
>  include/hw/ppc/xics.h       | 4 ++--
>  3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 2c77a8b..6a5ae4f 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -8,6 +8,8 @@
>  #include "hw/mem/pc-dimm.h"
>  #include "hw/ppc/spapr_ovec.h"
>  #include "hw/ppc/spapr_irq.h"
> +#include "hw/ppc/xics.h"
> +#include "hw/ppc/spapr_xive.h"
>  
>  struct VIOsPAPRBus;
>  struct sPAPRPHBState;
> @@ -15,8 +17,6 @@ struct sPAPRNVRAM;
>  typedef struct sPAPREventLogEntry sPAPREventLogEntry;
>  typedef struct sPAPREventSource sPAPREventSource;
>  typedef struct sPAPRPendingHPT sPAPRPendingHPT;
> -typedef struct ICSState ICSState;
> -typedef struct sPAPRXive sPAPRXive;
>  
>  #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
>  #define SPAPR_ENTRY_POINT       0x100
> diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
> index 728735d..aff4366 100644
> --- a/include/hw/ppc/spapr_xive.h
> +++ b/include/hw/ppc/spapr_xive.h
> @@ -42,7 +42,7 @@ bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
>  void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
>  qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
>  
> -typedef struct sPAPRMachineState sPAPRMachineState;
> +#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */

so both files include each other, how nice ...

>  void spapr_xive_hcall_init(sPAPRMachineState *spapr);
>  void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
> diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
> index 14afda1..a7f49a4 100644
> --- a/include/hw/ppc/xics.h
> +++ b/include/hw/ppc/xics.h
> @@ -47,6 +47,8 @@ typedef struct ICSState ICSState;
>  typedef struct ICSIRQState ICSIRQState;
>  typedef struct XICSFabric XICSFabric;
>  
> +#include "hw/ppc/spapr.h"
> +

and again ... I *really really* prefer forward declarations.



Reviewed-by: Cédric Le Goater <clg@kaod.org>

Grumbles,

C.


>  #define TYPE_ICP "icp"
>  #define ICP(obj) OBJECT_CHECK(ICPState, (obj), TYPE_ICP)
>  
> @@ -200,8 +202,6 @@ void ics_pic_print_info(ICSState *ics, Monitor *mon);
>  void ics_resend(ICSState *ics);
>  void icp_resend(ICPState *ss);
>  
> -typedef struct sPAPRMachineState sPAPRMachineState;
> -
>  void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
>                     uint32_t phandle);
>  int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
>
Daniel P. Berrangé Jan. 9, 2019, 5:28 p.m. UTC | #2
On Wed, Jan 09, 2019 at 06:13:01PM +0100, Cédric Le Goater wrote:
> On 1/9/19 5:39 PM, Thomas Huth wrote:
> > When compiling with Clang and -std=gnu99, I get the following errors:
> > 
> >   CC      ppc64-softmmu/hw/intc/xics_spapr.o
> > In file included from hw/intc/xics_spapr.c:34:
> > include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
> >       [-Werror,-Wtypedef-redefinition]
> > typedef struct ICSState ICSState;
> >                         ^
> > include/hw/ppc/spapr.h:18:25: note: previous definition is here
> > typedef struct ICSState ICSState;
> >                         ^
> > In file included from hw/intc/xics_spapr.c:34:
> > include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
> >       [-Werror,-Wtypedef-redefinition]
> > typedef struct sPAPRMachineState sPAPRMachineState;
> >                                  ^
> > include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> > typedef struct sPAPRMachineState sPAPRMachineState;
> >                                  ^
> >   CC      ppc64-softmmu/hw/intc/spapr_xive.o
> > In file included from hw/intc/spapr_xive.c:19:
> > include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
> >       [-Werror,-Wtypedef-redefinition]
> > } sPAPRXive;
> >   ^
> > include/hw/ppc/spapr.h:20:26: note: previous definition is here
> > typedef struct sPAPRXive sPAPRXive;
> >                          ^
> > In file included from hw/intc/spapr_xive.c:19:
> > include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
> >       [-Werror,-Wtypedef-redefinition]
> > typedef struct sPAPRMachineState sPAPRMachineState;
> >                                  ^
> > include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> > typedef struct sPAPRMachineState sPAPRMachineState;
> >                                  ^
> >   CC      ppc64-softmmu/hw/char/spapr_vty.o
> > In file included from hw/char/spapr_vty.c:8:
> > In file included from include/hw/ppc/spapr.h:12:
> > include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
> >       [-Werror,-Wtypedef-redefinition]
> > typedef struct sPAPRMachineState sPAPRMachineState;
> >                                  ^
> > include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> > typedef struct sPAPRMachineState sPAPRMachineState;
> >                                  ^
> > 
> > Since we're going to make -std=gnu99 mandatory, fix these issues
> > by including the right header files indead of typedeffing stuff twice.
> >
> > Signed-off-by: Thomas Huth <thuth@redhat.com>
> > ---
> >  include/hw/ppc/spapr.h      | 4 ++--
> >  include/hw/ppc/spapr_xive.h | 2 +-
> >  include/hw/ppc/xics.h       | 4 ++--
> >  3 files changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> > index 2c77a8b..6a5ae4f 100644
> > --- a/include/hw/ppc/spapr.h
> > +++ b/include/hw/ppc/spapr.h
> > @@ -8,6 +8,8 @@
> >  #include "hw/mem/pc-dimm.h"
> >  #include "hw/ppc/spapr_ovec.h"
> >  #include "hw/ppc/spapr_irq.h"
> > +#include "hw/ppc/xics.h"
> > +#include "hw/ppc/spapr_xive.h"
> >  
> >  struct VIOsPAPRBus;
> >  struct sPAPRPHBState;
> > @@ -15,8 +17,6 @@ struct sPAPRNVRAM;
> >  typedef struct sPAPREventLogEntry sPAPREventLogEntry;
> >  typedef struct sPAPREventSource sPAPREventSource;
> >  typedef struct sPAPRPendingHPT sPAPRPendingHPT;
> > -typedef struct ICSState ICSState;
> > -typedef struct sPAPRXive sPAPRXive;
> >  
> >  #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
> >  #define SPAPR_ENTRY_POINT       0x100
> > diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
> > index 728735d..aff4366 100644
> > --- a/include/hw/ppc/spapr_xive.h
> > +++ b/include/hw/ppc/spapr_xive.h
> > @@ -42,7 +42,7 @@ bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
> >  void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
> >  qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
> >  
> > -typedef struct sPAPRMachineState sPAPRMachineState;
> > +#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */
> 
> so both files include each other, how nice ...

If the header files are mutually dependent it makes me wonder what the
point of having them split up is ?

Feels like either they need to be merged, or they need to be split up
and refactored even more to remove the mutual dependancy.


Regards,
Daniel
Cédric Le Goater Jan. 9, 2019, 5:40 p.m. UTC | #3
On 1/9/19 6:28 PM, Daniel P. Berrangé wrote:
> On Wed, Jan 09, 2019 at 06:13:01PM +0100, Cédric Le Goater wrote:
>> On 1/9/19 5:39 PM, Thomas Huth wrote:
>>> When compiling with Clang and -std=gnu99, I get the following errors:
>>>
>>>   CC      ppc64-softmmu/hw/intc/xics_spapr.o
>>> In file included from hw/intc/xics_spapr.c:34:
>>> include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
>>>       [-Werror,-Wtypedef-redefinition]
>>> typedef struct ICSState ICSState;
>>>                         ^
>>> include/hw/ppc/spapr.h:18:25: note: previous definition is here
>>> typedef struct ICSState ICSState;
>>>                         ^
>>> In file included from hw/intc/xics_spapr.c:34:
>>> include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>>>       [-Werror,-Wtypedef-redefinition]
>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>                                  ^
>>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>                                  ^
>>>   CC      ppc64-softmmu/hw/intc/spapr_xive.o
>>> In file included from hw/intc/spapr_xive.c:19:
>>> include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
>>>       [-Werror,-Wtypedef-redefinition]
>>> } sPAPRXive;
>>>   ^
>>> include/hw/ppc/spapr.h:20:26: note: previous definition is here
>>> typedef struct sPAPRXive sPAPRXive;
>>>                          ^
>>> In file included from hw/intc/spapr_xive.c:19:
>>> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>>>       [-Werror,-Wtypedef-redefinition]
>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>                                  ^
>>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>                                  ^
>>>   CC      ppc64-softmmu/hw/char/spapr_vty.o
>>> In file included from hw/char/spapr_vty.c:8:
>>> In file included from include/hw/ppc/spapr.h:12:
>>> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>>>       [-Werror,-Wtypedef-redefinition]
>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>                                  ^
>>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>                                  ^
>>>
>>> Since we're going to make -std=gnu99 mandatory, fix these issues
>>> by including the right header files indead of typedeffing stuff twice.
>>>
>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>> ---
>>>  include/hw/ppc/spapr.h      | 4 ++--
>>>  include/hw/ppc/spapr_xive.h | 2 +-
>>>  include/hw/ppc/xics.h       | 4 ++--
>>>  3 files changed, 5 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>>> index 2c77a8b..6a5ae4f 100644
>>> --- a/include/hw/ppc/spapr.h
>>> +++ b/include/hw/ppc/spapr.h
>>> @@ -8,6 +8,8 @@
>>>  #include "hw/mem/pc-dimm.h"
>>>  #include "hw/ppc/spapr_ovec.h"
>>>  #include "hw/ppc/spapr_irq.h"
>>> +#include "hw/ppc/xics.h"
>>> +#include "hw/ppc/spapr_xive.h"
>>>  
>>>  struct VIOsPAPRBus;
>>>  struct sPAPRPHBState;
>>> @@ -15,8 +17,6 @@ struct sPAPRNVRAM;
>>>  typedef struct sPAPREventLogEntry sPAPREventLogEntry;
>>>  typedef struct sPAPREventSource sPAPREventSource;
>>>  typedef struct sPAPRPendingHPT sPAPRPendingHPT;
>>> -typedef struct ICSState ICSState;
>>> -typedef struct sPAPRXive sPAPRXive;
>>>  
>>>  #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
>>>  #define SPAPR_ENTRY_POINT       0x100
>>> diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
>>> index 728735d..aff4366 100644
>>> --- a/include/hw/ppc/spapr_xive.h
>>> +++ b/include/hw/ppc/spapr_xive.h
>>> @@ -42,7 +42,7 @@ bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
>>>  void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
>>>  qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
>>>  
>>> -typedef struct sPAPRMachineState sPAPRMachineState;
>>> +#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */
>>
>> so both files include each other, how nice ...
> 
> If the header files are mutually dependent it makes me wonder what the
> point of having them split up is ?

The XICS interrupt controller models are used in two different machines,
sPAPR and PowerNV.

> Feels like either they need to be merged, or they need to be split up
> and refactored even more to remove the mutual dependancy.

yes or that some spapr_* definitions do not belong to the common xics.h
file.
 
Thanks,

C.
Cédric Le Goater Jan. 9, 2019, 5:46 p.m. UTC | #4
On 1/9/19 5:39 PM, Thomas Huth wrote:
> When compiling with Clang and -std=gnu99, I get the following errors:
> 
>   CC      ppc64-softmmu/hw/intc/xics_spapr.o
> In file included from hw/intc/xics_spapr.c:34:
> include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct ICSState ICSState;
>                         ^
> include/hw/ppc/spapr.h:18:25: note: previous definition is here
> typedef struct ICSState ICSState;
>                         ^
> In file included from hw/intc/xics_spapr.c:34:
> include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
>   CC      ppc64-softmmu/hw/intc/spapr_xive.o
> In file included from hw/intc/spapr_xive.c:19:
> include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> } sPAPRXive;
>   ^
> include/hw/ppc/spapr.h:20:26: note: previous definition is here
> typedef struct sPAPRXive sPAPRXive;
>                          ^
> In file included from hw/intc/spapr_xive.c:19:
> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
>   CC      ppc64-softmmu/hw/char/spapr_vty.o
> In file included from hw/char/spapr_vty.c:8:
> In file included from include/hw/ppc/spapr.h:12:
> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>       [-Werror,-Wtypedef-redefinition]
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> typedef struct sPAPRMachineState sPAPRMachineState;
>                                  ^
> 
> Since we're going to make -std=gnu99 mandatory, fix these issues
> by including the right header files indead of typedeffing stuff twice.
> 
> Signed-off-by: Thomas Huth <thuth@redhat.com>
> ---
>  include/hw/ppc/spapr.h      | 4 ++--
>  include/hw/ppc/spapr_xive.h | 2 +-
>  include/hw/ppc/xics.h       | 4 ++--
>  3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index 2c77a8b..6a5ae4f 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -8,6 +8,8 @@
>  #include "hw/mem/pc-dimm.h"
>  #include "hw/ppc/spapr_ovec.h"
>  #include "hw/ppc/spapr_irq.h"
> +#include "hw/ppc/xics.h"
> +#include "hw/ppc/spapr_xive.h"
>  
>  struct VIOsPAPRBus;
>  struct sPAPRPHBState;
> @@ -15,8 +17,6 @@ struct sPAPRNVRAM;
>  typedef struct sPAPREventLogEntry sPAPREventLogEntry;
>  typedef struct sPAPREventSource sPAPREventSource;
>  typedef struct sPAPRPendingHPT sPAPRPendingHPT;
> -typedef struct ICSState ICSState;
> -typedef struct sPAPRXive sPAPRXive;
>  
>  #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
>  #define SPAPR_ENTRY_POINT       0x100
> diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
> index 728735d..aff4366 100644
> --- a/include/hw/ppc/spapr_xive.h
> +++ b/include/hw/ppc/spapr_xive.h
> @@ -42,7 +42,7 @@ bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
>  void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
>  qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
>  
> -typedef struct sPAPRMachineState sPAPRMachineState;
> +#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */
>  
>  void spapr_xive_hcall_init(sPAPRMachineState *spapr);
>  void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
> diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
> index 14afda1..a7f49a4 100644
> --- a/include/hw/ppc/xics.h
> +++ b/include/hw/ppc/xics.h
> @@ -47,6 +47,8 @@ typedef struct ICSState ICSState;
>  typedef struct ICSIRQState ICSIRQState;
>  typedef struct XICSFabric XICSFabric;
>  
> +#include "hw/ppc/spapr.h"
> +
>  #define TYPE_ICP "icp"
>  #define ICP(obj) OBJECT_CHECK(ICPState, (obj), TYPE_ICP)
>  
> @@ -200,8 +202,6 @@ void ics_pic_print_info(ICSState *ics, Monitor *mon);
>  void ics_resend(ICSState *ics);
>  void icp_resend(ICPState *ss);

I think the definitions below belong to another header file, 
may be "xics_spapr.h". That would be cleaner.

Thanks,

C. 

> -typedef struct sPAPRMachineState sPAPRMachineState;
> -
>  void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
>                     uint32_t phandle);
>  int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
>
Greg Kurz Jan. 9, 2019, 5:47 p.m. UTC | #5
On Wed, 9 Jan 2019 18:40:48 +0100
Cédric Le Goater <clg@kaod.org> wrote:

> On 1/9/19 6:28 PM, Daniel P. Berrangé wrote:
> > On Wed, Jan 09, 2019 at 06:13:01PM +0100, Cédric Le Goater wrote:  
> >> On 1/9/19 5:39 PM, Thomas Huth wrote:  
> >>> When compiling with Clang and -std=gnu99, I get the following errors:
> >>>
> >>>   CC      ppc64-softmmu/hw/intc/xics_spapr.o
> >>> In file included from hw/intc/xics_spapr.c:34:
> >>> include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
> >>>       [-Werror,-Wtypedef-redefinition]
> >>> typedef struct ICSState ICSState;
> >>>                         ^
> >>> include/hw/ppc/spapr.h:18:25: note: previous definition is here
> >>> typedef struct ICSState ICSState;
> >>>                         ^
> >>> In file included from hw/intc/xics_spapr.c:34:
> >>> include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
> >>>       [-Werror,-Wtypedef-redefinition]
> >>> typedef struct sPAPRMachineState sPAPRMachineState;
> >>>                                  ^
> >>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> >>> typedef struct sPAPRMachineState sPAPRMachineState;
> >>>                                  ^
> >>>   CC      ppc64-softmmu/hw/intc/spapr_xive.o
> >>> In file included from hw/intc/spapr_xive.c:19:
> >>> include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
> >>>       [-Werror,-Wtypedef-redefinition]
> >>> } sPAPRXive;
> >>>   ^
> >>> include/hw/ppc/spapr.h:20:26: note: previous definition is here
> >>> typedef struct sPAPRXive sPAPRXive;
> >>>                          ^
> >>> In file included from hw/intc/spapr_xive.c:19:
> >>> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
> >>>       [-Werror,-Wtypedef-redefinition]
> >>> typedef struct sPAPRMachineState sPAPRMachineState;
> >>>                                  ^
> >>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> >>> typedef struct sPAPRMachineState sPAPRMachineState;
> >>>                                  ^
> >>>   CC      ppc64-softmmu/hw/char/spapr_vty.o
> >>> In file included from hw/char/spapr_vty.c:8:
> >>> In file included from include/hw/ppc/spapr.h:12:
> >>> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
> >>>       [-Werror,-Wtypedef-redefinition]
> >>> typedef struct sPAPRMachineState sPAPRMachineState;
> >>>                                  ^
> >>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
> >>> typedef struct sPAPRMachineState sPAPRMachineState;
> >>>                                  ^
> >>>
> >>> Since we're going to make -std=gnu99 mandatory, fix these issues
> >>> by including the right header files indead of typedeffing stuff twice.
> >>>
> >>> Signed-off-by: Thomas Huth <thuth@redhat.com>
> >>> ---
> >>>  include/hw/ppc/spapr.h      | 4 ++--
> >>>  include/hw/ppc/spapr_xive.h | 2 +-
> >>>  include/hw/ppc/xics.h       | 4 ++--
> >>>  3 files changed, 5 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> >>> index 2c77a8b..6a5ae4f 100644
> >>> --- a/include/hw/ppc/spapr.h
> >>> +++ b/include/hw/ppc/spapr.h
> >>> @@ -8,6 +8,8 @@
> >>>  #include "hw/mem/pc-dimm.h"
> >>>  #include "hw/ppc/spapr_ovec.h"
> >>>  #include "hw/ppc/spapr_irq.h"
> >>> +#include "hw/ppc/xics.h"
> >>> +#include "hw/ppc/spapr_xive.h"
> >>>  
> >>>  struct VIOsPAPRBus;
> >>>  struct sPAPRPHBState;
> >>> @@ -15,8 +17,6 @@ struct sPAPRNVRAM;
> >>>  typedef struct sPAPREventLogEntry sPAPREventLogEntry;
> >>>  typedef struct sPAPREventSource sPAPREventSource;
> >>>  typedef struct sPAPRPendingHPT sPAPRPendingHPT;
> >>> -typedef struct ICSState ICSState;
> >>> -typedef struct sPAPRXive sPAPRXive;
> >>>  
> >>>  #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
> >>>  #define SPAPR_ENTRY_POINT       0x100
> >>> diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
> >>> index 728735d..aff4366 100644
> >>> --- a/include/hw/ppc/spapr_xive.h
> >>> +++ b/include/hw/ppc/spapr_xive.h
> >>> @@ -42,7 +42,7 @@ bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
> >>>  void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
> >>>  qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
> >>>  
> >>> -typedef struct sPAPRMachineState sPAPRMachineState;
> >>> +#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */  
> >>
> >> so both files include each other, how nice ...  
> > 
> > If the header files are mutually dependent it makes me wonder what the
> > point of having them split up is ?  
> 
> The XICS interrupt controller models are used in two different machines,
> sPAPR and PowerNV.
> 
> > Feels like either they need to be merged, or they need to be split up
> > and refactored even more to remove the mutual dependancy.  
> 
> yes or that some spapr_* definitions do not belong to the common xics.h
> file.

Yeah,

These should move to a new xics_spapr.h or maybe even spapr.h for simplicity:

void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
                   uint32_t phandle);
int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
void xics_spapr_init(sPAPRMachineState *spapr);

>  
> Thanks,
> 
> C.
>
Paolo Bonzini Jan. 9, 2019, 9:20 p.m. UTC | #6
On 09/01/19 18:28, Daniel P. Berrangé wrote:
>> so both files include each other, how nice ...
> If the header files are mutually dependent it makes me wonder what the
> point of having them split up is ?
> 
> Feels like either they need to be merged, or they need to be split up
> and refactored even more to remove the mutual dependancy.

If they include each other only for the typedefs, then prehaps the
solution is to change the coding style and allow using struct in
function prototypes.  I'm pretty sure there are several examples of this
already.

Paolo
Eric Blake Jan. 9, 2019, 9:25 p.m. UTC | #7
On 1/9/19 3:20 PM, Paolo Bonzini wrote:
> On 09/01/19 18:28, Daniel P. Berrangé wrote:
>>> so both files include each other, how nice ...
>> If the header files are mutually dependent it makes me wonder what the
>> point of having them split up is ?
>>
>> Feels like either they need to be merged, or they need to be split up
>> and refactored even more to remove the mutual dependancy.
> 
> If they include each other only for the typedefs, then prehaps the
> solution is to change the coding style and allow using struct in
> function prototypes.  I'm pretty sure there are several examples of this
> already.

Or stick the typedef in <typedefs.h>, instead of trying to find (or
create) some other common header.
Paolo Bonzini Jan. 9, 2019, 9:31 p.m. UTC | #8
On 09/01/19 22:25, Eric Blake wrote:
> On 1/9/19 3:20 PM, Paolo Bonzini wrote:
>> On 09/01/19 18:28, Daniel P. Berrangé wrote:
>>>> so both files include each other, how nice ...
>>> If the header files are mutually dependent it makes me wonder what the
>>> point of having them split up is ?
>>>
>>> Feels like either they need to be merged, or they need to be split up
>>> and refactored even more to remove the mutual dependancy.
>>
>> If they include each other only for the typedefs, then prehaps the
>> solution is to change the coding style and allow using struct in
>> function prototypes.  I'm pretty sure there are several examples of this
>> already.
> 
> Or stick the typedef in <typedefs.h>, instead of trying to find (or
> create) some other common header.

Putting typedefs for a very specific machine or device in typedefs.h
doesn't seem too clean.  Usually typedefs.h is used when things are
shared by different subsystems (e.g. accelerator and device emulation,
or frontend and backend), and I'm pretty sure that it could be made even
smaller if someone was inclined to try.

Paolo
Thomas Huth Jan. 10, 2019, 6:46 a.m. UTC | #9
On 2019-01-09 22:20, Paolo Bonzini wrote:
> On 09/01/19 18:28, Daniel P. Berrangé wrote:
>>> so both files include each other, how nice ...
>> If the header files are mutually dependent it makes me wonder what the
>> point of having them split up is ?
>>
>> Feels like either they need to be merged, or they need to be split up
>> and refactored even more to remove the mutual dependancy.
> 
> If they include each other only for the typedefs, then prehaps the
> solution is to change the coding style and allow using struct in
> function prototypes.  I'm pretty sure there are several examples of this
> already.

I'm all in favor for this!

 Thomas
Thomas Huth Jan. 10, 2019, 6:47 a.m. UTC | #10
On 2019-01-09 18:47, Greg Kurz wrote:
> On Wed, 9 Jan 2019 18:40:48 +0100
> Cédric Le Goater <clg@kaod.org> wrote:
> 
>> On 1/9/19 6:28 PM, Daniel P. Berrangé wrote:
>>> On Wed, Jan 09, 2019 at 06:13:01PM +0100, Cédric Le Goater wrote:  
>>>> On 1/9/19 5:39 PM, Thomas Huth wrote:  
>>>>> When compiling with Clang and -std=gnu99, I get the following errors:
>>>>>
>>>>>   CC      ppc64-softmmu/hw/intc/xics_spapr.o
>>>>> In file included from hw/intc/xics_spapr.c:34:
>>>>> include/hw/ppc/xics.h:46:25: error: redefinition of typedef 'ICSState' is a C11 feature
>>>>>       [-Werror,-Wtypedef-redefinition]
>>>>> typedef struct ICSState ICSState;
>>>>>                         ^
>>>>> include/hw/ppc/spapr.h:18:25: note: previous definition is here
>>>>> typedef struct ICSState ICSState;
>>>>>                         ^
>>>>> In file included from hw/intc/xics_spapr.c:34:
>>>>> include/hw/ppc/xics.h:203:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>>>>>       [-Werror,-Wtypedef-redefinition]
>>>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>>>                                  ^
>>>>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
>>>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>>>                                  ^
>>>>>   CC      ppc64-softmmu/hw/intc/spapr_xive.o
>>>>> In file included from hw/intc/spapr_xive.c:19:
>>>>> include/hw/ppc/spapr_xive.h:38:3: error: redefinition of typedef 'sPAPRXive' is a C11 feature
>>>>>       [-Werror,-Wtypedef-redefinition]
>>>>> } sPAPRXive;
>>>>>   ^
>>>>> include/hw/ppc/spapr.h:20:26: note: previous definition is here
>>>>> typedef struct sPAPRXive sPAPRXive;
>>>>>                          ^
>>>>> In file included from hw/intc/spapr_xive.c:19:
>>>>> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>>>>>       [-Werror,-Wtypedef-redefinition]
>>>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>>>                                  ^
>>>>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
>>>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>>>                                  ^
>>>>>   CC      ppc64-softmmu/hw/char/spapr_vty.o
>>>>> In file included from hw/char/spapr_vty.c:8:
>>>>> In file included from include/hw/ppc/spapr.h:12:
>>>>> include/hw/ppc/spapr_xive.h:45:34: error: redefinition of typedef 'sPAPRMachineState' is a C11 feature
>>>>>       [-Werror,-Wtypedef-redefinition]
>>>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>>>                                  ^
>>>>> include/hw/ppc/spapr_irq.h:25:34: note: previous definition is here
>>>>> typedef struct sPAPRMachineState sPAPRMachineState;
>>>>>                                  ^
>>>>>
>>>>> Since we're going to make -std=gnu99 mandatory, fix these issues
>>>>> by including the right header files indead of typedeffing stuff twice.
>>>>>
>>>>> Signed-off-by: Thomas Huth <thuth@redhat.com>
>>>>> ---
>>>>>  include/hw/ppc/spapr.h      | 4 ++--
>>>>>  include/hw/ppc/spapr_xive.h | 2 +-
>>>>>  include/hw/ppc/xics.h       | 4 ++--
>>>>>  3 files changed, 5 insertions(+), 5 deletions(-)
>>>>>
>>>>> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
>>>>> index 2c77a8b..6a5ae4f 100644
>>>>> --- a/include/hw/ppc/spapr.h
>>>>> +++ b/include/hw/ppc/spapr.h
>>>>> @@ -8,6 +8,8 @@
>>>>>  #include "hw/mem/pc-dimm.h"
>>>>>  #include "hw/ppc/spapr_ovec.h"
>>>>>  #include "hw/ppc/spapr_irq.h"
>>>>> +#include "hw/ppc/xics.h"
>>>>> +#include "hw/ppc/spapr_xive.h"
>>>>>  
>>>>>  struct VIOsPAPRBus;
>>>>>  struct sPAPRPHBState;
>>>>> @@ -15,8 +17,6 @@ struct sPAPRNVRAM;
>>>>>  typedef struct sPAPREventLogEntry sPAPREventLogEntry;
>>>>>  typedef struct sPAPREventSource sPAPREventSource;
>>>>>  typedef struct sPAPRPendingHPT sPAPRPendingHPT;
>>>>> -typedef struct ICSState ICSState;
>>>>> -typedef struct sPAPRXive sPAPRXive;
>>>>>  
>>>>>  #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
>>>>>  #define SPAPR_ENTRY_POINT       0x100
>>>>> diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
>>>>> index 728735d..aff4366 100644
>>>>> --- a/include/hw/ppc/spapr_xive.h
>>>>> +++ b/include/hw/ppc/spapr_xive.h
>>>>> @@ -42,7 +42,7 @@ bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
>>>>>  void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
>>>>>  qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
>>>>>  
>>>>> -typedef struct sPAPRMachineState sPAPRMachineState;
>>>>> +#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */  
>>>>
>>>> so both files include each other, how nice ...  
>>>
>>> If the header files are mutually dependent it makes me wonder what the
>>> point of having them split up is ?  
>>
>> The XICS interrupt controller models are used in two different machines,
>> sPAPR and PowerNV.
>>
>>> Feels like either they need to be merged, or they need to be split up
>>> and refactored even more to remove the mutual dependancy.  
>>
>> yes or that some spapr_* definitions do not belong to the common xics.h
>> file.
> 
> Yeah,
> 
> These should move to a new xics_spapr.h or maybe even spapr.h for simplicity:
> 
> void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
>                    uint32_t phandle);
> int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);
> void xics_spapr_init(sPAPRMachineState *spapr);

Ok, I'll move them to xics_spapr.h.

 Thomas
Daniel P. Berrangé Jan. 10, 2019, 10:12 a.m. UTC | #11
On Wed, Jan 09, 2019 at 03:25:53PM -0600, Eric Blake wrote:
> On 1/9/19 3:20 PM, Paolo Bonzini wrote:
> > On 09/01/19 18:28, Daniel P. Berrangé wrote:
> >>> so both files include each other, how nice ...
> >> If the header files are mutually dependent it makes me wonder what the
> >> point of having them split up is ?
> >>
> >> Feels like either they need to be merged, or they need to be split up
> >> and refactored even more to remove the mutual dependancy.
> > 
> > If they include each other only for the typedefs, then prehaps the
> > solution is to change the coding style and allow using struct in
> > function prototypes.  I'm pretty sure there are several examples of this
> > already.
> 
> Or stick the typedef in <typedefs.h>, instead of trying to find (or
> create) some other common header.

Probably better to just have a local  spapr_types.h instead of
polluting the global namespace.


Regards,
Daniel
Greg Kurz Jan. 10, 2019, 12:12 p.m. UTC | #12
On Thu, 10 Jan 2019 10:12:43 +0000
Daniel P. Berrangé <berrange@redhat.com> wrote:

> On Wed, Jan 09, 2019 at 03:25:53PM -0600, Eric Blake wrote:
> > On 1/9/19 3:20 PM, Paolo Bonzini wrote:  
> > > On 09/01/19 18:28, Daniel P. Berrangé wrote:  
> > >>> so both files include each other, how nice ...  
> > >> If the header files are mutually dependent it makes me wonder what the
> > >> point of having them split up is ?
> > >>
> > >> Feels like either they need to be merged, or they need to be split up
> > >> and refactored even more to remove the mutual dependancy.  
> > > 
> > > If they include each other only for the typedefs, then prehaps the
> > > solution is to change the coding style and allow using struct in
> > > function prototypes.  I'm pretty sure there are several examples of this
> > > already.  
> > 
> > Or stick the typedef in <typedefs.h>, instead of trying to find (or
> > create) some other common header.  
> 
> Probably better to just have a local  spapr_types.h instead of
> polluting the global namespace.
> 

I personally like this approach because it would allow to use the
typedefs everywhere, for the sake of consistency.

> 
> Regards,
> Daniel
diff mbox series

Patch

diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
index 2c77a8b..6a5ae4f 100644
--- a/include/hw/ppc/spapr.h
+++ b/include/hw/ppc/spapr.h
@@ -8,6 +8,8 @@ 
 #include "hw/mem/pc-dimm.h"
 #include "hw/ppc/spapr_ovec.h"
 #include "hw/ppc/spapr_irq.h"
+#include "hw/ppc/xics.h"
+#include "hw/ppc/spapr_xive.h"
 
 struct VIOsPAPRBus;
 struct sPAPRPHBState;
@@ -15,8 +17,6 @@  struct sPAPRNVRAM;
 typedef struct sPAPREventLogEntry sPAPREventLogEntry;
 typedef struct sPAPREventSource sPAPREventSource;
 typedef struct sPAPRPendingHPT sPAPRPendingHPT;
-typedef struct ICSState ICSState;
-typedef struct sPAPRXive sPAPRXive;
 
 #define HPTE64_V_HPTE_DIRTY     0x0000000000000040ULL
 #define SPAPR_ENTRY_POINT       0x100
diff --git a/include/hw/ppc/spapr_xive.h b/include/hw/ppc/spapr_xive.h
index 728735d..aff4366 100644
--- a/include/hw/ppc/spapr_xive.h
+++ b/include/hw/ppc/spapr_xive.h
@@ -42,7 +42,7 @@  bool spapr_xive_irq_free(sPAPRXive *xive, uint32_t lisn);
 void spapr_xive_pic_print_info(sPAPRXive *xive, Monitor *mon);
 qemu_irq spapr_xive_qirq(sPAPRXive *xive, uint32_t lisn);
 
-typedef struct sPAPRMachineState sPAPRMachineState;
+#include "hw/ppc/spapr.h"  /* for sPAPRMachineState */
 
 void spapr_xive_hcall_init(sPAPRMachineState *spapr);
 void spapr_dt_xive(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
diff --git a/include/hw/ppc/xics.h b/include/hw/ppc/xics.h
index 14afda1..a7f49a4 100644
--- a/include/hw/ppc/xics.h
+++ b/include/hw/ppc/xics.h
@@ -47,6 +47,8 @@  typedef struct ICSState ICSState;
 typedef struct ICSIRQState ICSIRQState;
 typedef struct XICSFabric XICSFabric;
 
+#include "hw/ppc/spapr.h"
+
 #define TYPE_ICP "icp"
 #define ICP(obj) OBJECT_CHECK(ICPState, (obj), TYPE_ICP)
 
@@ -200,8 +202,6 @@  void ics_pic_print_info(ICSState *ics, Monitor *mon);
 void ics_resend(ICSState *ics);
 void icp_resend(ICPState *ss);
 
-typedef struct sPAPRMachineState sPAPRMachineState;
-
 void spapr_dt_xics(sPAPRMachineState *spapr, uint32_t nr_servers, void *fdt,
                    uint32_t phandle);
 int xics_kvm_init(sPAPRMachineState *spapr, Error **errp);