MFV: r363292

Merge ACPICA 20200717.
This commit is contained in:
Jung-uk Kim 2020-07-18 07:35:34 +00:00
commit 61b180362a
11 changed files with 80 additions and 19 deletions

View File

@ -1,6 +1,53 @@
----------------------------------------
17 July 2020. Summary of changes for version 20200717:
This release is available at https://acpica.org/downloads
1) ACPICA kernel-resident subsystem:
Do not increment OperationRegion reference counts for field units. Recent
server firmware has revealed that this reference count can overflow on
large servers that declare many field units (thousands) under the same
OperationRegion. This occurs because each field unit declaration will add
a reference count to the source OperationRegion. This release solves the
reference count overflow for OperationRegion objects by preventing
fieldUnits from incrementing their parent OperationRegion's reference
count.
Replaced one-element arrays with flexible-arrays, which were introduced
in C99.
Restored the readme file containing the directions for generation of
ACPICA from source on MSVC 2017. Updated the file for MSVC 2017. File is
located at: generate/msvc2017/readme.txt
2) iASL Compiler/Disassembler and ACPICA tools:
iASL: Fixed a regression found in version 20200214. Prevent iASL from
emitting an extra byte of garbage data when control methods declared a
single parameter type without using braces. This extra byte is known to
cause a blue screen on the Windows AML interpreter.
iASL: Made a change to allow external declarations to specify the type of
a named object even when some name segments are not defined.
This change allows the following ASL code to compile (When DEV0 is not
defined or not defined yet):
External (\_SB.DEV0.OBJ1, IntObj)
External (\_SB.DEV0, DeviceObj)
iASL: Fixed a problem where method names in "Alias ()" statement could be
misinterpreted. They are now interpreted correctly as method invocations.
iASL: capture a method parameter count (Within the Method info segment,
as well as the argument node) when using parameter type lists.
----------------------------------------
28 May 2020. Summary of changes for version 20200528:

View File

@ -1056,7 +1056,7 @@ GetModifiedLevel (
UINT8 Level,
UINT16 MessageId)
{
UINT16 i;
UINT32 i;
UINT16 ExceptionCode;

View File

@ -200,6 +200,14 @@ ExDoExternal (
ExternType = AnMapObjTypeToBtype (ExternTypeOp);
if (ExternType != ACPI_BTYPE_METHOD)
{
/*
* If this is not a method, it has zero parameters this local variable
* is used only for methods
*/
ParamCount = 0;
}
/*
* The parser allows optional parameter return types regardless of the

View File

@ -1177,13 +1177,13 @@ LdAnalyzeExternals (
* previously declared External
*/
Node->Flags &= ~ANOBJ_IS_EXTERNAL;
Node->Type = (UINT8) ExternalOpType;
Node->Type = (UINT8) ActualOpType;
/* Just retyped a node, probably will need to open a scope */
if (AcpiNsOpensScope (ExternalOpType))
if (AcpiNsOpensScope (ActualOpType))
{
Status = AcpiDsScopeStackPush (Node, ExternalOpType, WalkState);
Status = AcpiDsScopeStackPush (Node, ActualOpType, WalkState);
if (ACPI_FAILURE (Status))
{
return (Status);
@ -1204,11 +1204,11 @@ LdAnalyzeExternals (
}
else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
(Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) &&
(ExternalOpType == ACPI_TYPE_ANY))
(ActualOpType == ACPI_TYPE_ANY))
{
/* Allow update of externals of unknown type. */
Node->Type = (UINT8) ExternalOpType;
Node->Type = (UINT8) ActualExternalOpType;
Status = AE_OK;
}

View File

@ -306,6 +306,8 @@ MtMethodAnalysisWalkBegin (
{
ActualArgs = MtProcessParameterTypeList (NextType,
MethodInfo->ValidArgTypes);
MethodInfo->NumArguments = ActualArgs;
ArgNode->Asl.Value.Integer |= ActualArgs;
}
if ((MethodInfo->NumArguments) &&
@ -671,6 +673,16 @@ MtProcessParameterTypeList (
UINT8 ParameterCount = 0;
if (ParamTypeOp && ParamTypeOp->Asl.ParseOpcode != PARSEOP_DEFAULT_ARG)
{
/* Special case for a single parameter without braces */
TypeList[ParameterCount] =
MtProcessTypeOp (ParamTypeOp);
return (1);
}
while (ParamTypeOp)
{
TypeList[ParameterCount] =

View File

@ -994,12 +994,14 @@ XfNamespaceLocateBegin (
* invocation of the method, it is simply a reference to the method.
*
* September 2016: Removed DeRefOf from this list
* July 2020: Added Alias to this list
*/
if ((Op->Asl.Parent) &&
((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_REFOF) ||
(Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_PACKAGE) ||
(Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_VAR_PACKAGE)||
(Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_OBJECTTYPE)))
(Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_OBJECTTYPE) ||
(Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_ALIAS)))
{
return_ACPI_STATUS (AE_OK);
}

View File

@ -651,10 +651,6 @@ AcpiExPrepFieldValue (
}
}
/* An additional reference for the container */
AcpiUtAddReference (ObjDesc->Field.RegionObj);
ACPI_DEBUG_PRINT ((ACPI_DB_BFIELD,
"RegionField: BitOff %X, Off %X, Gran %X, Region %p\n",
ObjDesc->Field.StartFieldBitOffset,

View File

@ -749,11 +749,6 @@ AcpiUtUpdateObjectReference (
NextObject = Object->BufferField.BufferObj;
break;
case ACPI_TYPE_LOCAL_REGION_FIELD:
NextObject = Object->Field.RegionObj;
break;
case ACPI_TYPE_LOCAL_BANK_FIELD:
NextObject = Object->BankField.BankObj;
@ -789,6 +784,7 @@ AcpiUtUpdateObjectReference (
}
break;
case ACPI_TYPE_LOCAL_REGION_FIELD:
case ACPI_TYPE_REGION:
default:

View File

@ -435,7 +435,7 @@ AcpiUtExecute_CID (
* 3) Size of the actual CID strings
*/
CidListSize = sizeof (ACPI_PNP_DEVICE_ID_LIST) +
((Count - 1) * sizeof (ACPI_PNP_DEVICE_ID)) +
(Count * sizeof (ACPI_PNP_DEVICE_ID)) +
StringAreaSize;
CidList = ACPI_ALLOCATE_ZEROED (CidListSize);

View File

@ -154,7 +154,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20200528
#define ACPI_CA_VERSION 0x20200717
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>

View File

@ -1379,7 +1379,7 @@ typedef struct acpi_pnp_device_id_list
{
UINT32 Count; /* Number of IDs in Ids array */
UINT32 ListSize; /* Size of list, including ID strings */
ACPI_PNP_DEVICE_ID Ids[1]; /* ID array */
ACPI_PNP_DEVICE_ID Ids[]; /* ID array */
} ACPI_PNP_DEVICE_ID_LIST;