lkml.org 
[lkml]   [2018]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 142/361] RDMA/core: Do not expose unsupported counters
    Date
    4.19-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Parav Pandit <parav@mellanox.com>

    [ Upstream commit 0f6ef65d1c6ec8deb5d0f11f86631ec4cfe8f22e ]

    If the provider driver (such as rdma_rxe) doesn't support pma counters,
    avoid exposing its directory similar to optional hw_counters directory.
    If core fails to read the PMA counter, return an error so that user can
    retry later if needed.

    Fixes: 35c4cbb17811 ("IB/core: Create get_perf_mad function in sysfs.c")
    Reported-by: Holger Hoffstätte <holger@applied-asynchrony.com>
    Tested-by: Holger Hoffstätte <holger@applied-asynchrony.com>
    Signed-off-by: Parav Pandit <parav@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/infiniband/core/sysfs.c | 19 ++++++++++++-------
    1 file changed, 12 insertions(+), 7 deletions(-)

    --- a/drivers/infiniband/core/sysfs.c
    +++ b/drivers/infiniband/core/sysfs.c
    @@ -512,7 +512,7 @@ static ssize_t show_pma_counter(struct i
    ret = get_perf_mad(p->ibdev, p->port_num, tab_attr->attr_id, &data,
    40 + offset / 8, sizeof(data));
    if (ret < 0)
    - return sprintf(buf, "N/A (no PMA)\n");
    + return ret;

    switch (width) {
    case 4:
    @@ -1057,10 +1057,12 @@ static int add_port(struct ib_device *de
    goto err_put;
    }

    - p->pma_table = get_counter_table(device, port_num);
    - ret = sysfs_create_group(&p->kobj, p->pma_table);
    - if (ret)
    - goto err_put_gid_attrs;
    + if (device->process_mad) {
    + p->pma_table = get_counter_table(device, port_num);
    + ret = sysfs_create_group(&p->kobj, p->pma_table);
    + if (ret)
    + goto err_put_gid_attrs;
    + }

    p->gid_group.name = "gids";
    p->gid_group.attrs = alloc_group_attrs(show_port_gid, attr.gid_tbl_len);
    @@ -1173,7 +1175,8 @@ err_free_gid:
    p->gid_group.attrs = NULL;

    err_remove_pma:
    - sysfs_remove_group(&p->kobj, p->pma_table);
    + if (p->pma_table)
    + sysfs_remove_group(&p->kobj, p->pma_table);

    err_put_gid_attrs:
    kobject_put(&p->gid_attr_group->kobj);
    @@ -1285,7 +1288,9 @@ static void free_port_list_attributes(st
    kfree(port->hw_stats);
    free_hsag(&port->kobj, port->hw_stats_ag);
    }
    - sysfs_remove_group(p, port->pma_table);
    +
    + if (port->pma_table)
    + sysfs_remove_group(p, port->pma_table);
    sysfs_remove_group(p, &port->pkey_group);
    sysfs_remove_group(p, &port->gid_group);
    sysfs_remove_group(&port->gid_attr_group->kobj,

    \
     
     \ /
      Last update: 2018-11-12 01:05    [W:4.169 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site