Hi,
Against latest net-2.6.14, but should apply to other versions as well. Please
apply.
diff-tree b13ca94bb73c79cbc1b34c4261b02c3df934498a (from
c097bee59e15d4703e53b8c21d9e9ce5da9365bc)
Author: Balazs Scheidler <[EMAIL PROTECTED]>
Date: Sat Aug 13 16:24:25 2005 +0200
As discussed [1] in a previous thread by DaveM and Harald the use of
arrays
in BSS should be avoided if possible.
This simple patch converts the XFRM code to use __get_free_pages instead
of statically allocated arrays (2048 * sizeof(list_head) == 16kB on 32
bit platforms).
[1] http://marc.theaimsgroup.com/?l=linux-netdev&m=112236788222811&w=2
Signed-off-by: Balazs Scheidler <[EMAIL PROTECTED]>
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -35,8 +35,8 @@ static DEFINE_SPINLOCK(xfrm_state_lock);
* Main use is finding SA after policy selected tunnel or transport mode.
* Also, it can be used by ah/esp icmp error handler to find offending SA.
*/
-static struct list_head xfrm_state_bydst[XFRM_DST_HSIZE];
-static struct list_head xfrm_state_byspi[XFRM_DST_HSIZE];
+static struct list_head *xfrm_state_bydst;
+static struct list_head *xfrm_state_byspi;
DECLARE_WAIT_QUEUE_HEAD(km_waitq);
EXPORT_SYMBOL(km_waitq);
@@ -1097,6 +1097,15 @@ void __init xfrm_state_init(void)
{
int i;
+ xfrm_state_bydst = (struct list_head *)
+ __get_free_pages(GFP_KERNEL,
+ get_order(sizeof(struct list_head) *
+ XFRM_DST_HSIZE * 2));
+
+ if (!xfrm_state_bydst)
+ panic("Error allocating XFRM state tables\n");
+
+ xfrm_state_byspi = &xfrm_state_bydst[XFRM_DST_HSIZE];
for (i=0; i<XFRM_DST_HSIZE; i++) {
INIT_LIST_HEAD(&xfrm_state_bydst[i]);
INIT_LIST_HEAD(&xfrm_state_byspi[i]);
--
Bazsi
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html