net: mvpp2: Prevent userspace from changing TX affinities
The mvpp2 driver can't cope at all with the TX affinities being changed from userspace, and spit an endless stream of [ 91.779920] mvpp2 f4000000.ethernet eth2: wrong cpu on the end of Tx processing [ 91.779930] mvpp2 f4000000.ethernet eth2: wrong cpu on the end of Tx processing [ 91.780402] mvpp2 f4000000.ethernet eth2: wrong cpu on the end of Tx processing [ 91.780406] mvpp2 f4000000.ethernet eth2: wrong cpu on the end of Tx processing [ 91.780415] mvpp2 f4000000.ethernet eth2: wrong cpu on the end of Tx processing [ 91.780418] mvpp2 f4000000.ethernet eth2: wrong cpu on the end of Tx processing rendering the box completely useless (I've measured around 600k interrupts/s on a 8040 box) once irqbalance kicks in and start doing its job. Obviously, the driver was never designed with this in mind. So let's work around the problem by preventing userspace from interacting with these interrupts altogether. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
d09b9e60e0
Коммит
13c249a94f
|
@ -6747,6 +6747,9 @@ static int mvpp2_irqs_init(struct mvpp2_port *port)
|
|||
for (i = 0; i < port->nqvecs; i++) {
|
||||
struct mvpp2_queue_vector *qv = port->qvecs + i;
|
||||
|
||||
if (qv->type == MVPP2_QUEUE_VECTOR_PRIVATE)
|
||||
irq_set_status_flags(qv->irq, IRQ_NO_BALANCING);
|
||||
|
||||
err = request_irq(qv->irq, mvpp2_isr, 0, port->dev->name, qv);
|
||||
if (err)
|
||||
goto err;
|
||||
|
@ -6776,6 +6779,7 @@ static void mvpp2_irqs_deinit(struct mvpp2_port *port)
|
|||
struct mvpp2_queue_vector *qv = port->qvecs + i;
|
||||
|
||||
irq_set_affinity_hint(qv->irq, NULL);
|
||||
irq_clear_status_flags(qv->irq, IRQ_NO_BALANCING);
|
||||
free_irq(qv->irq, qv);
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче