tech-net archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: workqueue in if_bnx: static struct work * seems wrong



On Thursday 01 March 2012 09:29:32 Manuel Bouyer wrote:
> On Thu, Mar 01, 2012 at 09:23:34AM -0700, Sverre Froyen wrote:
> > On Monday 27 February 2012 02:22:20 Jean-Yves Migeon wrote:
> > > On Sun, 26 Feb 2012 22:05:59 +0100, Manuel Bouyer wrote:
> > > > On Sun, Feb 26, 2012 at 05:22:50PM +0100, Jean-Yves Migeon wrote:
> > > >[...]
> > > 
> > > Yep, you are right. I just had a look at workqueue(9) implementation
> > > this morning, and multiple bnx(4) instances would badly break with
> > > anything besides SIMPLEQ.
> > > 
> > > Having a wk allocated in sc is the way to go.
> > 
> > Instead of every driver implementing its own memory management, would it
> > not make more sense to use an common mechanism like, e.g., pool_cache?
> 
> A pool for a single per-instance structure which is completely static
> deosn't make sense. Just declare it static in the softc ...

Sorry, I was following up to the latest message on the thread and doing a poor 
job of quoting.

I was really thinking about the change that prompted this discussion (if_bnx.c 
rev 1.44). In particular the replacement of

        bnx_alloc_pkts(sc)

with

        workqueue_enqueue(sc->bnx_wq, &bnx_wk, NULL);
        SET(sc->bnx_flags, BNX_ALLOC_PKTS_FLAG);

which was made in order to avoid memory allocation in interrupt context.

It seems to me that this could be handled by the pool code instead. Perhaps as 
follows:

1) Create pool_caches of header structures (one per buffer size).

2) Use a custom allocator that does the bus_dma dance and attaches the 
resulting memory pointers to the header structure.

3) Require a minimum number of free items (pool_cache_setlowat).

4) Call pool_cache_get in the driver to obtain memory buffers.

I attempted to get this working in the iwn driver( for the rx buffers) but ran 
into some issues in the pool code that prevented a simple minded version from 
working. I believe the problems can be fixed, however.

Regards,
Sverre






Home | Main Index | Thread Index | Old Index