mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-26 12:34:41 +08:00
i40e: Add sending commands in atomic context
Change functions: - i40e_aq_add_macvlan - i40e_aq_remove_macvlan - i40e_aq_delete_element - i40e_aq_add_vsi - i40e_aq_update_vsi_params to explicitly use i40e_asq_send_command_atomic(..., true) instead of i40e_asq_send_command, as they use mutexes and do some work in an atomic context. Without this change setting vlan via netdev will fail with call trace cased by bug "BUG: scheduling while atomic". Signed-off-by: Witold Fijalkowski <witoldx.fijalkowski@intel.com> Signed-off-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com> Tested-by: Gurucharan G <gurucharanx.g@intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
00edb2bac2
commit
59b3d7350f
@ -1899,8 +1899,9 @@ i40e_status i40e_aq_add_vsi(struct i40e_hw *hw,
|
||||
|
||||
desc.flags |= cpu_to_le16((u16)(I40E_AQ_FLAG_BUF | I40E_AQ_FLAG_RD));
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, &vsi_ctx->info,
|
||||
sizeof(vsi_ctx->info), cmd_details);
|
||||
status = i40e_asq_send_command_atomic(hw, &desc, &vsi_ctx->info,
|
||||
sizeof(vsi_ctx->info),
|
||||
cmd_details, true);
|
||||
|
||||
if (status)
|
||||
goto aq_add_vsi_exit;
|
||||
@ -2287,8 +2288,9 @@ i40e_status i40e_aq_update_vsi_params(struct i40e_hw *hw,
|
||||
|
||||
desc.flags |= cpu_to_le16((u16)(I40E_AQ_FLAG_BUF | I40E_AQ_FLAG_RD));
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, &vsi_ctx->info,
|
||||
sizeof(vsi_ctx->info), cmd_details);
|
||||
status = i40e_asq_send_command_atomic(hw, &desc, &vsi_ctx->info,
|
||||
sizeof(vsi_ctx->info),
|
||||
cmd_details, true);
|
||||
|
||||
vsi_ctx->vsis_allocated = le16_to_cpu(resp->vsi_used);
|
||||
vsi_ctx->vsis_unallocated = le16_to_cpu(resp->vsi_free);
|
||||
@ -2673,8 +2675,8 @@ i40e_status i40e_aq_add_macvlan(struct i40e_hw *hw, u16 seid,
|
||||
if (buf_size > I40E_AQ_LARGE_BUF)
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_LB);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, mv_list, buf_size,
|
||||
cmd_details);
|
||||
status = i40e_asq_send_command_atomic(hw, &desc, mv_list, buf_size,
|
||||
cmd_details, true);
|
||||
|
||||
return status;
|
||||
}
|
||||
@ -2715,8 +2717,8 @@ i40e_status i40e_aq_remove_macvlan(struct i40e_hw *hw, u16 seid,
|
||||
if (buf_size > I40E_AQ_LARGE_BUF)
|
||||
desc.flags |= cpu_to_le16((u16)I40E_AQ_FLAG_LB);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, mv_list, buf_size,
|
||||
cmd_details);
|
||||
status = i40e_asq_send_command_atomic(hw, &desc, mv_list, buf_size,
|
||||
cmd_details, true);
|
||||
|
||||
return status;
|
||||
}
|
||||
@ -3868,7 +3870,8 @@ i40e_status i40e_aq_delete_element(struct i40e_hw *hw, u16 seid,
|
||||
|
||||
cmd->seid = cpu_to_le16(seid);
|
||||
|
||||
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
|
||||
status = i40e_asq_send_command_atomic(hw, &desc, NULL, 0,
|
||||
cmd_details, true);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user