Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Aug 2002 15:37:01 -0400 (EDT)
From:      John Baldwin <jhb@FreeBSD.org>
To:        Mike Makonnen <makonnen@pacbell.net>
Cc:        smp@FreeBSD.ORG
Subject:   RE: Locking questions
Message-ID:  <XFMail.20020828153701.jhb@FreeBSD.org>
In-Reply-To: <20020828123148.7717f871.makonnen@pacbell.net>

next in thread | previous in thread | raw e-mail | index | archive | help

On 28-Aug-2002 Mike Makonnen wrote:
> Hi folks,
> 
> I resumed working on my resource limit lock patch, and I have a couple of
> questions.
> 
> 1. I get "duplicate lock of same type" witness warnings because of this:
> 
>       limhold(plimit) { lock(plimit), bump refcount, unlock(plimit) }
> 
>         newlim = limget();
>         PROC_LOCK(p2);
>         PROC_LOCK(p1);
>         LIM_LOCK(p1->p_limit);
>         if (p1->p_limit->p_lflags & PL_SHAREMOD) {
>                 limcopy(newlim, p1->p_limit);
>                 p2->p_limit = limhold(newlim);
>         } else {
>                 p2->p_limit = limhold(p1->p_limit);
>         }
>         LIM_UNLOCK(p1->p_limit);
>         PROC_UNLOCK(p1);
>         PROC_UNLOCK(p2);
>         limfree(newlim);
>         newlim = NULL;
> 
> I get this message in limhold() because of:
>       p2->p_limit = limhold(p1->p_limit);
> 
> Why is this bad? 

You could deadlock since you don't have a well-defined order of how
multiple limit locks are acquired.

> Is it safe to drop the p1->p_plimit lock
> right before I do the hold? It should be because you need

Yes, once you have done the limcopy, you can drop the limit lock
for p1->p_limit.  The proc lock should probably only protect
the p_limit pointer, not the actual contents of the limits though.

> 2. Should I add the plimit lock to 
>       static struct witness_order_list_entry order_lists[] ?
>     What is the rationale behind the ordering of the list?

The ordering in the list defines the order in which it is allowed to
grab locks.  Witness also figures this out on its own so it is not
necessary to add the lock to the list unless you just really want to.

-- 

John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message




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