On Wed, 22 Sept 2021 at 12:40, Leon Romanovsky <leon@xxxxxxxxxx> wrote: > On Wed, Sep 22, 2021 at 10:36:31AM +0300, Shai Malin wrote: > > If the HW device is during recovery, the HW resources will never return, > > hence we shouldn't wait for the CID (HW context ID) bitmaps to clear. > > This fix speeds up the error recovery flow. > > > > Changes since v1: > > - Fix race condition (thanks to Leon Romanovsky). > > Please put changelog under "---", there is a little value for them in the > commit message. Sure. Thanks. > > > > > Fixes: 64515dc899df ("qed: Add infrastructure for error detection and > recovery") > > Signed-off-by: Michal Kalderon <mkalderon@xxxxxxxxxxx> > > Signed-off-by: Ariel Elior <aelior@xxxxxxxxxxx> > > Signed-off-by: Shai Malin <smalin@xxxxxxxxxxx> > > --- > > drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 8 ++++++++ > > drivers/net/ethernet/qlogic/qed/qed_roce.c | 8 ++++++++ > > 2 files changed, 16 insertions(+) > > > > diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c > b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c > > index fc8b3e64f153..186d0048a9d1 100644 > > --- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c > > +++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c > > @@ -1297,6 +1297,14 @@ qed_iwarp_wait_cid_map_cleared(struct qed_hwfn > *p_hwfn, struct qed_bmap *bmap) > > prev_weight = weight; > > > > while (weight) { > > + /* If the HW device is during recovery, all resources are > > + * immediately reset without receiving a per-cid indication > > + * from HW. In this case we don't expect the cid_map to be > > + * cleared. > > + */ > > + if (p_hwfn->cdev->recov_in_prog) > > + return 0; > > + > > msleep(QED_IWARP_MAX_CID_CLEAN_TIME); > > > > weight = bitmap_weight(bmap->bitmap, bmap->max_count); > > diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c > b/drivers/net/ethernet/qlogic/qed/qed_roce.c > > index f16a157bb95a..cf5baa5e59bc 100644 > > --- a/drivers/net/ethernet/qlogic/qed/qed_roce.c > > +++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c > > @@ -77,6 +77,14 @@ void qed_roce_stop(struct qed_hwfn *p_hwfn) > > * Beyond the added delay we clear the bitmap anyway. > > */ > > while (bitmap_weight(rcid_map->bitmap, rcid_map->max_count)) { > > + /* If the HW device is during recovery, all resources are > > + * immediately reset without receiving a per-cid indication > > + * from HW. In this case we don't expect the cid bitmap to be > > + * cleared. > > + */ > > + if (p_hwfn->cdev->recov_in_prog) > > + return; > > + > > msleep(100); > > if (wait_count++ > 20) { > > DP_NOTICE(p_hwfn, "cid bitmap wait timed out\n"); > > -- > > 2.27.0 > >