Skip to content

Commit

Permalink
i40evf: Reorder configure_clsflower to avoid deadlock on error
Browse files Browse the repository at this point in the history
While doing some code review I noticed that we can get into a state where
we exit with the "IN_CRITICAL_TASK" bit set while notifying the PF of
flower filters. This patch is meant to address that plus tweak the ordering
of the while loop waiting on it slightly so that we don't wait an extra
period after we have failed for the last time.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Alexander Duyck authored and Jeff Kirsher committed Mar 19, 2018
1 parent e3c72f3 commit 640a8af
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions drivers/net/ethernet/intel/i40evf/i40evf_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2791,25 +2791,24 @@ static int i40evf_configure_clsflower(struct i40evf_adapter *adapter,
{
int tc = tc_classid_to_hwtc(adapter->netdev, cls_flower->classid);
struct i40evf_cloud_filter *filter = NULL;
int err = 0, count = 50;

while (test_and_set_bit(__I40EVF_IN_CRITICAL_TASK,
&adapter->crit_section)) {
udelay(1);
if (--count == 0)
return -EINVAL;
}
int err = -EINVAL, count = 50;

if (tc < 0) {
dev_err(&adapter->pdev->dev, "Invalid traffic class\n");
return -EINVAL;
}

filter = kzalloc(sizeof(*filter), GFP_KERNEL);
if (!filter) {
err = -ENOMEM;
goto clearout;
if (!filter)
return -ENOMEM;

while (test_and_set_bit(__I40EVF_IN_CRITICAL_TASK,
&adapter->crit_section)) {
if (--count == 0)
goto err;
udelay(1);
}

filter->cookie = cls_flower->cookie;

/* set the mask to all zeroes to begin with */
Expand All @@ -2834,7 +2833,7 @@ static int i40evf_configure_clsflower(struct i40evf_adapter *adapter,
err:
if (err)
kfree(filter);
clearout:

clear_bit(__I40EVF_IN_CRITICAL_TASK, &adapter->crit_section);
return err;
}
Expand Down

0 comments on commit 640a8af

Please sign in to comment.