irqchip/gic-v3-its: Split out property table allocation
authorMarc Zyngier <marc.zyngier@arm.com>
Mon, 19 Dec 2016 18:15:05 +0000 (18:15 +0000)
committerMarc Zyngier <marc.zyngier@arm.com>
Wed, 23 Aug 2017 10:09:17 +0000 (11:09 +0100)
Move the LPI property table allocation into its own function, as
this is going to be required for those associated with VMs in
the future.

Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
drivers/irqchip/irq-gic-v3-its.c

index 6a33cdb6363616477402b1b0121ba43b0ba2718d..9d8d39320f62ff159c4742fa9cdc8db545857a02 100644 (file)
@@ -905,13 +905,32 @@ static void its_lpi_free(struct event_lpi_map *map)
        kfree(map->col_map);
 }
 
+static struct page *its_allocate_prop_table(gfp_t gfp_flags)
+{
+       struct page *prop_page;
+
+       prop_page = alloc_pages(gfp_flags, get_order(LPI_PROPBASE_SZ));
+       if (!prop_page)
+               return NULL;
+
+       /* Priority 0xa0, Group-1, disabled */
+       memset(page_address(prop_page),
+              LPI_PROP_DEFAULT_PRIO | LPI_PROP_GROUP1,
+              LPI_PROPBASE_SZ);
+
+       /* Make sure the GIC will observe the written configuration */
+       gic_flush_dcache_to_poc(page_address(prop_page), LPI_PROPBASE_SZ);
+
+       return prop_page;
+}
+
+
 static int __init its_alloc_lpi_tables(void)
 {
        phys_addr_t paddr;
 
        lpi_id_bits = min_t(u32, gic_rdists->id_bits, ITS_MAX_LPI_NRBITS);
-       gic_rdists->prop_page = alloc_pages(GFP_NOWAIT,
-                                          get_order(LPI_PROPBASE_SZ));
+       gic_rdists->prop_page = its_allocate_prop_table(GFP_NOWAIT);
        if (!gic_rdists->prop_page) {
                pr_err("Failed to allocate PROPBASE\n");
                return -ENOMEM;
@@ -920,14 +939,6 @@ static int __init its_alloc_lpi_tables(void)
        paddr = page_to_phys(gic_rdists->prop_page);
        pr_info("GIC: using LPI property table @%pa\n", &paddr);
 
-       /* Priority 0xa0, Group-1, disabled */
-       memset(page_address(gic_rdists->prop_page),
-              LPI_PROP_DEFAULT_PRIO | LPI_PROP_GROUP1,
-              LPI_PROPBASE_SZ);
-
-       /* Make sure the GIC will observe the written configuration */
-       gic_flush_dcache_to_poc(page_address(gic_rdists->prop_page), LPI_PROPBASE_SZ);
-
        return its_lpi_init(lpi_id_bits);
 }