diff options
Diffstat (limited to 'lib/workqueue.h')
| -rw-r--r-- | lib/workqueue.h | 153 | 
1 files changed, 76 insertions, 77 deletions
diff --git a/lib/workqueue.h b/lib/workqueue.h index 45f02afc63..ff7f57690d 100644 --- a/lib/workqueue.h +++ b/lib/workqueue.h @@ -1,4 +1,4 @@ -/*  +/*   * Quagga Work Queues.   *   * Copyright (C) 2005 Sun Microsystems, Inc. @@ -30,105 +30,104 @@ DECLARE_MTYPE(WORK_QUEUE)  #define WORK_QUEUE_DEFAULT_HOLD  50   /* action value, for use by item processor and item error handlers */ -typedef enum -{ -  WQ_SUCCESS = 0, -  WQ_ERROR,             /* Error, run error handler if provided */ -  WQ_RETRY_NOW,         /* retry immediately */ -  WQ_RETRY_LATER,       /* retry later, cease processing work queue */ -  WQ_REQUEUE,		/* requeue item, continue processing work queue */ -  WQ_QUEUE_BLOCKED,	/* Queue cant be processed at this time. -                         * Similar to WQ_RETRY_LATER, but doesn't penalise -                         * the particular item.. */ +typedef enum { +	WQ_SUCCESS = 0, +	WQ_ERROR,	 /* Error, run error handler if provided */ +	WQ_RETRY_NOW,     /* retry immediately */ +	WQ_RETRY_LATER,   /* retry later, cease processing work queue */ +	WQ_REQUEUE,       /* requeue item, continue processing work queue */ +	WQ_QUEUE_BLOCKED, /* Queue cant be processed at this time. +			   * Similar to WQ_RETRY_LATER, but doesn't penalise +			   * the particular item.. */  } wq_item_status;  /* A single work queue item, unsurprisingly */ -struct work_queue_item -{ -  void *data;                           /* opaque data */ -  unsigned short ran;			/* # of times item has been run */ +struct work_queue_item { +	void *data;	 /* opaque data */ +	unsigned short ran; /* # of times item has been run */  };  #define WQ_UNPLUGGED	(1 << 0) /* available for draining */ -struct work_queue -{ -  /* Everything but the specification struct is private -   * the following may be read -   */ -  struct thread_master *master;       /* thread master */ -  struct thread *thread;              /* thread, if one is active */ -  char *name;                         /* work queue name */ -   -  /* Specification for this work queue. -   * Public, must be set before use by caller. May be modified at will. -   */ -  struct { -    /* optional opaque user data, global to the queue. */ -    void *data; -     -    /* work function to process items with: -     * First argument is the workqueue queue. -     * Second argument is the item data -     */ -    wq_item_status (*workfunc) (struct work_queue *, void *); - -    /* error handling function, optional */ -    void (*errorfunc) (struct work_queue *, struct work_queue_item *); -     -    /* callback to delete user specific item data */ -    void (*del_item_data) (struct work_queue *, void *); -     -    /* completion callback, called when queue is emptied, optional */ -    void (*completion_func) (struct work_queue *); -     -    /* max number of retries to make for item that errors */ -    unsigned int max_retries;	 - -    unsigned int hold;	/* hold time for first run, in ms */ - -    unsigned long yield; /* yield time in us for associated thread */ -  } spec; -   -  /* remaining fields should be opaque to users */ -  struct list *items;                 /* queue item list */ -  unsigned long runs;                 /* runs count */ -  unsigned long yields;               /* yields count */ -   -  struct { -    unsigned int best; -    unsigned int granularity; -    unsigned long total; -  } cycles;	/* cycle counts */ -   -  /* private state */ -  u_int16_t flags;		/* user set flag */ +struct work_queue { +	/* Everything but the specification struct is private +	 * the following may be read +	 */ +	struct thread_master *master; /* thread master */ +	struct thread *thread;	/* thread, if one is active */ +	char *name;		      /* work queue name */ + +	/* Specification for this work queue. +	 * Public, must be set before use by caller. May be modified at will. +	 */ +	struct { +		/* optional opaque user data, global to the queue. */ +		void *data; + +		/* work function to process items with: +		 * First argument is the workqueue queue. +		 * Second argument is the item data +		 */ +		wq_item_status (*workfunc)(struct work_queue *, void *); + +		/* error handling function, optional */ +		void (*errorfunc)(struct work_queue *, +				  struct work_queue_item *); + +		/* callback to delete user specific item data */ +		void (*del_item_data)(struct work_queue *, void *); + +		/* completion callback, called when queue is emptied, optional +		 */ +		void (*completion_func)(struct work_queue *); + +		/* max number of retries to make for item that errors */ +		unsigned int max_retries; + +		unsigned int hold; /* hold time for first run, in ms */ + +		unsigned long +			yield; /* yield time in us for associated thread */ +	} spec; + +	/* remaining fields should be opaque to users */ +	struct list *items;   /* queue item list */ +	unsigned long runs;   /* runs count */ +	unsigned long yields; /* yields count */ + +	struct { +		unsigned int best; +		unsigned int granularity; +		unsigned long total; +	} cycles; /* cycle counts */ + +	/* private state */ +	u_int16_t flags; /* user set flag */  };  /* User API */ -/* create a new work queue, of given name.  +/* create a new work queue, of given name.   * user must fill in the spec of the returned work queue before adding   * anything to it   */ -extern struct work_queue *work_queue_new (struct thread_master *, -                                          const char *); +extern struct work_queue *work_queue_new(struct thread_master *, const char *);  /* destroy work queue */ -extern void work_queue_free (struct work_queue *); +extern void work_queue_free(struct work_queue *);  /* Add the supplied data as an item onto the workqueue */ -extern void work_queue_add (struct work_queue *, void *); +extern void work_queue_add(struct work_queue *, void *);  /* plug the queue, ie prevent it from being drained / processed */ -extern void work_queue_plug (struct work_queue *wq); +extern void work_queue_plug(struct work_queue *wq);  /* unplug the queue, allow it to be drained again */ -extern void work_queue_unplug (struct work_queue *wq); +extern void work_queue_unplug(struct work_queue *wq); -bool work_queue_is_scheduled (struct work_queue *); +bool work_queue_is_scheduled(struct work_queue *);  /* Helpers, exported for thread.c and command.c */ -extern int work_queue_run (struct thread *); +extern int work_queue_run(struct thread *); -extern void workqueue_cmd_init (void); +extern void workqueue_cmd_init(void);  #endif /* _QUAGGA_WORK_QUEUE_H */  | 
