iavf: Fix set max MTU size with port VLAN and jumbo frames
[ Upstream commit 399c98c4dc50b7eb7e9f24da7ffdda6f025676ef ]
After setting port VLAN and MTU to 9000 on VF with ice driver there
was an iavf error
"PF returned error -5 (IAVF_ERR_PARAM) to our request 6".
During queue configuration, VF's max packet size was set to
IAVF_MAX_RXBUFFER but on ice max frame size was smaller by VLAN_HLEN
due to making some space for port VLAN as VF is not aware whether it's
in a port VLAN. This mismatch in sizes caused ice to reject queue
configuration with ERR_PARAM error. Proper max_mtu is sent from ice PF
to VF with GET_VF_RESOURCES msg but VF does not look at this.
In iavf change max_frame from IAVF_MAX_RXBUFFER to max_mtu
received from pf with GET_VF_RESOURCES msg to make vf's
max_frame_size dependent from pf. Add check if received max_mtu is
not in eligible range then set it to IAVF_MAX_RXBUFFER.
Fixes: dab86afdbb
("i40e/i40evf: Change the way we limit the maximum frame size for Rx")
Signed-off-by: Michal Jaron <michalx.jaron@intel.com>
Signed-off-by: Mateusz Palczewski <mateusz.palczewski@intel.com>
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
bfaff9adaa
commit
3daf097819
@ -241,11 +241,14 @@ out:
|
|||||||
void iavf_configure_queues(struct iavf_adapter *adapter)
|
void iavf_configure_queues(struct iavf_adapter *adapter)
|
||||||
{
|
{
|
||||||
struct virtchnl_vsi_queue_config_info *vqci;
|
struct virtchnl_vsi_queue_config_info *vqci;
|
||||||
struct virtchnl_queue_pair_info *vqpi;
|
int i, max_frame = adapter->vf_res->max_mtu;
|
||||||
int pairs = adapter->num_active_queues;
|
int pairs = adapter->num_active_queues;
|
||||||
int i, max_frame = IAVF_MAX_RXBUFFER;
|
struct virtchnl_queue_pair_info *vqpi;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
|
if (max_frame > IAVF_MAX_RXBUFFER || !max_frame)
|
||||||
|
max_frame = IAVF_MAX_RXBUFFER;
|
||||||
|
|
||||||
if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) {
|
if (adapter->current_op != VIRTCHNL_OP_UNKNOWN) {
|
||||||
/* bail because we already have a command pending */
|
/* bail because we already have a command pending */
|
||||||
dev_err(&adapter->pdev->dev, "Cannot configure queues, command %d pending\n",
|
dev_err(&adapter->pdev->dev, "Cannot configure queues, command %d pending\n",
|
||||||
|
Loading…
Reference in New Issue
Block a user