summaryrefslogtreecommitdiff
path: root/drivers/scsi/isci/request.h
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2011-06-17 14:18:39 -0700
committerDan Williams <dan.j.williams@intel.com>2011-07-03 04:04:51 -0700
commitdb0562509800a2d4cb5cb14a66413c30484f165c (patch)
treed05cc34b78a8f2a6b9024b8d45e5e8e50786ee64 /drivers/scsi/isci/request.h
parent38d8879baeb61b6946052739e7c03fa79b3a57f0 (diff)
downloadlwn-db0562509800a2d4cb5cb14a66413c30484f165c.tar.gz
lwn-db0562509800a2d4cb5cb14a66413c30484f165c.zip
isci: preallocate requests
the dma_pool interface is optimized for object_size << page_size which is not the case with isci_request objects and the dma_pool routines show up in the top of the profile. The old io_request_table which tracked whether tci slots were in-flight or not is replaced with an IREQ_ACTIVE flag per request. Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/request.h')
-rw-r--r--drivers/scsi/isci/request.h26
1 files changed, 5 insertions, 21 deletions
diff --git a/drivers/scsi/isci/request.h b/drivers/scsi/isci/request.h
index f440e421ea0e..7628decbd535 100644
--- a/drivers/scsi/isci/request.h
+++ b/drivers/scsi/isci/request.h
@@ -257,6 +257,7 @@ struct isci_request {
#define IREQ_COMPLETE_IN_TARGET 0
#define IREQ_TERMINATED 1
#define IREQ_TMF 2
+ #define IREQ_ACTIVE 3
unsigned long flags;
union ttype_ptr_union {
@@ -590,33 +591,16 @@ isci_request_change_started_to_aborted(struct isci_request *isci_request,
completion_ptr,
aborted);
}
-/**
- * isci_request_free() - This function frees the request object.
- * @isci_host: This parameter specifies the ISCI host object
- * @isci_request: This parameter points to the isci_request object
- *
- */
-static inline void isci_request_free(struct isci_host *isci_host,
- struct isci_request *isci_request)
-{
- if (!isci_request)
- return;
-
- /* release the dma memory if we fail. */
- dma_pool_free(isci_host->dma_pool,
- isci_request,
- isci_request->request_daddr);
-}
#define isci_request_access_task(req) ((req)->ttype_ptr.io_task_ptr)
#define isci_request_access_tmf(req) ((req)->ttype_ptr.tmf_task_ptr)
-struct isci_request *isci_request_alloc_tmf(struct isci_host *ihost,
- struct isci_tmf *isci_tmf,
- gfp_t gfp_flags);
+struct isci_request *isci_tmf_request_from_tag(struct isci_host *ihost,
+ struct isci_tmf *isci_tmf,
+ u16 tag);
int isci_request_execute(struct isci_host *ihost, struct isci_remote_device *idev,
- struct sas_task *task, u16 tag, gfp_t gfp_flags);
+ struct sas_task *task, u16 tag);
void isci_terminate_pending_requests(struct isci_host *ihost,
struct isci_remote_device *idev);
enum sci_status