summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Garber <jgarber1@ualberta.ca>2019-06-05 17:03:30 -0600
committerMartin Roth <martinroth@google.com>2019-06-28 19:32:18 +0000
commit464f4d6ee240e5afd44317d9b7bc4a1228c04899 (patch)
treedac056ca7e269aec511043a5569d355a8f2b8a9d
parentf77f7cdf891a3ab47f71eb392e4229ece33f27ac (diff)
downloadcoreboot-464f4d6ee240e5afd44317d9b7bc4a1228c04899.tar.xz
device: Tidy up add_more_links()
- Add documentation comment - Use 'unsigned int' to make checkpatch happy - Return early if no more links need to be added - Add error handling if malloc fails - Clean up whitespace Change-Id: I70976ee2539b058721d0ae3c15edf279253cd9b7 Signed-off-by: Jacob Garber <jgarber1@ualberta.ca> Found-by: Coverity CID 1229634 Reviewed-on: https://review.coreboot.org/c/coreboot/+/33238 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r--src/device/device_util.c21
-rw-r--r--src/include/device/device.h2
2 files changed, 17 insertions, 6 deletions
diff --git a/src/device/device_util.c b/src/device/device_util.c
index e2370a1cce..11954a1982 100644
--- a/src/device/device_util.c
+++ b/src/device/device_util.c
@@ -654,7 +654,13 @@ bool dev_is_active_bridge(struct device *dev)
return 0;
}
-void add_more_links(struct device *dev, unsigned total_links)
+/**
+ * Ensure the device has a minimum number of bus links.
+ *
+ * @param dev The device to add links to.
+ * @param total_links The minimum number of links to have.
+ */
+void add_more_links(struct device *dev, unsigned int total_links)
{
struct bus *link, *last = NULL;
int link_num = -1;
@@ -668,15 +674,20 @@ void add_more_links(struct device *dev, unsigned total_links)
if (last) {
int links = total_links - (link_num + 1);
if (links > 0) {
- link = malloc(links*sizeof(*link));
+ link = malloc(links * sizeof(*link));
if (!link)
die("Couldn't allocate more links!\n");
- memset(link, 0, links*sizeof(*link));
+ memset(link, 0, links * sizeof(*link));
last->next = link;
+ } else {
+ /* No more links to add */
+ return;
}
} else {
- link = malloc(total_links*sizeof(*link));
- memset(link, 0, total_links*sizeof(*link));
+ link = malloc(total_links * sizeof(*link));
+ if (!link)
+ die("Couldn't allocate more links!\n");
+ memset(link, 0, total_links * sizeof(*link));
dev->link_list = link;
}
diff --git a/src/include/device/device.h b/src/include/device/device.h
index 52635e1bd2..8e9454c4e1 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -191,7 +191,7 @@ const char *bus_path(struct bus *bus);
void dev_set_enabled(struct device *dev, int enable);
void disable_children(struct bus *bus);
bool dev_is_active_bridge(struct device *dev);
-void add_more_links(struct device *dev, unsigned total_links);
+void add_more_links(struct device *dev, unsigned int total_links);
/* Option ROM helper functions */
void run_bios(struct device *dev, unsigned long addr);