Commit b150c386 authored by Parav Pandit's avatar Parav Pandit Committed by Jason Gunthorpe

IB/core: Introduce GID entry reference counts

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>
parent 1c36cf91
This diff is collapsed.
...@@ -94,6 +94,7 @@ enum ib_gid_type { ...@@ -94,6 +94,7 @@ enum ib_gid_type {
struct ib_gid_attr { struct ib_gid_attr {
struct net_device *ndev; struct net_device *ndev;
struct ib_device *device; struct ib_device *device;
union ib_gid gid;
enum ib_gid_type gid_type; enum ib_gid_type gid_type;
u16 index; u16 index;
u8 port_num; u8 port_num;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment