On Fri, May 17, 2002 at 23:02:55 -0700, Alfred Perlstein wrote:
> * Kenneth D. Merry <[EMAIL PROTECTED]> [020517 22:40] wrote:
> >
> > I have released a new set of zero copy sockets patches, against -current
> > from today (May 17th, 2002).
> >
> > The main change is to deal with the vfs_ioopt changes that Alan Cox made in
> > kern_subr.c. (They conflicted a bit with the zero copy receive code.)
> >
> > The patches and the FAQ are available here:
> >
> > http://people.freebsd.org/~ken/zero_copy/
> >
> > Comments, questions and reviews are all welcome!
>
> jumbo_vm_init() has a bunch of bugs
>
> first it doesn't work right if called concurrently.
> you need to protect the initialization of jumbo_vm_object otherwise
> bad things can happen. my suggestion is to store the results of
> vm_object_allocate into a temporary, grab the mutex and then check
> to see if jumbo_vm_object has been initialized again if it has then
> free the object, otherwise store the allocated object into the
> global and continue.
The problem here is that the mutex needs to be initialized before I can
acquire it, and there's going to be a race between checking to see
whether it has been initialized and actually initializing it.
e.g.:
if (!mtx_initialized(&jumbo_mutex))
mtx_init(&jumbo_mutex, "jumbo mutex", NULL, MTX_DEF);
mtx_lock(&jumbo_mutex);
if (jumbo_vm_object != NULL) {
mtx_unlock(&jumbo_mutex);
return (1);
}
/* allocate our object */
jumbo_vm_object = vm_object_allocate(OBJT_DEFAULT, JUMBO_MAX_PAGES);
The above would work, I think, if it weren't for the race in the mutex
initialization, and assuming I can allocate a vm object while holding
the jumbo mutex.
Suggestions?
> you may not call malloc(9) with M_WAITOK while holding a mutex.
Ahh, okay.
> entry = jumbo_kmap_inuse.slh_first;
>
> I'm sure that should use a list macro.
Yes, SLIST_FIRST(), thanks.
> That's all I see off the bat. :) Looks cool though.
Cool, thanks for the feedback!
Ken
--
Kenneth Merry
[EMAIL PROTECTED]
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message