xen-netback: move netif_napi_add before binding interrupt
Interrupt is enabled when bind_interdomain_evtchn_to_irqhandler returns.
If there's interrupt pending interrupt handler is invoked.
NAPI needs to be initialised before binding interrupt otherwise the
interrupt handler will try to scheduling a NAPI instance that is not
initialised yet, resulting in kernel OOPS.
This fixes a regression introduced in ea2c5e13
("xen-netback: move NAPI
add/remove calls").
Ideally function calls to create kthreads should also be moved before
binding but I intent to fix this regression with minimal changes and
refactor the code with another patch.
Reported-by: Thomas Leonard <talex5@gmail.com>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
8dbb200fa4
Коммит
e24f8191cc
|
@ -576,6 +576,9 @@ int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref,
|
|||
init_waitqueue_head(&queue->dealloc_wq);
|
||||
atomic_set(&queue->inflight_packets, 0);
|
||||
|
||||
netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
|
||||
XENVIF_NAPI_WEIGHT);
|
||||
|
||||
if (tx_evtchn == rx_evtchn) {
|
||||
/* feature-split-event-channels == 0 */
|
||||
err = bind_interdomain_evtchn_to_irqhandler(
|
||||
|
@ -629,9 +632,6 @@ int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref,
|
|||
wake_up_process(queue->task);
|
||||
wake_up_process(queue->dealloc_task);
|
||||
|
||||
netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
|
||||
XENVIF_NAPI_WEIGHT);
|
||||
|
||||
return 0;
|
||||
|
||||
err_rx_unbind:
|
||||
|
|
Загрузка…
Ссылка в новой задаче