Commit 780a4c16 authored by Sebastian Sanchez's avatar Sebastian Sanchez Committed by Doug Ledford

IB/hfi1: Remove atomic operations for SDMA_REQ_HAVE_AHG bit

The AHG index is only accessed in the request call
from user space, so there's no need for atomic semantics.
Replace atomic operations for SDMA_REQ_HAVE_AHG bit
with a test of the AHG index.
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarSebastian Sanchez <sebastian.sanchez@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 5042cddf
...@@ -155,9 +155,8 @@ MODULE_PARM_DESC(sdma_comp_size, "Size of User SDMA completion ring. Default: 12 ...@@ -155,9 +155,8 @@ MODULE_PARM_DESC(sdma_comp_size, "Size of User SDMA completion ring. Default: 12
/* SDMA request flag bits */ /* SDMA request flag bits */
#define SDMA_REQ_FOR_THREAD 1 #define SDMA_REQ_FOR_THREAD 1
#define SDMA_REQ_SEND_DONE 2 #define SDMA_REQ_SEND_DONE 2
#define SDMA_REQ_HAVE_AHG 3 #define SDMA_REQ_HAS_ERROR 3
#define SDMA_REQ_HAS_ERROR 4 #define SDMA_REQ_DONE_ERROR 4
#define SDMA_REQ_DONE_ERROR 5
#define SDMA_PKT_Q_INACTIVE BIT(0) #define SDMA_PKT_Q_INACTIVE BIT(0)
#define SDMA_PKT_Q_ACTIVE BIT(1) #define SDMA_PKT_Q_ACTIVE BIT(1)
...@@ -216,7 +215,7 @@ struct user_sdma_request { ...@@ -216,7 +215,7 @@ struct user_sdma_request {
* each request will need it's own engine pointer. * each request will need it's own engine pointer.
*/ */
struct sdma_engine *sde; struct sdma_engine *sde;
u8 ahg_idx; s8 ahg_idx;
u32 ahg[9]; u32 ahg[9];
/* /*
* KDETH.Offset (Eager) field * KDETH.Offset (Eager) field
...@@ -614,6 +613,7 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, ...@@ -614,6 +613,7 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd,
req->pq = pq; req->pq = pq;
req->cq = cq; req->cq = cq;
req->status = -1; req->status = -1;
req->ahg_idx = -1;
INIT_LIST_HEAD(&req->txps); INIT_LIST_HEAD(&req->txps);
memcpy(&req->info, &info, sizeof(info)); memcpy(&req->info, &info, sizeof(info));
...@@ -764,14 +764,8 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, ...@@ -764,14 +764,8 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd,
} }
/* We don't need an AHG entry if the request contains only one packet */ /* We don't need an AHG entry if the request contains only one packet */
if (req->info.npkts > 1 && HFI1_CAP_IS_USET(SDMA_AHG)) { if (req->info.npkts > 1 && HFI1_CAP_IS_USET(SDMA_AHG))
int ahg = sdma_ahg_alloc(req->sde); req->ahg_idx = sdma_ahg_alloc(req->sde);
if (likely(ahg >= 0)) {
req->ahg_idx = (u8)ahg;
set_bit(SDMA_REQ_HAVE_AHG, &req->flags);
}
}
set_comp_state(pq, cq, info.comp_idx, QUEUED, 0); set_comp_state(pq, cq, info.comp_idx, QUEUED, 0);
atomic_inc(&pq->n_reqs); atomic_inc(&pq->n_reqs);
...@@ -989,7 +983,7 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts) ...@@ -989,7 +983,7 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
} }
} }
if (test_bit(SDMA_REQ_HAVE_AHG, &req->flags)) { if (req->ahg_idx >= 0) {
if (!req->seqnum) { if (!req->seqnum) {
u16 pbclen = le16_to_cpu(req->hdr.pbc[0]); u16 pbclen = le16_to_cpu(req->hdr.pbc[0]);
u32 lrhlen = get_lrh_len(req->hdr, u32 lrhlen = get_lrh_len(req->hdr,
...@@ -1119,7 +1113,7 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts) ...@@ -1119,7 +1113,7 @@ static int user_sdma_send_pkts(struct user_sdma_request *req, unsigned maxpkts)
* happen due to the sequential manner in which * happen due to the sequential manner in which
* descriptors are processed. * descriptors are processed.
*/ */
if (test_bit(SDMA_REQ_HAVE_AHG, &req->flags)) if (req->ahg_idx >= 0)
sdma_ahg_free(req->sde, req->ahg_idx); sdma_ahg_free(req->sde, req->ahg_idx);
} }
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment