irqchip: gicv3-its: Add limitation to page order
authorYun Wu <wuyun.wu@huawei.com>
Fri, 6 Mar 2015 16:37:48 +0000 (16:37 +0000)
committerJason Cooper <jason@lakedaemon.net>
Sun, 8 Mar 2015 05:34:21 +0000 (05:34 +0000)
When required size of Device Table is out of the page allocator's
capability, the whole ITS will fail in probing. This actually is
not the hardware's problem and is mainly a limitation of the kernel
page allocator. This patch will keep ITS going on to the next
initializaion stage with an explicit warning.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Yun Wu <wuyun.wu@huawei.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Link: https://lkml.kernel.org/r/1425659870-11832-10-git-send-email-marc.zyngier@arm.com
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
drivers/irqchip/irq-gic-v3-its.c

index 0fe25a97a5a9878d45f92b8ee346dfb56845ad31..ec20d4a942e05ac2dac1bca54ecabe687605c722 100644 (file)
@@ -828,6 +828,11 @@ static int its_alloc_tables(struct its_node *its)
                        u32 ids = GITS_TYPER_DEVBITS(typer);
 
                        order = get_order((1UL << ids) * entry_size);
+                       if (order >= MAX_ORDER) {
+                               order = MAX_ORDER - 1;
+                               pr_warn("%s: Device Table too large, reduce its page order to %u\n",
+                                       its->msi_chip.of_node->full_name, order);
+                       }
                }
 
                alloc_size = (1 << order) * PAGE_SIZE;