Message ID | 20240126002550.169608-1-stephen@networkplumber.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 3f3ebe53620818f6e9b029850cb47b96a4ac5b3b |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net/tun: use reciprocal_scale | expand |
Stephen Hemminger wrote: > Use the inline function reciprocal_scale rather than open coding > the scale optimization. Also, remove unnecessary initializations. > Resulting compiled code is unchanged (according to godbolt). > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Targeting net-next Reviewed-by: Willem de Bruijn <willemb@google.com>
On Fri, Jan 26, 2024 at 8:26 AM Stephen Hemminger <stephen@networkplumber.org> wrote: > > Use the inline function reciprocal_scale rather than open coding > the scale optimization. Also, remove unnecessary initializations. > Resulting compiled code is unchanged (according to godbolt). > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> Acked-by: Jason Wang <jasowang@redhat.com> Thanks
Hello: This patch was applied to netdev/net-next.git (main) by Paolo Abeni <pabeni@redhat.com>: On Thu, 25 Jan 2024 16:25:11 -0800 you wrote: > Use the inline function reciprocal_scale rather than open coding > the scale optimization. Also, remove unnecessary initializations. > Resulting compiled code is unchanged (according to godbolt). > > Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> > --- > drivers/net/tun.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) Here is the summary with links: - net/tun: use reciprocal_scale https://git.kernel.org/netdev/net-next/c/3f3ebe536208 You are awesome, thank you!
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index 4a4f8c8e79fa..e335ece47dec 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -54,6 +54,7 @@ #include <linux/if_tun.h> #include <linux/if_vlan.h> #include <linux/crc32.h> +#include <linux/math.h> #include <linux/nsproxy.h> #include <linux/virtio_net.h> #include <linux/rcupdate.h> @@ -523,8 +524,7 @@ static inline void tun_flow_save_rps_rxhash(struct tun_flow_entry *e, u32 hash) static u16 tun_automq_select_queue(struct tun_struct *tun, struct sk_buff *skb) { struct tun_flow_entry *e; - u32 txq = 0; - u32 numqueues = 0; + u32 txq, numqueues; numqueues = READ_ONCE(tun->numqueues); @@ -534,8 +534,7 @@ static u16 tun_automq_select_queue(struct tun_struct *tun, struct sk_buff *skb) tun_flow_save_rps_rxhash(e, txq); txq = e->queue_index; } else { - /* use multiply and shift instead of expensive divide */ - txq = ((u64)txq * numqueues) >> 32; + txq = reciprocal_scale(txq, numqueues); } return txq;
Use the inline function reciprocal_scale rather than open coding the scale optimization. Also, remove unnecessary initializations. Resulting compiled code is unchanged (according to godbolt). Signed-off-by: Stephen Hemminger <stephen@networkplumber.org> --- drivers/net/tun.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)