Merge branch 'mlxsw-VXLAN-and-firmware-flashing-fixes'
Ido Schimmel says: ==================== mlxsw: VXLAN and firmware flashing fixes Patch #1 fixes firmware flashing failures by increasing the time period after which the driver fails the transaction with the firmware. The problem is explained in detail in the commit message. Patch #2 adds a missing trap for decapsulated ARP packets. It is necessary for VXLAN routing to work. Patch #3 fixes a memory leak during driver reload caused by NULLing a pointer before kfree(). Please consider patch #1 for 4.19.y ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Коммит
8d013b7910
|
@ -81,6 +81,7 @@ struct mlxsw_core {
|
|||
struct mlxsw_core_port *ports;
|
||||
unsigned int max_ports;
|
||||
bool reload_fail;
|
||||
bool fw_flash_in_progress;
|
||||
unsigned long driver_priv[0];
|
||||
/* driver_priv has to be always the last item */
|
||||
};
|
||||
|
@ -428,12 +429,16 @@ struct mlxsw_reg_trans {
|
|||
struct rcu_head rcu;
|
||||
};
|
||||
|
||||
#define MLXSW_EMAD_TIMEOUT_MS 200
|
||||
#define MLXSW_EMAD_TIMEOUT_DURING_FW_FLASH_MS 3000
|
||||
#define MLXSW_EMAD_TIMEOUT_MS 200
|
||||
|
||||
static void mlxsw_emad_trans_timeout_schedule(struct mlxsw_reg_trans *trans)
|
||||
{
|
||||
unsigned long timeout = msecs_to_jiffies(MLXSW_EMAD_TIMEOUT_MS);
|
||||
|
||||
if (trans->core->fw_flash_in_progress)
|
||||
timeout = msecs_to_jiffies(MLXSW_EMAD_TIMEOUT_DURING_FW_FLASH_MS);
|
||||
|
||||
queue_delayed_work(trans->core->emad_wq, &trans->timeout_dw, timeout);
|
||||
}
|
||||
|
||||
|
@ -1854,6 +1859,18 @@ int mlxsw_core_kvd_sizes_get(struct mlxsw_core *mlxsw_core,
|
|||
}
|
||||
EXPORT_SYMBOL(mlxsw_core_kvd_sizes_get);
|
||||
|
||||
void mlxsw_core_fw_flash_start(struct mlxsw_core *mlxsw_core)
|
||||
{
|
||||
mlxsw_core->fw_flash_in_progress = true;
|
||||
}
|
||||
EXPORT_SYMBOL(mlxsw_core_fw_flash_start);
|
||||
|
||||
void mlxsw_core_fw_flash_end(struct mlxsw_core *mlxsw_core)
|
||||
{
|
||||
mlxsw_core->fw_flash_in_progress = false;
|
||||
}
|
||||
EXPORT_SYMBOL(mlxsw_core_fw_flash_end);
|
||||
|
||||
static int __init mlxsw_core_module_init(void)
|
||||
{
|
||||
int err;
|
||||
|
|
|
@ -292,6 +292,9 @@ int mlxsw_core_kvd_sizes_get(struct mlxsw_core *mlxsw_core,
|
|||
u64 *p_single_size, u64 *p_double_size,
|
||||
u64 *p_linear_size);
|
||||
|
||||
void mlxsw_core_fw_flash_start(struct mlxsw_core *mlxsw_core);
|
||||
void mlxsw_core_fw_flash_end(struct mlxsw_core *mlxsw_core);
|
||||
|
||||
bool mlxsw_core_res_valid(struct mlxsw_core *mlxsw_core,
|
||||
enum mlxsw_res_id res_id);
|
||||
|
||||
|
|
|
@ -309,8 +309,13 @@ static int mlxsw_sp_firmware_flash(struct mlxsw_sp *mlxsw_sp,
|
|||
},
|
||||
.mlxsw_sp = mlxsw_sp
|
||||
};
|
||||
int err;
|
||||
|
||||
return mlxfw_firmware_flash(&mlxsw_sp_mlxfw_dev.mlxfw_dev, firmware);
|
||||
mlxsw_core_fw_flash_start(mlxsw_sp->core);
|
||||
err = mlxfw_firmware_flash(&mlxsw_sp_mlxfw_dev.mlxfw_dev, firmware);
|
||||
mlxsw_core_fw_flash_end(mlxsw_sp->core);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlxsw_sp_fw_rev_validate(struct mlxsw_sp *mlxsw_sp)
|
||||
|
@ -3521,6 +3526,7 @@ static const struct mlxsw_listener mlxsw_sp_listener[] = {
|
|||
MLXSW_SP_RXL_MR_MARK(ACL2, TRAP_TO_CPU, MULTICAST, false),
|
||||
/* NVE traps */
|
||||
MLXSW_SP_RXL_MARK(NVE_ENCAP_ARP, TRAP_TO_CPU, ARP, false),
|
||||
MLXSW_SP_RXL_NO_MARK(NVE_DECAP_ARP, TRAP_TO_CPU, ARP, false),
|
||||
};
|
||||
|
||||
static int mlxsw_sp_cpu_policers_set(struct mlxsw_core *mlxsw_core)
|
||||
|
|
|
@ -977,6 +977,6 @@ void mlxsw_sp_nve_fini(struct mlxsw_sp *mlxsw_sp)
|
|||
{
|
||||
WARN_ON(mlxsw_sp->nve->num_nve_tunnels);
|
||||
rhashtable_destroy(&mlxsw_sp->nve->mc_list_ht);
|
||||
mlxsw_sp->nve = NULL;
|
||||
kfree(mlxsw_sp->nve);
|
||||
mlxsw_sp->nve = NULL;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ enum {
|
|||
MLXSW_TRAP_ID_IPV6_MC_LINK_LOCAL_DEST = 0x91,
|
||||
MLXSW_TRAP_ID_HOST_MISS_IPV6 = 0x92,
|
||||
MLXSW_TRAP_ID_IPIP_DECAP_ERROR = 0xB1,
|
||||
MLXSW_TRAP_ID_NVE_DECAP_ARP = 0xB8,
|
||||
MLXSW_TRAP_ID_NVE_ENCAP_ARP = 0xBD,
|
||||
MLXSW_TRAP_ID_ROUTER_ALERT_IPV4 = 0xD6,
|
||||
MLXSW_TRAP_ID_ROUTER_ALERT_IPV6 = 0xD7,
|
||||
|
|
Загрузка…
Ссылка в новой задаче