> -----Original Message----- > From: Alexei Starovoitov <alexei.starovoitov@xxxxxxxxx> > Sent: Friday, March 15, 2024 9:18 PM > To: Vyavahare, Tushar <tushar.vyavahare@xxxxxxxxx> > Cc: bpf <bpf@xxxxxxxxxxxxxxx>; Network Development > <netdev@xxxxxxxxxxxxxxx>; Björn Töpel <bjorn@xxxxxxxxxx>; Karlsson, Magnus > <magnus.karlsson@xxxxxxxxx>; Fijalkowski, Maciej > <maciej.fijalkowski@xxxxxxxxx>; Jonathan Lemon > <jonathan.lemon@xxxxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>; Jakub > Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni <pabeni@xxxxxxxxxx>; Alexei > Starovoitov <ast@xxxxxxxxxx>; Daniel Borkmann <daniel@xxxxxxxxxxxxx>; > Sarkar, Tirthendu <tirthendu.sarkar@xxxxxxxxx> > Subject: Re: [PATCH bpf-next 4/6] selftests/xsk: implement set_hw_ring_size > function to configure interface ring size > > On Fri, Mar 15, 2024 at 7:23 AM Tushar Vyavahare > <tushar.vyavahare@xxxxxxxxx> wrote: > > > > Introduce a new function called set_hw_ring_size that allows for the > > dynamic configuration of the ring size within the interface. > > > > Signed-off-by: Tushar Vyavahare <tushar.vyavahare@xxxxxxxxx> > > --- > > tools/testing/selftests/bpf/xskxceiver.c | 35 > > ++++++++++++++++++++++++ > > 1 file changed, 35 insertions(+) > > > > diff --git a/tools/testing/selftests/bpf/xskxceiver.c > > b/tools/testing/selftests/bpf/xskxceiver.c > > index 32005bfb9c9f..aafa78307586 100644 > > --- a/tools/testing/selftests/bpf/xskxceiver.c > > +++ b/tools/testing/selftests/bpf/xskxceiver.c > > @@ -441,6 +441,41 @@ static int get_hw_ring_size(struct ifobject *ifobj) > > return 0; > > } > > > > +static int set_hw_ring_size(struct ifobject *ifobj, u32 tx, u32 rx) { > > + struct ethtool_ringparam ring_param = {0}; > > + struct ifreq ifr = {0}; > > + int sockfd, ret; > > + u32 ctr = 0; > > + > > + sockfd = socket(AF_INET, SOCK_DGRAM, 0); > > + if (sockfd < 0) > > + return errno; > > + > > + memcpy(ifr.ifr_name, ifobj->ifname, sizeof(ifr.ifr_name)); > > + > > + ring_param.tx_pending = tx; > > + ring_param.rx_pending = rx; > > + > > + ring_param.cmd = ETHTOOL_SRINGPARAM; > > + ifr.ifr_data = (char *)&ring_param; > > + > > + while (ctr++ < SOCK_RECONF_CTR) { > > + ret = ioctl(sockfd, SIOCETHTOOL, &ifr); > > + if (!ret) > > + break; > > + /* Retry if it fails */ > > + if (ctr >= SOCK_RECONF_CTR) { > > + close(sockfd); > > + return errno; > > + } > > + usleep(USLEEP_MAX); > > Does it really have to sleep or copy paste from other places? > This ioctl() is supposed to do synchronous config, no? Response in the previous mail to Stanislav Fomichev <sdf@xxxxxxxxxx>