On Wed, Jun 19, 2002 at 00:43:13 -0400, Bosko Milekic wrote:
> On Tue, Jun 18, 2002 at 10:36:36PM -0600, Kenneth D. Merry wrote:
> > 
> > I've released a new zero copy sockets snapshot, against -current from June
> > 18th, 2002.
> > 
> > http://people.FreeBSD.org/~ken/zero_copy
> > 
> > The fixes that went into this snapshot:
> > 
> >  - Take mutex locking out of ti_attach(), it isn't really needed.
> >    As long as we can assume that probes of successive ti(4) instances
> >    happen sequentially, we'll be safe in doing this.  Thanks to John
> >    Baldwin for pointing out the solution to that problem.  (The lock in
> >    ti_attach() was causing all sorts of WITNESS warnings when
> >    bus_setup_intr() was called.)
> > 
> >  - Added a new routine, vm_object_allocate_wait().  This is a variant of
> >    vm_object_allocate() that allows the user to specify whether the
> >    uma_zalloc() call inside vm_object_allocate_wait() is called with
> >    M_WAITOK or M_NOWAIT.  This eliminates a WITNESS warning caused when
> >    jumbo_vm_init() calls vm_object_allocate() with the jumbo lock held, and
> >    potentially gives other callers the option of eliminating the mandatory
> >    wait on the uma_zalloc() call.
> 
>   I think this problem was fixed in recent -CURRENT by JeffR.  Notably,
>   the VM system should not allow itself to recurse on itself when called
>   with M_NOWAIT.

A number of problems have been fixed, but I don't think this one would get
fixed by internal VM system changes:

vm_object_t
vm_object_allocate(objtype_t type, vm_size_t size)
{
        vm_object_t result;
 
        result = (vm_object_t) uma_zalloc(obj_zone, M_WAITOK);
        _vm_object_allocate(type, size, result);
 
        return (result);
}

uma_zalloc() is called with M_WAITOK unconditionally.

My solution:

vm_object_t
vm_object_allocate_wait(objtype_t type, vm_size_t size, int flags)
{
        vm_object_t result;

        result = (vm_object_t) uma_zalloc(obj_zone, flags);

        if (result != NULL)
                _vm_object_allocate(type, size, result);

        return (result);
}

vm_object_allocate() is implemented by calling vm_object_allocate_wait()
with M_WAITOK.

Ken
-- 
Kenneth Merry
[EMAIL PROTECTED]

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to