summaryrefslogtreecommitdiff
path: root/drivers/staging/fsl_dpa_offload
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/fsl_dpa_offload')
-rw-r--r--drivers/staging/fsl_dpa_offload/dpa_classifier.c51
1 files changed, 28 insertions, 23 deletions
diff --git a/drivers/staging/fsl_dpa_offload/dpa_classifier.c b/drivers/staging/fsl_dpa_offload/dpa_classifier.c
index 0899683..f9f43f6 100644
--- a/drivers/staging/fsl_dpa_offload/dpa_classifier.c
+++ b/drivers/staging/fsl_dpa_offload/dpa_classifier.c
@@ -6188,27 +6188,29 @@ static int update_hm_prepare_nodes(struct dpa_cls_hm *pupdate_hm,
pupdate_hm);
}
- hm_node = try_compatible_node(pupdate_hm);
- if ((pupdate_hm->update_params.ip_frag_params.mtu) ||
- (hm_node == NULL)) {
- /* Create a header manip node for this update: */
- hm_node = kzalloc(sizeof(*hm_node), GFP_KERNEL);
+ if (pupdate_hm->update_params.op_flags != DPA_CLS_HM_UPDATE_NONE) {
+ hm_node = try_compatible_node(pupdate_hm);
+ if ((pupdate_hm->update_params.ip_frag_params.mtu) ||
+ (hm_node == NULL)) {
+ /* Create a header manip node for this update: */
+ hm_node = kzalloc(sizeof(*hm_node), GFP_KERNEL);
+
+ dpa_cls_dbg(("DEBUG: dpa_classifier %s (%d): Created new hm_node = 0x%p\n",
+ __func__, __LINE__, hm_node));
+ if (!hm_node) {
+ log_err("No more memory for header manip nodes.\n");
+ return -ENOMEM;
+ }
- dpa_cls_dbg(("DEBUG: dpa_classifier %s (%d): Created new hm_node = 0x%p\n",
- __func__, __LINE__, hm_node));
- if (!hm_node) {
- log_err("No more memory for header manip nodes.\n");
- return -ENOMEM;
- }
+ INIT_LIST_HEAD(&hm_node->list_node);
- INIT_LIST_HEAD(&hm_node->list_node);
+ /* Initialize dontParseAfterManip to TRUE */
+ hm_node->params.u.hdr.dontParseAfterManip = TRUE;
+ }
- /* Initialize dontParseAfterManip to TRUE */
- hm_node->params.u.hdr.dontParseAfterManip = TRUE;
+ pupdate_hm->hm_node[0] = hm_node;
}
- pupdate_hm->hm_node[0] = hm_node;
-
if (pupdate_hm->update_params.ip_frag_params.mtu) {
/* IP fragmentation option is enabled */
/* Create a header manip node: */
@@ -6252,11 +6254,13 @@ static int update_hm_update_params(struct dpa_cls_hm *pupdate_hm)
hm_node = pupdate_hm->hm_node[0];
- hm_node->params.type = e_FM_PCD_MANIP_HDR;
-
if (pupdate_hm->update_params.op_flags & update_ops) {
+ hm_node->params.type = e_FM_PCD_MANIP_HDR;
hm_node->params.u.hdr.fieldUpdate = TRUE;
+ hm_node->params.u.hdr.dontParseAfterManip &=
+ (pupdate_hm->update_params.reparse) ? FALSE : TRUE;
+
if (pupdate_hm->update_params.op_flags &
DPA_CLS_HM_UPDATE_IPv4_UPDATE) {
hm_node->params.u.hdr.fieldUpdateParams.type =
@@ -6395,10 +6399,14 @@ static int update_hm_update_params(struct dpa_cls_hm *pupdate_hm)
}
if (pupdate_hm->update_params.op_flags & replace_ops) {
- hm_node->params.u.hdr.custom = TRUE;
- hm_node->params.u.hdr.customParams.type =
+ hm_node->params.type = e_FM_PCD_MANIP_HDR;
+ hm_node->params.u.hdr.custom = TRUE;
+ hm_node->params.u.hdr.customParams.type =
e_FM_PCD_MANIP_HDR_CUSTOM_IP_REPLACE;
+ hm_node->params.u.hdr.dontParseAfterManip &=
+ (pupdate_hm->update_params.reparse) ? FALSE : TRUE;
+
if (pupdate_hm->update_params.op_flags &
DPA_CLS_HM_REPLACE_IPv4_BY_IPv6) {
@@ -6436,9 +6444,6 @@ static int update_hm_update_params(struct dpa_cls_hm *pupdate_hm)
}
}
- hm_node->params.u.hdr.dontParseAfterManip &=
- (pupdate_hm->update_params.reparse) ? FALSE : TRUE;
-
hm_node = pupdate_hm->hm_node[1];
if (pupdate_hm->update_params.ip_frag_params.mtu) {