Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Jul 2004 13:42:40 -0700
From:      Nate Lawson <nate@root.org>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sbin/kldunload kldunload.8 kldunload.c
Message-ID:  <40F44940.4020406@root.org>
In-Reply-To: <23944.1089748527@critter.freebsd.dk>
References:  <23944.1089748527@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
Poul-Henning Kamp wrote:
> In message <40F43D36.2000407@root.org>, Nate Lawson writes:
> 
>>Have you kept up on the newbus discussions?  The tentative plan was to 
>>add quiesce functionality to it as part of device_detach().  Doing it at 
>>the module layer is a bit too low since there are events that can 
>>trigger a detach but not an unload.  For instance, any driver compiled 
>>into the kernel for an ejectable device will never be unloaded, but 
>>certainly should quiesce/detach when the device is ejected.  Getting it 
>>right in newbus automatically fixes the problem you're trying to solve 
>>since a module unload always triggers a call to device_detach() but not 
>>vice versa.
>>
>>I think duplicating this at multiple layers is not a good idea and the 
>>module level is not the right layer to implement it.
> 
> Well, since one kld can contain multiple modules, and since the modules
> get to veto an unload with MOD_UNLOAD, I don't really see how you can
> come up with something that doesn't have a MOD_QUIESCE.

There are two parts, the internal structure and interfaces.  The 
internal structure should obviously be one or more calls to 
device_detach().  The external interface does not exist yet and you're 
welcome to contribute.  There is at least a usermode component ("eject 
ed0") and a kernel mode component ("this device_t will soon be gone").
Of course, there will be more than this.

To address your specific issue, there doesn't have to be MOD_QUIESCE. 
The normal MOD_UNLOAD request will trigger (multiple calls to) 
device_detach via a TBD kernel interface.  This detach needs to be 
multiple pass (notify, gone).

> The fact that we have many modules which know nothing about newbus
> also look like a pretty solid argument for needing it at the module
> layer.

Let's focus on how to improve things, not the fact that things aren't 
perfect right now.

-- 
-Nate



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?40F44940.4020406>