Thread (15 messages) 15 messages, 3 authors, 2011-12-22

Re: [PATCH RFC] virtio_net: fix refill related races

From: Rusty Russell <hidden>
Date: 2011-12-12 03:05:19
Also in: lkml, netdev

On Sun, 11 Dec 2011 16:44:29 +0200, "Michael S. Tsirkin" [off-list ref] wrote:
On Thu, Dec 08, 2011 at 03:07:29PM +1030, Rusty Russell wrote:
quoted
On Wed, 7 Dec 2011 17:21:22 +0200, "Michael S. Tsirkin" [off-list ref] wrote:
quoted
Fix theoretical races related to refill work:
1. After napi is disabled by ndo_stop, refill work
   can run and re-enable it.
2. Refill can reschedule itself, if this happens
   it can run after cancel_delayed_work_sync,
   and will access device after it is destroyed.

As a solution, add flags to track napi state and
to disable refill, and toggle them on start, stop
and remove; check these flags on refill.
Why isn't a "dont-readd" flag sufficient?

Cheers,
Rusty.
I started with that, but here's the problem I wanted to
address:

- we run out of descriptors and schedule refill work
- ndo_close runs
- refill work runs
- ndo_open runs
(s/ndo_close/ndo_stop/)

You don't think we should do any refills on a closed device?  If so, we
simply move the refill-stop code into ndo_stop (aka virtnet_close), and
the refill-start code into ndo_open (aka. virtnet_open).  Right?

Orthogonally, the refill-stop code is still buggy, as you noted.  And
for self-rearming timers the pattern I've always used is a flag.

Or am I being obtuse again? :)
Rusty.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help