From: Maciej Fijalkowski <maciej.fijalkowski@xxxxxxxxx> Date: Wed, 15 Feb 2023 15:33:09 +0100 > Xsk Tx can be triggered via either sendmsg() or poll() syscalls. These > two paths share a call to common function xsk_xmit() which has two > sanity checks within. A pseudo code example to show the two paths: [...] > @@ -627,17 +618,31 @@ static bool xsk_no_wakeup(struct sock *sk) > #endif > } > > +static int xsk_check_common(struct xdp_sock *xs) > +{ > + if (unlikely(!xsk_is_bound(xs))) > + return -ENXIO; > + if (unlikely(!(xs->dev->flags & IFF_UP))) > + return -ENETDOWN; > + > + return 0; > +} It's called several times in the code. Have you tried marking it inline and compare the object code? I'm worrying a bit some beyond-smart compiler can uninline these 4 lines and slow down things for no reason. (it's okay to have inlines in C files if proven that not marking them hurts a lot) > + > static int __xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len) The rest is: Reviewed-by: Alexander Lobakin <aleksander.lobakin@xxxxxxxxx> Thanks, Olek