wlan-ap-Telecominfraproject/feeds/qca-wifi-7/ipq53xx/patches-6.1/0406-xfrm-Add-API-to-override-state-afinfo-object.patch
John Crispin 68cf54d9f7 qca-wifi-7: update to ath12.5.5
Signed-off-by: John Crispin <john@phrozen.org>
2025-02-27 12:45:52 +01:00

58 lines
2.0 KiB
Diff

From 7c62a1f9d78e34ce5c042d98f2632471a3c3f713 Mon Sep 17 00:00:00 2001
From: Neelansh Mittal <neelanshm@codeaurora.org>
Date: Thu, 5 Nov 2020 09:45:05 +0530
Subject: [PATCH] xfrm: Add API to override state afinfo object.
Add a new API that can be used to override the
currently registered xfrm_state_afinfo object
with a newly provided one.
Change-Id: Ic520dc496e14ddf5803d5769a3bd14cbfd98749c
Signed-off-by: Neelansh Mittal <neelanshm@codeaurora.org>
Signed-off-by: Pavithra R <quic_pavir@quicinc.com>
---
include/net/xfrm.h | 1 +
net/xfrm/xfrm_state.c | 14 ++++++++++++++
2 files changed, 15 insertions(+)
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 21808995176f1..f38789ebf482b 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -383,6 +383,7 @@ int xfrm_state_register_afinfo(struct xfrm_state_afinfo *afinfo);
int xfrm_state_unregister_afinfo(struct xfrm_state_afinfo *afinfo);
struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family);
struct xfrm_state_afinfo *xfrm_state_afinfo_get_rcu(unsigned int family);
+struct xfrm_state_afinfo *xfrm_state_update_afinfo(unsigned int family, struct xfrm_state_afinfo *new);
struct xfrm_input_afinfo {
u8 family;
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 3d47327fc4509..a63351d3054cb 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2555,6 +2555,20 @@ struct xfrm_state_afinfo *xfrm_state_get_afinfo(unsigned int family)
return afinfo;
}
+struct xfrm_state_afinfo *xfrm_state_update_afinfo(unsigned int family, struct xfrm_state_afinfo *new)
+{
+ struct xfrm_state_afinfo *afinfo;
+
+ spin_lock_bh(&xfrm_state_afinfo_lock);
+ afinfo = rcu_dereference_protected(xfrm_state_afinfo[family], lockdep_is_held(&xfrm_state_afinfo_lock));
+ rcu_assign_pointer(xfrm_state_afinfo[afinfo->family], new);
+ spin_unlock_bh(&xfrm_state_afinfo_lock);
+
+ synchronize_rcu();
+ return afinfo;
+}
+EXPORT_SYMBOL(xfrm_state_update_afinfo);
+
void xfrm_flush_gc(void)
{
flush_work(&xfrm_state_gc_work);
--
2.34.1