• D
    spapr: Eliminate DRC 'signalled' state variable · 307b7715
    David Gibson 提交于
    The 'signalled' field in the DRC appears to be entirely a torturous
    workaround for the fact that PCI devices were started in UNISOLATED state
    for unclear reasons.
    
    1) 'signalled' is already meaningless for logical (so far, all non PCI)
    DRCs.  It's always set to true (at least at any point it might be tested),
    and can't be assigned any real meaning due to the way signalling works for
    logical DRCs.
    
    2) For PCI DRCs, the only time signalled would be false is when non-zero
    functions of a multifunction device are hotplugged, followed by function
    zero (the other way around is explicitly not permitted). In that case the
    secondary function DRCs are attached, but the notification isn't sent to
    the guest until function 0 is plugged.
    
    3) signalled being false is used to allow a DRC detach to switch mode
    back to ISOLATED state, which allows a secondary function to be hotplugged
    then unplugged with function 0 never inserted.  Without this a secondary
    function starting in UNISOLATED state couldn't be detached again without
    function 0 being inserted, all the functions configured by the guest, then
    sent back to ISOLATED state.
    
    4) But now that PCI DRCs start in ISOLATED state, there's nothing to be
    done.  If the guest doesn't get the notification, it won't switch the
    device to UNISOLATED state, so nothing prevents it from being unplugged.
    If the guest does move it to UNISOLATED state without the signal (due to
    a manual drmgr call, for instance) then it really isn't safe to unplug it.
    
    So, this patch removes the signalled variable and all code related to it.
    Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: NGreg Kurz <groug@kaod.org>
    Reviewed-by: NMichael Roth <mdroth@linux.vnet.ibm.com>
    307b7715
spapr_drc.h 8.6 KB