mirror of https://gitee.com/openkylin/linux.git
Merge branch 'octeontx2-pf-Miscellaneous-fixes'
Sunil Goutham says: ==================== octeontx2-pf: Miscellaneous fixes This patchset fixes couple of issues related to missing page refcount updation and taking a mutex lock in atomic context. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6e22c60480
|
@ -243,6 +243,8 @@ struct otx2_nic {
|
||||||
struct workqueue_struct *flr_wq;
|
struct workqueue_struct *flr_wq;
|
||||||
struct flr_work *flr_wrk;
|
struct flr_work *flr_wrk;
|
||||||
struct refill_work *refill_wrk;
|
struct refill_work *refill_wrk;
|
||||||
|
struct workqueue_struct *otx2_wq;
|
||||||
|
struct work_struct rx_mode_work;
|
||||||
|
|
||||||
/* Ethtool stuff */
|
/* Ethtool stuff */
|
||||||
u32 msg_enable;
|
u32 msg_enable;
|
||||||
|
|
|
@ -1679,6 +1679,14 @@ static netdev_tx_t otx2_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||||
static void otx2_set_rx_mode(struct net_device *netdev)
|
static void otx2_set_rx_mode(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
struct otx2_nic *pf = netdev_priv(netdev);
|
struct otx2_nic *pf = netdev_priv(netdev);
|
||||||
|
|
||||||
|
queue_work(pf->otx2_wq, &pf->rx_mode_work);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void otx2_do_set_rx_mode(struct work_struct *work)
|
||||||
|
{
|
||||||
|
struct otx2_nic *pf = container_of(work, struct otx2_nic, rx_mode_work);
|
||||||
|
struct net_device *netdev = pf->netdev;
|
||||||
struct nix_rx_mode *req;
|
struct nix_rx_mode *req;
|
||||||
|
|
||||||
if (!(netdev->flags & IFF_UP))
|
if (!(netdev->flags & IFF_UP))
|
||||||
|
@ -1740,6 +1748,17 @@ static const struct net_device_ops otx2_netdev_ops = {
|
||||||
.ndo_get_stats64 = otx2_get_stats64,
|
.ndo_get_stats64 = otx2_get_stats64,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int otx2_wq_init(struct otx2_nic *pf)
|
||||||
|
{
|
||||||
|
pf->otx2_wq = create_singlethread_workqueue("otx2_wq");
|
||||||
|
if (!pf->otx2_wq)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
INIT_WORK(&pf->rx_mode_work, otx2_do_set_rx_mode);
|
||||||
|
INIT_WORK(&pf->reset_task, otx2_reset_task);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int otx2_check_pf_usable(struct otx2_nic *nic)
|
static int otx2_check_pf_usable(struct otx2_nic *nic)
|
||||||
{
|
{
|
||||||
u64 rev;
|
u64 rev;
|
||||||
|
@ -1924,14 +1943,16 @@ static int otx2_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
netdev->min_mtu = OTX2_MIN_MTU;
|
netdev->min_mtu = OTX2_MIN_MTU;
|
||||||
netdev->max_mtu = OTX2_MAX_MTU;
|
netdev->max_mtu = OTX2_MAX_MTU;
|
||||||
|
|
||||||
INIT_WORK(&pf->reset_task, otx2_reset_task);
|
|
||||||
|
|
||||||
err = register_netdev(netdev);
|
err = register_netdev(netdev);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev_err(dev, "Failed to register netdevice\n");
|
dev_err(dev, "Failed to register netdevice\n");
|
||||||
goto err_detach_rsrc;
|
goto err_detach_rsrc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = otx2_wq_init(pf);
|
||||||
|
if (err)
|
||||||
|
goto err_unreg_netdev;
|
||||||
|
|
||||||
otx2_set_ethtool_ops(netdev);
|
otx2_set_ethtool_ops(netdev);
|
||||||
|
|
||||||
/* Enable link notifications */
|
/* Enable link notifications */
|
||||||
|
@ -1943,6 +1964,8 @@ static int otx2_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
err_unreg_netdev:
|
||||||
|
unregister_netdev(netdev);
|
||||||
err_detach_rsrc:
|
err_detach_rsrc:
|
||||||
otx2_detach_resources(&pf->mbox);
|
otx2_detach_resources(&pf->mbox);
|
||||||
err_disable_mbox_intr:
|
err_disable_mbox_intr:
|
||||||
|
@ -2089,6 +2112,8 @@ static void otx2_remove(struct pci_dev *pdev)
|
||||||
|
|
||||||
unregister_netdev(netdev);
|
unregister_netdev(netdev);
|
||||||
otx2_sriov_disable(pf->pdev);
|
otx2_sriov_disable(pf->pdev);
|
||||||
|
if (pf->otx2_wq)
|
||||||
|
destroy_workqueue(pf->otx2_wq);
|
||||||
|
|
||||||
otx2_detach_resources(&pf->mbox);
|
otx2_detach_resources(&pf->mbox);
|
||||||
otx2_disable_mbox_intr(pf);
|
otx2_disable_mbox_intr(pf);
|
||||||
|
|
|
@ -304,6 +304,7 @@ static int otx2_rx_napi_handler(struct otx2_nic *pfvf,
|
||||||
otx2_aura_freeptr(pfvf, cq->cq_idx, bufptr + OTX2_HEAD_ROOM);
|
otx2_aura_freeptr(pfvf, cq->cq_idx, bufptr + OTX2_HEAD_ROOM);
|
||||||
cq->pool_ptrs--;
|
cq->pool_ptrs--;
|
||||||
}
|
}
|
||||||
|
otx2_get_page(cq->rbpool);
|
||||||
|
|
||||||
return processed_cqe;
|
return processed_cqe;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue