Re: [PATCH rdma-next v1 06/11] RDMA/nldev: Add support to get status of all counters
From: Jason Gunthorpe <jgg@nvidia.com>
Date: 2021-09-28 11:52:25
Also in:
lkml, netdev
On Tue, Sep 28, 2021 at 05:12:39PM +0800, Mark Zhang wrote:
On 9/28/2021 1:30 AM, Jason Gunthorpe wrote:quoted
On Wed, Sep 15, 2021 at 02:07:25AM +0300, Leon Romanovsky wrote:quoted
+static int stat_get_doit_default_counter(struct sk_buff *skb, + struct nlmsghdr *nlh, + struct netlink_ext_ack *extack, + struct nlattr *tb[]) +{ + struct rdma_hw_stats *stats; + struct ib_device *device; + u32 index, port; + int ret; + + if (!tb[RDMA_NLDEV_ATTR_DEV_INDEX] || !tb[RDMA_NLDEV_ATTR_PORT_INDEX]) + return -EINVAL; + + index = nla_get_u32(tb[RDMA_NLDEV_ATTR_DEV_INDEX]); + device = ib_device_get_by_index(sock_net(skb->sk), index); + if (!device) + return -EINVAL; + + port = nla_get_u32(tb[RDMA_NLDEV_ATTR_PORT_INDEX]); + if (!rdma_is_port_valid(device, port)) { + ret = -EINVAL; + goto end; + } + + stats = ib_get_hw_stats_port(device, port); + if (!stats) { + ret = -EINVAL; + goto end; + } + + if (tb[RDMA_NLDEV_ATTR_STAT_HWCOUNTER_DYNAMIC]) + ret = stat_get_doit_stats_list(skb, nlh, extack, tb, + device, port, stats); + else + ret = stat_get_doit_stats_values(skb, nlh, extack, tb, device, + port, stats);This seems strange, why is the output of a get contingent on a ignored input attribute? Shouldn't the HWCOUNTER_DYNAMIC just always be emitted?The CMD_STAT_GET is originally used to get the default hwcounter statistic (the value of all hwstats), now we also want to use this command to get a list of counters (just name and status), so kernel differentiates these 2 cases based on HWCOUNTER_DYNAMIC attr.
Don't do that, it is not how netlink works. Either the whole attribute should be returned or you need a new get command Jason