Unmask all IO irqs after driver state is set as running

If driver left MSI-x handlling routine because interface was put down,
it is not unmasking IRQs, so any requesting interrupt will be awaiting
for unmasking.

On ena_up() routine all interrupts are being unmasked and any awaiting
interrupt will be handled right away.

If handler was executed before driver state was set as running, handling
routine is being ended immediately, leaving IO irqs for given queue
masked.

Submitted by:   Michal Krawczyk <mk@semihalf.com>
Obtained from:  Semihalf
Sponsored by:   Amazon.com Inc.
This commit is contained in:
Zbigniew Bodek 2017-07-04 00:02:28 +00:00
parent 0a930cf078
commit 93471047c0

View File

@ -2097,7 +2097,6 @@ ena_up_complete(struct ena_adapter *adapter)
ena_change_mtu(adapter->ifp, adapter->ifp->if_mtu); ena_change_mtu(adapter->ifp, adapter->ifp->if_mtu);
ena_refill_all_rx_bufs(adapter); ena_refill_all_rx_bufs(adapter);
ena_unmask_all_io_irqs(adapter);
return (0); return (0);
} }
@ -2170,6 +2169,8 @@ ena_up(struct ena_adapter *adapter)
taskqueue_enqueue(adapter->stats_tq, &adapter->stats_task); taskqueue_enqueue(adapter->stats_tq, &adapter->stats_task);
adapter->up = true; adapter->up = true;
ena_unmask_all_io_irqs(adapter);
} }
return (0); return (0);