Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 May 2000 15:48:08 +0100 (BST)
From:      Doug Rabson <dfr@nlsystems.com>
To:        Chuck Paterson <cp@bsdi.com>
Cc:        arch@freebsd.org
Subject:   Re: A new api for asynchronous task execution 
Message-ID:  <Pine.BSF.4.21.0005131540090.47945-200000@salmon.nlsystems.com>
In-Reply-To: <200005131422.IAA00701@berserker.bsdi.com>

next in thread | previous in thread | raw e-mail | index | archive | help
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--0-920267420-958229288=:47945
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Sat, 13 May 2000, Chuck Paterson wrote:

> 
> Doug,
> 	You might want to consider having a separate function/macro
> to enqueue on the taskqueue_swi. Instead of passing in the actual
> name of the task queue you would pass in some sort of flag which
> for now could be something like TASKQUEUE(foobar, TASKQUEUE_SWI).
> This would allow the lower level taskqueue_enqueue to just do the
> enqueueing without having to check if a software interrupt needs
> to be generated. For now the flag could be totally ignored, adding
> zero weight to what you have now. Later on, supposing that the
> system can support multiple interrupt threads on multiple processors,
> the flag could be used in a switch statement that determines which
> level/queue the task gets enqueued on. In a macro this code would
> be determined at compile time. Also it may be useful to have a flag
> that prevents immediate execution, ie no scheduling event, if the
> task is enqueued from the top half. This also is not needed at all
> now.

I don't want to make the api too specific to one particular method of
running the queue (i.e. software interrupts). The intention is that the
taskqueue_xxx() apis simply deal with moving tasks onto and off the queue.

The system defines specific implementations of queues which are drained at
particular times (initially I have defined one using SWI). I want to make
it as easy as possible to define different lightweight queues for various
types of work. The 'enqueue' function pointer in the taskqueue structure
defines the run policy for the queue.

I can imagine various queues being written which drain at different times
(e.g. on clock tick, once after autoconfiguration, driver-specific work
queues etc.)

Take a look at my initial implementation to see how taskqueue_swi is
implemented. Note that the implementation of taskqueue_swi is logically
separate from the taskqueue api itself.

-- 
Doug Rabson				Mail:  dfr@nlsystems.com
Nonlinear Systems Ltd.			Phone: +44 20 8442 9037


--0-920267420-958229288=:47945
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="subr_taskqueue.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0005131548080.47945@salmon.nlsystems.com>
Content-Description: 
Content-Disposition: attachment; filename="subr_taskqueue.c"

