Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 May 2000 21:24:13 +0100 (BST)
From:      Doug Rabson <dfr@nlsystems.com>
To:        arch@freebsd.org
Subject:   A new api for asynchronous task execution (3)
Message-ID:  <Pine.BSF.4.21.0005182120520.73457-400000@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-1970571438-958681453=:73457
Content-Type: TEXT/PLAIN; charset=US-ASCII

Ok, I think this version is starting to look worth committing. This one
adds priority sorted queueing, uses structure field prefixes and provides
convenience macros for declaring queues.


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)      ta_link;	     /* link for queue */
	     int		     ta_pending;     /* count times queued */
	     int		     ta_priority;    /* priority of task in queue */
	     task_fn		     ta_func;	     /* task handler */
	     void		     *ta_context;    /* argument for handler */
     };


     struct taskqueue *
     taskqueue_create(const char *name, int mflags,
	     taskqueue_enqueue_fn enqueue, void *context)

     void
     taskqueue_free(struct taskqueue *queue)

     struct taskqueue *
     taskqueue_find(const char *name)

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

     void
     taskqueue_run(struct taskqueue *queue)

     TASK_INIT(task, priority, func, context)

     TASKQUEUE_DECLARE(name)

     TASKQUEUE_DEFINE(name, enqueue, context, init)

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

     The function taskqueue_create() is used to create new queues.  The argu-
     ments to taskqueue_create() include a name which should be unique, a set
     of malloc(9) flags which specify whether the call to malloc() is allowed
     to sleep 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 and free the memory used by the queue.  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
     ta_pending field is non-zero, then it is simply incremented to reflect
     the number of times the task was enqueued.  Otherwise, the task is added
     to the list before the first task which has a lower ta_priority value or
     at the end of the list if no tasks have a lower priority.	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 ta_pending
     is recorded and the field is zeroed.  The function ta_func from the task
     structure is called with the value of the field ta_context its first ar-
     gument and the value of ta_pending as its second argument.

     A convenience macro, TASK_INIT(task, priority, func, context) is provided
     to initialise a task structure.  The values of priority, func, and
     context are simply copied into the task structure fields and the
     ta_pending field is cleared.

     Two macros TASKQUEUE_DECLARE(name) and TASKQUEUE_DEFINE(name, enqueue,
     context, init) are used to declare a reference to a global queue and to
     define the implementation of the queue.  The TASKQUEUE_DEFINE() macro ar-
     ranges to call taskqueue_create() with the values of its name, enqueue
     and context arguments during system initialisation.  After calling
     taskqueue_create(), the init argument to the macro is executed as a C
     statement, allowing any further initialisation to be performed (such as
     registering an interrupt handler etc.)

     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-1970571438-958681453=:73457
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="taskqueue.9"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0005182124130.73457@salmon.nlsystems.com>
Content-Description: 
Content-Disposition: attachment; filename="taskqueue.9"

