Patch "ACPICA: Drop port I/O validation for some regions" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ACPICA: Drop port I/O validation for some regions

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     acpica-drop-port-i-o-validation-for-some-regions.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f1dae72898e3eb1ecc63ee5819757b108830a992
Author: Mario Limonciello <mario.limonciello@xxxxxxx>
Date:   Thu Dec 15 09:51:20 2022 -0600

    ACPICA: Drop port I/O validation for some regions
    
    [ Upstream commit e1d9148582ab2c3dada5c5cf8ca7531ca269fee5 ]
    
    Microsoft introduced support in Windows XP for blocking port I/O
    to various regions.  For Windows compatibility ACPICA has adopted
    the same protections and will disallow writes to those
    (presumably) the same regions.
    
    On some systems the AML included with the firmware will issue 4 byte
    long writes to 0x80.  These writes aren't making it over because of this
    blockage. The first 4 byte write attempt is rejected, and then
    subsequently 1 byte at a time each offset is tried. The first at 0x80
    works, but then the next 3 bytes are rejected.
    
    This manifests in bizarre failures for devices that expected the AML to
    write all 4 bytes.  Trying the same AML on Windows 10 or 11 doesn't hit
    this failure and all 4 bytes are written.
    
    Either some of these regions were wrong or some point after Windows XP
    some of these regions blocks have been lifted.
    
    In the last 15 years there doesn't seem to be any reports popping up of
    this error in the Windows event viewer anymore.  There is no documentation
    at Microsoft's developer site indicating that Windows ACPI interpreter
    blocks these regions. Between the lack of documentation and the fact that
    the writes actually do work in Windows 10 and 11, it's quite likely
    Windows doesn't actually enforce this anymore.
    
    So to help the issue, only enforce Windows XP specific entries if the
    latest _OSI supported is Windows XP. Continue to enforce the
    ALWAYS_ILLEGAL entries.
    
    Link: https://github.com/acpica/acpica/pull/817
    Fixes: 7f0719039085 ("ACPICA: New: I/O port protection")
    Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c
index cd576153257c6..f1495b88bf138 100644
--- a/drivers/acpi/acpica/hwvalid.c
+++ b/drivers/acpi/acpica/hwvalid.c
@@ -23,8 +23,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width);
  *
  * The table is used to implement the Microsoft port access rules that
  * first appeared in Windows XP. Some ports are always illegal, and some
- * ports are only illegal if the BIOS calls _OSI with a win_XP string or
- * later (meaning that the BIOS itelf is post-XP.)
+ * ports are only illegal if the BIOS calls _OSI with nothing newer than
+ * the specific _OSI strings.
  *
  * This provides ACPICA with the desired port protections and
  * Microsoft compatibility.
@@ -145,7 +145,8 @@ acpi_hw_validate_io_request(acpi_io_address address, u32 bit_width)
 
 			/* Port illegality may depend on the _OSI calls made by the BIOS */
 
-			if (acpi_gbl_osi_data >= port_info->osi_dependency) {
+			if (port_info->osi_dependency == ACPI_ALWAYS_ILLEGAL ||
+			    acpi_gbl_osi_data == port_info->osi_dependency) {
 				ACPI_DEBUG_PRINT((ACPI_DB_VALUES,
 						  "Denied AML access to port 0x%8.8X%8.8X/%X (%s 0x%.4X-0x%.4X)\n",
 						  ACPI_FORMAT_UINT64(address),



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux