mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 14:05:05 -04:00
Merge branch 'enic-set-link-speed-only-after-link-up'
John Daley says: ==================== enic: Set link speed only after link up ==================== Link: https://patch.msgid.link/20250107214159.18807-1-johndale@cisco.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -109,7 +109,7 @@ static struct enic_intr_mod_table mod_table[ENIC_MAX_COALESCE_TIMERS + 1] = {
|
||||
static struct enic_intr_mod_range mod_range[ENIC_MAX_LINK_SPEEDS] = {
|
||||
{0, 0}, /* 0 - 4 Gbps */
|
||||
{0, 3}, /* 4 - 10 Gbps */
|
||||
{3, 6}, /* 10 - 40 Gbps */
|
||||
{3, 6}, /* 10+ Gbps */
|
||||
};
|
||||
|
||||
static void enic_init_affinity_hint(struct enic *enic)
|
||||
@@ -428,6 +428,36 @@ static void enic_mtu_check(struct enic *enic)
|
||||
}
|
||||
}
|
||||
|
||||
static void enic_set_rx_coal_setting(struct enic *enic)
|
||||
{
|
||||
unsigned int speed;
|
||||
int index = -1;
|
||||
struct enic_rx_coal *rx_coal = &enic->rx_coalesce_setting;
|
||||
|
||||
/* 1. Read the link speed from fw
|
||||
* 2. Pick the default range for the speed
|
||||
* 3. Update it in enic->rx_coalesce_setting
|
||||
*/
|
||||
speed = vnic_dev_port_speed(enic->vdev);
|
||||
if (speed > ENIC_LINK_SPEED_10G)
|
||||
index = ENIC_LINK_40G_INDEX;
|
||||
else if (speed > ENIC_LINK_SPEED_4G)
|
||||
index = ENIC_LINK_10G_INDEX;
|
||||
else
|
||||
index = ENIC_LINK_4G_INDEX;
|
||||
|
||||
rx_coal->small_pkt_range_start = mod_range[index].small_pkt_range_start;
|
||||
rx_coal->large_pkt_range_start = mod_range[index].large_pkt_range_start;
|
||||
rx_coal->range_end = ENIC_RX_COALESCE_RANGE_END;
|
||||
|
||||
/* Start with the value provided by UCSM */
|
||||
for (index = 0; index < enic->rq_count; index++)
|
||||
enic->cq[index].cur_rx_coal_timeval =
|
||||
enic->config.intr_timer_usec;
|
||||
|
||||
rx_coal->use_adaptive_rx_coalesce = 1;
|
||||
}
|
||||
|
||||
static void enic_link_check(struct enic *enic)
|
||||
{
|
||||
int link_status = vnic_dev_link_status(enic->vdev);
|
||||
@@ -436,6 +466,7 @@ static void enic_link_check(struct enic *enic)
|
||||
if (link_status && !carrier_ok) {
|
||||
netdev_info(enic->netdev, "Link UP\n");
|
||||
netif_carrier_on(enic->netdev);
|
||||
enic_set_rx_coal_setting(enic);
|
||||
} else if (!link_status && carrier_ok) {
|
||||
netdev_info(enic->netdev, "Link DOWN\n");
|
||||
netif_carrier_off(enic->netdev);
|
||||
@@ -1901,36 +1932,6 @@ static void enic_synchronize_irqs(struct enic *enic)
|
||||
}
|
||||
}
|
||||
|
||||
static void enic_set_rx_coal_setting(struct enic *enic)
|
||||
{
|
||||
unsigned int speed;
|
||||
int index = -1;
|
||||
struct enic_rx_coal *rx_coal = &enic->rx_coalesce_setting;
|
||||
|
||||
/* 1. Read the link speed from fw
|
||||
* 2. Pick the default range for the speed
|
||||
* 3. Update it in enic->rx_coalesce_setting
|
||||
*/
|
||||
speed = vnic_dev_port_speed(enic->vdev);
|
||||
if (ENIC_LINK_SPEED_10G < speed)
|
||||
index = ENIC_LINK_40G_INDEX;
|
||||
else if (ENIC_LINK_SPEED_4G < speed)
|
||||
index = ENIC_LINK_10G_INDEX;
|
||||
else
|
||||
index = ENIC_LINK_4G_INDEX;
|
||||
|
||||
rx_coal->small_pkt_range_start = mod_range[index].small_pkt_range_start;
|
||||
rx_coal->large_pkt_range_start = mod_range[index].large_pkt_range_start;
|
||||
rx_coal->range_end = ENIC_RX_COALESCE_RANGE_END;
|
||||
|
||||
/* Start with the value provided by UCSM */
|
||||
for (index = 0; index < enic->rq_count; index++)
|
||||
enic->cq[index].cur_rx_coal_timeval =
|
||||
enic->config.intr_timer_usec;
|
||||
|
||||
rx_coal->use_adaptive_rx_coalesce = 1;
|
||||
}
|
||||
|
||||
static int enic_dev_notify_set(struct enic *enic)
|
||||
{
|
||||
int err;
|
||||
@@ -3063,7 +3064,6 @@ static int enic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
timer_setup(&enic->notify_timer, enic_notify_timer, 0);
|
||||
|
||||
enic_rfs_flw_tbl_init(enic);
|
||||
enic_set_rx_coal_setting(enic);
|
||||
INIT_WORK(&enic->reset, enic_reset);
|
||||
INIT_WORK(&enic->tx_hang_reset, enic_tx_hang_reset);
|
||||
INIT_WORK(&enic->change_mtu_work, enic_change_mtu_work);
|
||||
|
||||
Reference in New Issue
Block a user