Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1570941

Re: [PATCH] xen-netfront: Delete rx_refill_timer in xennet_disconnect_backend()

From Boris Ostrovsky <boris.ostrovsky@oracle.com>
Newsgroups linux.kernel
Subject Re: [PATCH] xen-netfront: Delete rx_refill_timer in xennet_disconnect_backend()
Date 2017-01-31 18:50 +0100
Message-ID <t5KJ4-3yR-35@gated-at.bofh.it> (permalink)
References <t5opc-6Tg-19@gated-at.bofh.it> <t5oyS-7bL-35@gated-at.bofh.it> <t5oSd-7ij-3@gated-at.bofh.it> <t5puW-7L5-19@gated-at.bofh.it> <t5pXY-7V1-7@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


On 01/30/2017 02:31 PM, Boris Ostrovsky wrote:
> On 01/30/2017 02:06 PM, Eric Dumazet wrote:
>> On Mon, 2017-01-30 at 13:23 -0500, Boris Ostrovsky wrote:
>>
>>> We do netif_carrier_off() first thing in xennet_disconnect_backend() and
>>> the only place where the timer is rearmed is xennet_alloc_rx_buffers(),
>>> which is guarded by netif_carrier_ok() check.
>> Oh well, testing netif_carrier_ok() in packet processing fast path looks
>> unusual and a waste of cpu cycles. I've never seen that pattern before.
>>
>> If one day, we remove this netif_carrier_ok() test during a cleanup,
>> then the race window will open again.
>
> I don't know much about napi but I wonder whether I can indeed disable
> it in xennet_disconnect_backend(). I don't see how anything can happen
> after disconnect since it unmaps the rings. And then napi is re-enabled
> during reconnection in xennet_create_queues(). In which case am not sure
> there is any need for xennet_destroy_queues() as everything there could
> be folded into xennet_disconnect_backend().

While this does work, there was a reason why napi_disable() was not
called in xennet_disconnect_backend() and it is explained in commit
ce58725fec6e --- napi_disable() may sleep and that's why it is called in
xennet_destroy_queues().

OTOH, there is a napi_synchronize() call in xennet_destroy_queues().
Will destroying the timer after it guarantee that all preceding RX have
been completed? RX interrupt is disabled prior to napi_synchronize() so
presumably nothing new can be received.


-boris

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

Re: [PATCH] xen-netfront: Delete rx_refill_timer in  xennet_disconnect_backend() Eric Dumazet <eric.dumazet@gmail.com> - 2017-01-30 20:10 +0100
  Re: [PATCH] xen-netfront: Delete rx_refill_timer in  xennet_disconnect_backend() Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2017-01-30 20:40 +0100
    Re: [PATCH] xen-netfront: Delete rx_refill_timer in  xennet_disconnect_backend() Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2017-01-31 18:50 +0100
      Re: [PATCH] xen-netfront: Delete rx_refill_timer in  xennet_disconnect_backend() Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2017-02-02 00:30 +0100
        Re: [PATCH] xen-netfront: Delete rx_refill_timer in  xennet_disconnect_backend() Eric Dumazet <eric.dumazet@gmail.com> - 2017-02-02 01:10 +0100

csiph-web