lkml.org 
[lkml]   [2013]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 179/222] RDMA/nes: Fix for terminate timer crash
    Date
    3.5.7.3 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>

    commit 7bfcfa51c35cdd2d37e0d70fc11790642dd11fb3 upstream.

    The terminate timer needs to be initialized just once.

    Signed-off-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com>
    Signed-off-by: Roland Dreier <roland@purestorage.com>
    Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
    ---
    drivers/infiniband/hw/nes/nes.h | 1 +
    drivers/infiniband/hw/nes/nes_hw.c | 9 ++-------
    drivers/infiniband/hw/nes/nes_verbs.c | 4 +++-
    3 files changed, 6 insertions(+), 8 deletions(-)

    diff --git a/drivers/infiniband/hw/nes/nes.h b/drivers/infiniband/hw/nes/nes.h
    index c438e46..3f41d9f 100644
    --- a/drivers/infiniband/hw/nes/nes.h
    +++ b/drivers/infiniband/hw/nes/nes.h
    @@ -524,6 +524,7 @@ void nes_iwarp_ce_handler(struct nes_device *, struct nes_hw_cq *);
    int nes_destroy_cqp(struct nes_device *);
    int nes_nic_cm_xmit(struct sk_buff *, struct net_device *);
    void nes_recheck_link_status(struct work_struct *work);
    +void nes_terminate_timeout(unsigned long context);

    /* nes_nic.c */
    struct net_device *nes_netdev_init(struct nes_device *, void __iomem *);
    diff --git a/drivers/infiniband/hw/nes/nes_hw.c b/drivers/infiniband/hw/nes/nes_hw.c
    index d42c9f4..96801c3 100644
    --- a/drivers/infiniband/hw/nes/nes_hw.c
    +++ b/drivers/infiniband/hw/nes/nes_hw.c
    @@ -75,7 +75,6 @@ static void nes_process_iwarp_aeqe(struct nes_device *nesdev,
    static void process_critical_error(struct nes_device *nesdev);
    static void nes_process_mac_intr(struct nes_device *nesdev, u32 mac_number);
    static unsigned int nes_reset_adapter_ne020(struct nes_device *nesdev, u8 *OneG_Mode);
    -static void nes_terminate_timeout(unsigned long context);
    static void nes_terminate_start_timer(struct nes_qp *nesqp);

    #ifdef CONFIG_INFINIBAND_NES_DEBUG
    @@ -3522,7 +3521,7 @@ static void nes_terminate_received(struct nes_device *nesdev,
    }

    /* Timeout routine in case terminate fails to complete */
    -static void nes_terminate_timeout(unsigned long context)
    +void nes_terminate_timeout(unsigned long context)
    {
    struct nes_qp *nesqp = (struct nes_qp *)(unsigned long)context;

    @@ -3532,11 +3531,7 @@ static void nes_terminate_timeout(unsigned long context)
    /* Set a timer in case hw cannot complete the terminate sequence */
    static void nes_terminate_start_timer(struct nes_qp *nesqp)
    {
    - init_timer(&nesqp->terminate_timer);
    - nesqp->terminate_timer.function = nes_terminate_timeout;
    - nesqp->terminate_timer.expires = jiffies + HZ;
    - nesqp->terminate_timer.data = (unsigned long)nesqp;
    - add_timer(&nesqp->terminate_timer);
    + mod_timer(&nesqp->terminate_timer, (jiffies + HZ));
    }

    /**
    diff --git a/drivers/infiniband/hw/nes/nes_verbs.c b/drivers/infiniband/hw/nes/nes_verbs.c
    index 8b8812d..2359568 100644
    --- a/drivers/infiniband/hw/nes/nes_verbs.c
    +++ b/drivers/infiniband/hw/nes/nes_verbs.c
    @@ -1404,6 +1404,9 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
    }

    nesqp->sig_all = (init_attr->sq_sig_type == IB_SIGNAL_ALL_WR);
    + init_timer(&nesqp->terminate_timer);
    + nesqp->terminate_timer.function = nes_terminate_timeout;
    + nesqp->terminate_timer.data = (unsigned long)nesqp;

    /* update the QP table */
    nesdev->nesadapter->qp_table[nesqp->hwqp.qp_id-NES_FIRST_QPN] = nesqp;
    @@ -1413,7 +1416,6 @@ static struct ib_qp *nes_create_qp(struct ib_pd *ibpd,
    return &nesqp->ibqp;
    }

    -
    /**
    * nes_clean_cq
    */
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2013-01-16 18:21    [W:2.123 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site