int len;
if (!p)
- return -EINVAL;
+ goto err_param;
/* Check if there's room for more reserved memory */
- if (reserved_mem_count >= RESERVE_MEM_MAX_ENTRIES)
+ if (reserved_mem_count >= RESERVE_MEM_MAX_ENTRIES) {
+ pr_err("reserve_mem: no more room for reserved memory\n");
return -EBUSY;
+ }
oldp = p;
size = memparse(p, &p);
if (!size || p == oldp)
- return -EINVAL;
+ goto err_param;
if (*p != ':')
- return -EINVAL;
+ goto err_param;
align = memparse(p+1, &p);
if (*p != ':')
- return -EINVAL;
+ goto err_param;
/*
* memblock_phys_alloc() doesn't like a zero size align,
/* name needs to have length but not too big */
if (!len || len >= RESERVE_MEM_NAME_SIZE)
- return -EINVAL;
+ goto err_param;
/* Make sure that name has text */
for (p = name; *p; p++) {
break;
}
if (!*p)
- return -EINVAL;
+ goto err_param;
/* Make sure the name is not already used */
- if (reserve_mem_find_by_name(name, &start, &tmp))
+ if (reserve_mem_find_by_name(name, &start, &tmp)) {
+ pr_err("reserve_mem: name \"%s\" was already used\n", name);
return -EBUSY;
+ }
/* Pick previous allocations up from KHO if available */
if (reserve_mem_kho_revive(name, size, align))
/* TODO: Allocation must be outside of scratch region */
start = memblock_phys_alloc(size, align);
- if (!start)
+ if (!start) {
+ pr_err("reserve_mem: memblock allocation failed\n");
return -ENOMEM;
+ }
reserved_mem_add(start, size, name);
return 1;
+err_param:
+ pr_err("reserve_mem: empty or malformed parameter\n");
+ return -EINVAL;
}
__setup("reserve_mem=", reserve_mem);