Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Mar 2002 16:11:33 -0500
From:      Jake Burkholder <jake@locore.ca>
To:        "Andrew R. Reiter" <arr@FreeBSD.org>
Cc:        freebsd-smp@FreeBSD.org
Subject:   Re: Patch to lock down modules
Message-ID:  <20020314161133.E52298@locore.ca>
In-Reply-To: <Pine.NEB.3.96L.1020314145829.97600F-100000@fledge.watson.org>; from arr@FreeBSD.org on Thu, Mar 14, 2002 at 03:01:16PM -0500
References:  <20020314134359.C52298@locore.ca> <Pine.NEB.3.96L.1020314145829.97600F-100000@fledge.watson.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Apparently, On Thu, Mar 14, 2002 at 03:01:16PM -0500,
	Andrew R. Reiter said words to the effect of;

> On Thu, 14 Mar 2002, Jake Burkholder wrote:
> 
> :> :Can you explain the wierd logic that was added to linker_file_unload?
> :> 
> :> Ugh, yes, this is kinda ugly.  Essentially this is a result of hacking
> :> this back and forth between where we should be holding SLOCK over.  This
> :> is exactly what I wanted to discuss this b/c prior to making this change,
> :> I had a much more simple strategy here (but was dropped due to changes to
> :> a better strategy for kern_module).  We discussed before about possibly
> :> having two sets of lookup functions -- internal and external -- perhaps
> :> this is a better solution?  
> :
> :Hmm, I'll have to look at it more closely.
> :
> :> 
> :> :Thanks,
> :> :Jake
> 
> I uploaded a new patch (tested somewhat) to:
> 	http://people.freebsd.org/~arr/modlock.diff
> 
> this takes care of 2 of the 3 issues you brought up -- but, I'd enjoy
> inspection of the atomic set and addcalls I used.

Sorry, I should have been clearer.  module_lookupbyname should assert that
the lock is locked either shared or exclusive, sx_assert(SX_LOCKED) does
this, so it can be called with either.  Don't bother with the shared lock -
upgrade - release exclusive, or with the atomic ops, just get an exclusive
lock over the whole thing.

like:

MOD_XLOCK;
mp = module_lookupbyname(newmod->name);
if (mp != NULL) {
	MOD_XUNLOCK;
	...
	return (EEXIST);
}
newmod->id = nextid++;
TAILQ_INSERT_TAIL(&modules, newmod, link);
...
MOD_XUNLOCK;
return (0);

> 
> I'll relook at the 3rd issue (ugliness in kern_linker) and see what I can
> figure out if I don't hear from you.

Ok.

Jake

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?20020314161133.E52298>