On Mon, Nov 23, 2020 at 2:37 PM Zhu Yanjun <zyjzyj2...@gmail.com> wrote: > > On Mon, Nov 23, 2020 at 8:19 PM Magnus Karlsson > <magnus.karls...@gmail.com> wrote: > > > > On Mon, Nov 23, 2020 at 1:11 PM Zhu Yanjun <zyjzyj2...@gmail.com> wrote: > > > > > > On Mon, Nov 23, 2020 at 8:05 PM <zyjzyj2...@gmail.com> wrote: > > > > > > > > From: Zhu Yanjun <zyjzyj2...@gmail.com> > > > > > > > > The function xsk_map_inc is a simple wrapper of bpf_map_inc and > > > > always returns zero. As such, replacing this function with bpf_map_inc > > > > and removing the test code. > > > > > > > > Signed-off-by: Zhu Yanjun <zyjzyj2...@gmail.com> > > > > > > > > > > --- > > > > net/xdp/xsk.c | 1 - > > > > net/xdp/xsk.h | 1 - > > > > net/xdp/xskmap.c | 13 +------------ > > > > 3 files changed, 1 insertion(+), 14 deletions(-) > > > > > > > > diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c > > > > index cfbec3989a76..c1b8a888591c 100644 > > > > --- a/net/xdp/xsk.c > > > > +++ b/net/xdp/xsk.c > > > > @@ -548,7 +548,6 @@ static struct xsk_map > > > > *xsk_get_map_list_entry(struct xdp_sock *xs, > > > > node = list_first_entry_or_null(&xs->map_list, struct > > > > xsk_map_node, > > > > node); > > > > if (node) { > > > > - WARN_ON(xsk_map_inc(node->map)); > > > > This should be bpf_map_inc(&node->map->map); Think you forgot to > > convert this one. > > In include/linux/bpf.h: > " > ... > 1213 void bpf_map_inc(struct bpf_map *map); > ... > "
Sorry if I was not clear enough. What I meant is that you cannot just remove WARN_ON(xsk_map_inc(node->map)). You need to replace it with bpf_map_inc(&node->map->map), otherwise you will not make a map_inc and the refcount will be wrong. Please send a v3 using git send-email so it is nice and clean. > Zhu Yanjun > > > > > > map = node->map; > > > > *map_entry = node->map_entry; > > > > } > > > > diff --git a/net/xdp/xsk.h b/net/xdp/xsk.h > > > > index b9e896cee5bb..0aad25c0e223 100644 > > > > --- a/net/xdp/xsk.h > > > > +++ b/net/xdp/xsk.h > > > > @@ -41,7 +41,6 @@ static inline struct xdp_sock *xdp_sk(struct sock *sk) > > > > > > > > void xsk_map_try_sock_delete(struct xsk_map *map, struct xdp_sock *xs, > > > > struct xdp_sock **map_entry); > > > > -int xsk_map_inc(struct xsk_map *map); > > > > void xsk_map_put(struct xsk_map *map); > > > > void xsk_clear_pool_at_qid(struct net_device *dev, u16 queue_id); > > > > int xsk_reg_pool_at_qid(struct net_device *dev, struct xsk_buff_pool > > > > *pool, > > > > diff --git a/net/xdp/xskmap.c b/net/xdp/xskmap.c > > > > index 49da2b8ace8b..6b7e9a72b101 100644 > > > > --- a/net/xdp/xskmap.c > > > > +++ b/net/xdp/xskmap.c > > > > @@ -11,12 +11,6 @@ > > > > > > > > #include "xsk.h" > > > > > > > > -int xsk_map_inc(struct xsk_map *map) > > > > -{ > > > > - bpf_map_inc(&map->map); > > > > - return 0; > > > > -} > > > > > > Hi, Magnus > > > > > > The function xsk_map_inc is replaced with bpf_map_inc. > > > > > > Zhu Yanjun > > > > > > > - > > > > void xsk_map_put(struct xsk_map *map) > > > > { > > > > bpf_map_put(&map->map); > > > > @@ -26,17 +20,12 @@ static struct xsk_map_node > > > > *xsk_map_node_alloc(struct xsk_map *map, > > > > struct xdp_sock > > > > **map_entry) > > > > { > > > > struct xsk_map_node *node; > > > > - int err; > > > > > > > > node = kzalloc(sizeof(*node), GFP_ATOMIC | __GFP_NOWARN); > > > > if (!node) > > > > return ERR_PTR(-ENOMEM); > > > > > > > > - err = xsk_map_inc(map); > > > > - if (err) { > > > > - kfree(node); > > > > - return ERR_PTR(err); > > > > - } > > > > + bpf_map_inc(&map->map); > > > > > > > > node->map = map; > > > > node->map_entry = map_entry; > > > > -- > > > > 2.25.1 > > > >