]> mj.ucw.cz Git - pciutils.git/commitdiff
libpci: ecam: Deduplicate get_bus_addr() code for calculating bus address
authorPali Rohár <pali@kernel.org>
Thu, 18 May 2023 19:34:49 +0000 (21:34 +0200)
committerMartin Mares <mj@ucw.cz>
Fri, 29 Dec 2023 13:30:02 +0000 (14:30 +0100)
Move duplicate code block into helper function calculate_bus_addr().

lib/ecam.c

index 961e4162d1dd1837e9a6b61d051c4d9ed3723567..f4d2e9b6a3906c6c57050614072824e9efd8686d 100644 (file)
@@ -618,6 +618,21 @@ validate_addrs(const char *addrs)
   return 1;
 }
 
+static int
+calculate_bus_addr(u8 start_bus, off_t start_addr, u32 total_length, u8 bus, off_t *addr, u32 *length)
+{
+  u32 offset;
+
+  offset = 32*8*4096 * (bus - start_bus);
+  if (offset >= total_length)
+    return 0;
+
+  *addr = start_addr + offset;
+  *length = total_length - offset;
+
+  return 1;
+}
+
 static int
 get_bus_addr(struct acpi_mcfg *mcfg, const char *addrs, int domain, u8 bus, off_t *addr, u32 *length)
 {
@@ -626,7 +641,6 @@ get_bus_addr(struct acpi_mcfg *mcfg, const char *addrs, int domain, u8 bus, off_
   u8 end_bus;
   off_t start_addr;
   u32 total_length;
-  u32 offset;
   int i, count;
 
   if (mcfg)
@@ -636,14 +650,7 @@ get_bus_addr(struct acpi_mcfg *mcfg, const char *addrs, int domain, u8 bus, off_
         {
           get_mcfg_allocation(mcfg, i, &cur_domain, &start_bus, &end_bus, &start_addr, &total_length);
           if (domain == cur_domain && bus >= start_bus && bus <= end_bus)
-            {
-              offset = 32*8*4096 * (bus - start_bus);
-              if (offset >= total_length)
-                return 0;
-              *addr = start_addr + offset;
-              *length = total_length - offset;
-              return 1;
-            }
+            return calculate_bus_addr(start_bus, start_addr, total_length, bus, addr, length);
         }
       return 0;
     }
@@ -654,14 +661,7 @@ get_bus_addr(struct acpi_mcfg *mcfg, const char *addrs, int domain, u8 bus, off_
           if (!parse_next_addrs(addrs, &addrs, &cur_domain, &start_bus, &end_bus, &start_addr, &total_length))
             return 0;
           if (domain == cur_domain && bus >= start_bus && bus <= end_bus)
-            {
-              offset = 32*8*4096 * (bus - start_bus);
-              if (offset >= total_length)
-                return 0;
-              *addr = start_addr + offset;
-              *length = total_length - offset;
-              return 1;
-            }
+            return calculate_bus_addr(start_bus, start_addr, total_length, bus, addr, length);
         }
       return 0;
     }