Commit 2350f247 authored by Yishai Hadas's avatar Yishai Hadas Committed by Doug Ledford

IB/mlx4: Manage admin alias GUID upon admin request

Set the admin alias GUID per the administrator's request via the sysfs
mechanism into the core layer.

The "get" request returns the current value. However, if the administrator
requests the SM to assign a new value by requesting 0, the SM assigned
GUID is returned.
Signed-off-by: default avatarYishai Hadas <yishaih@mellanox.com>
Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent fb517a4f
...@@ -328,6 +328,12 @@ static void aliasguid_query_handler(int status, ...@@ -328,6 +328,12 @@ static void aliasguid_query_handler(int status,
} else { } else {
*(__be64 *)&rec->all_recs[i * GUID_REC_SIZE] = *(__be64 *)&rec->all_recs[i * GUID_REC_SIZE] =
sm_response; sm_response;
if (required_val == 0)
mlx4_set_admin_guid(dev->dev,
sm_response,
(guid_rec->block_num
* NUM_ALIAS_GUID_IN_REC) + i,
cb_ctx->port);
goto next_entry; goto next_entry;
} }
} }
......
...@@ -46,21 +46,17 @@ ...@@ -46,21 +46,17 @@
static ssize_t show_admin_alias_guid(struct device *dev, static ssize_t show_admin_alias_guid(struct device *dev,
struct device_attribute *attr, char *buf) struct device_attribute *attr, char *buf)
{ {
int record_num;/*0-15*/
int guid_index_in_rec; /*0 - 7*/
struct mlx4_ib_iov_sysfs_attr *mlx4_ib_iov_dentry = struct mlx4_ib_iov_sysfs_attr *mlx4_ib_iov_dentry =
container_of(attr, struct mlx4_ib_iov_sysfs_attr, dentry); container_of(attr, struct mlx4_ib_iov_sysfs_attr, dentry);
struct mlx4_ib_iov_port *port = mlx4_ib_iov_dentry->ctx; struct mlx4_ib_iov_port *port = mlx4_ib_iov_dentry->ctx;
struct mlx4_ib_dev *mdev = port->dev; struct mlx4_ib_dev *mdev = port->dev;
__be64 sysadmin_ag_val;
record_num = mlx4_ib_iov_dentry->entry_num / 8 ; sysadmin_ag_val = mlx4_get_admin_guid(mdev->dev,
guid_index_in_rec = mlx4_ib_iov_dentry->entry_num % 8 ; mlx4_ib_iov_dentry->entry_num,
port->num);
return sprintf(buf, "%llx\n", return sprintf(buf, "%llx\n", be64_to_cpu(sysadmin_ag_val));
be64_to_cpu(*(__be64 *)&mdev->sriov.alias_guid.
ports_guid[port->num - 1].
all_rec_per_port[record_num].
all_recs[8 * guid_index_in_rec]));
} }
/* store_admin_alias_guid stores the (new) administratively assigned value of that GUID. /* store_admin_alias_guid stores the (new) administratively assigned value of that GUID.
...@@ -98,6 +94,10 @@ static ssize_t store_admin_alias_guid(struct device *dev, ...@@ -98,6 +94,10 @@ static ssize_t store_admin_alias_guid(struct device *dev,
/* Change the state to be pending for update */ /* Change the state to be pending for update */
mdev->sriov.alias_guid.ports_guid[port->num - 1].all_rec_per_port[record_num].status mdev->sriov.alias_guid.ports_guid[port->num - 1].all_rec_per_port[record_num].status
= MLX4_GUID_INFO_STATUS_IDLE ; = MLX4_GUID_INFO_STATUS_IDLE ;
mlx4_set_admin_guid(mdev->dev, cpu_to_be64(sysadmin_ag_val),
mlx4_ib_iov_dentry->entry_num,
port->num);
switch (sysadmin_ag_val) { switch (sysadmin_ag_val) {
case MLX4_GUID_FOR_DELETE_VAL: case MLX4_GUID_FOR_DELETE_VAL:
mdev->sriov.alias_guid.ports_guid[port->num - 1].all_rec_per_port[record_num].ownership mdev->sriov.alias_guid.ports_guid[port->num - 1].all_rec_per_port[record_num].ownership
......
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