Skip to content

Commit

Permalink
PCI: Refactor pbus_size_mem()
Browse files Browse the repository at this point in the history
The original idea comes from Ram Pai.  This patch puts the chunk of
code for calculating the minimal alignment of memory window into a
separate inline function.

Signed-off-by: Gavin Shan <[email protected]>
Signed-off-by: Bjorn Helgaas <[email protected]>
  • Loading branch information
shangw authored and bjorn-helgaas committed Sep 11, 2012
1 parent 462d930 commit c121504
Showing 1 changed file with 23 additions and 13 deletions.
36 changes: 23 additions & 13 deletions drivers/pci/setup-bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,28 @@ static void pbus_size_io(struct pci_bus *bus, resource_size_t min_size,
}
}

static inline resource_size_t calculate_mem_align(resource_size_t *aligns,
int max_order)
{
resource_size_t align = 0;
resource_size_t min_align = 0;
int order;

for (order = 0; order <= max_order; order++) {
resource_size_t align1 = 1;

align1 <<= (order + 20);

if (!align)
min_align = align1;
else if (ALIGN(align + min_align, min_align) < align1)
min_align = align1 >> 1;
align += aligns[order];
}

return min_align;
}

/**
* pbus_size_mem() - size the memory window of a given bus
*
Expand Down Expand Up @@ -891,20 +913,8 @@ static int pbus_size_mem(struct pci_bus *bus, unsigned long mask,
children_add_size += get_res_add_size(realloc_head, r);
}
}
align = 0;
min_align = 0;
for (order = 0; order <= max_order; order++) {
resource_size_t align1 = 1;

align1 <<= (order + 20);

if (!align)
min_align = align1;
else if (ALIGN(align + min_align, min_align) < align1)
min_align = align1 >> 1;
align += aligns[order];
}

min_align = calculate_mem_align(aligns, max_order);
min_align = max(min_align, window_alignment(bus, b_res->flags & mask));
size0 = calculate_memsize(size, min_size, 0, resource_size(b_res), min_align);
if (children_add_size > add_size)
Expand Down

0 comments on commit c121504

Please sign in to comment.