cvs commit: src/sys/i386/bios apm.c

Kris Kennaway kris at FreeBSD.org
Thu Nov 15 14:47:32 PST 2007


John Baldwin wrote:
> On Wednesday 14 November 2007 05:01:32 am Kris Kennaway wrote:
>> Julian Elischer wrote:
>>> julian      2007-11-14 05:43:55 UTC
>>>
>>>   FreeBSD src repository
>>>
>>>   Modified files:
>>>     sys/i386/bios        apm.c 
>>>   Log:
>>>   Apply the same sort of locking done in
>>>      sys/dev/acpica/acpi.c rev 1.196 a while ago:
>>>   
>>>   Grab Giant around calls to DEVICE_SUSPEND/RESUME in
>>>   acpi_SetSleepState().
>>>   If we are resuming non-MPSAFE drivers, they need Giant held for them.
>>>   This may fix some obscure suspend/resume problems.  It has fixed keyrate
>>>   setting problems that were triggered by cardbus (MPSAFE) changing the
>>>   ordering for syscons resume (non-MPSAFE).  Also, add some asserts that
>>>   Giant is held in our suspend/resume and shutdown methods.
>>>   
>>>   Submitted by: Marko Zec
>>>   
>>>   Revision  Changes    Path
>>>   1.149     +10 -0     src/sys/i386/bios/apm.c
>> Why are we adding new unconditional giant acquisitions to the tree? 
>> Devices indicate whether or not they are mpsafe, why can't this be made 
>> conditional?
> 
> Actually, we have no way in new-bus to mark new-bus operations like bus 
> enumeration, etc. MPSAFE, and much of it is not (e.g. 
> attach/detach/suspend/resume, etc. functions).  Additionally, making this 
> conditional would require a scheme where you acquire Giant when you walk down 
> the tree into a non-MPSAFE driver which would add complication to many (if 
> not all) bus drivers.  Considering the rarity of suspend/resume (not a 
> critical-path) the overhead of adding all that may not be worth it.  At some 
> point when we do have locking for all device driver operations this can be 
> removed, but it won't really hurt anything to leave it as it is for now.

OK thanks for the explanation.

Kris


More information about the cvs-src mailing list