LlwiIC0qLSBucm9mZiAtKi0NCi5cIg0KLlwiIENvcHlyaWdodCAoYykgMjAw
MCBEb3VnIFJhYnNvbg0KLlwiDQouXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4N
Ci5cIg0KLlwiIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlLg0KLlwi
DQouXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQouXCIgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zDQouXCIgYXJlIG1ldDoNCi5cIiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCi5cIiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodA0KLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUN
Ci5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KLlwiDQouXCIgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgREVWRUxPUEVSUyBgYEFT
IElTJycgQU5EIEFOWSBFWFBSRVNTIE9SDQouXCIgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUw0KLlwiIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
DQouXCIgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIERFVkVMT1BFUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCi5cIiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQNCi5cIiBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsDQouXCIgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQouXCIgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVA0KLlwiIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRg0KLlwiIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQouXCINCi5cIiAk
RnJlZUJTRCQNCi5cIg0KLkRkIE1heSAxMiwgMjAwMA0KLkR0IFRBU0tRVUVV
RSA5DQouT3MgRnJlZUJTRA0KLlNoIE5BTUUNCi5ObSB0YXNrcXVldWUNCi5O
ZCBhc3luY2hyb25vdXMgdGFzayBleGVjdXRpb24NCi5TaCBTWU5PUFNJUw0K
LkZkICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCi5GZCAjaW5jbHVkZSA8c3lz
L3F1ZXVlLmg+DQouRmQgI2luY2x1ZGUgPHN5cy90YXNrcXVldWUuaD4NCi5C
ZCAtbGl0ZXJhbA0KDQp0eXBlZGVmIHZvaWQgKCp0YXNrX2ZuKSh2b2lkICpj
b250ZXh0LCBpbnQgcGVuZGluZyk7DQoNCnR5cGVkZWYgdm9pZCAoKnRhc2tx
dWV1ZV9lbnF1ZXVlX2ZuKSh2b2lkICpjb250ZXh0KTsNCg0Kc3RydWN0IHRh
c2sgew0KCVNUQUlMUV9FTlRSWSh0YXNrKQl0YV9saW5rOwkvKiBsaW5rIGZv
ciBxdWV1ZSAqLw0KCWludAkJCXRhX3BlbmRpbmc7CS8qIGNvdW50IHRpbWVz
IHF1ZXVlZCAqLw0KCWludAkJCXRhX3ByaW9yaXR5OwkvKiBwcmlvcml0eSBv
ZiB0YXNrIGluIHF1ZXVlICovDQoJdGFza19mbgkJCXRhX2Z1bmM7CS8qIHRh
c2sgaGFuZGxlciAqLw0KCXZvaWQJCQkqdGFfY29udGV4dDsJLyogYXJndW1l
bnQgZm9yIGhhbmRsZXIgKi8NCn07DQoNCi5FZA0KLkZ0IHN0cnVjdCB0YXNr
cXVldWUgKg0KLkZuIHRhc2txdWV1ZV9jcmVhdGUgImNvbnN0IGNoYXIgKm5h
bWUiICJpbnQgbWZsYWdzIiAidGFza3F1ZXVlX2VucXVldWVfZm4gZW5xdWV1
ZSIgInZvaWQgKmNvbnRleHQiDQouRnQgdm9pZA0KLkZuIHRhc2txdWV1ZV9m
cmVlICJzdHJ1Y3QgdGFza3F1ZXVlICpxdWV1ZSINCi5GdCBzdHJ1Y3QgdGFz
a3F1ZXVlICoNCi5GbiB0YXNrcXVldWVfZmluZCAiY29uc3QgY2hhciAqbmFt
ZSINCi5GdCB2b2lkDQouRm4gdGFza3F1ZXVlX2VucXVldWUgInN0cnVjdCB0
YXNrcXVldWUgKnF1ZXVlIiAic3RydWN0IHRhc2sgKnRhc2siDQouRnQgdm9p
ZA0KLkZuIHRhc2txdWV1ZV9ydW4gInN0cnVjdCB0YXNrcXVldWUgKnF1ZXVl
Ig0KLkZuIFRBU0tfSU5JVCAidGFzayIgInByaW9yaXR5IiAiZnVuYyIgImNv
bnRleHQiDQouRm4gVEFTS1FVRVVFX0RFQ0xBUkUgIm5hbWUiDQouRm4gVEFT
S1FVRVVFX0RFRklORSAibmFtZSIgImVucXVldWUiICJjb250ZXh0IiAiaW5p
dCINCi5TaCBERVNDUklQVElPTg0KLlBwDQpUaGVzZSBmdW5jdGlvbnMgcHJv
dmlkZSBhIHNpbXBsZSBpbnRlcmZhY2UgZm9yIGFzeW5jaHJvbm91cyBleGVj
dXRpb24NCm9mIGNvZGUuDQouUHANClRoZSBmdW5jdGlvbg0KLkZuIHRhc2tx
dWV1ZV9jcmVhdGUNCmlzIHVzZWQgdG8gY3JlYXRlIG5ldyBxdWV1ZXMuDQpU
aGUgYXJndW1lbnRzIHRvDQouRm4gdGFza3F1ZXVlX2NyZWF0ZQ0KaW5jbHVk
ZSBhIG5hbWUgd2hpY2ggc2hvdWxkIGJlIHVuaXF1ZSwNCmEgc2V0IG9mDQou
WHIgbWFsbG9jIDkNCmZsYWdzIHdoaWNoIHNwZWNpZnkgd2hldGhlciB0aGUg
Y2FsbCB0bw0KLkZuIG1hbGxvYw0KaXMgYWxsb3dlZCB0byBzbGVlcA0KYW5k
IGEgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGZyb20NCi5GbiB0YXNrcXVl
dWVfZW5xdWV1ZQ0Kd2hlbiBhIHRhc2sgaXMgYWRkZWQgdG8gdGhlIHF1ZXVl
DQp0byBhbGxvdyB0aGUgcXVldWUgdG8gYXJyYW5nZSB0byBiZSBydW4gbGF0
ZXINCihmb3IgaW5zdGFuY2UgYnkgc2NoZWR1bGluZyBhIHNvZnR3YXJlIGlu
dGVycnVwdCBvciB3YWtpbmcgYSBrZXJuZWwNCnRocmVhZCkuDQouUHANClRo
ZSBmdW5jdGlvbg0KLkZuIHRhc2txdWV1ZV9mcmVlDQpzaG91bGQgYmUgdXNl
ZCB0byByZW1vdmUgdGhlIHF1ZXVlIGZyb20gdGhlIGdsb2JhbCBsaXN0IG9m
IHF1ZXVlcw0KYW5kIGZyZWUgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSBxdWV1
ZS4NCkFueSB0YXNrcyB3aGljaCBhcmUgb24gdGhlIHF1ZXVlIHdpbGwgYmUg
ZXhlY3V0ZWQgYXQgdGhpcyB0aW1lLg0KLlBwDQpUaGUgc3lzdGVtIG1haW50
YWlucyBhIGxpc3Qgb2YgYWxsIHF1ZXVlcyB3aGljaCBjYW4gYmUgc2VhcmNo
ZWQgdXNpbmcNCi5GbiB0YXNrcXVldWVfZmluZCAuDQpUaGUgZmlyc3QgcXVl
dWUgd2hvc2UgbmFtZSBtYXRjaGVzIGlzIHJldHVybmVkLCBvdGhlcndpc2UN
Ci5WYSBOVUxMIC4NCi5QcA0KVG8gYWRkIGEgdGFzayB0byB0aGUgbGlzdCBv
ZiB0YXNrcyBxdWV1ZWQgb24gYSB0YXNrcXVldWUsIGNhbGwNCi5GbiB0YXNr
cXVldWVfZW5xdWV1ZQ0Kd2l0aCBwb2ludGVycyB0byB0aGUgcXVldWUgYW5k
IHRhc2suDQpJZiB0aGUgdGFzaydzDQouVmEgdGFfcGVuZGluZw0KZmllbGQg
aXMgbm9uLXplcm8sDQp0aGVuIGl0IGlzIHNpbXBseSBpbmNyZW1lbnRlZCB0
byByZWZsZWN0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHRhc2sNCndhcyBl
bnF1ZXVlZC4NCk90aGVyd2lzZSwNCnRoZSB0YXNrIGlzIGFkZGVkIHRvIHRo
ZSBsaXN0IGJlZm9yZSB0aGUgZmlyc3QgdGFzayB3aGljaCBoYXMgYSBsb3dl
cg0KLlZhIHRhX3ByaW9yaXR5DQp2YWx1ZSBvciBhdCB0aGUgZW5kIG9mIHRo
ZSBsaXN0IGlmIG5vIHRhc2tzIGhhdmUgYSBsb3dlciBwcmlvcml0eS4NCkVu
cXVldWVpbmcgYSB0YXNrIGRvZXMgbm90IHBlcmZvcm0gYW55IG1lbW9yeSBh
bGxvY2F0aW9uIHdoaWNoIG1ha2VzDQppdCBzdWl0YWJsZSBmb3IgY2FsbGlu
ZyBmcm9tIGFuIGludGVycnVwdCBoYW5kbGVyLg0KLlBwDQpUbyBleGVjdXRl
IGFsbCB0aGUgdGFza3Mgb24gYSBxdWV1ZSwNCmNhbGwNCi5GbiB0YXNrcXVl
dWVfcnVuIC4NCldoZW4gYSB0YXNrIGlzIGV4ZWN1dGVkLA0KZmlyc3QgaXQg
aXMgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZSwNCnRoZSB2YWx1ZSBvZg0KLlZh
IHRhX3BlbmRpbmcNCmlzIHJlY29yZGVkIGFuZCB0aGUgZmllbGQgaXMgemVy
b2VkLg0KVGhlIGZ1bmN0aW9uDQouVmEgdGFfZnVuYw0KZnJvbSB0aGUgdGFz
ayBzdHJ1Y3R1cmUgaXMgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBm
aWVsZA0KLlZhIHRhX2NvbnRleHQNCml0cyBmaXJzdCBhcmd1bWVudA0KYW5k
IHRoZSB2YWx1ZSBvZg0KLlZhIHRhX3BlbmRpbmcNCmFzIGl0cyBzZWNvbmQg
YXJndW1lbnQuDQouUHANCkEgY29udmVuaWVuY2UgbWFjcm8sDQouRm4gVEFT
S19JTklUICJ0YXNrIiAicHJpb3JpdHkiICJmdW5jIiAiY29udGV4dCINCmlz
IHByb3ZpZGVkIHRvIGluaXRpYWxpc2UgYQ0KLlZhIHRhc2sNCnN0cnVjdHVy
ZS4NClRoZSB2YWx1ZXMgb2YNCi5WYSBwcmlvcml0eSAsDQouVmEgZnVuYyAs
DQphbmQNCi5WYSBjb250ZXh0DQphcmUgc2ltcGx5IGNvcGllZCBpbnRvIHRo
ZSB0YXNrIHN0cnVjdHVyZSBmaWVsZHMgYW5kIHRoZQ0KLlZhIHRhX3BlbmRp
bmcNCmZpZWxkIGlzIGNsZWFyZWQuDQouUHANClR3byBtYWNyb3MNCi5GbiBU
QVNLUVVFVUVfREVDTEFSRSAibmFtZSINCmFuZA0KLkZuIFRBU0tRVUVVRV9E
RUZJTkUgIm5hbWUiICJlbnF1ZXVlIiAiY29udGV4dCIgImluaXQiDQphcmUg
dXNlZCB0byBkZWNsYXJlIGEgcmVmZXJlbmNlIHRvIGEgZ2xvYmFsIHF1ZXVl
DQphbmQgdG8gZGVmaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcXVl
dWUuDQpUaGUNCi5GbiBUQVNLUVVFVUVfREVGSU5FDQptYWNybyBhcnJhbmdl
cyB0byBjYWxsDQouRm4gdGFza3F1ZXVlX2NyZWF0ZQ0Kd2l0aCB0aGUgdmFs
dWVzIG9mIGl0cw0KLlZhIG5hbWUgLA0KLlZhIGVucXVldWUNCmFuZA0KLlZh
IGNvbnRleHQNCmFyZ3VtZW50cyBkdXJpbmcgc3lzdGVtIGluaXRpYWxpc2F0
aW9uLg0KQWZ0ZXIgY2FsbGluZw0KLkZuIHRhc2txdWV1ZV9jcmVhdGUgLA0K
dGhlDQouVmEgaW5pdA0KYXJndW1lbnQgdG8gdGhlIG1hY3JvIGlzIGV4ZWN1
dGVkIGFzIGEgQyBzdGF0ZW1lbnQsDQphbGxvd2luZyBhbnkgZnVydGhlciBp
bml0aWFsaXNhdGlvbiB0byBiZSBwZXJmb3JtZWQNCihzdWNoIGFzIHJlZ2lz
dGVyaW5nIGFuIGludGVycnVwdCBoYW5kbGVyIGV0Yy4pDQouUHANClRoZSBz
eXN0ZW0gcHJvdmlkZXMgYSBnbG9iYWwgdGFza3F1ZXVlLA0KLlZhIHRhc2tx
dWV1ZV9zd2kgLA0Kd2hpY2ggaXMgcnVuIHZpYSBhIHNvZnR3YXJlIGludGVy
cnVwdCBtZWNoYW5pc20uDQpUbyB1c2UgdGhpcyBxdWV1ZSwNCmNhbGwNCi5G
biB0YXNrcXVldWVfZW5xdWV1ZQ0Kd2l0aCB0aGUgdmFsdWUgb2YgdGhlIGds
b2JhbCB2YXJpYWJsZQ0KLlZhIHRhc2txdWV1ZV9zd2kgLg0KVGhlIHF1ZXVl
IHdpbGwgYmUgcnVuIGF0DQouRm4gc3Bsc29mdHRxIC4NCi5QcA0KVGhpcyBx
dWV1ZSBjYW4gYmUgdXNlZCwNCmZvciBpbnN0YW5jZSwgZm9yIGltcGxlbWVu
dGluZyBpbnRlcnJ1cHQgaGFuZGxlcnMgd2hpY2ggbXVzdCBwZXJmb3JtIGEN
CnNpZ25pZmljYW50IGFtb3VudCBvZiBwcm9jZXNzaW5nIGluIHRoZSBoYW5k
bGVyLg0KVGhlIGhhcmR3YXJlIGludGVycnVwdCBoYW5kbGVyIHdvdWxkIHBl
cmZvcm0gbWluaW1hbCBwcm9jZXNzaW5nIG9mIHRoZQ0KaW50ZXJydXB0IGFu
ZCB0aGVuIGVucXVldWUgYSB0YXNrIHRvIGZpbmlzaCB0aGUgd29yay4NClRo
aXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIHRpbWUgc3BlbnQgd2l0aCBpbnRl
cnJ1cHRzIGRpc2FibGVkDQp0byBhIG1pbmltdW0uDQouU2ggSElTVE9SWQ0K
VGhpcyBpbnRlcmZhY2UgZmlyc3QgYXBwZWFyZWQgaW4NCi5GeCA1LjAgLg0K
VGhlcmUgaXMgYSBzaW1pbGFyIGZhY2lsaXR5IGNhbGxlZCB0cXVldWUgaW4g
dGhlIExpbnV4IGtlcm5lbC4NCi5TaCBBVVRIT1JTDQpUaGlzIG1hbiBwYWdl
IHdhcyB3cml0dGVuIGJ5DQouQW4gRG91ZyBSYWJzb24gLg0K
--0-1970571438-958681453=:73457
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="taskqueue.h"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0005182124131.73457@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
IGZpcnN0IGFyZ3VtZW50IGlzIHRha2VuIGZyb20gdGhlICd0YV9jb250ZXh0
Jw0KICogZmllbGQgb2Ygc3RydWN0IHRhc2sgYW5kIHRoZSBzZWNvbmQgYXJn
dW1lbnQgaXMgYSBjb3VudCBvZiBob3cgbWFueQ0KICogdGltZXMgdGhlIHRh
c2sgd2FzIGVucXVldWVkIGJlZm9yZSB0aGUgY2FsbCB0byB0YXNrcXVldWVf
cnVuKCkuDQogKi8NCnR5cGVkZWYgdm9pZCAoKnRhc2tfZm4pKHZvaWQgKmNv
bnRleHQsIGludCBwZW5kaW5nKTsNCg0KLyoNCiAqIEEgbm90aWZpY2F0aW9u
IGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBmcm9tDQogKiB0
YXNrcXVldWVfZW5xdWV1ZSgpLiBUaGUgY29udGV4dCBhcmd1bWVudCBpcyBn
aXZlbiBpbiB0aGUgY2FsbCB0bw0KICogdGFza3F1ZXVlX2NyZWF0ZSgpLiBU
aGlzIGZ1bmN0aW9uIHdvdWxkIG5vcm1hbGx5IGJlIHVzZWQgdG8gYWxsb3cg
dGhlDQogKiBxdWV1ZSB0byBhcnJhbmdlIHRvIHJ1biBpdHNlbGYgbGF0ZXIg
KGUuZy4gYnkgc2NoZWR1bGluZyBhIHNvZnR3YXJlDQogKiBpbnRlcnJ1cHQg
b3Igd2FraW5nIGEga2VybmVsIHRocmVhZCkuDQogKi8NCnR5cGVkZWYgdm9p
ZCAoKnRhc2txdWV1ZV9lbnF1ZXVlX2ZuKSh2b2lkICpjb250ZXh0KTsNCg0K
c3RydWN0IHRhc2sgew0KCVNUQUlMUV9FTlRSWSh0YXNrKQl0YV9saW5rOwkv
KiBsaW5rIGZvciBxdWV1ZSAqLw0KCWludAkJCXRhX3BlbmRpbmc7CS8qIGNv
dW50IHRpbWVzIHF1ZXVlZCAqLw0KCWludAkJCXRhX3ByaW9yaXR5OwkvKiBw
cmlvcml0eSBvZiB0YXNrIGluIHF1ZXVlICovDQoJdGFza19mbgkJCXRhX2Z1
bmM7CS8qIHRhc2sgaGFuZGxlciAqLw0KCXZvaWQJCQkqdGFfY29udGV4dDsJ
LyogYXJndW1lbnQgZm9yIGhhbmRsZXIgKi8NCn07DQoNCiNpZiAwCQkJCS8q
IGxhdGVyICovDQovKg0KICogRmxhZ3MgZm9yIHRhc2txdWV1ZV9jcmVhdGUo
KSB3aGljaCB3aWxsIGNvbnRyb2wgdGhlIHByb3BlcnRpZXMgb2YgYQ0KICog
bXV0ZXggd2lsbCBiZSB1c2VkIHRvIHByb3RlY3QgdGhlIHF1ZXVlLg0KICoN
CiAqIE5vdGU6IHRoaXMgaXMgbm90IGN1cnJlbnRseSB1c2VkIGJ1dCB3aWxs
IGJlIHVzZWQgaW4gYSBmdXR1cmUNCiAqIGltcGxlbWVudGF0aW9uIG9mIFNN
UC4NCiAqLw0KI2RlZmluZSBUUV9ERUYJCTAJLyogdXNlIGJsb2NraW5nIG11
dGV4ICovDQojZGVmaW5lIFRRX1NQSU4JCTEJLyogdXNlIHNwaW4gbXV0ZXgg
Ki8NCiNlbmRpZg0KDQpzdHJ1Y3QgdGFza3F1ZXVlCSp0YXNrcXVldWVfY3Jl
YXRlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtZmxhZ3MsDQoJCQkJCSAgdGFz
a3F1ZXVlX2VucXVldWVfZm4gZW5xdWV1ZSwNCgkJCQkJICB2b2lkICpjb250
ZXh0KTsNCnZvaWQJCQl0YXNrcXVldWVfZnJlZShzdHJ1Y3QgdGFza3F1ZXVl
ICpxdWV1ZSk7DQpzdHJ1Y3QgdGFza3F1ZXVlCSp0YXNrcXVldWVfZmluZChj
b25zdCBjaGFyICpuYW1lKTsNCnZvaWQJCQl0YXNrcXVldWVfZW5xdWV1ZShz
dHJ1Y3QgdGFza3F1ZXVlICpxdWV1ZSwNCgkJCQkJICBzdHJ1Y3QgdGFzayAq
dGFzayk7DQp2b2lkCQkJdGFza3F1ZXVlX3J1bihzdHJ1Y3QgdGFza3F1ZXVl
ICpxdWV1ZSk7DQoNCi8qDQogKiBJbml0aWFsaXNlIGEgdGFzayBzdHJ1Y3R1
cmUuDQogKi8NCiNkZWZpbmUgVEFTS19JTklUKHRhc2ssIHByaW9yaXR5LCBm
dW5jLCBjb250ZXh0KSBkbyB7CVwNCiAgICB0YXNrLT50YV9wZW5kaW5nID0g
MDsJCQkJXA0KICAgIHRhc2stPnRhX3ByaW9yaXR5ID0gcHJpb3JpdHk7CQkJ
XA0KICAgIHRhc2stPnRhX2Z1bmMgPSBmdW5jOwkJCQlcDQogICAgdGFzay0+
dGFfY29udGV4dCA9IGNvbnRleHQ7CQkJCVwNCn0gd2hpbGUgKDApDQoNCi8q
DQogKiBEZWNsYXJlIGEgcmVmZXJlbmNlIHRvIGEgdGFza3F1ZXVlLg0KICov
DQojZGVmaW5lIFRBU0tRVUVVRV9ERUNMQVJFKG5hbWUpCQkJXA0KCQkJCQkJ
XA0KZXh0ZXJuIHN0cnVjdCB0YXNrcXVldWUgKnRhc2txdWV1ZV8jI25hbWUN
Cg0KLyoNCiAqIERlZmluZSBhbmQgaW5pdGlhbGlzZSBhIHRhc2txdWV1ZS4N
CiAqLw0KI2RlZmluZSBUQVNLUVVFVUVfREVGSU5FKG5hbWUsIGVucXVldWUs
IGNvbnRleHQsIGluaXQpCQlcDQoJCQkJCQkJCQlcDQpzdHJ1Y3QgdGFza3F1
ZXVlICp0YXNrcXVldWVfIyNuYW1lOwkJCQkJXA0KCQkJCQkJCQkJXA0Kc3Rh
dGljIHZvaWQJCQkJCQkJCVwNCnRhc2txdWV1ZV9kZWZpbmVfIyNuYW1lKHZv
aWQgKmFyZykJCQkJCVwNCnsJCQkJCQkJCQlcDQoJdGFza3F1ZXVlXyMjbmFt
ZSA9CQkJCQkJXA0KCQl0YXNrcXVldWVfY3JlYXRlKCNuYW1lLCBNX05PV0FJ
VCwgZW5xdWV1ZSwgY29udGV4dCk7CVwNCglpbml0OwkJCQkJCQkJXA0KfQkJ
CQkJCQkJCVwNCgkJCQkJCQkJCVwNClNZU0lOSVQodGFza3F1ZXVlXyMjbmFt
ZSwgU0lfU1VCX0NPTkZJR1VSRSwgU0lfT1JERVJfU0VDT05ELAkJXA0KCXRh
c2txdWV1ZV9kZWZpbmVfIyNuYW1lLCBOVUxMKTsNCg0KLyoNCiAqIFRoaXMg
cXVldWUgaXMgc2VydmljZWQgYnkgYSBzb2Z0d2FyZSBpbnRlcnJ1cHQgaGFu
ZGxlci4gVG8gZW5xdWV1ZQ0KICogYSB0YXNrLCBjYWxsIHRhc2txdWV1ZV9l
bnF1ZXVlKCZ0YXNrcXVldWVfc3dpLCAmdGFzaykuDQogKi8NClRBU0tRVUVV
RV9ERUNMQVJFKHN3aSk7DQoNCiNlbmRpZiAvKiBfS0VSTkVMICovDQoNCiNl
bmRpZiAvKiAhX1NZU19UQVNLUVVFVUVfSF8gKi8NCg==
--0-1970571438-958681453=:73457
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="subr_taskqueue.c"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.BSF.4.21.0005182124132.73457@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
TFFfRU5UUlkodGFza3F1ZXVlKQl0cV9saW5rOw0KCVNUQUlMUV9IRUFEKCwg
dGFzaykJdHFfcXVldWU7DQoJY29uc3QgY2hhcgkJKnRxX25hbWU7DQoJdGFz
a3F1ZXVlX2VucXVldWVfZm4JdHFfZW5xdWV1ZTsNCgl2b2lkCQkJKnRxX2Nv
bnRleHQ7DQp9Ow0KDQpzdHJ1Y3QgdGFza3F1ZXVlICoNCnRhc2txdWV1ZV9j
cmVhdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IG1mbGFncywNCgkJIHRhc2tx
dWV1ZV9lbnF1ZXVlX2ZuIGVucXVldWUsIHZvaWQgKmNvbnRleHQpDQp7DQoJ
c3RydWN0IHRhc2txdWV1ZSAqcXVldWU7DQoJc3RhdGljIGludCBvbmNlID0g
MTsNCg0KCXF1ZXVlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFza3F1ZXVl
KSwgTV9UQVNLUVVFVUUsIG1mbGFncyk7DQoJaWYgKCFxdWV1ZSkNCgkJcmV0
dXJuIDA7DQoNCglpZiAob25jZSkgew0KCQlTVEFJTFFfSU5JVCgmdGFza3F1
ZXVlX3F1ZXVlcyk7DQoJCW9uY2UgPSAwOw0KCX0NCglTVEFJTFFfSU5TRVJU
X1RBSUwoJnRhc2txdWV1ZV9xdWV1ZXMsIHF1ZXVlLCB0cV9saW5rKTsNCglT
VEFJTFFfSU5JVCgmcXVldWUtPnRxX3F1ZXVlKTsNCglxdWV1ZS0+dHFfbmFt
ZSA9IG5hbWU7DQoJcXVldWUtPnRxX2VucXVldWUgPSBlbnF1ZXVlOw0KCXF1
ZXVlLT50cV9jb250ZXh0ID0gY29udGV4dDsNCg0KCXJldHVybiBxdWV1ZTsN
Cn0NCg0Kdm9pZA0KdGFza3F1ZXVlX2ZyZWUoc3RydWN0IHRhc2txdWV1ZSAq
cXVldWUpDQp7DQoJaW50IHMgPSBzcGxoaWdoKCk7DQoJdGFza3F1ZXVlX3J1
bihxdWV1ZSk7DQoJU1RBSUxRX1JFTU9WRSgmdGFza3F1ZXVlX3F1ZXVlcywg
cXVldWUsIHRhc2txdWV1ZSwgdHFfbGluayk7DQoJc3BseChzKTsNCg0KCWZy
ZWUocXVldWUsIE1fVEFTS1FVRVVFKTsNCn0NCg0Kc3RydWN0IHRhc2txdWV1
ZSAqDQp0YXNrcXVldWVfZmluZChjb25zdCBjaGFyICpuYW1lKQ0Kew0KCXN0
cnVjdCB0YXNrcXVldWUgKnF1ZXVlOw0KDQoJU1RBSUxRX0ZPUkVBQ0gocXVl
dWUsICZ0YXNrcXVldWVfcXVldWVzLCB0cV9saW5rKQ0KCQlpZiAoIXN0cmNt
cChxdWV1ZS0+dHFfbmFtZSwgbmFtZSkpDQoJCQlyZXR1cm4gcXVldWU7DQoJ
cmV0dXJuIDA7DQp9DQoNCnZvaWQNCnRhc2txdWV1ZV9lbnF1ZXVlKHN0cnVj
dCB0YXNrcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgdGFzayAqdGFzaykNCnsNCglz
dHJ1Y3QgdGFzayAqaW5zOw0KCXN0cnVjdCB0YXNrICpwcmV2Ow0KDQoJaW50
IHMgPSBzcGxoaWdoKCk7DQoNCgkvKg0KCSAqIENvdW50IG11bHRpcGxlIGVu
cXVldWVzLg0KCSAqLw0KCWlmICh0YXNrLT50YV9wZW5kaW5nKSB7DQoJCXRh
c2stPnRhX3BlbmRpbmcrKzsNCgkJc3BseChzKTsNCgkJcmV0dXJuOw0KCX0N
Cg0KCS8qDQoJICogT3B0aW1pc2UgdGhlIGNhc2Ugd2hlbiBhbGwgdGFza3Mg
aGF2ZSB0aGUgc2FtZSBwcmlvcml0eS4NCgkgKi8NCglwcmV2ID0gU1RBSUxR
X0xBU1QoJnF1ZXVlLT50cV9xdWV1ZSk7DQoJaWYgKCFwcmV2IHx8IHByZXYt
PnRhX3ByaW9yaXR5ID49IHRhc2stPnRhX3ByaW9yaXR5KSB7DQoJCVNUQUlM
UV9JTlNFUlRfVEFJTCgmcXVldWUtPnRxX3F1ZXVlLCB0YXNrLCB0YV9saW5r
KTsNCgl9IGVsc2Ugew0KCQlwcmV2ID0gMDsNCgkJZm9yIChpbnMgPSBTVEFJ
TFFfRklSU1QoJnF1ZXVlLT50cV9xdWV1ZSk7IGluczsNCgkJICAgICBwcmV2
ID0gaW5zLCBpbnMgPSBTVEFJTFFfTkVYVChpbnMsIHRhX2xpbmspKQ0KCQkJ
aWYgKGlucy0+dGFfcHJpb3JpdHkgPCB0YXNrLT50YV9wcmlvcml0eSkNCgkJ
CQlicmVhazsNCg0KCQlpZiAocHJldikNCgkJCVNUQUlMUV9JTlNFUlRfQUZU
RVIoJnF1ZXVlLT50cV9xdWV1ZSwgcHJldiwgdGFzaywgdGFfbGluayk7DQoJ
CWVsc2UNCgkJCVNUQUlMUV9JTlNFUlRfSEVBRCgmcXVldWUtPnRxX3F1ZXVl
LCB0YXNrLCB0YV9saW5rKTsNCgl9DQoNCgl0YXNrLT50YV9wZW5kaW5nID0g
MTsNCglpZiAocXVldWUtPnRxX2VucXVldWUpDQoJCXF1ZXVlLT50cV9lbnF1
ZXVlKHF1ZXVlLT50cV9jb250ZXh0KTsNCg0KCXNwbHgocyk7DQp9DQoNCnZv
aWQNCnRhc2txdWV1ZV9ydW4oc3RydWN0IHRhc2txdWV1ZSAqcXVldWUpDQp7
DQoJaW50IHM7DQoJc3RydWN0IHRhc2sgKnRhc2s7DQoJaW50IHBlbmRpbmc7
DQoNCglzID0gc3BsaGlnaCgpOw0KCXdoaWxlIChTVEFJTFFfRklSU1QoJnF1
ZXVlLT50cV9xdWV1ZSkpIHsNCgkJLyoNCgkJICogQ2FyZWZ1bGx5IHJlbW92
ZSB0aGUgZmlyc3QgdGFzayBmcm9tIHRoZSBxdWV1ZSBhbmQNCgkJICogemVy
byBpdHMgcGVuZGluZyBjb3VudC4NCgkJICovDQoJCXRhc2sgPSBTVEFJTFFf
RklSU1QoJnF1ZXVlLT50cV9xdWV1ZSk7DQoJCVNUQUlMUV9SRU1PVkVfSEVB
RCgmcXVldWUtPnRxX3F1ZXVlLCB0YV9saW5rKTsNCgkJcGVuZGluZyA9IHRh
c2stPnRhX3BlbmRpbmc7DQoJCXRhc2stPnRhX3BlbmRpbmcgPSAwOw0KCQlz
cGx4KHMpOw0KDQoJCXRhc2stPnRhX2Z1bmModGFzay0+dGFfY29udGV4dCwg
cGVuZGluZyk7DQoNCgkJcyA9IHNwbGhpZ2goKTsNCgl9DQoJc3BseChzKTsN
Cn0NCg0Kc3RhdGljIHZvaWQNCnRhc2txdWV1ZV9zd2lfZW5xdWV1ZSh2b2lk
ICpjb250ZXh0KQ0Kew0KCXNldHNvZnR0cSgpOw0KfQ0KDQpzdGF0aWMgdm9p
ZA0KdGFza3F1ZXVlX3N3aV9ydW4odm9pZCkNCnsNCgl0YXNrcXVldWVfcnVu
KHRhc2txdWV1ZV9zd2kpOw0KfQ0KDQpUQVNLUVVFVUVfREVGSU5FKHN3aSwg
dGFza3F1ZXVlX3N3aV9lbnF1ZXVlLCAwLA0KCQkgcmVnaXN0ZXJfc3dpKFNX
SV9UUSwgdGFza3F1ZXVlX3N3aV9ydW4pKTsNCg==
--0-1970571438-958681453=:73457--


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.0005182120520.73457-400000>