Signed-off-by: Matthias Beyer <m...@beyermatthias.de>
---
 drivers/staging/bcm/PHSModule.c | 61 +++++++++++++++++++++--------------------
 1 file changed, 32 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/bcm/PHSModule.c b/drivers/staging/bcm/PHSModule.c
index d2aa9c9..c290178 100644
--- a/drivers/staging/bcm/PHSModule.c
+++ b/drivers/staging/bcm/PHSModule.c
@@ -895,50 +895,53 @@ static void free_phs_serviceflow_rules(struct 
bcm_phs_table *psServiceFlowRulesT
        BCM_DEBUG_PRINT(Adapter, DBG_TYPE_OTHERS, PHS_DISPATCH, DBG_LVL_ALL,
                        "=======>\n");
 
-       if (psServiceFlowRulesTable) {
-               for (i = 0; i < MAX_SERVICEFLOWS; i++) {
-                       struct bcm_phs_entry stServiceFlowEntry =
-                               psServiceFlowRulesTable->stSFList[i];
-                       struct bcm_phs_classifier_table 
*pstClassifierRulesTable =
-                               stServiceFlowEntry.pstClassifierTable;
+       if (!psServiceFlowRulesTable)
+               goto out;
 
-                       if (pstClassifierRulesTable) {
-                               for (j = 0; j < MAX_PHSRULE_PER_SF; j++) {
-                                       curr_act_rules_list =
-                                               
&pstClassifierRulesTable->stActivePhsRulesList[j];
+       for (i = 0; i < MAX_SERVICEFLOWS; i++) {
+               struct bcm_phs_entry stServiceFlowEntry =
+                       psServiceFlowRulesTable->stSFList[i];
+               struct bcm_phs_classifier_table *pstClassifierRulesTable =
+                       stServiceFlowEntry.pstClassifierTable;
 
-                                       curr_old_rules_list =
-                                               
&pstClassifierRulesTable->stOldPhsRulesList[j];
+               if (pstClassifierRulesTable) {
+                       for (j = 0; j < MAX_PHSRULE_PER_SF; j++) {
+                               curr_act_rules_list =
+                                       
&pstClassifierRulesTable->stActivePhsRulesList[j];
 
-                                       if (curr_act_rules_list->pstPhsRule) {
+                               curr_old_rules_list =
+                                       
&pstClassifierRulesTable->stOldPhsRulesList[j];
 
-                                               if 
(curr_act_rules_list->pstPhsRule->u8RefCnt)
-                                                       
curr_act_rules_list->pstPhsRule->u8RefCnt--;
+                               if (curr_act_rules_list->pstPhsRule) {
 
-                                               if (0 == 
curr_act_rules_list->pstPhsRule->u8RefCnt)
-                                                       
kfree(curr_act_rules_list->pstPhsRule);
+                                       if 
(curr_act_rules_list->pstPhsRule->u8RefCnt)
+                                               
curr_act_rules_list->pstPhsRule->u8RefCnt--;
 
-                                               curr_act_rules_list->pstPhsRule 
= NULL;
-                                       }
+                                       if (0 == 
curr_act_rules_list->pstPhsRule->u8RefCnt)
+                                               
kfree(curr_act_rules_list->pstPhsRule);
 
-                                       if (curr_old_rules_list->pstPhsRule) {
+                                       curr_act_rules_list->pstPhsRule = NULL;
+                               }
 
-                                               if 
(curr_old_rules_list->pstPhsRule->u8RefCnt)
-                                                       
curr_old_rules_list->pstPhsRule->u8RefCnt--;
+                               if (curr_old_rules_list->pstPhsRule) {
 
-                                               if (0 == 
curr_old_rules_list->pstPhsRule->u8RefCnt)
-                                                       
kfree(curr_old_rules_list->pstPhsRule);
+                                       if 
(curr_old_rules_list->pstPhsRule->u8RefCnt)
+                                               
curr_old_rules_list->pstPhsRule->u8RefCnt--;
 
-                                               curr_old_rules_list->pstPhsRule 
= NULL;
-                                       }
+                                       if (0 == 
curr_old_rules_list->pstPhsRule->u8RefCnt)
+                                               
kfree(curr_old_rules_list->pstPhsRule);
+
+                                       curr_old_rules_list->pstPhsRule = NULL;
                                }
-                               kfree(pstClassifierRulesTable);
-                               stServiceFlowEntry.pstClassifierTable =
-                                       pstClassifierRulesTable = NULL;
                        }
+                       kfree(pstClassifierRulesTable);
+                       stServiceFlowEntry.pstClassifierTable =
+                               pstClassifierRulesTable = NULL;
                }
        }
 
+out:
+
        kfree(psServiceFlowRulesTable);
        psServiceFlowRulesTable = NULL;
 }
-- 
2.0.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to