[lm-sensors] Solution for ACPI <-> lmsensors arbitration?
Hans de Goede
j.w.r.degoede at hhs.nl
Wed Mar 14 20:55:44 CET 2007
Hi all,
In order to better understand the PC8374L datasheet I've also been reading the
w83627hf datasheet, and I noticed that the w83627hf contains a driver
arbitration mechanism in hardware. This may not be the case for all hwmon's but
I believe that we should start supporting this for those who do. The address
register of the hwmonitor part has a busy flag, currently the code for reading
from it says:
/*
ISA access must always be locked explicitly!
We ignore the W83781D BUSY flag at this moment - it could lead to deadlocks,
would slow down the W83781D access and should not be necessary.
There are some ugly typecasts here, but the good news is - they should
nowhere else be necessary! */
If we would check this first and an address was written by ACPI, then we would
know to wait. The only problem is that there is a race between the time we
check the bit and then write our own access, I'm currently thinking about
fixing this as follows:
while (!access_successfull && attemps)
{
if (busy)
sleep
else
{
disableinterrupts() /* or take a lock shared with acpi,
but then we still have SMI problems, can we disable SMI too?
or maybe only acpi-lock + mask SMI? */
if (!busy)
{
do_read_or_write();
access_successfull = 1;
}
enableinterrupts()
}
attemps--; /* do we need this? */
}
I know this isn't pretty, but it should work, right? Comments?
Regards,
Hans
More information about the lm-sensors
mailing list