Commit 5bc13c2c authored by Robert Richter's avatar Robert Richter Committed by Marc Zyngier

irqchip/gic-v3-its: Fix command buffer allocation

The its command buffer must be page aligned, but kzalloc() is not
guaranteed to be (though it is mostly when allocating 64k). Use
__get_free_pages() as this is used for other buffers as well.
Signed-off-by: default avatarRobert Richter <rrichter@cavium.com>
[Marc: fixed the error path]
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 4cfffcfa
...@@ -1691,7 +1691,8 @@ static int __init its_probe_one(struct resource *res, ...@@ -1691,7 +1691,8 @@ static int __init its_probe_one(struct resource *res,
its->ite_size = ((gic_read_typer(its_base + GITS_TYPER) >> 4) & 0xf) + 1; its->ite_size = ((gic_read_typer(its_base + GITS_TYPER) >> 4) & 0xf) + 1;
its->numa_node = numa_node; its->numa_node = numa_node;
its->cmd_base = kzalloc(ITS_CMD_QUEUE_SZ, GFP_KERNEL); its->cmd_base = (void *)__get_free_pages(GFP_KERNEL | __GFP_ZERO,
get_order(ITS_CMD_QUEUE_SZ));
if (!its->cmd_base) { if (!its->cmd_base) {
err = -ENOMEM; err = -ENOMEM;
goto out_free_its; goto out_free_its;
...@@ -1749,7 +1750,7 @@ static int __init its_probe_one(struct resource *res, ...@@ -1749,7 +1750,7 @@ static int __init its_probe_one(struct resource *res,
out_free_tables: out_free_tables:
its_free_tables(its); its_free_tables(its);
out_free_cmd: out_free_cmd:
kfree(its->cmd_base); free_pages((unsigned long)its->cmd_base, get_order(ITS_CMD_QUEUE_SZ));
out_free_its: out_free_its:
kfree(its); kfree(its);
out_unmap: out_unmap:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment