aacraid: SCSI blk tag support
The method to allocate and free FIB's in the present code utilizes spinlocks. Multiple IO's have to wait on the spinlock to acquire or free fibs creating a performance bottleneck. An alternative solution would be to use block layer tags to keep track of the fibs allocated and freed. To this end aac_fib_alloc_tag was created to utilize the blk layer tags to plug into the Fib pool.These functions are used exclusively in the IO path. 8 fibs are reserved for the use of AIF management software and utilize the previous spinlock based implementations. Signed-off-by: Raghava Aditya Renukunta <RaghavaAditya.Renukunta@pmcs.com> Reviewed-by: Shane Seymour <shane.seymour@hpe.com> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:

committed by
Martin K. Petersen

parent
bd8d859a21
commit
6bf3b630d0
@@ -137,6 +137,7 @@ int aac_fib_setup(struct aac_dev * dev)
|
||||
i++, fibptr++)
|
||||
{
|
||||
fibptr->flags = 0;
|
||||
fibptr->size = sizeof(struct fib);
|
||||
fibptr->dev = dev;
|
||||
fibptr->hw_fib_va = hw_fib;
|
||||
fibptr->data = (void *) fibptr->hw_fib_va->data;
|
||||
@@ -156,12 +157,37 @@ int aac_fib_setup(struct aac_dev * dev)
|
||||
*/
|
||||
dev->fibs[dev->scsi_host_ptr->can_queue + AAC_NUM_MGT_FIB - 1].next = NULL;
|
||||
/*
|
||||
* Enable this to debug out of queue space
|
||||
*/
|
||||
dev->free_fib = &dev->fibs[0];
|
||||
* Set 8 fibs aside for management tools
|
||||
*/
|
||||
dev->free_fib = &dev->fibs[dev->scsi_host_ptr->can_queue];
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* aac_fib_alloc_tag-allocate a fib using tags
|
||||
* @dev: Adapter to allocate the fib for
|
||||
*
|
||||
* Allocate a fib from the adapter fib pool using tags
|
||||
* from the blk layer.
|
||||
*/
|
||||
|
||||
struct fib *aac_fib_alloc_tag(struct aac_dev *dev, struct scsi_cmnd *scmd)
|
||||
{
|
||||
struct fib *fibptr;
|
||||
|
||||
fibptr = &dev->fibs[scmd->request->tag];
|
||||
/*
|
||||
* Null out fields that depend on being zero at the start of
|
||||
* each I/O
|
||||
*/
|
||||
fibptr->hw_fib_va->header.XferState = 0;
|
||||
fibptr->type = FSAFS_NTC_FIB_CONTEXT;
|
||||
fibptr->callback_data = NULL;
|
||||
fibptr->callback = NULL;
|
||||
|
||||
return fibptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* aac_fib_alloc - allocate a fib
|
||||
* @dev: Adapter to allocate the fib for
|
||||
|
Reference in New Issue
Block a user