sfc: Remove efx_nic_type::push_multicast_hash operation
Both implementations of efx_nic_type::reconfigure_mac operation push the multicast hash filter to the hardware. It is therefore redundant to call efx_nic_type::push_multicast_hash as well. efx_mcdi_mac_reconfigure() also uses this operation, but the implementation for Siena just uses MCDI anyway. Merge that into efx_mcdi_mac_reconfigure(). Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
This commit is contained in:
parent
1daf417029
commit
30b81cda95
@ -898,10 +898,8 @@ static void efx_mac_work(struct work_struct *data)
|
||||
struct efx_nic *efx = container_of(data, struct efx_nic, mac_work);
|
||||
|
||||
mutex_lock(&efx->mac_lock);
|
||||
if (efx->port_enabled) {
|
||||
efx->type->push_multicast_hash(efx);
|
||||
if (efx->port_enabled)
|
||||
efx->type->reconfigure_mac(efx);
|
||||
}
|
||||
mutex_unlock(&efx->mac_lock);
|
||||
}
|
||||
|
||||
@ -968,7 +966,6 @@ static void efx_start_port(struct efx_nic *efx)
|
||||
|
||||
/* efx_mac_work() might have been scheduled after efx_stop_port(),
|
||||
* and then cancelled by efx_flush_all() */
|
||||
efx->type->push_multicast_hash(efx);
|
||||
efx->type->reconfigure_mac(efx);
|
||||
|
||||
mutex_unlock(&efx->mac_lock);
|
||||
|
@ -1766,7 +1766,6 @@ const struct efx_nic_type falcon_a1_nic_type = {
|
||||
.stop_stats = falcon_stop_nic_stats,
|
||||
.set_id_led = falcon_set_id_led,
|
||||
.push_irq_moderation = falcon_push_irq_moderation,
|
||||
.push_multicast_hash = falcon_push_multicast_hash,
|
||||
.reconfigure_port = falcon_reconfigure_port,
|
||||
.reconfigure_mac = falcon_reconfigure_xmac,
|
||||
.check_mac_fault = falcon_xmac_check_fault,
|
||||
@ -1809,7 +1808,6 @@ const struct efx_nic_type falcon_b0_nic_type = {
|
||||
.stop_stats = falcon_stop_nic_stats,
|
||||
.set_id_led = falcon_set_id_led,
|
||||
.push_irq_moderation = falcon_push_irq_moderation,
|
||||
.push_multicast_hash = falcon_push_multicast_hash,
|
||||
.reconfigure_port = falcon_reconfigure_port,
|
||||
.reconfigure_mac = falcon_reconfigure_xmac,
|
||||
.check_mac_fault = falcon_xmac_check_fault,
|
||||
|
@ -115,12 +115,14 @@ int efx_mcdi_mac_reconfigure(struct efx_nic *efx)
|
||||
{
|
||||
int rc;
|
||||
|
||||
WARN_ON(!mutex_is_locked(&efx->mac_lock));
|
||||
|
||||
rc = efx_mcdi_set_mac(efx);
|
||||
if (rc != 0)
|
||||
return rc;
|
||||
|
||||
/* Restore the multicast hash registers. */
|
||||
efx->type->push_multicast_hash(efx);
|
||||
|
||||
return 0;
|
||||
return efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH,
|
||||
efx->multicast_hash.byte,
|
||||
sizeof(efx->multicast_hash),
|
||||
NULL, 0, NULL);
|
||||
}
|
||||
|
@ -826,9 +826,9 @@ static inline unsigned int efx_port_num(struct efx_nic *efx)
|
||||
* @stop_stats: Stop the regular fetching of statistics
|
||||
* @set_id_led: Set state of identifying LED or revert to automatic function
|
||||
* @push_irq_moderation: Apply interrupt moderation value
|
||||
* @push_multicast_hash: Apply multicast hash table
|
||||
* @reconfigure_port: Push loopback/power/txdis changes to the MAC and PHY
|
||||
* @reconfigure_mac: Reconfigure MAC only. Serialised by the mac_lock
|
||||
* @reconfigure_mac: Push MAC address, MTU, flow control and filter settings
|
||||
* to the hardware. Serialised by the mac_lock.
|
||||
* @check_mac_fault: Check MAC fault state. True if fault present.
|
||||
* @get_wol: Get WoL configuration from driver state
|
||||
* @set_wol: Push WoL configuration to the NIC
|
||||
@ -872,7 +872,6 @@ struct efx_nic_type {
|
||||
void (*stop_stats)(struct efx_nic *efx);
|
||||
void (*set_id_led)(struct efx_nic *efx, enum efx_led_mode mode);
|
||||
void (*push_irq_moderation)(struct efx_channel *channel);
|
||||
void (*push_multicast_hash)(struct efx_nic *efx);
|
||||
int (*reconfigure_port)(struct efx_nic *efx);
|
||||
int (*reconfigure_mac)(struct efx_nic *efx);
|
||||
bool (*check_mac_fault)(struct efx_nic *efx);
|
||||
|
@ -52,15 +52,6 @@ static void siena_push_irq_moderation(struct efx_channel *channel)
|
||||
channel->channel);
|
||||
}
|
||||
|
||||
static void siena_push_multicast_hash(struct efx_nic *efx)
|
||||
{
|
||||
WARN_ON(!mutex_is_locked(&efx->mac_lock));
|
||||
|
||||
efx_mcdi_rpc(efx, MC_CMD_SET_MCAST_HASH,
|
||||
efx->multicast_hash.byte, sizeof(efx->multicast_hash),
|
||||
NULL, 0, NULL);
|
||||
}
|
||||
|
||||
static int siena_mdio_write(struct net_device *net_dev,
|
||||
int prtad, int devad, u16 addr, u16 value)
|
||||
{
|
||||
@ -629,7 +620,6 @@ const struct efx_nic_type siena_a0_nic_type = {
|
||||
.stop_stats = siena_stop_nic_stats,
|
||||
.set_id_led = efx_mcdi_set_id_led,
|
||||
.push_irq_moderation = siena_push_irq_moderation,
|
||||
.push_multicast_hash = siena_push_multicast_hash,
|
||||
.reconfigure_mac = efx_mcdi_mac_reconfigure,
|
||||
.check_mac_fault = efx_mcdi_mac_check_fault,
|
||||
.reconfigure_port = efx_mcdi_phy_reconfigure,
|
||||
|
Loading…
x
Reference in New Issue
Block a user