Skip to content
  • Jack Morgenstein's avatar
    IB/core: Create QP1 using the pkey index which contains the default pkey · ef5ed416
    Jack Morgenstein authored
    
    
    Currently, QP1 is created using pkey index 0. This patch simply looks
    for the index containing the default pkey, rather than hard-coding
    pkey index 0.
    
    This change will have no effect in native mode, since QP0 and QP1 are
    created before the SM configures the port, so pkey table will still be
    the default table defined by the IB Spec, in C10-123: "If non-volatile
    storage is not used to hold P_Key Table contents, then if a PM
    (Partition Manager) is not present, and prior to PM initialization of
    the P_Key Table, the P_Key Table must act as if it contains a single
    valid entry, at P_Key_ix = 0, containing the default partition
    key. All other entries in the P_Key Table must be invalid."
    
    Thus, in the native mode case, the driver will find the default pkey
    at index 0 (so it will be no different than the hard-coding).
    
    However, in SR-IOV mode, for VFs, the pkey table may be
    paravirtualized, so that the VF's pkey index zero may not necessarily
    be mapped to the real pkey index 0. For VFs, therefore, it is
    important to find the virtual index which maps to the real default
    pkey.
    
    This commit does the following for QP1 creation:
    
    1. Find the pkey index containing the default pkey, and use that index
       if found.  ib_find_pkey() returns the index of the
       limited-membership default pkey (0x7FFF) if the full-member default
       pkey is not in the table.
    
    2. If neither form of the default pkey is found, use pkey index 0
       (previous behavior).
    
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Reviewed-by: default avatarSean Hefty <sean.hefty@intel.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    ef5ed416