PCI: Move pdev_sort_resources() to setup-bus.c
This allows us to move the definition of struct resource_list to setup_bus.c and later convert resource_list to a regular list. Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
This commit is contained in:
@@ -137,6 +137,52 @@ static resource_size_t get_res_add_size(struct resource_list_x *realloc_head,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sort resources by alignment */
|
||||||
|
static void pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
|
||||||
|
struct resource *r;
|
||||||
|
struct resource_list *list, *tmp;
|
||||||
|
resource_size_t r_align;
|
||||||
|
|
||||||
|
r = &dev->resource[i];
|
||||||
|
|
||||||
|
if (r->flags & IORESOURCE_PCI_FIXED)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!(r->flags) || r->parent)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
r_align = pci_resource_alignment(dev, r);
|
||||||
|
if (!r_align) {
|
||||||
|
dev_warn(&dev->dev, "BAR %d: %pR has bogus alignment\n",
|
||||||
|
i, r);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
for (list = head; ; list = list->next) {
|
||||||
|
resource_size_t align = 0;
|
||||||
|
struct resource_list *ln = list->next;
|
||||||
|
|
||||||
|
if (ln)
|
||||||
|
align = pci_resource_alignment(ln->dev, ln->res);
|
||||||
|
|
||||||
|
if (r_align > align) {
|
||||||
|
tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
|
||||||
|
if (!tmp)
|
||||||
|
panic("pdev_sort_resources(): "
|
||||||
|
"kmalloc() failed!\n");
|
||||||
|
tmp->next = ln;
|
||||||
|
tmp->res = r;
|
||||||
|
tmp->dev = dev;
|
||||||
|
list->next = tmp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void __dev_sort_resources(struct pci_dev *dev,
|
static void __dev_sort_resources(struct pci_dev *dev,
|
||||||
struct resource_list *head)
|
struct resource_list *head)
|
||||||
{
|
{
|
||||||
|
@@ -302,53 +302,6 @@ int pci_assign_resource(struct pci_dev *dev, int resno)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Sort resources by alignment */
|
|
||||||
void pdev_sort_resources(struct pci_dev *dev, struct resource_list *head)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < PCI_NUM_RESOURCES; i++) {
|
|
||||||
struct resource *r;
|
|
||||||
struct resource_list *list, *tmp;
|
|
||||||
resource_size_t r_align;
|
|
||||||
|
|
||||||
r = &dev->resource[i];
|
|
||||||
|
|
||||||
if (r->flags & IORESOURCE_PCI_FIXED)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!(r->flags) || r->parent)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
r_align = pci_resource_alignment(dev, r);
|
|
||||||
if (!r_align) {
|
|
||||||
dev_warn(&dev->dev, "BAR %d: %pR has bogus alignment\n",
|
|
||||||
i, r);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (list = head; ; list = list->next) {
|
|
||||||
resource_size_t align = 0;
|
|
||||||
struct resource_list *ln = list->next;
|
|
||||||
|
|
||||||
if (ln)
|
|
||||||
align = pci_resource_alignment(ln->dev, ln->res);
|
|
||||||
|
|
||||||
if (r_align > align) {
|
|
||||||
tmp = kmalloc(sizeof(*tmp), GFP_KERNEL);
|
|
||||||
if (!tmp)
|
|
||||||
panic("pdev_sort_resources(): "
|
|
||||||
"kmalloc() failed!\n");
|
|
||||||
tmp->next = ln;
|
|
||||||
tmp->res = r;
|
|
||||||
tmp->dev = dev;
|
|
||||||
list->next = tmp;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int pci_enable_resources(struct pci_dev *dev, int mask)
|
int pci_enable_resources(struct pci_dev *dev, int mask)
|
||||||
{
|
{
|
||||||
u16 cmd, old_cmd;
|
u16 cmd, old_cmd;
|
||||||
|
@@ -899,7 +899,6 @@ int pci_claim_resource(struct pci_dev *, int);
|
|||||||
void pci_assign_unassigned_resources(void);
|
void pci_assign_unassigned_resources(void);
|
||||||
void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
|
void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
|
||||||
void pdev_enable_device(struct pci_dev *);
|
void pdev_enable_device(struct pci_dev *);
|
||||||
void pdev_sort_resources(struct pci_dev *, struct resource_list *);
|
|
||||||
int pci_enable_resources(struct pci_dev *, int mask);
|
int pci_enable_resources(struct pci_dev *, int mask);
|
||||||
void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
|
void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
|
||||||
int (*)(const struct pci_dev *, u8, u8));
|
int (*)(const struct pci_dev *, u8, u8));
|
||||||
|
Reference in New Issue
Block a user