if (attr_mask & IB_QP_MIN_RNR_TIMER)
                qp->r_min_rnr_timer = attr->min_rnr_timer;
 
-       if (attr_mask & IB_QP_TIMEOUT)
+       if (attr_mask & IB_QP_TIMEOUT) {
                qp->timeout = attr->timeout;
+               qp->timeout_jiffies =
+                       usecs_to_jiffies((4096UL * (1UL << qp->timeout)) /
+                               1000UL);
+       }
 
        if (attr_mask & IB_QP_QKEY)
                qp->qkey = attr->qkey;
                        goto bail_swq;
                }
                RCU_INIT_POINTER(qp->next, NULL);
+               qp->timeout_jiffies =
+                       usecs_to_jiffies((4096UL * (1UL << qp->timeout)) /
+                               1000UL);
                if (init_attr->srq)
                        sz = 0;
                else {
 
        qp->s_flags |= QIB_S_TIMER;
        qp->s_timer.function = rc_timeout;
        /* 4.096 usec. * (1 << qp->timeout) */
-       qp->s_timer.expires = jiffies +
-               usecs_to_jiffies((4096UL * (1UL << qp->timeout)) / 1000UL);
+       qp->s_timer.expires = jiffies + qp->timeout_jiffies;
        add_timer(&qp->s_timer);
 }
 
                 * 4.096 usec. * (1 << qp->timeout)
                 */
                qp->s_flags |= QIB_S_TIMER;
-               mod_timer(&qp->s_timer, jiffies +
-                       usecs_to_jiffies((4096UL * (1UL << qp->timeout)) /
-                                        1000UL));
+               mod_timer(&qp->s_timer, jiffies + qp->timeout_jiffies);
                if (qp->s_flags & QIB_S_WAIT_ACK) {
                        qp->s_flags &= ~QIB_S_WAIT_ACK;
                        qib_schedule_send(qp);
 
        u32 s_last;             /* last completed entry */
        u32 s_ssn;              /* SSN of tail entry */
        u32 s_lsn;              /* limit sequence number (credit) */
+       unsigned long timeout_jiffies;  /* computed from timeout */
        struct qib_swqe *s_wq;  /* send work queue */
        struct qib_swqe *s_wqe;
        struct qib_rq r_rq;             /* receive work queue */