lkml.org 
[lkml]   [2011]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH RFC] virtio_net: fix refill related races
Date
On Sun, 11 Dec 2011 16:44:29 +0200, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> On Thu, Dec 08, 2011 at 03:07:29PM +1030, Rusty Russell wrote:
> > On Wed, 7 Dec 2011 17:21:22 +0200, "Michael S. Tsirkin" <mst@redhat.com> wrote:
> > > 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.


\
 
 \ /
  Last update: 2011-12-12 04:07    [W:0.291 / U:0.588 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site