[Qemu-devel] [PATCH v4 00/26] ppc/xics: simplify ICS and ICP creation

Cédric Le Goater posted 26 patches 7 years, 2 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1488205773-30436-1-git-send-email-clg@kaod.org
Test checkpatch passed
Test docker passed
Test s390x passed
hw/intc/xics.c              | 461 +++++++++++++++++---------------------------
hw/intc/xics_kvm.c          | 184 +++++-------------
hw/intc/xics_spapr.c        | 128 +++---------
hw/ppc/spapr.c              | 134 ++++++++++---
hw/ppc/spapr_cpu_core.c     |   4 +-
hw/ppc/spapr_events.c       |  10 +-
hw/ppc/spapr_pci.c          |  10 +-
hw/ppc/spapr_vio.c          |   2 +-
include/hw/pci-host/spapr.h |   2 +-
include/hw/ppc/spapr.h      |   5 +-
include/hw/ppc/spapr_vio.h  |   2 +-
include/hw/ppc/xics.h       |  97 ++++------
12 files changed, 424 insertions(+), 615 deletions(-)
[Qemu-devel] [PATCH v4 00/26] ppc/xics: simplify ICS and ICP creation
Posted by Cédric Le Goater 7 years, 2 months ago
Hello,

The goal behind this series is to simplify the XICS interface by
moving back in the machine the way the ICS and ICP objects interact
together. It's up to the machine to implement this "fabric" logic by
providing a set of handlers of a QOM interface. These handlers are
used to grab an ICS or an ICP object and also do irq resends. The idea
was suggested by David Gibson.


The patchset is organised as follow. It starts with a preliminary
cleanup to get rid of the set_nr_irqs() and set_nr_servers()
handlers. It also moves the creation of the ICS and ICP objects from
the XICS object to the sPAPR machine. This simplifies the code
significantly and prepares ground for future changes.

As the sPAPR machine only makes use of a single ICS, we can store it
at the machine level. This lets us remove dependencies on the list of
ICS of the XICS object and simplify even more the code for the
following changes.

The QOM interface to interact with the ICS and ICP objects is then
introduced. These are moved under the machine and cleanups are done
accordingly.

Finally, the XICSState classes are removed as they have been
deprecated by the QOM interface.


After the initial cleanups, which are rather big, each patch are small
and simple. The make target 'check-qtest-ppc64' runs succesfully for
each of them and so does migration of HV and TCG guests.

The tree is available here :

	   https://github.com/legoater/qemu/tree/ppc-2.9

Thanks,

C.



Caveats:

 - The kernel ICP file descriptor 'kernel_xics_fd' was made static to
   ease changes but that could be an issue. We could move it under the
   sPAPR machine if needed.

Changes since v3:

 - reintroduced 'xics' backlinks to remove useless calls to
   qdev_get_machine()
 - moved InterruptStatsProvider to the sPAPR machine for a better
   output
 - moved move ics-simple post_load under the machine and removed the
   icp_resend() XICSFabric handler
 
Changes since v2:

 - renamed QOM Interface to XICSFabric

Cédric Le Goater (25):
  ppc/xics: fix ICP and ICS reset
  ppc/xics: remove set_nr_irqs() handler from XICSStateClass
  ppc/xics: remove set_nr_servers() handler from XICSStateClass
  ppc/xics: store the ICS object under the sPAPR machine
  ppc/xics: add an InterruptStatsProvider interface to ICS and ICP
    objects
  ppc/xics: introduce a XICSFabric QOM interface to handle ICSs
  ppc/xics: use the QOM interface under the sPAPR machine
  ppc/xics: use the QOM interface to get irqs
  ppc/xics: use the QOM interface to resend irqs
  ppc/xics: remove xics_find_source()
  ppc/xics: register the reset handler of ICS objects
  ppc/xics: remove the XICS list of ICS
  ppc/xics: extend the QOM interface to handle ICPs
  ppc/xics: move kernel_xics_fd out of KVMXICSState
  ppc/xics: simplify the cpu_setup() handler
  ppc/xics: move the cpu_setup() handler under the ICPState class
  ppc/xics: use the QOM interface to grab an ICP
  ppc/xics: simplify spapr_dt_xics() interface
  ppc/xics: register the reset handler of ICP objects
  ppc/xics: move the ICP array under the sPAPR machine
  ppc/xics: export the XICS init routines
  ppc/xics: remove the XICSState classes
  ppc/xics: move ics-simple post_load under the machine
  ppc/xics: move InterruptStatsProvider to the sPAPR machine
  ppc/xics: rename 'ICPState *' variables to 'icp'

David Gibson (1):
  xics: XICS should not be a SysBusDevice

 hw/intc/xics.c              | 461 +++++++++++++++++---------------------------
 hw/intc/xics_kvm.c          | 184 +++++-------------
 hw/intc/xics_spapr.c        | 128 +++---------
 hw/ppc/spapr.c              | 134 ++++++++++---
 hw/ppc/spapr_cpu_core.c     |   4 +-
 hw/ppc/spapr_events.c       |  10 +-
 hw/ppc/spapr_pci.c          |  10 +-
 hw/ppc/spapr_vio.c          |   2 +-
 include/hw/pci-host/spapr.h |   2 +-
 include/hw/ppc/spapr.h      |   5 +-
 include/hw/ppc/spapr_vio.h  |   2 +-
 include/hw/ppc/xics.h       |  97 ++++------
 12 files changed, 424 insertions(+), 615 deletions(-)

-- 
2.7.4


Re: [Qemu-devel] [PATCH v4 00/26] ppc/xics: simplify ICS and ICP creation
Posted by David Gibson 7 years, 2 months ago
On Mon, Feb 27, 2017 at 03:29:07PM +0100, Cédric Le Goater wrote:
> 
> Hello,
> 
> The goal behind this series is to simplify the XICS interface by
> moving back in the machine the way the ICS and ICP objects interact
> together. It's up to the machine to implement this "fabric" logic by
> providing a set of handlers of a QOM interface. These handlers are
> used to grab an ICS or an ICP object and also do irq resends. The idea
> was suggested by David Gibson.
> 
> 
> The patchset is organised as follow. It starts with a preliminary
> cleanup to get rid of the set_nr_irqs() and set_nr_servers()
> handlers. It also moves the creation of the ICS and ICP objects from
> the XICS object to the sPAPR machine. This simplifies the code
> significantly and prepares ground for future changes.
> 
> As the sPAPR machine only makes use of a single ICS, we can store it
> at the machine level. This lets us remove dependencies on the list of
> ICS of the XICS object and simplify even more the code for the
> following changes.
> 
> The QOM interface to interact with the ICS and ICP objects is then
> introduced. These are moved under the machine and cleanups are done
> accordingly.
> 
> Finally, the XICSState classes are removed as they have been
> deprecated by the QOM interface.
> 
> 
> After the initial cleanups, which are rather big, each patch are small
> and simple. The make target 'check-qtest-ppc64' runs succesfully for
> each of them and so does migration of HV and TCG guests.
> 
> The tree is available here :
> 
> 	   https://github.com/legoater/qemu/tree/ppc-2.9

There are some things I'd do differently, and I think there's room for
some future improvements, but this is certainly much better than where
we started.  So I've merged this into ppc-for-2.9.  Assuming my usual
tests pass, I hope to send a pull request shortly, to squeeze in just
in time for the soft freeze.

> 
> Thanks,
> 
> C.
> 
> 
> 
> Caveats:
> 
>  - The kernel ICP file descriptor 'kernel_xics_fd' was made static to
>    ease changes but that could be an issue. We could move it under the
>    sPAPR machine if needed.
> 
> Changes since v3:
> 
>  - reintroduced 'xics' backlinks to remove useless calls to
>    qdev_get_machine()
>  - moved InterruptStatsProvider to the sPAPR machine for a better
>    output
>  - moved move ics-simple post_load under the machine and removed the
>    icp_resend() XICSFabric handler
>  
> Changes since v2:
> 
>  - renamed QOM Interface to XICSFabric
> 
> Cédric Le Goater (25):
>   ppc/xics: fix ICP and ICS reset
>   ppc/xics: remove set_nr_irqs() handler from XICSStateClass
>   ppc/xics: remove set_nr_servers() handler from XICSStateClass
>   ppc/xics: store the ICS object under the sPAPR machine
>   ppc/xics: add an InterruptStatsProvider interface to ICS and ICP
>     objects
>   ppc/xics: introduce a XICSFabric QOM interface to handle ICSs
>   ppc/xics: use the QOM interface under the sPAPR machine
>   ppc/xics: use the QOM interface to get irqs
>   ppc/xics: use the QOM interface to resend irqs
>   ppc/xics: remove xics_find_source()
>   ppc/xics: register the reset handler of ICS objects
>   ppc/xics: remove the XICS list of ICS
>   ppc/xics: extend the QOM interface to handle ICPs
>   ppc/xics: move kernel_xics_fd out of KVMXICSState
>   ppc/xics: simplify the cpu_setup() handler
>   ppc/xics: move the cpu_setup() handler under the ICPState class
>   ppc/xics: use the QOM interface to grab an ICP
>   ppc/xics: simplify spapr_dt_xics() interface
>   ppc/xics: register the reset handler of ICP objects
>   ppc/xics: move the ICP array under the sPAPR machine
>   ppc/xics: export the XICS init routines
>   ppc/xics: remove the XICSState classes
>   ppc/xics: move ics-simple post_load under the machine
>   ppc/xics: move InterruptStatsProvider to the sPAPR machine
>   ppc/xics: rename 'ICPState *' variables to 'icp'
> 
> David Gibson (1):
>   xics: XICS should not be a SysBusDevice
> 
>  hw/intc/xics.c              | 461 +++++++++++++++++---------------------------
>  hw/intc/xics_kvm.c          | 184 +++++-------------
>  hw/intc/xics_spapr.c        | 128 +++---------
>  hw/ppc/spapr.c              | 134 ++++++++++---
>  hw/ppc/spapr_cpu_core.c     |   4 +-
>  hw/ppc/spapr_events.c       |  10 +-
>  hw/ppc/spapr_pci.c          |  10 +-
>  hw/ppc/spapr_vio.c          |   2 +-
>  include/hw/pci-host/spapr.h |   2 +-
>  include/hw/ppc/spapr.h      |   5 +-
>  include/hw/ppc/spapr_vio.h  |   2 +-
>  include/hw/ppc/xics.h       |  97 ++++------
>  12 files changed, 424 insertions(+), 615 deletions(-)
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson