linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	Jeremy Linton <jeremy.linton@arm.com>,
	Jeffrey Hugo <jhugo@codeaurora.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Jason Cooper <jason@lakedaemon.net>
Subject: [PATCH 05/10] irqchip/gic-v3-its: Keep track of property table's PA and VA
Date: Fri, 21 Sep 2018 20:59:49 +0100	[thread overview]
Message-ID: <20180921195954.21574-6-marc.zyngier@arm.com> (raw)
In-Reply-To: <20180921195954.21574-1-marc.zyngier@arm.com>

We're currently only tracking the page allocated to contain the
property table by its struct page. In the future, it is going to
be convenient to track both PA and VA for that page instead. Let's
do that.

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 drivers/irqchip/irq-gic-v3-its.c   | 23 +++++++++++++----------
 include/linux/irqchip/arm-gic-v3.h |  3 ++-
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index 462bba422189..c2f1138034fd 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -1029,7 +1029,7 @@ static inline u32 its_get_event_id(struct irq_data *d)
 static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
 {
 	irq_hw_number_t hwirq;
-	struct page *prop_page;
+	void *va;
 	u8 *cfg;
 
 	if (irqd_is_forwarded_to_vcpu(d)) {
@@ -1037,7 +1037,7 @@ static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
 		u32 event = its_get_event_id(d);
 		struct its_vlpi_map *map;
 
-		prop_page = its_dev->event_map.vm->vprop_page;
+		va = page_address(its_dev->event_map.vm->vprop_page);
 		map = &its_dev->event_map.vlpi_maps[event];
 		hwirq = map->vintid;
 
@@ -1045,11 +1045,11 @@ static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
 		map->properties &= ~clr;
 		map->properties |= set | LPI_PROP_GROUP1;
 	} else {
-		prop_page = gic_rdists->prop_page;
+		va = gic_rdists->prop_table_va;
 		hwirq = d->hwirq;
 	}
 
-	cfg = page_address(prop_page) + hwirq - 8192;
+	cfg = va + hwirq - 8192;
 	*cfg &= ~clr;
 	*cfg |= set | LPI_PROP_GROUP1;
 
@@ -1628,18 +1628,21 @@ static void its_free_prop_table(struct page *prop_page)
 
 static int __init its_alloc_lpi_prop_table(void)
 {
-	phys_addr_t paddr;
+	struct page *page;
 
 	lpi_id_bits = min_t(u32, GICD_TYPER_ID_BITS(gic_rdists->gicd_typer),
 				ITS_MAX_LPI_NRBITS);
-	gic_rdists->prop_page = its_allocate_prop_table(GFP_NOWAIT);
-	if (!gic_rdists->prop_page) {
+	page = its_allocate_prop_table(GFP_NOWAIT);
+	if (!page) {
 		pr_err("Failed to allocate PROPBASE\n");
 		return -ENOMEM;
 	}
 
-	paddr = page_to_phys(gic_rdists->prop_page);
-	pr_info("GIC: using LPI property table @%pa\n", &paddr);
+	gic_rdists->prop_table_pa = page_to_phys(page);
+	gic_rdists->prop_table_va = page_address(page);
+
+	pr_info("GICv3: using LPI property table @%pa\n",
+		&gic_rdists->prop_table_pa);
 
 	return its_lpi_init(lpi_id_bits);
 }
@@ -1987,7 +1990,7 @@ static void its_cpu_init_lpis(void)
 	paddr = page_to_phys(pend_page);
 
 	/* set PROPBASE */
-	val = (page_to_phys(gic_rdists->prop_page) |
+	val = (gic_rdists->prop_table_pa |
 	       GICR_PROPBASER_InnerShareable |
 	       GICR_PROPBASER_RaWaWb |
 	       ((LPI_NRBITS - 1) & GICR_PROPBASER_IDBITS_MASK));
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
index 266093e845bb..c2a7b863fc2e 100644
--- a/include/linux/irqchip/arm-gic-v3.h
+++ b/include/linux/irqchip/arm-gic-v3.h
@@ -587,7 +587,8 @@ struct rdists {
 		phys_addr_t	phys_base;
 		bool		lpi_enabled;
 	} __percpu		*rdist;
-	struct page		*prop_page;
+	phys_addr_t		prop_table_pa;
+	void			*prop_table_va;
 	u64			flags;
 	u32			gicd_typer;
 	bool			has_vlpis;
-- 
2.18.0


  parent reply	other threads:[~2018-09-21 20:00 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-21 19:59 [PATCH 00/10] GICv3 support for kexec/kdump on EFI systems Marc Zyngier
2018-09-21 19:59 ` [PATCH 01/10] irqchip/gic-v3-its: Change initialization ordering for LPIs Marc Zyngier
2018-09-24 10:49   ` Julien Thierry
2018-09-21 19:59 ` [PATCH 02/10] irqchip/gic-v3-its: Consolidate LPI_PENDBASE_SZ usage Marc Zyngier
2018-09-24 10:33   ` Suzuki K Poulose
2018-09-24 10:50     ` Julien Thierry
2018-09-24 10:54       ` Suzuki K Poulose
2018-09-24 10:55         ` Julien Thierry
2018-09-26 10:28     ` Marc Zyngier
2018-09-21 19:59 ` [PATCH 03/10] irqchip/gic-v3-its: Split property table clearing from allocation Marc Zyngier
2018-09-21 19:59 ` [PATCH 04/10] irqchip/gic-v3-its: Move pending table allocation to init time Marc Zyngier
2018-09-24 11:58   ` Julien Thierry
2018-09-26 10:39     ` Marc Zyngier
2018-09-21 19:59 ` Marc Zyngier [this message]
2018-09-21 19:59 ` [PATCH 06/10] irqchip/gic-v3-its: Allow use of pre-programmed LPI tables Marc Zyngier
2018-09-24 12:52   ` Julien Thierry
2018-09-21 19:59 ` [PATCH 07/10] irqchip/gic-v3-its: Use pre-programmed redistributor tables with kdump kernels Marc Zyngier
2018-09-21 19:59 ` [PATCH 08/10] irqchip/gic-v3-its: Check that all RDs have the same property table Marc Zyngier
2018-09-21 19:59 ` [PATCH 09/10] irqchip/gic-v3-its: Register LPI tables with EFI config table Marc Zyngier
2018-09-21 19:59 ` [PATCH 10/10] irqchip/gic-v3-its: Allow use of LPI tables in reserved memory Marc Zyngier
2018-09-25 18:48 ` [PATCH 00/10] GICv3 support for kexec/kdump on EFI systems Jeremy Linton
2018-09-27  9:55 ` Bhupesh Sharma
2018-09-27 13:01 ` Zhang, Lei
2018-09-27 21:10 ` Richard Ruigrok
2018-09-28 10:33   ` Marc Zyngier
     [not found] ` <CACiNFG5r2Czfy_kXA2PPQa=xdyzq0vUgoQZ=XNME4d_h=O1oBw@mail.gmail.com>
2019-02-01  9:15   ` Marc Zyngier
2019-02-02  3:05     ` Xulin Sun

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180921195954.21574-6-marc.zyngier@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=jason@lakedaemon.net \
    --cc=jeremy.linton@arm.com \
    --cc=jhugo@codeaurora.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).