Commit 566d53a8 authored by Don Hiatt's avatar Don Hiatt Committed by Doug Ledford

IB/hfi1: Enhance PIO/SDMA send for 16B

PIO/SDMA send logic now uses the hdr_type field to determine
the type of packet that has been constructed. Based on the hdr_type,
certain things such as PBC flags, padding count and the LT extra
trailing bytes are determined.
Reviewed-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDasaratharaman Chandramouli <dasaratharaman.chandramouli@intel.com>
Signed-off-by: default avatarDon Hiatt <don.hiatt@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 5b6cabb0
...@@ -1558,7 +1558,7 @@ static const hfi1_handle_cnp hfi1_handle_cnp_tbl[2] = { ...@@ -1558,7 +1558,7 @@ static const hfi1_handle_cnp hfi1_handle_cnp_tbl[2] = {
[HFI1_PKT_TYPE_16B] = &return_cnp_16B [HFI1_PKT_TYPE_16B] = &return_cnp_16B
}; };
#define PKEY_CHECK_INVALID -1 #define PKEY_CHECK_INVALID -1
int egress_pkey_check(struct hfi1_pportdata *ppd, __be16 *lrh, __be32 *bth, int egress_pkey_check(struct hfi1_pportdata *ppd, u32 slid, u16 pkey,
u8 sc5, int8_t s_pkey_index); u8 sc5, int8_t s_pkey_index);
#define PACKET_EGRESS_TIMEOUT 350 #define PACKET_EGRESS_TIMEOUT 350
......
...@@ -502,6 +502,8 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, ...@@ -502,6 +502,8 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd,
struct sdma_req_info info; struct sdma_req_info info;
struct user_sdma_request *req; struct user_sdma_request *req;
u8 opcode, sc, vl; u8 opcode, sc, vl;
u16 pkey;
u32 slid;
int req_queued = 0; int req_queued = 0;
u16 dlid; u16 dlid;
u32 selector; u32 selector;
...@@ -635,8 +637,9 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd, ...@@ -635,8 +637,9 @@ int hfi1_user_sdma_process_request(struct hfi1_filedata *fd,
} }
/* Checking P_KEY for requests from user-space */ /* Checking P_KEY for requests from user-space */
if (egress_pkey_check(dd->pport, req->hdr.lrh, req->hdr.bth, sc, pkey = (u16)be32_to_cpu(req->hdr.bth[0]);
PKEY_CHECK_INVALID)) { slid = be16_to_cpu(req->hdr.lrh[3]);
if (egress_pkey_check(dd->pport, slid, pkey, sc, PKEY_CHECK_INVALID)) {
ret = -EINVAL; ret = -EINVAL;
goto free_req; goto free_req;
} }
......
This diff is collapsed.
...@@ -163,6 +163,7 @@ struct hfi1_pkt_state { ...@@ -163,6 +163,7 @@ struct hfi1_pkt_state {
unsigned long timeout; unsigned long timeout;
unsigned long timeout_int; unsigned long timeout_int;
int cpu; int cpu;
u8 opcode;
bool in_thread; bool in_thread;
bool pkts_sent; bool pkts_sent;
}; };
......
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