Linux cryptographic layer development
 help / color / mirror / Atom feed
From: David McCullough <David_Mccullough@securecomputing.com>
To: Eran Ben-Avi <eranpublic@yahoo.com>
Cc: linux-crypto@vger.kernel.org, ocf-linux-users@lists.sourceforge.net
Subject: Re: Openswan 2.4.9 - tasklet or workqueue ?
Date: Mon, 5 Nov 2007 13:35:46 +1000	[thread overview]
Message-ID: <20071105033545.GA11607@securecomputing.com> (raw)
In-Reply-To: <43810.2490.qm@web62505.mail.re1.yahoo.com>


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,  david_mccullough@securecomputing.com,   Ph:+61 734352815
Secure Computing - SnapGear  http://www.uCdot.org http://www.cyberguard.com

  reply	other threads:[~2007-11-05  3:34 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-11-01 14:34 Openswan 2.4.9 - tasklet or workqueue ? Eran Ben-Avi
2007-11-05  3:35 ` David McCullough [this message]
     [not found] <20070827224021.GA23450@securecomputing.com>
2007-08-30  7:58 ` Eran Ben-Avi
2007-08-30 22:44   ` David McCullough
2007-09-11 19:19   ` Kabir Ahsan-r9aahw
2007-09-12 12:13     ` David McCullough
2007-09-26 14:26   ` David McCullough
  -- strict thread matches above, loose matches on Subject: below --
2007-08-27  7:26 Eran Ben-Avi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20071105033545.GA11607@securecomputing.com \
    --to=david_mccullough@securecomputing.com \
    --cc=eranpublic@yahoo.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=ocf-linux-users@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox