From 39aa45203143bb852e65ac2ac17c91c2c9049557 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena Date: Tue, 28 Mar 2017 22:51:46 +0530 Subject: [PATCH] msm: ipa: Fix to reset the sticky_rear flag When hotspot tethering is toggled quickly WLAN_AP_CONNECT is received even before all the filter rules are cleaned up for the previous DISCONNECT. As the sticky_rear is set, default rule is not added at the end. Make a change to reset sticky_rear when default rules are deleted. Change-Id: I8b63fec360e91ddd5f5267fe74c769547bb5bbfe Acked-by: Chaitanya Pratapa Signed-off-by: Utkarsh Saxena --- drivers/platform/msm/ipa/ipa_v2/ipa_flt.c | 9 ++++++++- drivers/platform/msm/ipa/ipa_v3/ipa_flt.c | 7 +++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/platform/msm/ipa/ipa_v2/ipa_flt.c b/drivers/platform/msm/ipa/ipa_v2/ipa_flt.c index 985c3e560c86..d94e8f9f0e12 100644 --- a/drivers/platform/msm/ipa/ipa_v2/ipa_flt.c +++ b/drivers/platform/msm/ipa/ipa_v2/ipa_flt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1482,17 +1482,24 @@ void ipa_install_dflt_flt_rules(u32 ipa_ep_idx) void ipa_delete_dflt_flt_rules(u32 ipa_ep_idx) { + struct ipa_flt_tbl *tbl; struct ipa_ep_context *ep = &ipa_ctx->ep[ipa_ep_idx]; mutex_lock(&ipa_ctx->lock); if (ep->dflt_flt4_rule_hdl) { + tbl = &ipa_ctx->flt_tbl[ipa_ep_idx][IPA_IP_v4]; __ipa_del_flt_rule(ep->dflt_flt4_rule_hdl); ipa_ctx->ctrl->ipa_commit_flt(IPA_IP_v4); + /* Reset the sticky flag. */ + tbl->sticky_rear = false; ep->dflt_flt4_rule_hdl = 0; } if (ep->dflt_flt6_rule_hdl) { + tbl = &ipa_ctx->flt_tbl[ipa_ep_idx][IPA_IP_v6]; __ipa_del_flt_rule(ep->dflt_flt6_rule_hdl); ipa_ctx->ctrl->ipa_commit_flt(IPA_IP_v6); + /* Reset the sticky flag. */ + tbl->sticky_rear = false; ep->dflt_flt6_rule_hdl = 0; } mutex_unlock(&ipa_ctx->lock); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c b/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c index 362294b0f695..41b29335d23b 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_flt.c @@ -1389,16 +1389,23 @@ void ipa3_install_dflt_flt_rules(u32 ipa_ep_idx) void ipa3_delete_dflt_flt_rules(u32 ipa_ep_idx) { struct ipa3_ep_context *ep = &ipa3_ctx->ep[ipa_ep_idx]; + struct ipa3_flt_tbl *tbl; mutex_lock(&ipa3_ctx->lock); if (ep->dflt_flt4_rule_hdl) { + tbl = &ipa3_ctx->flt_tbl[ipa_ep_idx][IPA_IP_v4]; __ipa_del_flt_rule(ep->dflt_flt4_rule_hdl); ipa3_ctx->ctrl->ipa3_commit_flt(IPA_IP_v4); + /* Reset the sticky flag. */ + tbl->sticky_rear = false; ep->dflt_flt4_rule_hdl = 0; } if (ep->dflt_flt6_rule_hdl) { + tbl = &ipa3_ctx->flt_tbl[ipa_ep_idx][IPA_IP_v6]; __ipa_del_flt_rule(ep->dflt_flt6_rule_hdl); ipa3_ctx->ctrl->ipa3_commit_flt(IPA_IP_v6); + /* Reset the sticky flag. */ + tbl->sticky_rear = false; ep->dflt_flt6_rule_hdl = 0; } mutex_unlock(&ipa3_ctx->lock);