Date: Sun, 17 Dec 2000 12:56:52 -0800 From: Julian Elischer <julian@elischer.org> To: Chuck Paterson <cp@bsdi.com> Cc: smp@FreeBSD.ORG Subject: Re: Netgraph locking primatives. take 1. Message-ID: <3A3D2894.CEA08776@elischer.org> References: <200012171849.eBHInbP14473@berserker.bsdi.com>
index | next in thread | previous in thread | raw e-mail
Chuck Paterson wrote:
>
> Julian
>
> The release (leave_{read,write}) operations don't have anything
> to actually run the queues. What mechanism do you plan to use
> dequeue the stuff which is backed up on the queueu. For instance
> 20 read operatons backed up while a write was held.
>
> Chuck
you loop on the dequeue
after having been called in some manner
the release is if you have finished processing a packet,
approximate pseudocode follows:
[called from interrupt driven driver with packet to process]
packet = aquire_read(node->lock, packet) /* May not get same packet */
if (!packet)
return;
node->rcvdata(node,packet)
release_reader(node->lock)
/*
* now we've handled the packet we brought, (or a friend of it)
* let's look for any other packets that may have been queued up
*/
for (;;) {
if ((node->lock.flags & (WRITE_PENDING|READ_PENDING)) == 0)
return;
mtx_get(node->lock.mtx, MTX_SPIN)
packet = dequeue(node->lock)
/* dequeue aquires and adjusts the locks as it dequeues packets */
mtx_exit(..)
if (!packet) {
return
node->rcvdata(node,packet)
release_reader(node->lock)
}
--
__--_|\ Julian Elischer
/ \ julian@elischer.org
( OZ ) World tour 2000
---> X_.---._/ presently in: Budapest
v
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3A3D2894.CEA08776>
