Merge branch 'hns3-fixes'
Guangbin Huang says: ==================== net: hns3: add some fixes for -net This series adds some fixes for the HNS3 ethernet driver. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Коммит
8c0922ce4b
|
@ -61,6 +61,9 @@ static unsigned int tx_sgl = 1;
|
|||
module_param(tx_sgl, uint, 0600);
|
||||
MODULE_PARM_DESC(tx_sgl, "Minimum number of frags when using dma_map_sg() to optimize the IOMMU mapping");
|
||||
|
||||
static bool page_pool_enabled = true;
|
||||
module_param(page_pool_enabled, bool, 0400);
|
||||
|
||||
#define HNS3_SGL_SIZE(nfrag) (sizeof(struct scatterlist) * (nfrag) + \
|
||||
sizeof(struct sg_table))
|
||||
#define HNS3_MAX_SGL_SIZE ALIGN(HNS3_SGL_SIZE(HNS3_MAX_TSO_BD_NUM), \
|
||||
|
@ -73,6 +76,7 @@ MODULE_PARM_DESC(tx_sgl, "Minimum number of frags when using dma_map_sg() to opt
|
|||
#define HNS3_OUTER_VLAN_TAG 2
|
||||
|
||||
#define HNS3_MIN_TX_LEN 33U
|
||||
#define HNS3_MIN_TUN_PKT_LEN 65U
|
||||
|
||||
/* hns3_pci_tbl - PCI Device ID Table
|
||||
*
|
||||
|
@ -1424,8 +1428,11 @@ static int hns3_set_l2l3l4(struct sk_buff *skb, u8 ol4_proto,
|
|||
l4.tcp->doff);
|
||||
break;
|
||||
case IPPROTO_UDP:
|
||||
if (hns3_tunnel_csum_bug(skb))
|
||||
return skb_checksum_help(skb);
|
||||
if (hns3_tunnel_csum_bug(skb)) {
|
||||
int ret = skb_put_padto(skb, HNS3_MIN_TUN_PKT_LEN);
|
||||
|
||||
return ret ? ret : skb_checksum_help(skb);
|
||||
}
|
||||
|
||||
hns3_set_field(*type_cs_vlan_tso, HNS3_TXD_L4CS_B, 1);
|
||||
hns3_set_field(*type_cs_vlan_tso, HNS3_TXD_L4T_S,
|
||||
|
@ -4753,7 +4760,8 @@ static int hns3_alloc_ring_memory(struct hns3_enet_ring *ring)
|
|||
goto out_with_desc_cb;
|
||||
|
||||
if (!HNAE3_IS_TX_RING(ring)) {
|
||||
hns3_alloc_page_pool(ring);
|
||||
if (page_pool_enabled)
|
||||
hns3_alloc_page_pool(ring);
|
||||
|
||||
ret = hns3_alloc_ring_buffers(ring);
|
||||
if (ret)
|
||||
|
|
|
@ -1724,6 +1724,10 @@ hclge_dbg_get_imp_stats_info(struct hclge_dev *hdev, char *buf, int len)
|
|||
}
|
||||
|
||||
bd_num = le32_to_cpu(req->bd_num);
|
||||
if (!bd_num) {
|
||||
dev_err(&hdev->pdev->dev, "imp statistics bd number is 0!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
desc_src = kcalloc(bd_num, sizeof(struct hclge_desc), GFP_KERNEL);
|
||||
if (!desc_src)
|
||||
|
|
|
@ -1528,9 +1528,10 @@ static void hclge_init_kdump_kernel_config(struct hclge_dev *hdev)
|
|||
static int hclge_configure(struct hclge_dev *hdev)
|
||||
{
|
||||
struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
|
||||
const struct cpumask *cpumask = cpu_online_mask;
|
||||
struct hclge_cfg cfg;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
int node, ret;
|
||||
|
||||
ret = hclge_get_cfg(hdev, &cfg);
|
||||
if (ret)
|
||||
|
@ -1595,11 +1596,12 @@ static int hclge_configure(struct hclge_dev *hdev)
|
|||
|
||||
hclge_init_kdump_kernel_config(hdev);
|
||||
|
||||
/* Set the init affinity based on pci func number */
|
||||
i = cpumask_weight(cpumask_of_node(dev_to_node(&hdev->pdev->dev)));
|
||||
i = i ? PCI_FUNC(hdev->pdev->devfn) % i : 0;
|
||||
cpumask_set_cpu(cpumask_local_spread(i, dev_to_node(&hdev->pdev->dev)),
|
||||
&hdev->affinity_mask);
|
||||
/* Set the affinity based on numa node */
|
||||
node = dev_to_node(&hdev->pdev->dev);
|
||||
if (node != NUMA_NO_NODE)
|
||||
cpumask = cpumask_of_node(node);
|
||||
|
||||
cpumask_copy(&hdev->affinity_mask, cpumask);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -8125,11 +8127,12 @@ static void hclge_ae_stop(struct hnae3_handle *handle)
|
|||
hclge_clear_arfs_rules(hdev);
|
||||
spin_unlock_bh(&hdev->fd_rule_lock);
|
||||
|
||||
/* If it is not PF reset, the firmware will disable the MAC,
|
||||
/* If it is not PF reset or FLR, the firmware will disable the MAC,
|
||||
* so it only need to stop phy here.
|
||||
*/
|
||||
if (test_bit(HCLGE_STATE_RST_HANDLING, &hdev->state) &&
|
||||
hdev->reset_type != HNAE3_FUNC_RESET) {
|
||||
hdev->reset_type != HNAE3_FUNC_RESET &&
|
||||
hdev->reset_type != HNAE3_FLR_RESET) {
|
||||
hclge_mac_stop_phy(hdev);
|
||||
hclge_update_link_status(hdev);
|
||||
return;
|
||||
|
|
|
@ -2465,6 +2465,8 @@ static irqreturn_t hclgevf_misc_irq_handle(int irq, void *data)
|
|||
|
||||
hclgevf_enable_vector(&hdev->misc_vector, false);
|
||||
event_cause = hclgevf_check_evt_cause(hdev, &clearval);
|
||||
if (event_cause != HCLGEVF_VECTOR0_EVENT_OTHER)
|
||||
hclgevf_clear_event_cause(hdev, clearval);
|
||||
|
||||
switch (event_cause) {
|
||||
case HCLGEVF_VECTOR0_EVENT_RST:
|
||||
|
@ -2477,10 +2479,8 @@ static irqreturn_t hclgevf_misc_irq_handle(int irq, void *data)
|
|||
break;
|
||||
}
|
||||
|
||||
if (event_cause != HCLGEVF_VECTOR0_EVENT_OTHER) {
|
||||
hclgevf_clear_event_cause(hdev, clearval);
|
||||
if (event_cause != HCLGEVF_VECTOR0_EVENT_OTHER)
|
||||
hclgevf_enable_vector(&hdev->misc_vector, true);
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче