diff options
| -rw-r--r-- | drivers/irqchip/irq-gic-v3-its.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 9687f8afebff..1b7e155869f6 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c | |||
| @@ -828,7 +828,14 @@ static int its_alloc_tables(struct its_node *its) | |||
| 828 | u64 typer = readq_relaxed(its->base + GITS_TYPER); | 828 | u64 typer = readq_relaxed(its->base + GITS_TYPER); |
| 829 | u32 ids = GITS_TYPER_DEVBITS(typer); | 829 | u32 ids = GITS_TYPER_DEVBITS(typer); |
| 830 | 830 | ||
| 831 | order = get_order((1UL << ids) * entry_size); | 831 | /* |
| 832 | * 'order' was initialized earlier to the default page | ||
| 833 | * granule of the the ITS. We can't have an allocation | ||
| 834 | * smaller than that. If the requested allocation | ||
| 835 | * is smaller, round up to the default page granule. | ||
| 836 | */ | ||
| 837 | order = max(get_order((1UL << ids) * entry_size), | ||
| 838 | order); | ||
| 832 | if (order >= MAX_ORDER) { | 839 | if (order >= MAX_ORDER) { |
| 833 | order = MAX_ORDER - 1; | 840 | order = MAX_ORDER - 1; |
| 834 | pr_warn("%s: Device Table too large, reduce its page order to %u\n", | 841 | pr_warn("%s: Device Table too large, reduce its page order to %u\n", |
