﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
232	Trap in ACPI.PSD when testing _OSI multiple times	Chuck McKinnis	pasha	"_OSI Method very often used to identify OS version for example 
[http://www.microsoft.com/whdc/archive/_OSI-method.mspx]

Usually this block included in _INI method and looks like:


{{{
If (CondRefOf (_OSI, Local0))
{
   If (_OSI (""LINX""))
   {
      Store (0x0001, OSYS)
   }
...
   If (_OSI (""Windows 2006""))
   {
      Store (0x07D6, OSYS)
   }
}


}}}

Very often this code cause system trap in ACPI.PSD.
I made some tests and found that ACPI.PSD '''ALWAYS''' trap if 

{{{
If (_OSI (""Some string""))
}}}

executed mode then once.
For example:

{{{
If (CondRefOf (_OSI, Local0))
{
   Store (0x0001, OSYS)
} else
{
   Store (0x0002, OSYS)
}
}}}

Doesn't cause trap.
{{{
If (CondRefOf (_OSI, Local0))
{
   If (_OSI (""LINX""))
   {
      Store (0x0001, OSYS)
   }
}
}}}
doesn't cause trap. while
{{{
   If (_OSI (""System 1""))
   {
      Store (0x0001, OSYS)
   }
   If (_OSI (""System 2""))
   {
      Store (0x0002, OSYS)
   }
}}}
cause the trap. I made a search of internet and didn't found any information about traps is such cases on other OS, like linux or FreeBSD. Sometimes users of such systems comment out CondRefOf() blocks, leaving only one case statement (no way to change _OSI value in linux?), when they have problems with batteries or other ACPI related devices, but never due to the trap in this place.
It seems that this but is OS/2 specific, as trap itself happend after cleaning up in UtRemoveReference() function, when reference couldn't be found, something wrong with stack?

Apropriated logs and trapdumps can be provided if necessary."	defect	closed	blocker		ACPI PSD	3.08	fixed		
