Skip to content

Commit b6b6714

Browse files
Stanislav Fomichevkuba-moo
authored andcommitted
net: create netdev_nl_sock to wrap bindings list
No functional changes. Next patches will add more granular locking to netdev_nl_sock. Signed-off-by: Stanislav Fomichev <[email protected]> Reviewed-by: Mina Almasry <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 17fef20 commit b6b6714

File tree

5 files changed

+27
-17
lines changed

5 files changed

+27
-17
lines changed

Documentation/netlink/specs/netdev.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,8 +745,8 @@ operations:
745745
- irq-suspend-timeout
746746

747747
kernel-family:
748-
headers: [ "linux/list.h"]
749-
sock-priv: struct list_head
748+
headers: [ "net/netdev_netlink.h"]
749+
sock-priv: struct netdev_nl_sock
750750

751751
mcast-groups:
752752
list:

include/net/netdev_netlink.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/* SPDX-License-Identifier: GPL-2.0 */
2+
#ifndef __NET_NETDEV_NETLINK_H
3+
#define __NET_NETDEV_NETLINK_H
4+
5+
#include <linux/list.h>
6+
7+
struct netdev_nl_sock {
8+
struct list_head bindings;
9+
};
10+
11+
#endif /* __NET_NETDEV_NETLINK_H */

net/core/netdev-genl-gen.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "netdev-genl-gen.h"
1010

1111
#include <uapi/linux/netdev.h>
12-
#include <linux/list.h>
12+
#include <net/netdev_netlink.h>
1313

1414
/* Integer value ranges */
1515
static const struct netlink_range_validation netdev_a_page_pool_id_range = {
@@ -217,7 +217,7 @@ struct genl_family netdev_nl_family __ro_after_init = {
217217
.n_split_ops = ARRAY_SIZE(netdev_nl_ops),
218218
.mcgrps = netdev_nl_mcgrps,
219219
.n_mcgrps = ARRAY_SIZE(netdev_nl_mcgrps),
220-
.sock_priv_size = sizeof(struct list_head),
220+
.sock_priv_size = sizeof(struct netdev_nl_sock),
221221
.sock_priv_init = __netdev_nl_sock_priv_init,
222222
.sock_priv_destroy = __netdev_nl_sock_priv_destroy,
223223
};

net/core/netdev-genl-gen.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <net/genetlink.h>
1111

1212
#include <uapi/linux/netdev.h>
13-
#include <linux/list.h>
13+
#include <net/netdev_netlink.h>
1414

1515
/* Common nested types */
1616
extern const struct nla_policy netdev_page_pool_info_nl_policy[NETDEV_A_PAGE_POOL_IFINDEX + 1];
@@ -42,7 +42,7 @@ enum {
4242

4343
extern struct genl_family netdev_nl_family;
4444

45-
void netdev_nl_sock_priv_init(struct list_head *priv);
46-
void netdev_nl_sock_priv_destroy(struct list_head *priv);
45+
void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv);
46+
void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv);
4747

4848
#endif /* _LINUX_NETDEV_GEN_H */

net/core/netdev-genl.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -829,8 +829,8 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
829829
{
830830
struct nlattr *tb[ARRAY_SIZE(netdev_queue_id_nl_policy)];
831831
struct net_devmem_dmabuf_binding *binding;
832-
struct list_head *sock_binding_list;
833832
u32 ifindex, dmabuf_fd, rxq_idx;
833+
struct netdev_nl_sock *priv;
834834
struct net_device *netdev;
835835
struct sk_buff *rsp;
836836
struct nlattr *attr;
@@ -845,10 +845,9 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
845845
ifindex = nla_get_u32(info->attrs[NETDEV_A_DEV_IFINDEX]);
846846
dmabuf_fd = nla_get_u32(info->attrs[NETDEV_A_DMABUF_FD]);
847847

848-
sock_binding_list = genl_sk_priv_get(&netdev_nl_family,
849-
NETLINK_CB(skb).sk);
850-
if (IS_ERR(sock_binding_list))
851-
return PTR_ERR(sock_binding_list);
848+
priv = genl_sk_priv_get(&netdev_nl_family, NETLINK_CB(skb).sk);
849+
if (IS_ERR(priv))
850+
return PTR_ERR(priv);
852851

853852
rsp = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
854853
if (!rsp)
@@ -909,7 +908,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
909908
goto err_unbind;
910909
}
911910

912-
list_add(&binding->list, sock_binding_list);
911+
list_add(&binding->list, &priv->bindings);
913912

914913
nla_put_u32(rsp, NETDEV_A_DMABUF_ID, binding->id);
915914
genlmsg_end(rsp, hdr);
@@ -931,17 +930,17 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
931930
return err;
932931
}
933932

934-
void netdev_nl_sock_priv_init(struct list_head *priv)
933+
void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv)
935934
{
936-
INIT_LIST_HEAD(priv);
935+
INIT_LIST_HEAD(&priv->bindings);
937936
}
938937

939-
void netdev_nl_sock_priv_destroy(struct list_head *priv)
938+
void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv)
940939
{
941940
struct net_devmem_dmabuf_binding *binding;
942941
struct net_devmem_dmabuf_binding *temp;
943942

944-
list_for_each_entry_safe(binding, temp, priv, list) {
943+
list_for_each_entry_safe(binding, temp, &priv->bindings, list) {
945944
rtnl_lock();
946945
net_devmem_unbind_dmabuf(binding);
947946
rtnl_unlock();

0 commit comments

Comments
 (0)