• D
    s390x/css: reassign subchannel if schid is changed after migration · 3c788ebc
    Dong Jia Shi 提交于
    The subchannel is a means to access a device. While the device number is
    assigned by the administrator, the subchannel number is assigned by
    the channel subsystem in an ascending order on cold and hot plug.
    When doing unplug and replug operations, the same device may end up on
    a different subchannel; for example
    
    - We start with a device fe.1.2222, which ends up at subchannel
      fe.1.0000.
    - Now we detach the device, attach a device fe.1.3333 (which would get
      the now-free subchannel fe.1.0000), re-attach fe.1.2222 (which ends
      up at subchannel fe.1.0001) and detach fe.1.3333.
    - We now have the same device (fe.1.2222) available to the guest; it
      just shows up on a different subchannel.
    
    In such a case, the subchannel numbers are different from what a
    QEMU would create during cold plug when parsing the command line.
    
    As this would cause a guest visible change on migration, we do restore
    the source system's value of the subchannel number on load.
    
    So we are now fine from the guest perspective. From the host
    perspective this will cause an inconsistent state in our internal data
    structures, though.
    
    For example, the subchannel 0 might not be at array position 0. This will
    lead to problems when we continue doing hot (un/re) plug operations.
    
    Let's fix this by cleaning up our internal data structures.
    Reported-by: NCornelia Huck <cornelia.huck@de.ibm.com>
    Signed-off-by: NDong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
    Cc: qemu-stable@nongnu.org
    Signed-off-by: NCornelia Huck <cornelia.huck@de.ibm.com>
    3c788ebc
css.c 55.2 KB