Jivin Eran Ben-Avi lays it down ...
...
> > I have made a few small changes to your patch so it should be safe on
> > 2.4 systems yet still select tasklets on 2.6 automatically.
> >
> > Could you have a look at it ? I have done some basic testing here
> > and it seems ok, haven't checked your performance increases yet ;-)
> >
> Sorry for the late response.
> It seems to be ok. I will test it more intensely in the next few days.
No problems, I have it sitting there ready to go :-)
Cheers,
Davidm
> > -----Inline Attachment Follows-----
> >
> > Index: openswan/linux/include/openswan/ipsec_rcv.h
> > ===================================================================
> > RCS file: openswan/linux/include/openswan/ipsec_rcv.h,v
> > retrieving revision 1.13
> > diff -u -r1.13 ipsec_rcv.h
> > --- openswan/linux/include/openswan/ipsec_rcv.h 26 Jun 2007
> > 06:28:52
> >
> -0000 1.13
> > +++ openswan/linux/include/openswan/ipsec_rcv.h 26 Sep 2007
> > 14:17:25
> >
> -0000
> > @@ -149,6 +149,9 @@
> >
> > #ifdef CONFIG_KLIPS_OCF
> > struct work_struct workq;
> > +#ifdef DECLARE_TASKLET
> > + struct tasklet_struct tasklet;
> > +#endif
> > #endif
> > #ifndef NET_21
> > struct net_device *devp;
> > Index: openswan/linux/include/openswan/ipsec_xmit.h
> > ===================================================================
> > RCS file: openswan/linux/include/openswan/ipsec_xmit.h,v
> > retrieving revision 1.9
> > diff -u -r1.9 ipsec_xmit.h
> > --- openswan/linux/include/openswan/ipsec_xmit.h 26 Jun
> > 2007
> >
> 05:26:25 -0000 1.9
> > +++ openswan/linux/include/openswan/ipsec_xmit.h 26 Sep
> > 2007
> >
> 14:17:25 -0000
> > @@ -140,6 +140,9 @@
> > int next_state;
> > #ifdef CONFIG_KLIPS_OCF
> > struct work_struct workq;
> > +#ifdef DECLARE_TASKLET
> > + struct tasklet_struct tasklet;
> > +#endif
> > #endif
> > #ifdef CONFIG_KLIPS_ALG
> > struct ipsec_alg_auth *ixt_a;
> > Index: openswan/linux/net/ipsec/ipsec_ocf.c
> > ===================================================================
> > RCS file: openswan/linux/net/ipsec/ipsec_ocf.c,v
> > retrieving revision 1.27
> > diff -u -r1.27 ipsec_ocf.c
> > --- openswan/linux/net/ipsec/ipsec_ocf.c 11 Jul 2007 00:35:01
> > -0000
> >
> 1.27
> > +++ openswan/linux/net/ipsec/ipsec_ocf.c 26 Sep 2007 14:17:25 -0000
> > @@ -56,7 +56,11 @@
> > #define USE_BATCH 1 /* enable batch mode */
> > #define USE_CBIMM 1 /* enable immediate callbacks */
> > #define FORCE_QS 0 /* force use of queues for continuation
> > of
> >
> state machine */
> > -
> > +#ifdef DECLARE_TASKLET
> > +#define USE_TASKLET 1 /* use tasklet for continuation of
> > state
> >
> machine */
> > +#else
> > +#define USE_TASKLET 0 /* don't use tasklet for continuation of
> > state
> >
> machine */
> > +#endif
> > /*
> > * Because some OCF operations are synchronous (ie.,
> > software
> >
> encryption)
> > * we need to protect ourselves from distructive re-entry. All we do
> > @@ -83,15 +87,21 @@
> > (*sm)(arg); \
> > })
> >
> > -#if FORCE_QS == 0
> > - #define PROCESS_NEXT(wq, wqsm, sm, arg) \
> > +#if USE_TASKLET == 1
> > + #define PROCESS_NEXT(this, wqsm, sm) ({ \
> > + tasklet_init(&this->tasklet, \
> > + (void (*)(unsigned long)) sm, (unsigned long)this); \
> > + tasklet_schedule(&this->tasklet); \
> > + })
> > +#elif FORCE_QS == 0
> > + #define PROCESS_NEXT(this, wqsm, sm) \
> > if (in_interrupt()) { \
> > - PROCESS_LATER(wq, wqsm, arg); \
> > + PROCESS_LATER(this->workq, wqsm, this); \
> > } else { \
> > - PROCESS_NOW(sm, arg); \
> > + PROCESS_NOW(sm, this); \
> > }
> > #else
> > - #define PROCESS_NEXT(wq, wqsm, sm, arg) PROCESS_LATER(wq,
> > wqsm,
> >
> arg)
> > + #define PROCESS_NEXT(this, wqsm, sm)
> > PROCESS_LATER(this->workq,
> >
> wqsm, this)
> > #endif
> >
> > /*
> > @@ -218,6 +228,7 @@
> > return 1;
> > }
> >
> > +#if USE_TASKLET == 0
> > #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
> > static void
> > ipsec_rsm_wq(struct work_struct *work)
> > @@ -228,6 +239,7 @@
> > #else
> > #define ipsec_rsm_wq ipsec_rsm
> > #endif
> > +#endif /* USE_TASKLET */
> >
> > static int
> > ipsec_ocf_rcv_cb(struct cryptop *crp)
> > @@ -235,7 +247,6 @@
> > struct ipsec_rcv_state *irs = (struct
> > ipsec_rcv_state
> >
> *)crp->crp_opaque;
> >
> > KLIPS_PRINT(debug_rcv, "klips_debug:ipsec_ocf_rcv_cb\n");
> > -
> > if (irs == NULL) {
> > KLIPS_PRINT(debug_rcv, "klips_debug:ipsec_ocf_rcv_cb: "
> > "NULL irs in callback\n");
> > @@ -273,7 +284,7 @@
> > crp = NULL;
> >
> > /* setup the rest of the processing now */
> > - PROCESS_NEXT(irs->workq, ipsec_rsm_wq, ipsec_rsm, irs);
> > + PROCESS_NEXT(irs, ipsec_rsm_wq, ipsec_rsm);
> > return 0;
> > }
> >
> > @@ -396,6 +407,7 @@
> > return(IPSEC_RCV_PENDING);
> > }
> >
> > +#if USE_TASKLET == 0
> > #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
> > static void
> > ipsec_xsm_wq(struct work_struct *work)
> > @@ -406,6 +418,7 @@
> > #else
> > #define ipsec_xsm_wq ipsec_xsm
> > #endif
> > +#endif /* USE_TASKLET */
> >
> > static int
> > ipsec_ocf_xmit_cb(struct cryptop *crp)
> > @@ -445,7 +458,7 @@
> > crp = NULL;
> >
> > /* setup the rest of the processing now */
> > - PROCESS_NEXT(ixs->workq, ipsec_xsm_wq, ipsec_xsm, ixs);
> > + PROCESS_NEXT(ixs, ipsec_xsm_wq, ipsec_xsm);
> > return 0;
> > }
> >
> >
> >
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
>
--
David McCullough, [EMAIL PROTECTED], Ph:+61 734352815
Secure Computing - SnapGear http://www.uCdot.org http://www.cyberguard.com
-
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html