Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Dec 1997 05:38:40 -0800
From:      John-Mark Gurney <gurney_j@efn.org>
To:        Darren Reed <avalon@coombs.anu.edu.au>
Cc:        freebsd-hackers@FreeBSD.ORG
Subject:   Re: converting drivers to dynamic memory...
Message-ID:  <19971218053840.15389@hydrogen.nike.efn.org>
In-Reply-To: <199712181323.FAA04229@resnet.uoregon.edu>; from Darren Reed on Fri, Dec 19, 1997 at 12:23:04AM %2B1100
References:  <19971218044804.38303@hydrogen.nike.efn.org> <199712181323.FAA04229@resnet.uoregon.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
Darren Reed scribbled this message on Dec 19:
> In some mail from John-Mark Gurney, sie said:
> > 
> > Darren Reed scribbled this message on Dec 18:
> > > In some mail from John-Mark Gurney, sie said:
> > > > well...  one of the things that will need to be done in preperation
> > > > for moving to a dynamic system which will be required by the bus/device
> > > > code, we will need to eliminate ALL static datat that depends upon
> > > > Ndevice to size itself.
> > > > 
> > > > There are two ways that we can fix this problem.  The first (and
> > > > technically the best) is to be extend many of the calling functions
> > > > to pass around a void * pointer that will point to that devices
> > > > resources.  Though this is technically best, it will require that
> > > > most major parts of the kernel be significantly changes.
> > > > 
> > > > The second solution is to continue to use the major/minor code scheme,
> > > > but use a binary tree or a B-tree to obtain the private data.  This
> > > > can cause a performance impact if we use if for things like the sio,
> > > > but this can be fixed by changing the interrupt interface.
> > > 
> > > > I think that we should go with the second solution as it will be
> > > > initalially easier to do.  I have B-tree code already writen, (I was
> > > > writing it for another use in my bus/device code) which we could use
> > > > to access this information.  (Some people will say, why not linked
> > > > lists, and then I will say, sio, I have 12 ports on my term server,
> > > > plus you get better data density)
> > > 
> > > I guess the question is, do you want a `quick hack' or a real solution to
> > > fix and addres the problem ?
> > > 
> > > How many hours did you spend on the B-Tree stuff and how many do you
> > > expect it would take to do it the other way ?
> > 
> > the B-tree code is generic, I wasn't writing it to solve the above
> > problem, just so that I would have the code in my archives for use
> > when I need it.. :)  so, time taken to write the B-Tree code shouldn't
> > be counted in the equation...
> > 
> > the reason I say the second solution is that it MIGHT take a person
> > two hours for the largest device to convert from the current table of
> > static data to dynamic...
> [....]
> > if you do the second method, 90% of the work you do in that step will
> > be able to be reused for when you finally make the step to the first
> > method...  so, it's more along the lines of, lets get the system into
> > a state that I can continue to do my work, and then when I or someone
> > else has time, finish the job.  In the short term, getting the bus/device
> > code is a greater benifit then the minor loss of this "hack" to get it
> > working.
> 
> Hmmm.  So how exactly does the B-tree solve the problem ?  You're allocating
> the dynamic data and storing it on the B-Tree and then have to look it up by
> searching the B-tree ?  Aren't there better ways of allocating data and then
> looking up where it is (what about asking the driver itself) ?

correct.. this is EXACTLY what the code does.. the problem is that
right now the data is stored in a static table,  because of this, you
can't just say, hey, I need another instance of you to attach to this
card...   we could even go with a small array of pointers that gets
realloced/resized each time a driver gets attached...  (which might be
better, I happen to have just finished testing the btree code, so that
influenced my choice.. :) )..

> Why isn't it ok to just free/allocate and the memory when it is (un)loaded ?

well, the problem is mapping the major/minor number that the kernel
gives you to the proper private data structs...

> If, I load a device like BPF and tell it I want "NBPF" to be 4, then what
> else besides the BPF driver needs to know that NBPF is 4 ?  (I hope I've
> picked a very simple case :).  What else cares about those buffers ?

nothing else cares about those buffers, but the problem is:
static struct bpf_d     bpf_dtab[NBPFILTER];
and
        d = &bpf_dtab[minor(dev)];

how do you dynamicly add another bpf device if you have static data
that is required?  (say you only compiled four, but need just one more)..

-- 
  John-Mark Gurney                          Modem/FAX: +1 541 683 6954
  Cu Networking					  P.O. Box 5693, 97405

  Live in Peace, destroy Micro$oft, support free software, run FreeBSD



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19971218053840.15389>