diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/fsl_dpa_offload/dpa_classifier.c | 51 |
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) { |