Oleg,
lis_strqset already locks the queue if band structures are involved. Locking
before lis_strqset is not necessary. lis_strqset is MP-safe. You only might
need to do that if you were doing
LIS_QISRLOCK(q, &flags);
strqset(...)
strqset(...)
strqset(...)
strqset(...)
strqset(...)
strqset(...)
LIS_QISRUNLOCK(q, &flags);
and you wanted all the strqset's together to be treated atomic.
Otherwise you can get away with just:
strqset(...)
--brian
On Wed, 01 Oct 2003, Oleg Kodel wrote:
> I freeze the q before strqset (for of chainging water marks and packet size
> boundaries).
> So, I think the
> LIS_QISRLOCK(q, &flags);
> strqset(...)
> LIS_QISRUNLOCK(q, &flags);
> Is acceptable solution.
>
> > -----Original Message-----
> > From: David Grothe [mailto:[EMAIL PROTECTED]
> > Sent: Tuesday, September 30, 2003 10:10 PM
> > To: [EMAIL PROTECTED]
> > Cc: Oleg Kodel; '[EMAIL PROTECTED]'
> > Subject: Re: [Linux-streams] Freezestr() analoug in the LIS
> >
> >
> > In LiS, upon entry to a put or service procedure the running
> > thread holds a
> > lock on the queue that is passed in as a parameter (not the queue
> > pair). While this STREAMS routine is running, other threads
> > may use putq
> > or getq on the queue with no blocking. But another thread
> > cannot do a
> > putnext() into the queue or cause the queue's service
> > procedure to be invoked.
> >
> > So the stream is about "half frozen" implicitly. Depending
> > upon what Oleg
> > wants to do, that may be good enough. If he is reaching into
> > the queue and
> > manipulating structure elements that the STREAMS executive
> > also manipulates
> > then he is playing with fire, freezestr() or no freezestr().
> > If he is
> > simply trying to accomplish exclusivity of access to the
> > queue between
> > members of his own family of drivers then a private lock
> > would be more
> > appropriate.
> >
> > The Solaris documentation on freezestr() says, in part:
> >
> > >There are usually better ways to accomplish things than by
> > freezing the
> > >stream.
> >
> > So I am regarding this as a low priority change.
> >
> > -- Dave
> >
> >
> > At 02:24 PM 9/30/2003 Tuesday, Brian F. G. Bidulock wrote:
> > >Dave,
> > >
> > >Just dummying out would be dangerous on MP. For LfS I take
> > a read lock
> > >on the stream head and take a write lock on queue saving local irq
> > >flags in the queue_t structure. For unfreezestr I undo the
> > two locks
> > >and restore irq flags from the queue_t structure. I save
> > the isr flags
> > >in the queue structure to preserve the prototype for
> > freezestr(queue_t
> > >*q) and unfreezestr(queue_t *q).
> > >
> > >freezestr must lock out at least putq, putbq for the queue until the
> > >stream is thawed.
> > >
> > >Even though LiS appears to single thread put and srv and locks out
> > >local interrupts while either of these are running,
> > interrupt service
> > >routines on another processor performing putq to the
> > supposedly frozen
> > >queue could cause serious problems.
> > >
> > >In LiS it would be closer to take the LIS_QISRLOCK on the queue for
> > >freezestr and release it with LIS_QISRUNLOCK on unfreezestr.
> > >Unfortunately these functions need a pointer to an int as an
> > argument
> > >as well. So,
> > >
> > >{
> > > int flags;
> > > LIS_QISRLOCK(q, &flags);
> > >
> > > ...
> > >
> > > LIS_QISRUNLOCK(q, &flags);
> > >}
> > >
> > >is roughly equivalent to:
> > >
> > >{
> > > freezestr(q);
> > >
> > > ...
> > >
> > > unfreezestr(q);
> > >}
> > >
> > >in that it at least locks the queue. freezing a stream is really
> > >supposed to lock all the queues in the stream, but at least this
> > >protects the queue whose internals are being manipulated.
> > >
> > >In Linux Fast-STREAMS I have:
> > >
> > >void freezestr(queue_t *q)
> > >{
> > > unsigned long flags;
> > > hrlock(q);
> > > local_irq_save(flags);
> > > write_lock(&q->q_rwlock);
> > > q->q_iflags = flags;
> > >}
> > >
> > >void unfreezestr(queue_t *q)
> > >{
> > > unsigned long flags = q->q_iflags;
> > > write_unlock(&q->q_rwlock);
> > > local_irq_restore(flags);
> > > hrunlock(q);
> > >}
> > >
> > >to preserve the prototype. It also read locks the stream
> > head to keep
> > >I_PUSH, I_POP, qopen and qclose from altering the stream
> > configuration
> > >and protects reading the q->q_next pointer as well.
> > >
> > >--brian
> > >
> > >
> > >On Tue, 30 Sep 2003, Dave Grothe wrote:
> > >
> > > > These are not implemented in LiS. Just provide dummy
> > routines when
> > > > compiling for LiS.
> > > > -- Dave
> > > >
> > > > At 06:49 AM 9/30/2003 Tuesday, Oleg Kodel wrote:
> > > > >Is it some freezestr()/unfreezestr() (SVR4) analogous in the LIS?
> > > > >
> > > > >This e-mail message has been sent by Elbit Systems Ltd.
> > and is for
> > > > >the use of the intended recipients only. The message may contain
> > > > >privileged or confidential information . If you are not the
> > > > >intended recipient you are hereby notified that any
> > > use,
> > > > >distribution or copying of this communication is strictly
> > > > >prohibited, and you are requested to delete the e-mail and any
> > > > >attachments and notify the sender immediately.
> > > > >
> > > > >_______________________________________________
> > > > >Linux-streams mailing list [EMAIL PROTECTED]
> > > > >http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams
> > > >
> > > >
> > > > _______________________________________________
> > > > Linux-streams mailing list
> > > > [EMAIL PROTECTED]
> > > > http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams
> > >
> > >--
> > >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
> >
>
> This e-mail message has been sent by Elbit Systems Ltd.
> and is for the use of the intended recipients only.
> The message may contain privileged or confidential information .
> If you are not the intended recipient you are hereby notified that any use,
> distribution or copying of this communication is strictly prohibited,
> and you are requested to delete the e-mail and any attachments
> and notify the sender immediately.
--
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