• Erez Shitrit's avatar
    IPoIB: Fix pkey change flow for virtualization environments · c2904141
    Erez Shitrit authored
    IPoIB's required behaviour w.r.t to the pkey used by the device is the following:
    
    - For "parent" interfaces (e.g ib0, ib1, etc) who are created
      automatically as a result of hot-plug events from the IB core, the
      driver needs to take whatever pkey vlaue it finds in index 0, and
      stick to that index.
    
    - For child interfaces (e.g ib0.8001, etc) created by admin directive,
      the driver needs to use and stick to the value provided during its
      creation.
    
    In SR-IOV environment its possible for the VF probe to take place
    before the cloud management software provisions the suitable pkey for
    the VF in the paravirtualed PKEY table index 0. When this is the case,
    the VF IB stack will find in index 0 an invalide pkey, which is all
    zeros.
    
    Moreover, the cloud managment can assign the pkey value at index 0 at
    any time of the guest life cycle.
    
    The correct behavior for IPoIB to address these requirements for
    parent interfaces is to use PKEY_CHANGE event as trigger to optionally
    re-init the device pkey value and re-create all the relevant resources
    accordingly, if the value of the pkey in index 0 has changed (from
    invalid to valid or from valid value X to invalid value Y).
    
    This patch enhances the heavy flushing code which is triggered by pkey
    change event, to behave correctly for parent devices. For child
    devices, the code remains the same, namely chases pkey value and not
    index.
    Signed-off-by: default avatarErez Shitrit <erezsh@mellanox.com>
    Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    c2904141
ipoib_ib.c 28.9 KB