| 
									
										
										
										
											2011-07-23 06:43:04 +00:00
										 |  |  | #ifndef ISCSI_THREAD_QUEUE_H
 | 
					
						
							|  |  |  | #define ISCSI_THREAD_QUEUE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Defines for thread sets. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | extern int iscsi_thread_set_force_reinstatement(struct iscsi_conn *); | 
					
						
							|  |  |  | extern int iscsi_allocate_thread_sets(u32); | 
					
						
							|  |  |  | extern void iscsi_deallocate_thread_sets(void); | 
					
						
							|  |  |  | extern void iscsi_activate_thread_set(struct iscsi_conn *, struct iscsi_thread_set *); | 
					
						
							|  |  |  | extern struct iscsi_thread_set *iscsi_get_thread_set(void); | 
					
						
							|  |  |  | extern void iscsi_set_thread_clear(struct iscsi_conn *, u8); | 
					
						
							|  |  |  | extern void iscsi_set_thread_set_signal(struct iscsi_conn *, u8); | 
					
						
							|  |  |  | extern int iscsi_release_thread_set(struct iscsi_conn *); | 
					
						
							|  |  |  | extern struct iscsi_conn *iscsi_rx_thread_pre_handler(struct iscsi_thread_set *); | 
					
						
							|  |  |  | extern struct iscsi_conn *iscsi_tx_thread_pre_handler(struct iscsi_thread_set *); | 
					
						
							|  |  |  | extern int iscsi_thread_set_init(void); | 
					
						
							|  |  |  | extern void iscsi_thread_set_free(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern int iscsi_target_tx_thread(void *); | 
					
						
							|  |  |  | extern int iscsi_target_rx_thread(void *); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define TARGET_THREAD_SET_COUNT			4
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define ISCSI_RX_THREAD                         1
 | 
					
						
							|  |  |  | #define ISCSI_TX_THREAD                         2
 | 
					
						
							|  |  |  | #define ISCSI_RX_THREAD_NAME			"iscsi_trx"
 | 
					
						
							|  |  |  | #define ISCSI_TX_THREAD_NAME			"iscsi_ttx"
 | 
					
						
							|  |  |  | #define ISCSI_BLOCK_RX_THREAD			0x1
 | 
					
						
							|  |  |  | #define ISCSI_BLOCK_TX_THREAD			0x2
 | 
					
						
							|  |  |  | #define ISCSI_CLEAR_RX_THREAD			0x1
 | 
					
						
							|  |  |  | #define ISCSI_CLEAR_TX_THREAD			0x2
 | 
					
						
							|  |  |  | #define ISCSI_SIGNAL_RX_THREAD			0x1
 | 
					
						
							|  |  |  | #define ISCSI_SIGNAL_TX_THREAD			0x2
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* struct iscsi_thread_set->status */ | 
					
						
							|  |  |  | #define ISCSI_THREAD_SET_FREE			1
 | 
					
						
							|  |  |  | #define ISCSI_THREAD_SET_ACTIVE			2
 | 
					
						
							|  |  |  | #define ISCSI_THREAD_SET_DIE			3
 | 
					
						
							|  |  |  | #define ISCSI_THREAD_SET_RESET			4
 | 
					
						
							|  |  |  | #define ISCSI_THREAD_SET_DEALLOCATE_THREADS	5
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* By default allow a maximum of 32K iSCSI connections */ | 
					
						
							|  |  |  | #define ISCSI_TS_BITMAP_BITS			32768
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct iscsi_thread_set { | 
					
						
							|  |  |  | 	/* flags used for blocking and restarting sets */ | 
					
						
							|  |  |  | 	int	blocked_threads; | 
					
						
							|  |  |  | 	/* flag for creating threads */ | 
					
						
							|  |  |  | 	int	create_threads; | 
					
						
							|  |  |  | 	/* flag for delaying readding to inactive list */ | 
					
						
							|  |  |  | 	int	delay_inactive; | 
					
						
							|  |  |  | 	/* status for thread set */ | 
					
						
							|  |  |  | 	int	status; | 
					
						
							|  |  |  | 	/* which threads have had signals sent */ | 
					
						
							|  |  |  | 	int	signal_sent; | 
					
						
							|  |  |  | 	/* flag for which threads exited first */ | 
					
						
							|  |  |  | 	int	thread_clear; | 
					
						
							|  |  |  | 	/* Active threads in the thread set */ | 
					
						
							|  |  |  | 	int	thread_count; | 
					
						
							|  |  |  | 	/* Unique thread ID */ | 
					
						
							|  |  |  | 	u32	thread_id; | 
					
						
							|  |  |  | 	/* pointer to connection if set is active */ | 
					
						
							|  |  |  | 	struct iscsi_conn	*conn; | 
					
						
							|  |  |  | 	/* used for controlling ts state accesses */ | 
					
						
							|  |  |  | 	spinlock_t	ts_state_lock; | 
					
						
							|  |  |  | 	/* used for restarting thread queue */ | 
					
						
							|  |  |  | 	struct completion	rx_restart_comp; | 
					
						
							|  |  |  | 	/* used for restarting thread queue */ | 
					
						
							|  |  |  | 	struct completion	tx_restart_comp; | 
					
						
							|  |  |  | 	/* used for normal unused blocking */ | 
					
						
							|  |  |  | 	struct completion	rx_start_comp; | 
					
						
							|  |  |  | 	/* used for normal unused blocking */ | 
					
						
							|  |  |  | 	struct completion	tx_start_comp; | 
					
						
							|  |  |  | 	/* OS descriptor for rx thread */ | 
					
						
							|  |  |  | 	struct task_struct	*rx_thread; | 
					
						
							|  |  |  | 	/* OS descriptor for tx thread */ | 
					
						
							|  |  |  | 	struct task_struct	*tx_thread; | 
					
						
							|  |  |  | 	/* struct iscsi_thread_set in list list head*/ | 
					
						
							|  |  |  | 	struct list_head	ts_list; | 
					
						
							| 
									
										
										
										
											2013-09-05 16:13:41 -07:00
										 |  |  | 	struct semaphore	ts_activate_sem; | 
					
						
							| 
									
										
										
										
											2011-07-23 06:43:04 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif   /*** ISCSI_THREAD_QUEUE_H ***/
 |