Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 May 2000 21:48:21 +0100 (BST)
From:      Doug Rabson <dfr@nlsystems.com>
To:        arch@freebsd.org
Subject:   A new api for asynchronous task execution (2)
Message-ID:  <Pine.BSF.4.21.0005162147060.47945-300000@salmon.nlsystems.com>

next 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-105894769-958510101=:47945
Content-Type: TEXT/PLAIN; charset=US-ASCII

Ok, after the last set of feedback, I have updated the design
somewhat. This is the latest manpage and I have attached a sample
implementation (not thoroughly tested).


TASKQUEUE(9)	       FreeBSD Kernel Developer's Manual	  TASKQUEUE(9)

NAME
     taskqueue - asynchronous task execution

SYNOPSIS
     #include <sys/param.h>
     #include <sys/queue.h>
     #include <sys/taskqueue.h>

     typedef void (*task_fn)(void *context, int pending);

     typedef void (*taskqueue_enqueue_fn)(void *context);

     struct task {
	     STAILQ_ENTRY(task)      link;   /* link for queue */
	     int		     pending; /* count times task is queued */
	     task_fn		     func;   /* task handler */
	     void		     *context; /* argument for handler */
     };

     #define TQ_DEF	     0	     /* use blocking mutex */
     #define TQ_SPIN	     1	     /* use spin mutex */

     void
     taskqueue_init(struct taskqueue *queue, const char *name, int flags,
	     taskqueue_enqueue_fn enqueue, void *context)

     struct taskqueue *
     taskqueue_find(const char *name)

     void
     taskqueue_enqueue(struct taskqueue *queue, struct task *task)

     void
     taskqueue_run(struct taskqueue *queue)

DESCRIPTION
     These functions provide a simple interface for asynchronous execution of
     code.

     Before a queue can be used, it must first be initialised with
     taskqueue_init().	The arguments to taskqueue_init() include a name which
     should be unique, a flag which specifies the type of SMP mutex used to
     protect the queue and a function which is called from taskqueue_enqueue()
     when a task is added to the queue to allow the queue to arrange to be run
     later (for instance by scheduling a software interrupt or waking a kernel
     thread).

     The function taskqueue_free() should be used to remove the queue from the
     global list of queues.  Any tasks which are on the queue will be executed
     at this time.

     The system maintains a list of all queues which can be searched using
     taskqueue_find().	The first queue whose name matches is returned, other-
     wise NULL.

     To add a task to the list of tasks queued on a taskqueue, call
     taskqueue_enqueue() with pointers to the queue and task.  If the task's
     pending field is zero, the task is added to the end of the list and
     pending is set to one, otherwise, pending is incremented.	Enqueueing a
     task does not perform any memory allocation which makes it suitable for
     calling from an interrupt handler.


     To execute all the tasks on a queue, call taskqueue_run().  When a task
     is executed, first it is removed from the queue, the value of pending is
     recorded and the field is zeroed.	The function func from the task struc-
     ture is called with the value of the field context its first argument and
     the value of pending as its second argument.

     The system provides a global taskqueue, taskqueue_swi, which is run via a
     software interrupt mechanism.  To use this queue, call
     taskqueue_enqueue() with the value of the global variable taskqueue_swi.
     The queue will be run at splsofttq().

     This queue can be used, for instance, for implementing interrupt handlers
     which must perform a significant amount of processing in the handler.
     The hardware interrupt handler would perform minimal processing of the
     interrupt and then enqueue a task to finish the work.  This reduces the
     amount of time spent with interrupts disabled to a minimum.

HISTORY
     This interface first appeared in FreeBSD 5.0.  There is a similar facili-
     ty called tqueue in the Linux kernel.

AUTHORS
     This man page was written by Doug Rabson.

FreeBSD 			 May 12, 2000				     2

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


