From: Jason Gunthorpe <jgg@mellanox.com>
To: Leon Romanovsky <leon@kernel.org>
Cc: Doug Ledford <dledford@redhat.com>,
Leon Romanovsky <leonro@mellanox.com>,
RDMA mailing list <linux-rdma@vger.kernel.org>,
Erez Alfasi <ereza@mellanox.com>
Subject: Re: [PATCH rdma-next v1 2/4] RDMA/nldev: Allow different fill function per resource
Date: Mon, 9 Sep 2019 08:48:09 +0000 [thread overview]
Message-ID: <20190909084807.GC2843@mellanox.com> (raw)
In-Reply-To: <20190830081612.2611-3-leon@kernel.org>
On Fri, Aug 30, 2019 at 11:16:10AM +0300, Leon Romanovsky wrote:
> From: Erez Alfasi <ereza@mellanox.com>
>
> So far res_get_common_{dumpit, doit} was using the default
> resource fill function which was defined as part of the
> nldev_fill_res_entry fill_entries.
>
> Add a fill function pointer as an argument allows us to use
> different fill function in case we want to dump different
> values then 'rdma resource' flow do, but still use the same
> existing general resources dumping flow.
>
> If a NULL value is passed, it will be using the default
> fill function that was defined in 'fill_entries' for a
> given resource type.
>
> Signed-off-by: Erez Alfasi <ereza@mellanox.com>
> Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
> drivers/infiniband/core/nldev.c | 42 +++++++++++++++++++++++----------
> 1 file changed, 29 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/infiniband/core/nldev.c b/drivers/infiniband/core/nldev.c
> index cc08218f1ef7..47f7fe5432db 100644
> +++ b/drivers/infiniband/core/nldev.c
> @@ -1181,7 +1181,10 @@ static const struct nldev_fill_res_entry fill_entries[RDMA_RESTRACK_MAX] = {
>
> static int res_get_common_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
> struct netlink_ext_ack *extack,
> - enum rdma_restrack_type res_type)
> + enum rdma_restrack_type res_type,
> + int (*fill_func)(struct sk_buff*, bool,
> + struct rdma_restrack_entry*,
> + uint32_t))
Use a typedef?
> {
> const struct nldev_fill_res_entry *fe = &fill_entries[res_type];
> struct nlattr *tb[RDMA_NLDEV_ATTR_MAX];
> @@ -1244,7 +1247,12 @@ static int res_get_common_doit(struct sk_buff *skb, struct nlmsghdr *nlh,
> }
>
> has_cap_net_admin = netlink_capable(skb, CAP_NET_ADMIN);
> - ret = fe->fill_res_func(msg, has_cap_net_admin, res, port);
> +
> + if (fill_func)
> + ret = fill_func(msg, has_cap_net_admin, res, port);
> + else
> + ret = fe->fill_res_func(msg, has_cap_net_admin, res, port);
Weird to now be choosing between two function pointers
> -#define RES_GET_FUNCS(name, type) \
> - static int nldev_res_get_##name##_dumpit(struct sk_buff *skb, \
> +#define RES_GET_FUNCS(name, type) \
> + static int nldev_res_get_##name##_dumpit(struct sk_buff *skb, \
> struct netlink_callback *cb) \
> - { \
> - return res_get_common_dumpit(skb, cb, type); \
> - } \
> - static int nldev_res_get_##name##_doit(struct sk_buff *skb, \
> - struct nlmsghdr *nlh, \
> + { \
> + return res_get_common_dumpit(skb, cb, type, NULL); \
> + } \
> + static int nldev_res_get_##name##_doit(struct sk_buff *skb, \
> + struct nlmsghdr *nlh, \
> struct netlink_ext_ack *extack) \
> - { \
> - return res_get_common_doit(skb, nlh, extack, type); \
> + { \
> + return res_get_common_doit(skb, nlh, extack, type, NULL); \
> }
ie the NULL should be fill_entries[type]->fill_res_func?
Jason
next prev parent reply other threads:[~2019-09-09 8:48 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-30 8:16 [PATCH rdma-next v1 0/4] ODP information and statistics Leon Romanovsky
2019-08-30 8:16 ` [PATCH rdma-next v1 1/4] IB/mlx5: Introduce ODP diagnostic counters Leon Romanovsky
2019-09-09 8:45 ` Jason Gunthorpe
2019-09-09 9:40 ` Leon Romanovsky
2019-08-30 8:16 ` [PATCH rdma-next v1 2/4] RDMA/nldev: Allow different fill function per resource Leon Romanovsky
2019-09-09 8:48 ` Jason Gunthorpe [this message]
2019-09-09 9:46 ` Leon Romanovsky
2019-08-30 8:16 ` [PATCH rdma-next v1 3/4] RDMA/nldev: Provide MR statistics Leon Romanovsky
2019-08-30 10:18 ` Parav Pandit
2019-08-30 11:12 ` Leon Romanovsky
2019-08-30 12:06 ` Parav Pandit
2019-09-09 8:51 ` Jason Gunthorpe
2019-09-09 10:00 ` Leon Romanovsky
2019-08-30 8:16 ` [PATCH rdma-next v1 4/4] RDMA/mlx5: Return ODP type per MR Leon Romanovsky
2019-09-09 8:53 ` Jason Gunthorpe
2019-09-09 10:01 ` Leon Romanovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190909084807.GC2843@mellanox.com \
--to=jgg@mellanox.com \
--cc=dledford@redhat.com \
--cc=ereza@mellanox.com \
--cc=leon@kernel.org \
--cc=leonro@mellanox.com \
--cc=linux-rdma@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.