AMD K8: Fix allocation size for HyperTransport links

There is no requirement that in dev->link_list the last element
would have the highest link->link_num.

Also fix off-by-one error when allocating for more links.

Change-Id: Id8a7db3ffb4111eb31e70ea14fd522b70368dd8c
Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com>
Reviewed-on: http://review.coreboot.org/8550
Tested-by: build bot (Jenkins)
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
Kyösti Mälkki 2015-02-21 23:56:07 +02:00
parent 11c79d7fc2
commit c0ee937e92
1 changed files with 6 additions and 5 deletions

View File

@ -1165,14 +1165,16 @@ static struct device_operations pci_domain_ops = {
static void add_more_links(device_t dev, unsigned total_links) static void add_more_links(device_t dev, unsigned total_links)
{ {
struct bus *link, *last = NULL; struct bus *link, *last = NULL;
int link_num; int link_num = -1;
for (link = dev->link_list; link; link = link->next) for (link = dev->link_list; link; link = link->next) {
if (link_num < link->link_num)
link_num = link->link_num;
last = link; last = link;
}
if (last) { if (last) {
int links = total_links - last->link_num; int links = total_links - (link_num + 1);
link_num = last->link_num;
if (links > 0) { if (links > 0) {
link = malloc(links*sizeof(*link)); link = malloc(links*sizeof(*link));
if (!link) if (!link)
@ -1182,7 +1184,6 @@ static void add_more_links(device_t dev, unsigned total_links)
} }
} }
else { else {
link_num = -1;
link = malloc(total_links*sizeof(*link)); link = malloc(total_links*sizeof(*link));
memset(link, 0, total_links*sizeof(*link)); memset(link, 0, total_links*sizeof(*link));
dev->link_list = link; dev->link_list = link;