Re: witness and modules.

From: John Baldwin <jhb_at_freebsd.org>
Date: Wed, 03 Dec 2014 10:21:01 -0500
On Wednesday, December 03, 2014 09:53:20 PM Julian Elischer wrote:
> On 12/3/14, 7:26 PM, Andriy Gapon wrote:
> > On 03/12/2014 04:33, Julian Elischer wrote:
> >> On 12/3/14, 12:24 AM, Warner Losh wrote:
> >>>> On Dec 1, 2014, at 10:08 PM, Julian Elischer <julian_at_freebsd.org>
> >>>> wrote:
> >>>> 
> >>>> On 12/1/14, 11:39 PM, John Baldwin wrote:
> >>>>> On Friday, November 28, 2014 11:08:35 PM Julian Elischer wrote:
> >>>>>> Do we need to compile all modules with witness definitions when
> >>>>>> linking with a kernel compiled with witness?
> >>>>>> This was true at one stage but I remember some work was done to make
> >>>>>> them compatible.
> >>>>> 
> >>>>> You should not need this.  modules always call functions in the kernel
> >>>>> for
> >>>>> lock operations and this functions are what invoke WITNESS.
> >>>> 
> >>>> that's what I thought but empirical evidence disagrees.
> >>>> I'll try some more cases.
> >>> 
> >>> I swap back and forth all the time between the two. Kernel modules don’t
> >>> change when you compile them with WITNESS or without.
> >> 
> >> not entirely..
> >> hwpmc.ko:                 U witness_restore
> >> hwpmc.ko:                 U witness_save
> >> zfs.ko:                 U witness_restore
> >> zfs.ko:                 U witness_save
> > 
> > Seems like the problem affects modules that use DROP_GIANT / PICKUP_GIANT.
> 
> that's a good observation. I'll take a look a that later.

Yes, that isn't really intended to be used publically.

The pmc one is stale as system calls haven't run with Giant in several 
releases.

All the ones for g_topology_lock() also seem to be broken-by-designed.  There 
is no good reason I can think of for g_topology_lock() to assert that Giant 
isn't held.  I suspect phk_at_ just wanted to force geom to be locked without 
Giant, but I'm not sure that is the best way to achieve that?  Poul, is that 
correct?

If you fix that you can remove almost all of the DROP_GIANT/PICKUP_GIANT in 
the tree.  They should really only be in the _sleep() and cv_wait_*() 
functions where they are used to give Giant its "special" property of being 
dropped while asleep.

-- 
John Baldwin
Received on Wed Dec 03 2014 - 15:47:40 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:54 UTC