aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc.h
diff options
context:
space:
mode:
authorJames.Smart@Emulex.Com <James.Smart@Emulex.Com>2005-11-29 16:32:13 -0500
committerJames Bottomley <jejb@mulgrave.(none)>2005-12-13 20:34:14 -0500
commit875fbdfe9b1b4c8f12622a8d8d81428ff0984875 (patch)
tree63c787cb9a7d4a92eaedcc9f8a89a00d5d8f6603 /drivers/scsi/lpfc/lpfc.h
parent5cc36b3cd0e3610ad7c7e2514160998276798fc0 (diff)
[SCSI] lpfc 8.1.1 : Add polled-mode support
- Add functionality to run in polled mode only. Includes run time attribute to enable mode. - Enable runtime writable hba settings for coallescing and delay parameters Customers have requested a mode in the driver to run strictly polled. This is generally to support an environment where the server is extremely loaded and is looking to reclaim some cpu cycles from adapter interrupt handling. This patch adds a new "poll" attribute, and the following behavior: if value is 0 (default): The driver uses the normal method for i/o completion. It uses the firmware feature of interrupt coalesing. The firmware allows a minimum number of i/o completions before an interrupt, or a maximum time delay between interrupts. By default, the driver sets these to no delay (disabled) or 1 i/o - meaning coalescing is disabled. Attributes were provided to change the coalescing values, but it was a module-load time only and global across all adapters. This patch allows them to be writable on a per-adapter basis. if value is 1 : Interrupts are left enabled, expecting that the user has tuned the interrupt coalescing values. When this setting is enabled, the driver will attempt to service completed i/o whenever new i/o is submitted to the adapter. If the coalescing values are large, and the i/o generation rate steady, an interrupt will be avoided by servicing completed i/o prior to the coalescing thresholds kicking in. However, if the i/o completion load is high enough or i/o generation slow, the coalescion values will ensure that completed i/o is serviced in a timely fashion. if value is 3 : Turns off FCP i/o interrupts altogether. The coalescing values now have no effect. A new attribute "poll_tmo" (default 10ms) exists to set the polling interval for i/o completion. When this setting is enabled, the driver will attempt to service completed i/o and restart the interval timer whenever new i/o is submitted. This behavior allows for servicing of completed i/o sooner than the interval timer, but ensures that if no i/o is being issued, then the interval timer will kick in to service the outstanding i/o. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc.h')
-rw-r--r--drivers/scsi/lpfc/lpfc.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/scsi/lpfc/lpfc.h b/drivers/scsi/lpfc/lpfc.h
index dc73a2f8f12c..1f3873ae9d68 100644
--- a/drivers/scsi/lpfc/lpfc.h
+++ b/drivers/scsi/lpfc/lpfc.h
@@ -45,6 +45,11 @@ struct lpfc_sli2_slim;
45 45
46#define MAX_HBAEVT 32 46#define MAX_HBAEVT 32
47 47
48enum lpfc_polling_flags {
49 ENABLE_FCP_RING_POLLING = 0x1,
50 DISABLE_FCP_RING_INT = 0x2
51};
52
48/* Provide DMA memory definitions the driver uses per port instance. */ 53/* Provide DMA memory definitions the driver uses per port instance. */
49struct lpfc_dmabuf { 54struct lpfc_dmabuf {
50 struct list_head list; 55 struct list_head list;
@@ -287,6 +292,8 @@ struct lpfc_hba {
287 uint32_t cfg_fcp_bind_method; 292 uint32_t cfg_fcp_bind_method;
288 uint32_t cfg_discovery_threads; 293 uint32_t cfg_discovery_threads;
289 uint32_t cfg_max_luns; 294 uint32_t cfg_max_luns;
295 uint32_t cfg_poll;
296 uint32_t cfg_poll_tmo;
290 uint32_t cfg_sg_seg_cnt; 297 uint32_t cfg_sg_seg_cnt;
291 uint32_t cfg_sg_dma_buf_size; 298 uint32_t cfg_sg_dma_buf_size;
292 299
@@ -338,7 +345,9 @@ struct lpfc_hba {
338#define VPD_PORT 0x8 /* valid vpd port data */ 345#define VPD_PORT 0x8 /* valid vpd port data */
339#define VPD_MASK 0xf /* mask for any vpd data */ 346#define VPD_MASK 0xf /* mask for any vpd data */
340 347
348 struct timer_list fcp_poll_timer;
341 struct timer_list els_tmofunc; 349 struct timer_list els_tmofunc;
350
342 /* 351 /*
343 * stat counters 352 * stat counters
344 */ 353 */
@@ -349,6 +358,7 @@ struct lpfc_hba {
349 struct lpfc_sysfs_mbox sysfs_mbox; 358 struct lpfc_sysfs_mbox sysfs_mbox;
350 359
351 /* fastpath list. */ 360 /* fastpath list. */
361 spinlock_t scsi_buf_list_lock;
352 struct list_head lpfc_scsi_buf_list; 362 struct list_head lpfc_scsi_buf_list;
353 uint32_t total_scsi_bufs; 363 uint32_t total_scsi_bufs;
354 struct list_head lpfc_iocb_list; 364 struct list_head lpfc_iocb_list;