eugenelisstreams,

On Thu, 15 Dec 2005, [EMAIL PROTECTED] wrote:

> 
>    >   lis_lockqf()   will   only  return  an  error  if  `q'  has  qlock
>    syncrhonization
>    >  specified  (the  function merely returns zero if q->q_qsp is NULL).
>    This
>    > feature was not even present in 2.16.18, so I'm a little confused by
>    the
>    > comparison.
> 
>    I'm probably missing something.
> 
>    My understanding was:
> 
>    1. The lis_qlockf() function exists in both 2.16.18 and 2.18.0.
> 
>    2.  In  _both_  releases  it  serves exactly  the  same purposes, like
>    protecting
>       queue when, say, put function executed.
> 
>    2a. In  _both_  releases  it  is  called  in  pretty much the same LiS
>    places,
>        like in lis_safe_do_putmsg() it protects queue while
>        (*(q->q_qinfo->qi_putp))(q, mp);  is executed.
> 
>    3. The difference is in implementation of locking functionality:
>        in 2.16.18 lis_lockq is a _spinlock_
>        in 2.18.0  lis_lockq is a _semaphore_.
> 
>    4. The advantage of semaphore is that while, say,
>        (*(q->q_qinfo->qi_putp))(q,  mp) with  queue locked is executed on
>    one CPU,
>       the concurrent lis_lockq() attempt will give up its CPU (on 2.18.)
>       while the spinlock implementation will be buzzing on one CPU
>       when aforementioned 'put' is executed in another CPU.
> 
>    So, I think, comparison is 100% justified.
>    Or I owe you all an apology?

Same name different purpose:

int
lis_lockq_fcn(queue_t *q, char *file, int line)
{
        .
        .
        .
        if ((q->q_flag & QOPENING) || (qs = q->q_qsp) == NULL)
                return (0);     /* no locking, no contention */
        .
        .
        .


int
lis_set_q_sync(queue_t *q, int qlock_option)
{
        static lis_q_sync_t qsz;

        lis_free_q_sync(q);     /* clear out old option */
        /* sets q_qlock_option to -1 */
        switch (qlock_option) {
        case LIS_QLOCK_NONE:
                q->q_qsp = NULL;
                q->q_other->q_qsp = NULL;
                break;

        case LIS_QLOCK_QUEUE:
        default:
                qlock_option = LIS_QLOCK_QUEUE;
                q->q_qsp = LIS_QSYNC_ALLOC(sizeof(lis_q_sync_t), "Qsync");

> 
> 
>    > Your driver or module needed to be MP-safe under 2.16.18,
>    >   so   I   don't   understand  why  you  are  using  the  dubious  q
>    synchronization
>    > under LiS 2.18.
> 
>    My driver is MP safe and it works just fine on 2.16.18.
> 
> 
>    > Perhaps you are just allowing your driver or
>    > module to default (which would be LIS_QLOCK_QUEUE), instead of
>    > specifying LIS_QLOCK_NONE.
>    Assuming that I misundersood the lis_lockq concept,
>    where should I specify LIS_QLOCK_NONE ?

Specify it in your Config file, like so:

        #
        # Queue locking options
        #
        # 0 no locking
        # 1 lock by individual queue semaphore
        # 2 lock by queue pair semaphore
        # 3 lock with global semaphore
        #
        #       type   name             option
        qlock   driver loop-around      0
        qlock   driver inet             0
        qlock   driver mini-mux         2
        qlock   module relay            0
        qlock   module relay2           2

> 
>    >I'd suggest the following instead:
>    >   while ((err = lis_lockqf(q, f, l)) < 0) ;
>    If signal is already posted wouldn't underlying down_interruptible()
>    return EINTR all the time? (I probably need to look into source).
>    thanks a lot for you comments,

Your right.  Better to set your qlock to 0.

--brian

>    --
>    Eugene
>      _________________________________________________________________
> 
>    Try the New Netscape Mail Today!
>    Virtually Spam-Free | More Storage | Import Your Contact List
>    [1]http://mail.netscape.com
> 
> References
> 
>    1. http://mail.netscape.com/

-- 
Brian F. G. Bidulock    ¦ The reasonable man adapts himself to the ¦
[EMAIL PROTECTED]    ¦ world; the unreasonable one persists in  ¦
http://www.openss7.org/ ¦ trying  to adapt the  world  to himself. ¦
                        ¦ Therefore  all  progress  depends on the ¦
                        ¦ unreasonable man. -- George Bernard Shaw ¦
_______________________________________________
Linux-streams mailing list
[email protected]
http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

Reply via email to