aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJianbo Liu <jianbol@nvidia.com>2025-07-03 11:45:27 +0300
committerSteffen Klassert <steffen.klassert@secunet.com>2025-07-04 09:30:22 +0200
commit95cfe23285a6de17f11715378c93e6aee6d0ca75 (patch)
treea7f50223b2110abe89b60b00026a884e9da9ed0b
parentxfrm: Duplicate SPI Handling (diff)
downloadwireguard-linux-95cfe23285a6de17f11715378c93e6aee6d0ca75.tar.xz
wireguard-linux-95cfe23285a6de17f11715378c93e6aee6d0ca75.zip
xfrm: Skip redundant statistics update for crypto offload
In the crypto offload path, every packet is still processed by the software stack. The state's statistics required for the expiration check are being updated in software. However, the code also calls xfrm_dev_state_update_stats(), which triggers a query to the hardware device to fetch statistics. This hardware query is redundant and introduces unnecessary performance overhead. Skip this call when it's crypto offload (not packet offload) to avoid the unnecessary hardware access, thereby improving performance. Signed-off-by: Jianbo Liu <jianbol@nvidia.com> Reviewed-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
-rw-r--r--net/xfrm/xfrm_state.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index b3950234b150..f0f66405b39d 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2282,7 +2282,12 @@ EXPORT_SYMBOL(xfrm_state_update);
int xfrm_state_check_expire(struct xfrm_state *x)
{
- xfrm_dev_state_update_stats(x);
+ /* All counters which are needed to decide if state is expired
+ * are handled by SW for non-packet offload modes. Simply skip
+ * the following update and save extra boilerplate in drivers.
+ */
+ if (x->xso.type == XFRM_DEV_OFFLOAD_PACKET)
+ xfrm_dev_state_update_stats(x);
if (!READ_ONCE(x->curlft.use_time))
WRITE_ONCE(x->curlft.use_time, ktime_get_real_seconds());