https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3dd3d1053123cb750dbc6b9fb8728f58b6327705

commit 3dd3d1053123cb750dbc6b9fb8728f58b6327705
Author:     Dmitry Borisov <[email protected]>
AuthorDate: Wed Jan 4 22:58:39 2023 +0600
Commit:     Timo Kreuzer <[email protected]>
CommitDate: Sat Jan 21 07:33:03 2023 +0100

    [PCI] Fix I/O range size of the resource descriptors
    
    Fixes incorrect PCI IDE resources in VPC 2007
    CORE-17256
---
 drivers/bus/pci/pdo.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/bus/pci/pdo.c b/drivers/bus/pci/pdo.c
index 139aed69439..88576bbaa26 100644
--- a/drivers/bus/pci/pdo.c
+++ b/drivers/bus/pci/pdo.c
@@ -283,6 +283,7 @@ PdoGetRangeLength(PPDO_DEVICE_EXTENSION DeviceExtension,
         ULONGLONG Bar;
     } NewValue;
     ULONG Offset;
+    ULONGLONG Size;
 
     /* Compute the offset of this BAR in PCI config space */
     Offset = 0x10 + Bar * 4;
@@ -359,9 +360,10 @@ PdoGetRangeLength(PPDO_DEVICE_EXTENSION DeviceExtension,
              ? (OriginalValue.Bar & PCI_ADDRESS_IO_ADDRESS_MASK_64)
              : (OriginalValue.Bar & PCI_ADDRESS_MEMORY_ADDRESS_MASK_64));
 
-    *Length = ~((NewValue.Bar & PCI_ADDRESS_IO_SPACE)
-                ? (NewValue.Bar & PCI_ADDRESS_IO_ADDRESS_MASK_64)
-                : (NewValue.Bar & PCI_ADDRESS_MEMORY_ADDRESS_MASK_64)) + 1;
+    Size = (NewValue.Bar & PCI_ADDRESS_IO_SPACE)
+           ? (NewValue.Bar & PCI_ADDRESS_IO_ADDRESS_MASK_64)
+           : (NewValue.Bar & PCI_ADDRESS_MEMORY_ADDRESS_MASK_64);
+    *Length = Size & ~(Size - 1);
 
     *Flags = (NewValue.Bar & PCI_ADDRESS_IO_SPACE)
              ? (NewValue.Bar & ~PCI_ADDRESS_IO_ADDRESS_MASK_64)

Reply via email to