mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 06:49:52 +00:00
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 <sdf@fomichev.me> Reviewed-by: Mina Almasry <almasrymina@google.com> Link: https://patch.msgid.link/20250311144026.4154277-2-sdf@fomichev.me Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
17fef20423
commit
b6b67141d6
@ -745,8 +745,8 @@ operations:
|
||||
- irq-suspend-timeout
|
||||
|
||||
kernel-family:
|
||||
headers: [ "linux/list.h"]
|
||||
sock-priv: struct list_head
|
||||
headers: [ "net/netdev_netlink.h"]
|
||||
sock-priv: struct netdev_nl_sock
|
||||
|
||||
mcast-groups:
|
||||
list:
|
||||
|
11
include/net/netdev_netlink.h
Normal file
11
include/net/netdev_netlink.h
Normal file
@ -0,0 +1,11 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __NET_NETDEV_NETLINK_H
|
||||
#define __NET_NETDEV_NETLINK_H
|
||||
|
||||
#include <linux/list.h>
|
||||
|
||||
struct netdev_nl_sock {
|
||||
struct list_head bindings;
|
||||
};
|
||||
|
||||
#endif /* __NET_NETDEV_NETLINK_H */
|
@ -9,7 +9,7 @@
|
||||
#include "netdev-genl-gen.h"
|
||||
|
||||
#include <uapi/linux/netdev.h>
|
||||
#include <linux/list.h>
|
||||
#include <net/netdev_netlink.h>
|
||||
|
||||
/* Integer value ranges */
|
||||
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 = {
|
||||
.n_split_ops = ARRAY_SIZE(netdev_nl_ops),
|
||||
.mcgrps = netdev_nl_mcgrps,
|
||||
.n_mcgrps = ARRAY_SIZE(netdev_nl_mcgrps),
|
||||
.sock_priv_size = sizeof(struct list_head),
|
||||
.sock_priv_size = sizeof(struct netdev_nl_sock),
|
||||
.sock_priv_init = __netdev_nl_sock_priv_init,
|
||||
.sock_priv_destroy = __netdev_nl_sock_priv_destroy,
|
||||
};
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include <net/genetlink.h>
|
||||
|
||||
#include <uapi/linux/netdev.h>
|
||||
#include <linux/list.h>
|
||||
#include <net/netdev_netlink.h>
|
||||
|
||||
/* Common nested types */
|
||||
extern const struct nla_policy netdev_page_pool_info_nl_policy[NETDEV_A_PAGE_POOL_IFINDEX + 1];
|
||||
@ -42,7 +42,7 @@ enum {
|
||||
|
||||
extern struct genl_family netdev_nl_family;
|
||||
|
||||
void netdev_nl_sock_priv_init(struct list_head *priv);
|
||||
void netdev_nl_sock_priv_destroy(struct list_head *priv);
|
||||
void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv);
|
||||
void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv);
|
||||
|
||||
#endif /* _LINUX_NETDEV_GEN_H */
|
||||
|
@ -829,8 +829,8 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct nlattr *tb[ARRAY_SIZE(netdev_queue_id_nl_policy)];
|
||||
struct net_devmem_dmabuf_binding *binding;
|
||||
struct list_head *sock_binding_list;
|
||||
u32 ifindex, dmabuf_fd, rxq_idx;
|
||||
struct netdev_nl_sock *priv;
|
||||
struct net_device *netdev;
|
||||
struct sk_buff *rsp;
|
||||
struct nlattr *attr;
|
||||
@ -845,10 +845,9 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
|
||||
ifindex = nla_get_u32(info->attrs[NETDEV_A_DEV_IFINDEX]);
|
||||
dmabuf_fd = nla_get_u32(info->attrs[NETDEV_A_DMABUF_FD]);
|
||||
|
||||
sock_binding_list = genl_sk_priv_get(&netdev_nl_family,
|
||||
NETLINK_CB(skb).sk);
|
||||
if (IS_ERR(sock_binding_list))
|
||||
return PTR_ERR(sock_binding_list);
|
||||
priv = genl_sk_priv_get(&netdev_nl_family, NETLINK_CB(skb).sk);
|
||||
if (IS_ERR(priv))
|
||||
return PTR_ERR(priv);
|
||||
|
||||
rsp = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
|
||||
if (!rsp)
|
||||
@ -909,7 +908,7 @@ int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info)
|
||||
goto err_unbind;
|
||||
}
|
||||
|
||||
list_add(&binding->list, sock_binding_list);
|
||||
list_add(&binding->list, &priv->bindings);
|
||||
|
||||
nla_put_u32(rsp, NETDEV_A_DMABUF_ID, binding->id);
|
||||
genlmsg_end(rsp, hdr);
|
||||
@ -931,17 +930,17 @@ err_genlmsg_free:
|
||||
return err;
|
||||
}
|
||||
|
||||
void netdev_nl_sock_priv_init(struct list_head *priv)
|
||||
void netdev_nl_sock_priv_init(struct netdev_nl_sock *priv)
|
||||
{
|
||||
INIT_LIST_HEAD(priv);
|
||||
INIT_LIST_HEAD(&priv->bindings);
|
||||
}
|
||||
|
||||
void netdev_nl_sock_priv_destroy(struct list_head *priv)
|
||||
void netdev_nl_sock_priv_destroy(struct netdev_nl_sock *priv)
|
||||
{
|
||||
struct net_devmem_dmabuf_binding *binding;
|
||||
struct net_devmem_dmabuf_binding *temp;
|
||||
|
||||
list_for_each_entry_safe(binding, temp, priv, list) {
|
||||
list_for_each_entry_safe(binding, temp, &priv->bindings, list) {
|
||||
rtnl_lock();
|
||||
net_devmem_unbind_dmabuf(binding);
|
||||
rtnl_unlock();
|
||||
|
Loading…
x
Reference in New Issue
Block a user