--0-105894769-958510101=:47945
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="subr_taskqueue.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0005162148210.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
ZSA8c3lzL2ludGVycnVwdC5oPg0KI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4N
CiNpbmNsdWRlIDxtYWNoaW5lL2lwbC5oPg0KDQpNQUxMT0NfREVGSU5FKE1f
VEFTS1FVRVVFLCAidGFza3F1ZXVlIiwgIlRhc2sgUXVldWVzIik7DQoNCnN0
YXRpYyBTVEFJTFFfSEVBRCh0YXNrcXVldWVfbGlzdCwgdGFza3F1ZXVlKSB0
YXNrcXVldWVfcXVldWVzOw0KDQpzdHJ1Y3QgdGFza3F1ZXVlIHsNCglTVEFJ
TFFfRU5UUlkodGFza3F1ZXVlKQlsaW5rOw0KCVNUQUlMUV9IRUFEKCwgdGFz
aykJcXVldWU7DQoJY29uc3QgY2hhcgkJKm5hbWU7DQoJdGFza3F1ZXVlX2Vu
cXVldWVfZm4JZW5xdWV1ZTsNCgl2b2lkCQkJKmNvbnRleHQ7DQp9Ow0KDQpz
dHJ1Y3QgdGFza3F1ZXVlICoNCnRhc2txdWV1ZV9jcmVhdGUoY29uc3QgY2hh
ciAqbmFtZSwgaW50IGZsYWdzLA0KCQkgdGFza3F1ZXVlX2VucXVldWVfZm4g
ZW5xdWV1ZSwgdm9pZCAqY29udGV4dCkNCnsNCglzdHJ1Y3QgdGFza3F1ZXVl
ICpxdWV1ZTsNCg0KCXF1ZXVlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFz
a3F1ZXVlKSwgTV9UQVNLUVVFVUUsIE1fTk9XQUlUKTsNCglpZiAoIXF1ZXVl
KQ0KCQlyZXR1cm4gMDsNCg0KCVNUQUlMUV9JTlNFUlRfVEFJTCgmdGFza3F1
ZXVlX3F1ZXVlcywgcXVldWUsIGxpbmspOw0KCVNUQUlMUV9JTklUKCZxdWV1
ZS0+cXVldWUpOw0KCXF1ZXVlLT5uYW1lID0gbmFtZTsNCglxdWV1ZS0+ZW5x
dWV1ZSA9IGVucXVldWU7DQoJcXVldWUtPmNvbnRleHQgPSBjb250ZXh0Ow0K
DQoJcmV0dXJuIHF1ZXVlOw0KfQ0KDQp2b2lkDQp0YXNrcXVldWVfZnJlZShz
dHJ1Y3QgdGFza3F1ZXVlICpxdWV1ZSkNCnsNCglpbnQgcyA9IHNwbGhpZ2go
KTsNCgl0YXNrcXVldWVfcnVuKHF1ZXVlKTsNCglTVEFJTFFfUkVNT1ZFKCZ0
YXNrcXVldWVfcXVldWVzLCBxdWV1ZSwgdGFza3F1ZXVlLCBsaW5rKTsNCglz
cGx4KHMpOw0KDQoJZnJlZShxdWV1ZSwgTV9UQVNLUVVFVUUpOw0KfQ0KDQpz
dHJ1Y3QgdGFza3F1ZXVlICoNCnRhc2txdWV1ZV9maW5kKGNvbnN0IGNoYXIg
Km5hbWUpDQp7DQoJc3RydWN0IHRhc2txdWV1ZSAqcXVldWU7DQoNCglTVEFJ
TFFfRk9SRUFDSChxdWV1ZSwgJnRhc2txdWV1ZV9xdWV1ZXMsIGxpbmspDQoJ
CWlmICghc3RyY21wKHF1ZXVlLT5uYW1lLCBuYW1lKSkNCgkJCXJldHVybiBx
dWV1ZTsNCglyZXR1cm4gMDsNCn0NCg0Kdm9pZA0KdGFza3F1ZXVlX2VucXVl
dWUoc3RydWN0IHRhc2txdWV1ZSAqcXVldWUsIHN0cnVjdCB0YXNrICp0YXNr
KQ0Kew0KCWludCBzID0gc3BsaGlnaCgpOw0KDQoJLyoNCgkgKiBDb3VudCBt
dWx0aXBsZSBlbnF1ZXVlcy4NCgkgKi8NCglpZiAodGFzay0+cGVuZGluZykg
ew0KCQl0YXNrLT5wZW5kaW5nKys7DQoJCXNwbHgocyk7DQoJCXJldHVybjsN
Cgl9DQoJU1RBSUxRX0lOU0VSVF9UQUlMKCZxdWV1ZS0+cXVldWUsIHRhc2ss
IGxpbmspOw0KCXRhc2stPnBlbmRpbmcgPSAxOw0KCWlmIChxdWV1ZS0+ZW5x
dWV1ZSkNCgkJcXVldWUtPmVucXVldWUocXVldWUtPmNvbnRleHQpOw0KDQoJ
c3BseChzKTsNCn0NCg0Kdm9pZA0KdGFza3F1ZXVlX3J1bihzdHJ1Y3QgdGFz
a3F1ZXVlICpxdWV1ZSkNCnsNCglpbnQgczsNCglzdHJ1Y3QgdGFzayAqdGFz
azsNCglpbnQgcGVuZGluZzsNCg0KCXMgPSBzcGxoaWdoKCk7DQoJd2hpbGUg
KFNUQUlMUV9GSVJTVCgmcXVldWUtPnF1ZXVlKSkgew0KCQkvKg0KCQkgKiBD
YXJlZnVsbHkgcmVtb3ZlIHRoZSBmaXJzdCB0YXNrIGZyb20gdGhlIHF1ZXVl
IGFuZA0KCQkgKiB6ZXJvIGl0cyBwZW5kaW5nIGNvdW50Lg0KCQkgKi8NCgkJ
dGFzayA9IFNUQUlMUV9GSVJTVCgmcXVldWUtPnF1ZXVlKTsNCgkJU1RBSUxR
X1JFTU9WRV9IRUFEKCZxdWV1ZS0+cXVldWUsIGxpbmspOw0KCQlwZW5kaW5n
ID0gdGFzay0+cGVuZGluZzsNCgkJdGFzay0+cGVuZGluZyA9IDA7DQoJCXNw
bHgocyk7DQoNCgkJdGFzay0+ZnVuYyh0YXNrLT5jb250ZXh0LCBwZW5kaW5n
KTsNCg0KCQlzID0gc3BsaGlnaCgpOw0KCX0NCglzcGx4KHMpOw0KfQ0KDQpz
dGF0aWMgdm9pZA0KdGFza3F1ZXVlX3N3aV9lbnF1ZXVlKHZvaWQgKmNvbnRl
eHQpDQp7DQoJc2V0c29mdHRxKCk7DQp9DQoNCnN0YXRpYyB2b2lkDQp0YXNr
cXVldWVfc3dpX3J1bih2b2lkKQ0Kew0KCXRhc2txdWV1ZV9ydW4odGFza3F1
ZXVlX3N3aSk7DQp9DQoNClRBU0tRVUVVRV9ERUZJTkUoc3dpLCBUUV9ERUYs
IHRhc2txdWV1ZV9zd2lfZW5xdWV1ZSwgMCwNCgkJIHJlZ2lzdGVyX3N3aShT
V0lfVFEsIHRhc2txdWV1ZV9zd2lfcnVuKSk7DQo=
--0-105894769-958510101=:47945
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="taskqueue.h"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0005162148211.47945@salmon.nlsystems.com>
Content-Description: 
Content-Disposition: attachment; filename="taskqueue.h"

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
Cg0KI2lmbmRlZiBfU1lTX1RBU0tRVUVVRV9IXw0KI2RlZmluZSBfU1lTX1RB
U0tRVUVVRV9IXw0KDQojaWZkZWYgX0tFUk5FTA0KDQpzdHJ1Y3QgdGFza3F1
ZXVlOw0KDQovKg0KICogRWFjaCB0YXNrIGluY2x1ZGVzIGEgZnVuY3Rpb24g
d2hpY2ggaXMgY2FsbGVkIGZyb20NCiAqIHRhc2txdWV1ZV9ydW4oKS4gVGhl
IGZpcnN0IGFyZ3VtZW50IGlzIHRha2VuIGZyb20gdGhlICdjb250ZXh0Jw0K
ICogZmllbGQgb2Ygc3RydWN0IHRhc2sgYW5kIHRoZSBzZWNvbmQgYXJndW1l
bnQgaXMgYSBjb3VudCBvZiBob3cgbWFueQ0KICogdGltZXMgdGhlIHRhc2sg
d2FzIGVucXVldWVkIGJlZm9yZSB0aGUgY2FsbCB0byB0YXNrcXVldWVfcnVu
KCkuDQogKi8NCnR5cGVkZWYgdm9pZCAoKnRhc2tfZm4pKHZvaWQgKmNvbnRl
eHQsIGludCBwZW5kaW5nKTsNCg0KLyoNCiAqIEEgbm90aWZpY2F0aW9uIGNh
bGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBmcm9tDQogKiB0YXNr
cXVldWVfZW5xdWV1ZSgpLiBUaGUgY29udGV4dCBhcmd1bWVudCBpcyBnaXZl
biBpbiB0aGUgY2FsbCB0bw0KICogdGFza3F1ZXVlX2luaXQoKS4gVGhpcyBm
dW5jdGlvbiB3b3VsZCBub3JtYWxseSBiZSB1c2VkIHRvIGFsbG93IHRoZQ0K
ICogcXVldWUgdG8gYXJyYW5nZSB0byBydW4gaXRzZWxmIGxhdGVyIChlLmcu
IGJ5IHNjaGVkdWxpbmcgYSBzb2Z0d2FyZQ0KICogaW50ZXJydXB0IG9yIHdh
a2luZyBhIGtlcm5lbCB0aHJlYWQpLg0KICovDQp0eXBlZGVmIHZvaWQgKCp0
YXNrcXVldWVfZW5xdWV1ZV9mbikodm9pZCAqY29udGV4dCk7DQoNCnN0cnVj
dCB0YXNrIHsNCglTVEFJTFFfRU5UUlkodGFzaykJbGluazsJLyogbGluayBm
b3IgcXVldWUgKi8NCglpbnQJCQlwZW5kaW5nOyAvKiBjb3VudCB0aW1lcyB0
YXNrIGlzIHF1ZXVlZCAqLw0KCXRhc2tfZm4JCQlmdW5jOwkvKiB0YXNrIGhh
bmRsZXIgKi8NCgl2b2lkCQkJKmNvbnRleHQ7IC8qIGFyZ3VtZW50IGZvciBo
YW5kbGVyICovDQp9Ow0KDQovKg0KICogRmxhZ3MgZm9yIHRhc2txdWV1ZV9p
bml0KCkgd2hpY2ggd2lsbCBjb250cm9sIHRoZSBwcm9wZXJ0aWVzIG9mIGEN
CiAqIG11dGV4IHdpbGwgYmUgdXNlZCB0byBwcm90ZWN0IHRoZSBxdWV1ZS4N
CiAqDQogKiBOb3RlOiB0aGlzIGlzIG5vdCBjdXJyZW50bHkgdXNlZCBidXQg
d2lsbCBiZSB1c2VkIGluIGEgZnV0dXJlDQogKiBpbXBsZW1lbnRhdGlvbiBv
ZiBTTVAuDQogKi8NCiNkZWZpbmUgVFFfREVGCQkwCS8qIHVzZSBibG9ja2lu
ZyBtdXRleCAqLw0KI2RlZmluZSBUUV9TUElOCQkxCS8qIHVzZSBzcGluIG11
dGV4ICovDQoNCnN0cnVjdCB0YXNrcXVldWUJKnRhc2txdWV1ZV9jcmVhdGUo
Y29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzLA0KCQkJCQkgIHRhc2txdWV1
ZV9lbnF1ZXVlX2ZuIGVucXVldWUsDQoJCQkJCSAgdm9pZCAqY29udGV4dCk7
DQp2b2lkCQkJdGFza3F1ZXVlX2ZyZWUoc3RydWN0IHRhc2txdWV1ZSAqcXVl
dWUpOw0Kc3RydWN0IHRhc2txdWV1ZQkqdGFza3F1ZXVlX2ZpbmQoY29uc3Qg
Y2hhciAqbmFtZSk7DQp2b2lkCQkJdGFza3F1ZXVlX2VucXVldWUoc3RydWN0
IHRhc2txdWV1ZSAqcXVldWUsDQoJCQkJCSAgc3RydWN0IHRhc2sgKnRhc2sp
Ow0Kdm9pZAkJCXRhc2txdWV1ZV9ydW4oc3RydWN0IHRhc2txdWV1ZSAqcXVl
dWUpOw0KDQovKg0KICogRGVjbGFyZSBhIHJlZmVyZW5jZSB0byBhIHRhc2tx
dWV1ZS4NCiAqLw0KI2RlZmluZSBUQVNLUVVFVUVfREVDTEFSRShuYW1lKQkJ
CVwNCgkJCQkJCVwNCmV4dGVybiBzdHJ1Y3QgdGFza3F1ZXVlICp0YXNrcXVl
dWVfIyNuYW1lDQoNCi8qDQogKiBEZWZpbmUgYW5kIGluaXRpYWxpc2UgYSB0
YXNrcXVldWUuDQogKi8NCiNkZWZpbmUgVEFTS1FVRVVFX0RFRklORShuYW1l
LCBmbGFncywgZW5xdWV1ZSwgY29udGV4dCwgaW5pdCkJCVwNCgkJCQkJCQkJ
CVwNCnN0cnVjdCB0YXNrcXVldWUgKnRhc2txdWV1ZV8jI25hbWU7CQkJCQlc
DQoJCQkJCQkJCQlcDQpzdGF0aWMgdm9pZAkJCQkJCQkJXA0KdGFza3F1ZXVl
X2RlZmluZV8jI25hbWUodm9pZCAqYXJnKQkJCQkJXA0KewkJCQkJCQkJCVwN
Cgl0YXNrcXVldWVfIyNuYW1lID0JCQkJCQlcDQoJCXRhc2txdWV1ZV9jcmVh
dGUoI25hbWUsIGZsYWdzLCBlbnF1ZXVlLCBjb250ZXh0KTsJXA0KCWluaXQ7
CQkJCQkJCQlcDQp9CQkJCQkJCQkJXA0KCQkJCQkJCQkJXA0KU1lTSU5JVCh0
YXNrcXVldWVfIyNuYW1lLCBTSV9TVUJfQ09ORklHVVJFLCBTSV9PUkRFUl9T
RUNPTkQsCQlcDQoJdGFza3F1ZXVlX2RlZmluZV8jI25hbWUsIE5VTEwpOw0K
DQovKg0KICogVGhpcyBxdWV1ZSBpcyBzZXJ2aWNlZCBieSBhIHNvZnR3YXJl
IGludGVycnVwdCBoYW5kbGVyLiBUbyBlbnF1ZXVlDQogKiBhIHRhc2ssIGNh
bGwgdGFza3F1ZXVlX2VucXVldWUoJnRhc2txdWV1ZV9zd2ksICZ0YXNrKS4N
CiAqLw0KVEFTS1FVRVVFX0RFQ0xBUkUoc3dpKTsNCg0KI2VuZGlmIC8qIF9L
RVJORUwgKi8NCg0KI2VuZGlmIC8qICFfU1lTX1RBU0tRVUVVRV9IXyAqLw0K

--0-105894769-958510101=: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.0005162147060.47945-300000>