• D
    hw/ppc/spapr.c: adding pending_dimm_unplugs to sPAPRMachineState · 0cffce56
    David Gibson 提交于
    The LMB DRC release callback, spapr_lmb_release(), uses an opaque
    parameter, a sPAPRDIMMState struct that stores the current LMBs that
    are allocated to a DIMM (nr_lmbs). After each call to this callback,
    the nr_lmbs is decremented by one and, when it reaches zero, the callback
    proceeds with the qdev calls to hot unplug the LMB.
    
    Using drc->detach_cb_opaque is problematic because it can't be migrated in
    the future DRC migration work. This patch makes the following changes to
    eliminate the usage of this opaque callback inside spapr_lmb_release:
    
    - sPAPRDIMMState was moved from spapr.c and added to spapr.h. A new
    attribute called 'addr' was added to it. This is used as an unique
    identifier to associate a sPAPRDIMMState to a PCDIMM element.
    
    - sPAPRMachineState now hosts a new QTAILQ called 'pending_dimm_unplugs'.
    This queue of sPAPRDIMMState elements will store the DIMM state of DIMMs
    that are currently going under an unplug process.
    
    - spapr_lmb_release() will now retrieve the nr_lmbs value by getting the
    correspondent sPAPRDIMMState. A helper function called spapr_dimm_get_address
    was created to fetch the address of a PCDIMM device inside spapr_lmb_release.
    When nr_lmbs reaches zero and the callback proceeds with the qdev hot unplug
    calls, the sPAPRDIMMState struct is removed from spapr->pending_dimm_unplugs.
    
    After these changes, the opaque argument for spapr_lmb_release is now
    unused and is passed as NULL inside spapr_del_lmbs. This and the other
    opaque arguments can now be safely removed from the code.
    
    As an additional cleanup made by this patch, the spapr_del_lmbs function
    was merged with spapr_memory_unplug_request. The former was being called
    only by the latter and both were small enough to fit one single function.
    Signed-off-by: NDaniel Henrique Barboza <danielhb@linux.vnet.ibm.com>
    [dwg: Minor stylistic cleanups]
    Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
    0cffce56
spapr.c 115.8 KB