• Parav Pandit's avatar
    IB/core: Introduce GID entry reference counts · b150c386
    Parav Pandit authored
    In order to be able to expose pointers to the ib_gid_attrs in the GID
    table we need to make it so the value of the pointer cannot be
    changed. Thus each GID table entry gets a unique piece of kref'd memory
    that is written only during initialization and remains constant for its
    lifetime.
    
    This eventually will allow the struct ib_gid_attrs to be returned without
    copy from many of query the APIs, but it also provides a way to track when
    all users of a HW table index go away.
    
    For roce we no longer allow an in-use HW table index to be re-used for a
    new an different entry. When a GID table entry needs to be removed it is
    hidden from the find API, but remains as a valid HW index and all
    ib_gid_attr points remain valid. The HW index is not relased until all
    users put the kref.
    
    Later patches will broadly replace the use of the sgid_index integer with
    the kref'd structure.
    
    Ultimately this will prevent security problems where the OS changes the
    properties of a HW GID table entry while an active user object is still
    using the entry.
    Signed-off-by: default avatarParav Pandit <parav@mellanox.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    b150c386
cache.c 35.4 KB