Commit cc9f7f65 authored by Jiawen Wu's avatar Jiawen Wu Committed by Paolo Abeni
Browse files

net: txgbe: request MISC IRQ in ndo_open



Move the creating of irq_domain for MISC IRQ from .probe to .ndo_open,
and free it in .ndo_stop, to maintain consistency with the queue IRQs.
This it for subsequent adjustments to the IRQ vectors.

Fixes: aefd0136 ("net: txgbe: use irq_domain for interrupt controller")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarJiawen Wu <jiawenwu@trustnetic.com>
Reviewed-by: default avatarMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Link: https://patch.msgid.link/20250701063030.59340-2-jiawenwu@trustnetic.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent b0727b0c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -78,7 +78,6 @@ int txgbe_request_queue_irqs(struct wx *wx)
		free_irq(wx->msix_q_entries[vector].vector,
			 wx->q_vector[vector]);
	}
	wx_reset_interrupt_capability(wx);
	return err;
}

@@ -211,6 +210,7 @@ void txgbe_free_misc_irq(struct txgbe *txgbe)
	free_irq(txgbe->link_irq, txgbe);
	free_irq(txgbe->misc.irq, txgbe);
	txgbe_del_irq_domain(txgbe);
	txgbe->wx->misc_irq_domain = false;
}

int txgbe_setup_misc_irq(struct txgbe *txgbe)
+10 −12
Original line number Diff line number Diff line
@@ -458,10 +458,14 @@ static int txgbe_open(struct net_device *netdev)

	wx_configure(wx);

	err = txgbe_request_queue_irqs(wx);
	err = txgbe_setup_misc_irq(wx->priv);
	if (err)
		goto err_free_resources;

	err = txgbe_request_queue_irqs(wx);
	if (err)
		goto err_free_misc_irq;

	/* Notify the stack of the actual queue counts. */
	err = netif_set_real_num_tx_queues(netdev, wx->num_tx_queues);
	if (err)
@@ -479,6 +483,9 @@ static int txgbe_open(struct net_device *netdev)

err_free_irq:
	wx_free_irq(wx);
err_free_misc_irq:
	txgbe_free_misc_irq(wx->priv);
	wx_reset_interrupt_capability(wx);
err_free_resources:
	wx_free_resources(wx);
err_reset:
@@ -519,6 +526,7 @@ static int txgbe_close(struct net_device *netdev)
	wx_ptp_stop(wx);
	txgbe_down(wx);
	wx_free_irq(wx);
	txgbe_free_misc_irq(wx->priv);
	wx_free_resources(wx);
	txgbe_fdir_filter_exit(wx);
	wx_control_hw(wx, false);
@@ -564,7 +572,6 @@ static void txgbe_shutdown(struct pci_dev *pdev)
int txgbe_setup_tc(struct net_device *dev, u8 tc)
{
	struct wx *wx = netdev_priv(dev);
	struct txgbe *txgbe = wx->priv;

	/* Hardware has to reinitialize queues and interrupts to
	 * match packet buffer alignment. Unfortunately, the
@@ -575,7 +582,6 @@ int txgbe_setup_tc(struct net_device *dev, u8 tc)
	else
		txgbe_reset(wx);

	txgbe_free_misc_irq(txgbe);
	wx_clear_interrupt_scheme(wx);

	if (tc)
@@ -584,7 +590,6 @@ int txgbe_setup_tc(struct net_device *dev, u8 tc)
		netdev_reset_tc(dev);

	wx_init_interrupt_scheme(wx);
	txgbe_setup_misc_irq(txgbe);

	if (netif_running(dev))
		txgbe_open(dev);
@@ -882,13 +887,9 @@ static int txgbe_probe(struct pci_dev *pdev,

	txgbe_init_fdir(txgbe);

	err = txgbe_setup_misc_irq(txgbe);
	if (err)
		goto err_release_hw;

	err = txgbe_init_phy(txgbe);
	if (err)
		goto err_free_misc_irq;
		goto err_release_hw;

	err = register_netdev(netdev);
	if (err)
@@ -916,8 +917,6 @@ static int txgbe_probe(struct pci_dev *pdev,

err_remove_phy:
	txgbe_remove_phy(txgbe);
err_free_misc_irq:
	txgbe_free_misc_irq(txgbe);
err_release_hw:
	wx_clear_interrupt_scheme(wx);
	wx_control_hw(wx, false);
@@ -957,7 +956,6 @@ static void txgbe_remove(struct pci_dev *pdev)
	unregister_netdev(netdev);

	txgbe_remove_phy(txgbe);
	txgbe_free_misc_irq(txgbe);
	wx_free_isb_resources(wx);

	pci_release_selected_regions(pdev,