All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Michael Roth <mdroth@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: agraf@suse.de, ncmike@ncultra.org, paulus@samba.org,
	tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com,
	qemu-ppc@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 00/14] spapr: add support for pci hotplug
Date: Fri, 10 Jan 2014 19:29:27 +1100	[thread overview]
Message-ID: <52CFAF67.9020201@ozlabs.ru> (raw)
In-Reply-To: <1386282785-466-1-git-send-email-mdroth@linux.vnet.ibm.com>

Ping?


On 12/06/2013 09:32 AM, Michael Roth wrote:
> These patches are based on ppc-next, and can also be obtained from:
> 
> https://github.com/mdroth/qemu/commits/spapr-pci-hotplug-v2-ppc-next
> 
> v2:
>   * re-ordered patches to fix build bisectability (Alexey)
>   * replaced g_warning with DPRINTF in RTAS calls for guest errors (Alexey)
>   * replaced g_warning with fprintf for qemu errors (Alexey)
>   * updated RTAS calls to use pre-existing error/success macros (Alexey)
>   * replaced DR_*/SENSOR_* macros with INDICATOR_* for set-indicator/
>     get-sensor-state (Alexey)
> 
> OVERVIEW
> 
> These patches add support for PCI hotplug for SPAPR guests. We advertise
> each PHB as DR-capable (as defined by PAPR 13.5/13.6) with 32 hotpluggable
> PCI slots per PHB, which models a standard PCI expansion device for Power
> machines where the DRC name/loc-code/index for each slot are generated
> based on bus/slot number.
> 
> This is compatible with existing guest kernel's via the rpaphp hotplug
> module, and existing userspace tools such as drmgr/librtas/rtas_errd for
> managing devices, in theory...
> 
> NOTES / ADDITIONAL DEPENDENCIES
> 
> Due to an issue with rpaphp, a workaround must be used for older guest
> kernels which relies on using bus rescan / remove sysfs interfaces instead
> of rpaphp-provided hotplug interfaces.
> 
> Guest kernel fixes for rpaphp are in progress and available for testing
> here (there's still currently a benign issue with duplicate eeh sysfs
> entries with these, but the full guest-driven hotplug workflow is
> functional):
> 
>   https://github.com/mdroth/linux/commits/pci-hotplug-fixes
> 
> Alternatively, there are updated userspace tools which add a "-v" option
> to drmgr to utilize bus rescan/remove instead of relying on rpaphp:
> 
>   https://github.com/tyreld/powerpc-utils/commits/hotplug
> 
> It's possible to test guest-driven hotplug without either of these using
> a workaround (see USAGE below), but not recommended.
> 
> PAPR does not currently define a mechanism for generating PCI
> hotplug/unplug events, and relies on guest-driven management of devices,
> so as part of this series we also introduce an extension to the existing
> EPOW power event reporting mechanism (where a guest will query for events
> via check-exception RTAS calls in response to an external interrupt) to
> surface hotplug/unplug events with the information needed to manage the
> devices automatically via the rtas_errd guest service. In order to enable
> this qemu-driven hotplug/unplug workflow (for parity with ACPI/SHPC-based
> guests), updated versions of librtas/ppc64-diag are required, which are
> available here:
> 
>   https://github.com/tyreld/ppc64-diag/commits/hotplug
>   https://github.com/tyreld/librtas/commits/hotplug
> 
> Lacking those, users must manage device hotplug/unplug manually.
> 
> Additionally, PAPR requires the presence of additional OF properties
> (ibm,my-drc-index and loc-code) for hotpluggable slots that have already
> been populated at the time of boot to support unplug, so an updated SLOF
> is required to allow for device unplug after a guest reboot. (these
> properties cannot currently be added to boot-time FDT, since they will
> conflict with SLOF-generated device nodes, so we either need to teach
> SLOF to re-use/merge existing entries, or simply have it generate the
> required properties values for board-qemu, which is the approach taken
> here). A patch for SLOF is available below, along with a pre-built
> SLOF binary which includes it (for testing):
> 
>   https://github.com/mdroth/SLOF/commit/2e09a2950db0ce8ed464b80cccfea56dccf85d66
>   https://github.com/mdroth/qemu/blob/19a390e3270a7defc7158ce29e52ff2b27d666ae/pc-bios/slof.bin
> 
> PATCH LAYOUT
> 
> Patches
>         1-3   advertise PHBs and associated slots as hotpluggable to guests
>         4-7   add RTAS interfaces required for device configuration
>         8-10  add helpers and potential fix to deal with QEMU-managed BAR
>               assignments
>         11    enables device_add/device_del for spapr machines and
>               guest-driven hotplug
>         12-14 define hotplug event structure and emit them in response to
>               device_add/device_del
> 
> USAGE
> 
> With unmodified guests:
>   hotplug:
>     qemu:
>       device_add e1000,id=slot0
>     guest:
>       drmgr -c pci -s "Slot 0" -n -a
>       echo 1 >/sys/bus/pci/rescan
>   unplug:
>     guest:
>       drmgr -c pci -s "Slot 0" -n -r
>       echo 1 >/sys/bus/pci/devices/0000:00:00.0/remove
>     qemu:
>       device_del slot0
> 
> With only updated guest kernel:
>   hotplug:
>     qemu:
>       device_add e1000,id=slot0
>     guest:
>       modprobe rpaphp
>       drmgr -c pci -s "Slot 0" -n -a
>   unplug:
>     guest:
>       drmgr -c pci -s "Slot 0" -n -r
>     qemu:
>       device_del slot0
> 
> With only updated powerpc-utils/drmgr:
>   hotplug:
>     qemu:
>       device_add e1000,id=slot0
>     guest:
>       drmgr -c pci -s "Slot 0" -n -v -a
>   unplug:
>     guest:
>       drmgr -c pci -s "Slot 0" -n -v -r
>     qemu:
>       device_del slot0
> 
> With updated librtas/ppc64-diag and either an updated guest kernel or drmgr:
>   hotplug:
>     qemu:
>       device_add e1000,id=slot0
>   unplug:
>     qemu:
>       device_del slot0
> 
>  hw/pci/pci.c                |    5 +-
>  hw/ppc/spapr.c              |  174 +++++++++-
>  hw/ppc/spapr_events.c       |  228 ++++++++++---
>  hw/ppc/spapr_pci.c          |  768 ++++++++++++++++++++++++++++++++++++++++++-
>  include/exec/memory.h       |   34 ++
>  include/hw/pci-host/spapr.h |    1 +
>  include/hw/pci/pci.h        |    1 +
>  include/hw/ppc/spapr.h      |   77 ++++-
>  memory.c                    |   50 +++
>  9 files changed, 1286 insertions(+), 52 deletions(-)
> 
> pickGIT: [PATCH v2 06/14] spapr_pci: add get-sensor-state RTAS interface
> 


-- 
Alexey

      parent reply	other threads:[~2014-01-10  8:29 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-05 22:32 [Qemu-devel] [PATCH v2 00/14] spapr: add support for pci hotplug Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 01/14] spapr: populate DRC entries for root dt node Michael Roth
2013-12-16  2:59   ` Alexey Kardashevskiy
2013-12-16  4:54     ` Alexey Kardashevskiy
2014-01-16 20:51       ` Michael Roth
2014-01-20  2:58         ` Alexey Kardashevskiy
2014-01-20 14:12           ` Mike Day
2014-01-20 17:24           ` Michael Roth
2014-01-20 17:59             ` Mike Day
2014-01-20 18:51               ` Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 02/14] spapr_pci: populate DRC dt entries for PHBs Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 03/14] spapr: add helper to retrieve a PHB/device DrcEntry Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 04/14] spapr_pci: add set-indicator RTAS interface Michael Roth
2013-12-16  4:26   ` Alexey Kardashevskiy
2014-01-16 20:54     ` Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 05/14] spapr_pci: add get/set-power-level RTAS interfaces Michael Roth
2013-12-16  3:09   ` Alexey Kardashevskiy
2014-01-16 21:01     ` Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 06/14] spapr_pci: add get-sensor-state RTAS interface Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 07/14] spapr_pci: add ibm, configure-connector " Michael Roth
2013-12-05 22:32 ` [Qemu-devel] [PATCH v2 08/14] memory: add memory_region_find_subregion Michael Roth
2013-12-05 22:33 ` [Qemu-devel] [PATCH v2 09/14] pci: make pci_bar useable outside pci.c Michael Roth
2013-12-05 22:33 ` [Qemu-devel] [PATCH v2 10/14] pci: allow 0 address for PCI IO regions Michael Roth
2013-12-05 23:33   ` Peter Maydell
2013-12-10 21:42     ` Michael Roth
2013-12-10 22:14       ` Peter Maydell
2013-12-10 23:03         ` [Qemu-devel] [Qemu-ppc] " Benjamin Herrenschmidt
2013-12-12 14:34     ` [Qemu-devel] " Michael S. Tsirkin
2013-12-05 22:33 ` [Qemu-devel] [PATCH v2 11/14] spapr_pci: enable basic hotplug operations Michael Roth
2013-12-16  4:36   ` Alexey Kardashevskiy
2014-01-16 21:22     ` Michael Roth
2013-12-05 22:33 ` [Qemu-devel] [PATCH v2 12/14] spapr_events: re-use EPOW event infrastructure for hotplug events Michael Roth
2013-12-16  5:05   ` Alexey Kardashevskiy
2014-01-16 21:32     ` Michael Roth
2013-12-05 22:33 ` [Qemu-devel] [PATCH v2 13/14] spapr_events: event-scan RTAS interface Michael Roth
2013-12-16  4:57   ` Alexey Kardashevskiy
2013-12-05 22:33 ` [Qemu-devel] [PATCH v2 14/14] spapr_pci: emit hotplug add/remove events during hotplug Michael Roth
2013-12-16  5:06   ` Alexey Kardashevskiy
2014-01-10  8:29 ` Alexey Kardashevskiy [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52CFAF67.9020201@ozlabs.ru \
    --to=aik@ozlabs.ru \
    --cc=agraf@suse.de \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=ncmike@ncultra.org \
    --cc=nfont@linux.vnet.ibm.com \
    --cc=paulus@samba.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=tyreld@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.