Commit 62a502cc authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by David S. Miller
Browse files

net: mvneta: do not redirect frames during reconfiguration



Disable frames injection in mvneta_xdp_xmit routine during hw
re-configuration in order to avoid hardware hangs

Fixes: b0a43db9 ("net: mvneta: add XDP_TX support")
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c96b6acc
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -452,11 +452,17 @@ struct mvneta_pcpu_port {
	u32			cause_rx_tx;
};

enum {
	__MVNETA_DOWN,
};

struct mvneta_port {
	u8 id;
	struct mvneta_pcpu_port __percpu	*ports;
	struct mvneta_pcpu_stats __percpu	*stats;

	unsigned long state;

	int pkt_size;
	void __iomem *base;
	struct mvneta_rx_queue *rxqs;
@@ -2113,6 +2119,9 @@ mvneta_xdp_xmit(struct net_device *dev, int num_frame,
	struct netdev_queue *nq;
	u32 ret;

	if (unlikely(test_bit(__MVNETA_DOWN, &pp->state)))
		return -ENETDOWN;

	if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
		return -EINVAL;

@@ -3568,12 +3577,16 @@ static void mvneta_start_dev(struct mvneta_port *pp)

	phylink_start(pp->phylink);
	netif_tx_start_all_queues(pp->dev);

	clear_bit(__MVNETA_DOWN, &pp->state);
}

static void mvneta_stop_dev(struct mvneta_port *pp)
{
	unsigned int cpu;

	set_bit(__MVNETA_DOWN, &pp->state);

	phylink_stop(pp->phylink);

	if (!pp->neta_armada3700) {