• D
    pseries: Implement automatic PAPR VIO address allocation · d601fac4
    David Gibson 提交于
    PAPR virtual IO (VIO) devices require a unique, but otherwise arbitrary,
    "address" used as a token to the hypercalls which manipulate them.
    
    Currently the pseries machine code does an ok job of allocating these
    addresses when the legacy -net nic / -serial and so forth options are used
    but will fail to allocate them properly when using -device.
    
    Specifically, you can use -device if all addresses are explicitly assigned.
    Without explicit assignment, only one VIO device of each type (network,
    console, SCSI) will be assigned properly, any further ones will attempt
    to take the same address leading to a fatal error.
    
    This patch fixes the situation by adding a proper address allocator to the
    VIO "bus" code.  This is used both by -device and the legacy options and
    default devices.  Addresses can still be explicitly assigned with -device
    options if desired.
    
    This patch changes the (guest visible) numbering of VIO devices, but since
    their addresses are discovered using the device tree and already differ
    from the numbering found on existing PowerVM systems, this does not break
    compatibility.
    Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: NAlexander Graf <agraf@suse.de>
    d601fac4
spapr_vio.c 22.7 KB