LyotDQogKiBDb3B5cmlnaHQgKGMpIDIwMDAgRG91ZyBSYWJzb24NCiAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuDQogKg0KICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0DQogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAqIGFyZSBtZXQ6DQog
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Lg0KICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUNCiAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
DQogKg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFDQogKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQ0KICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCiAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQogKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUw0KICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQog
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQ0KICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRg0KICogU1VDSCBEQU1BR0UuDQogKg0KICoJJEZyZWVCU0QkDQogKi8N
Cg0KI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2luY2x1ZGUgPHN5cy9xdWV1
ZS5oPg0KI2luY2x1ZGUgPHN5cy9zeXN0bS5oPg0KI2luY2x1ZGUgPHN5cy9r
ZXJuZWwuaD4NCiNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+DQojaW5jbHVk
ZSA8c3lzL2ludGVycnVwdC5oPg0KI2luY2x1ZGUgPG1hY2hpbmUvaXBsLmg+
DQoNCnZvaWQNCnRhc2txdWV1ZV9pbml0KHN0cnVjdCB0YXNrcXVldWUgKnF1
ZXVlLA0KCSAgICAgICB2b2lkICgqZW5xdWV1ZSkoc3RydWN0IHRhc2txdWV1
ZSAqcXVldWUpKQ0Kew0KCVNUQUlMUV9JTklUKCZxdWV1ZS0+cXVldWUpOw0K
CXF1ZXVlLT5lbnF1ZXVlID0gZW5xdWV1ZTsNCn0NCg0Kdm9pZA0KdGFza3F1
ZXVlX2VucXVldWUoc3RydWN0IHRhc2txdWV1ZSAqcXVldWUsIHN0cnVjdCB0
YXNrICp0YXNrKQ0Kew0KCWludCBzID0gc3BsaGlnaCgpOw0KDQoJLyoNCgkg
KiBDb3VudCBtdWx0aXBsZSBlbnF1ZXVlcy4NCgkgKi8NCglpZiAodGFzay0+
cGVuZGluZykgew0KCQl0YXNrLT5wZW5kaW5nKys7DQoJCXJldHVybjsNCgl9
DQoJU1RBSUxRX0lOU0VSVF9UQUlMKCZxdWV1ZS0+cXVldWUsIHRhc2ssIGxp
bmspOw0KCXRhc2stPnBlbmRpbmcgPSAxOw0KCWlmIChxdWV1ZS0+ZW5xdWV1
ZSkNCgkJcXVldWUtPmVucXVldWUocXVldWUpOw0KDQoJc3BseChzKTsNCn0N
Cg0Kdm9pZA0KdGFza3F1ZXVlX3J1bihzdHJ1Y3QgdGFza3F1ZXVlICpxdWV1
ZSkNCnsNCglpbnQgczsNCglzdHJ1Y3QgdGFzayAqdGFzazsNCglpbnQgcGVu
ZGluZzsNCg0KCXdoaWxlIChTVEFJTFFfRklSU1QoJnF1ZXVlLT5xdWV1ZSkp
IHsNCgkJLyoNCgkJICogQ2FyZWZ1bGx5IHJlbW92ZSB0aGUgZmlyc3QgdGFz
ayBmcm9tIHRoZSBxdWV1ZSBhbmQNCgkJICogemVybyBpdHMgcGVuZGluZyBj
b3VudC4NCgkJICovDQoJCXMgPSBzcGxoaWdoKCk7DQoJCXRhc2sgPSBTVEFJ
TFFfRklSU1QoJnF1ZXVlLT5xdWV1ZSk7DQoJCVNUQUlMUV9SRU1PVkVfSEVB
RCgmcXVldWUtPnF1ZXVlLCBsaW5rKTsNCgkJcGVuZGluZyA9IHRhc2stPnBl
bmRpbmc7DQoJCXRhc2stPnBlbmRpbmcgPSAwOw0KCQlzcGx4KHMpOw0KDQoJ
CXRhc2stPmZ1bmModGFzay0+YXJnLCBwZW5kaW5nKTsNCgl9DQp9DQoNCnN0
cnVjdCB0YXNrcXVldWUgdGFza3F1ZXVlX3N3aTsNCg0Kc3RhdGljIHZvaWQN
CnRhc2txdWV1ZV9zd2lfZW5xdWV1ZShzdHJ1Y3QgdGFza3F1ZXVlICpxdWV1
ZSkNCnsNCglzZXRzb2Z0dHEoKTsNCn0NCg0Kc3RhdGljIHZvaWQNCnRhc2tx
dWV1ZV9zd2lfcnVuKHZvaWQpDQp7DQoJdGFza3F1ZXVlX3J1bigmdGFza3F1
ZXVlX3N3aSk7DQp9DQoNCnN0YXRpYyB2b2lkDQp0YXNrcXVldWVfc3dpX2lu
aXQodm9pZCAqYXJnKQ0Kew0KCXRhc2txdWV1ZV9pbml0KCZ0YXNrcXVldWVf
c3dpLCB0YXNrcXVldWVfc3dpX2VucXVldWUpOw0KCXJlZ2lzdGVyX3N3aShT
V0lfVFEsIHRhc2txdWV1ZV9zd2lfcnVuKTsNCn0NCg0KU1lTSU5JVCh0YXNr
cXVldWUsIFNJX1NVQl9DT05GSUdVUkUsIFNJX09SREVSX1NFQ09ORCwNCgl0
YXNrcXVldWVfc3dpX2luaXQsIE5VTEwpOw0K
--0-920267420-958229288=:47945--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0005131540090.47945-200000>