i40evf: allow channel bonding of VFs
authorMitch Williams <mitch.a.williams@intel.com>
Wed, 9 Dec 2015 23:50:27 +0000 (15:50 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Thu, 4 Feb 2016 04:23:45 +0000 (20:23 -0800)
commit209dc4daf23f92b3e0bc6d602411506c4083e421
treece5a8795928c61a2497ea4d2e9cb1d4c3e1cd3d7
parent48b1804ee3cdad7bf115666eb35edf12a734710f
i40evf: allow channel bonding of VFs

In some modes, bonding would not enslave VF interfaces. This is due to
bonding calling change_mtu and the immediately calling open. Because of
the asynchronous nature of the admin queue mechanism, the VF returns
-EBUSY to the open call, because it knows the previous operation hasn't
finished yet. This causes bonding to fail with a less-than-useful error
message.

To fix this, remove the check for pending operations at the beginning of
open. But this introduces a new bug where the driver will panic on a
quick close/open cycle. To fix that, we add a new driver state,
__I40EVF_DOWN_PENDING, that the driver enters when down is called. The
driver finally transitions to a fully DOWN state when it receives
confirmation from the PF driver that all the queues are disabled. This
allows open to complete even if there is a pending mtu change, and
bonding is finally happy.

Change-ID: I06f4c7e435d5bacbfceaa7c3f209e0ff04be21cc
Signed-off-by: Mitch Williams <mitch.a.williams@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40evf/i40evf.h
drivers/net/ethernet/intel/i40evf/i40evf_main.c
drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c