lkml.org 
[lkml]   [2017]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH review for 4.9 08/50] qed: Don't use attention PTT for configuring BW
    Date
    From: "Mintz, Yuval" <Yuval.Mintz@cavium.com>

    [ Upstream commit 6f437d431930ff86e4a971d29321951faadb97c7 ]

    Commit 653d2ffd6405 ("qed*: Fix link indication race") introduced another
    race - one of the inner functions called from the link-change flow is
    explicitly using the slowpath context dedicated PTT instead of gaining
    that PTT from the caller. Since this flow can now be called from
    a different context as well, we're in risk of the PTT breaking.

    Fixes: 653d2ffd6405 ("qed*: Fix link indication race")
    Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    drivers/net/ethernet/qlogic/qed/qed.h | 4 +++-
    drivers/net/ethernet/qlogic/qed/qed_dev.c | 6 +++---
    drivers/net/ethernet/qlogic/qed/qed_mcp.c | 3 ++-
    3 files changed, 8 insertions(+), 5 deletions(-)

    diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h
    index 653bb5735f0c..433f8be57847 100644
    --- a/drivers/net/ethernet/qlogic/qed/qed.h
    +++ b/drivers/net/ethernet/qlogic/qed/qed.h
    @@ -642,7 +642,9 @@ static inline u8 qed_concrete_to_sw_fid(struct qed_dev *cdev,
    #define OOO_LB_TC 9

    int qed_configure_vport_wfq(struct qed_dev *cdev, u16 vp_id, u32 rate);
    -void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_rate);
    +void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev,
    + struct qed_ptt *p_ptt,
    + u32 min_pf_rate);

    void qed_clean_wfq_db(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt);
    #define QED_LEADING_HWFN(dev) (&dev->hwfns[0])
    diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c
    index edae5fc5fccd..41367c490a7f 100644
    --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c
    +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c
    @@ -2732,7 +2732,8 @@ int qed_configure_vport_wfq(struct qed_dev *cdev, u16 vp_id, u32 rate)
    }

    /* API to configure WFQ from mcp link change */
    -void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_rate)
    +void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev,
    + struct qed_ptt *p_ptt, u32 min_pf_rate)
    {
    int i;

    @@ -2746,8 +2747,7 @@ void qed_configure_vp_wfq_on_link_change(struct qed_dev *cdev, u32 min_pf_rate)
    for_each_hwfn(cdev, i) {
    struct qed_hwfn *p_hwfn = &cdev->hwfns[i];

    - __qed_configure_vp_wfq_on_link_change(p_hwfn,
    - p_hwfn->p_dpc_ptt,
    + __qed_configure_vp_wfq_on_link_change(p_hwfn, p_ptt,
    min_pf_rate);
    }
    }
    diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
    index bdc9ba92f6d4..8b7d2f963ee1 100644
    --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c
    +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c
    @@ -628,7 +628,8 @@ static void qed_mcp_handle_link_change(struct qed_hwfn *p_hwfn,

    /* Min bandwidth configuration */
    __qed_configure_pf_min_bandwidth(p_hwfn, p_ptt, p_link, min_bw);
    - qed_configure_vp_wfq_on_link_change(p_hwfn->cdev, p_link->min_pf_rate);
    + qed_configure_vp_wfq_on_link_change(p_hwfn->cdev, p_ptt,
    + p_link->min_pf_rate);

    p_link->an = !!(status & LINK_STATUS_AUTO_NEGOTIATE_ENABLED);
    p_link->an_complete = !!(status &
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-09-25 03:32    [W:4.145 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site