qed: Warn PTT usage by wrong hw-function
authorMintz, Yuval <Yuval.Mintz@cavium.com>
Thu, 6 Apr 2017 12:58:28 +0000 (15:58 +0300)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 Apr 2017 21:26:31 +0000 (14:26 -0700)
PTT entries are per-hwfn; If some errneous flow is trying
to use a PTT belonging to a differnet hwfn warn user, as this
can break every register accessing flow later and is very hard
to root-cause.

Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qlogic/qed/qed_hw.c

index 79e584a57d26a1ce0864985c4d47f06b77ceb1a0..a05feb38c6eebc778f1471a950e4c59d1ddba092 100644 (file)
@@ -58,6 +58,7 @@ struct qed_ptt {
        struct list_head        list_entry;
        unsigned int            idx;
        struct pxp_ptt_entry    pxp;
+       u8                      hwfn_id;
 };
 
 struct qed_ptt_pool {
@@ -79,6 +80,7 @@ int qed_ptt_pool_alloc(struct qed_hwfn *p_hwfn)
                p_pool->ptts[i].idx = i;
                p_pool->ptts[i].pxp.offset = QED_BAR_INVALID_OFFSET;
                p_pool->ptts[i].pxp.pretend.control = 0;
+               p_pool->ptts[i].hwfn_id = p_hwfn->my_id;
                if (i >= RESERVED_PTT_MAX)
                        list_add(&p_pool->ptts[i].list_entry,
                                 &p_pool->free_list);
@@ -193,6 +195,11 @@ static u32 qed_set_ptt(struct qed_hwfn *p_hwfn,
 
        offset = hw_addr - win_hw_addr;
 
+       if (p_ptt->hwfn_id != p_hwfn->my_id)
+               DP_NOTICE(p_hwfn,
+                         "ptt[%d] of hwfn[%02x] is used by hwfn[%02x]!\n",
+                         p_ptt->idx, p_ptt->hwfn_id, p_hwfn->my_id);
+
        /* Verify the address is within the window */
        if (hw_addr < win_hw_addr ||
            offset >= PXP_EXTERNAL_BAR_PF_WINDOW_SINGLE_SIZE) {