mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 09:34:17 +00:00
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:
parent
8dbb200fa4
commit
e24f8191cc
@ -576,6 +576,9 @@ int xenvif_connect(struct xenvif_queue *queue, unsigned long tx_ring_ref,
|
|||||||
init_waitqueue_head(&queue->dealloc_wq);
|
init_waitqueue_head(&queue->dealloc_wq);
|
||||||
atomic_set(&queue->inflight_packets, 0);
|
atomic_set(&queue->inflight_packets, 0);
|
||||||
|
|
||||||
|
netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
|
||||||
|
XENVIF_NAPI_WEIGHT);
|
||||||
|
|
||||||
if (tx_evtchn == rx_evtchn) {
|
if (tx_evtchn == rx_evtchn) {
|
||||||
/* feature-split-event-channels == 0 */
|
/* feature-split-event-channels == 0 */
|
||||||
err = bind_interdomain_evtchn_to_irqhandler(
|
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->task);
|
||||||
wake_up_process(queue->dealloc_task);
|
wake_up_process(queue->dealloc_task);
|
||||||
|
|
||||||
netif_napi_add(queue->vif->dev, &queue->napi, xenvif_poll,
|
|
||||||
XENVIF_NAPI_WEIGHT);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_rx_unbind:
|
err_rx_unbind:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user