All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org
Cc: Christoffer Dall <christoffer.dall@linaro.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Jason Cooper <jason@lakedaemon.net>,
	Eric Auger <eric.auger@redhat.com>,
	Shanker Donthineni <shankerd@codeaurora.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Shameerali Kolothum Thodi  <shameerali.kolothum.thodi@huawei.com>
Subject: [PATCH v3 18/59] irqchip/gic-v3-its: Add VLPI configuration handling
Date: Mon, 31 Jul 2017 18:25:56 +0100	[thread overview]
Message-ID: <20170731172637.29355-19-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170731172637.29355-1-marc.zyngier@arm.com>

When a VLPI is reconfigured (enabled, disabled, change in priority),
the full configuration byte must be written, and the caches invalidated.

Also, when using the irq_mask/irq_unmask methods, it is necessary
to disable the doorbell for that particular interrupt (by mapping it
to 1023) on top of clearing the Enable bit.

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 drivers/irqchip/irq-gic-v3-its.c | 75 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 70 insertions(+), 5 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index ef31c3e58c01..b618c259be8b 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -806,18 +806,26 @@ static inline u32 its_get_event_id(struct irq_data *d)
 	return d->hwirq - its_dev->event_map.lpi_base;
 }
 
-static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
+static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
 {
-	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
-	irq_hw_number_t hwirq = d->hwirq;
+	irq_hw_number_t hwirq;
 	struct page *prop_page;
 	u8 *cfg;
 
-	prop_page = gic_rdists->prop_page;
+	if (irqd_is_forwarded_to_vcpu(d)) {
+		struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+		u32 event = its_get_event_id(d);
+
+		prop_page = its_dev->event_map.vm->vprop_page;
+		hwirq = its_dev->event_map.vlpi_maps[event].vintid;
+	} else {
+		prop_page = gic_rdists->prop_page;
+		hwirq = d->hwirq;
+	}
 
 	cfg = page_address(prop_page) + hwirq - 8192;
 	*cfg &= ~clr;
-	*cfg |= set;
+	*cfg |= set | LPI_PROP_GROUP1;
 
 	/*
 	 * Make the above write visible to the redistributors.
@@ -828,16 +836,52 @@ static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
 		gic_flush_dcache_to_poc(cfg, sizeof(*cfg));
 	else
 		dsb(ishst);
+}
+
+static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+
+	lpi_write_config(d, clr, set);
 	its_send_inv(its_dev, its_get_event_id(d));
 }
 
+static void its_vlpi_set_doorbell(struct irq_data *d, bool enable)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+	u32 event = its_get_event_id(d);
+
+	if (its_dev->event_map.vlpi_maps[event].db_enabled == enable)
+		return;
+
+	its_dev->event_map.vlpi_maps[event].db_enabled = enable;
+
+	/*
+	 * More fun with the architecture:
+	 *
+	 * Ideally, we'd issue a VMAPTI to set the doorbell to its LPI
+	 * value or to 1023, depending on the enable bit. But that
+	 * would be issueing a mapping for an /existing/ DevID+EventID
+	 * pair, which is UNPREDICTABLE. Instead, let's issue a VMOVI
+	 * to the /same/ vPE, using this opportunity to adjust the
+	 * doorbell. Mouahahahaha. We loves it, Precious.
+	 */
+	its_send_vmovi(its_dev, event);
+}
+
 static void its_mask_irq(struct irq_data *d)
 {
+	if (irqd_is_forwarded_to_vcpu(d))
+		its_vlpi_set_doorbell(d, false);
+
 	lpi_update_config(d, LPI_PROP_ENABLED, 0);
 }
 
 static void its_unmask_irq(struct irq_data *d)
 {
+	if (irqd_is_forwarded_to_vcpu(d))
+		its_vlpi_set_doorbell(d, true);
+
 	lpi_update_config(d, 0, LPI_PROP_ENABLED);
 }
 
@@ -850,6 +894,10 @@ static int its_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
 	struct its_collection *target_col;
 	u32 id = its_get_event_id(d);
 
+	/* A forwarded interrupt should use irq_set_vcpu_affinity */
+	if (irqd_is_forwarded_to_vcpu(d))
+		return -EINVAL;
+
        /* lpi cannot be routed to a redistributor that is on a foreign node */
 	if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
 		if (its_dev->its->numa_node >= 0) {
@@ -1018,6 +1066,22 @@ static int its_vlpi_unmap(struct irq_data *d)
 	return ret;
 }
 
+static int its_vlpi_prop_update(struct irq_data *d, struct its_cmd_info *info)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+
+	if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d))
+		return -EINVAL;
+
+	if (info->cmd_type == PROP_UPDATE_AND_INV_VLPI)
+		lpi_update_config(d, 0xff, info->config);
+	else
+		lpi_write_config(d, 0xff, info->config);
+	its_vlpi_set_doorbell(d, !!(info->config & LPI_PROP_ENABLED));
+
+	return 0;
+}
+
 static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
 {
 	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
@@ -1040,6 +1104,7 @@ static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
 
 	case PROP_UPDATE_VLPI:
 	case PROP_UPDATE_AND_INV_VLPI:
+		return its_vlpi_prop_update(d, info);
 
 	default:
 		return -EINVAL;
-- 
2.11.0

WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <marc.zyngier@arm.com>
To: linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org
Cc: Jason Cooper <jason@lakedaemon.net>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH v3 18/59] irqchip/gic-v3-its: Add VLPI configuration handling
Date: Mon, 31 Jul 2017 18:25:56 +0100	[thread overview]
Message-ID: <20170731172637.29355-19-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170731172637.29355-1-marc.zyngier@arm.com>

When a VLPI is reconfigured (enabled, disabled, change in priority),
the full configuration byte must be written, and the caches invalidated.

Also, when using the irq_mask/irq_unmask methods, it is necessary
to disable the doorbell for that particular interrupt (by mapping it
to 1023) on top of clearing the Enable bit.

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 drivers/irqchip/irq-gic-v3-its.c | 75 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 70 insertions(+), 5 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index ef31c3e58c01..b618c259be8b 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -806,18 +806,26 @@ static inline u32 its_get_event_id(struct irq_data *d)
 	return d->hwirq - its_dev->event_map.lpi_base;
 }
 
-static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
+static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
 {
-	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
-	irq_hw_number_t hwirq = d->hwirq;
+	irq_hw_number_t hwirq;
 	struct page *prop_page;
 	u8 *cfg;
 
-	prop_page = gic_rdists->prop_page;
+	if (irqd_is_forwarded_to_vcpu(d)) {
+		struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+		u32 event = its_get_event_id(d);
+
+		prop_page = its_dev->event_map.vm->vprop_page;
+		hwirq = its_dev->event_map.vlpi_maps[event].vintid;
+	} else {
+		prop_page = gic_rdists->prop_page;
+		hwirq = d->hwirq;
+	}
 
 	cfg = page_address(prop_page) + hwirq - 8192;
 	*cfg &= ~clr;
-	*cfg |= set;
+	*cfg |= set | LPI_PROP_GROUP1;
 
 	/*
 	 * Make the above write visible to the redistributors.
@@ -828,16 +836,52 @@ static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
 		gic_flush_dcache_to_poc(cfg, sizeof(*cfg));
 	else
 		dsb(ishst);
+}
+
+static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+
+	lpi_write_config(d, clr, set);
 	its_send_inv(its_dev, its_get_event_id(d));
 }
 
+static void its_vlpi_set_doorbell(struct irq_data *d, bool enable)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+	u32 event = its_get_event_id(d);
+
+	if (its_dev->event_map.vlpi_maps[event].db_enabled == enable)
+		return;
+
+	its_dev->event_map.vlpi_maps[event].db_enabled = enable;
+
+	/*
+	 * More fun with the architecture:
+	 *
+	 * Ideally, we'd issue a VMAPTI to set the doorbell to its LPI
+	 * value or to 1023, depending on the enable bit. But that
+	 * would be issueing a mapping for an /existing/ DevID+EventID
+	 * pair, which is UNPREDICTABLE. Instead, let's issue a VMOVI
+	 * to the /same/ vPE, using this opportunity to adjust the
+	 * doorbell. Mouahahahaha. We loves it, Precious.
+	 */
+	its_send_vmovi(its_dev, event);
+}
+
 static void its_mask_irq(struct irq_data *d)
 {
+	if (irqd_is_forwarded_to_vcpu(d))
+		its_vlpi_set_doorbell(d, false);
+
 	lpi_update_config(d, LPI_PROP_ENABLED, 0);
 }
 
 static void its_unmask_irq(struct irq_data *d)
 {
+	if (irqd_is_forwarded_to_vcpu(d))
+		its_vlpi_set_doorbell(d, true);
+
 	lpi_update_config(d, 0, LPI_PROP_ENABLED);
 }
 
@@ -850,6 +894,10 @@ static int its_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
 	struct its_collection *target_col;
 	u32 id = its_get_event_id(d);
 
+	/* A forwarded interrupt should use irq_set_vcpu_affinity */
+	if (irqd_is_forwarded_to_vcpu(d))
+		return -EINVAL;
+
        /* lpi cannot be routed to a redistributor that is on a foreign node */
 	if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
 		if (its_dev->its->numa_node >= 0) {
@@ -1018,6 +1066,22 @@ static int its_vlpi_unmap(struct irq_data *d)
 	return ret;
 }
 
+static int its_vlpi_prop_update(struct irq_data *d, struct its_cmd_info *info)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+
+	if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d))
+		return -EINVAL;
+
+	if (info->cmd_type == PROP_UPDATE_AND_INV_VLPI)
+		lpi_update_config(d, 0xff, info->config);
+	else
+		lpi_write_config(d, 0xff, info->config);
+	its_vlpi_set_doorbell(d, !!(info->config & LPI_PROP_ENABLED));
+
+	return 0;
+}
+
 static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
 {
 	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
@@ -1040,6 +1104,7 @@ static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
 
 	case PROP_UPDATE_VLPI:
 	case PROP_UPDATE_AND_INV_VLPI:
+		return its_vlpi_prop_update(d, info);
 
 	default:
 		return -EINVAL;
-- 
2.11.0

WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 18/59] irqchip/gic-v3-its: Add VLPI configuration handling
Date: Mon, 31 Jul 2017 18:25:56 +0100	[thread overview]
Message-ID: <20170731172637.29355-19-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170731172637.29355-1-marc.zyngier@arm.com>

When a VLPI is reconfigured (enabled, disabled, change in priority),
the full configuration byte must be written, and the caches invalidated.

Also, when using the irq_mask/irq_unmask methods, it is necessary
to disable the doorbell for that particular interrupt (by mapping it
to 1023) on top of clearing the Enable bit.

Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 drivers/irqchip/irq-gic-v3-its.c | 75 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 70 insertions(+), 5 deletions(-)

diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
index ef31c3e58c01..b618c259be8b 100644
--- a/drivers/irqchip/irq-gic-v3-its.c
+++ b/drivers/irqchip/irq-gic-v3-its.c
@@ -806,18 +806,26 @@ static inline u32 its_get_event_id(struct irq_data *d)
 	return d->hwirq - its_dev->event_map.lpi_base;
 }
 
-static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
+static void lpi_write_config(struct irq_data *d, u8 clr, u8 set)
 {
-	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
-	irq_hw_number_t hwirq = d->hwirq;
+	irq_hw_number_t hwirq;
 	struct page *prop_page;
 	u8 *cfg;
 
-	prop_page = gic_rdists->prop_page;
+	if (irqd_is_forwarded_to_vcpu(d)) {
+		struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+		u32 event = its_get_event_id(d);
+
+		prop_page = its_dev->event_map.vm->vprop_page;
+		hwirq = its_dev->event_map.vlpi_maps[event].vintid;
+	} else {
+		prop_page = gic_rdists->prop_page;
+		hwirq = d->hwirq;
+	}
 
 	cfg = page_address(prop_page) + hwirq - 8192;
 	*cfg &= ~clr;
-	*cfg |= set;
+	*cfg |= set | LPI_PROP_GROUP1;
 
 	/*
 	 * Make the above write visible to the redistributors.
@@ -828,16 +836,52 @@ static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
 		gic_flush_dcache_to_poc(cfg, sizeof(*cfg));
 	else
 		dsb(ishst);
+}
+
+static void lpi_update_config(struct irq_data *d, u8 clr, u8 set)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+
+	lpi_write_config(d, clr, set);
 	its_send_inv(its_dev, its_get_event_id(d));
 }
 
+static void its_vlpi_set_doorbell(struct irq_data *d, bool enable)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+	u32 event = its_get_event_id(d);
+
+	if (its_dev->event_map.vlpi_maps[event].db_enabled == enable)
+		return;
+
+	its_dev->event_map.vlpi_maps[event].db_enabled = enable;
+
+	/*
+	 * More fun with the architecture:
+	 *
+	 * Ideally, we'd issue a VMAPTI to set the doorbell to its LPI
+	 * value or to 1023, depending on the enable bit. But that
+	 * would be issueing a mapping for an /existing/ DevID+EventID
+	 * pair, which is UNPREDICTABLE. Instead, let's issue a VMOVI
+	 * to the /same/ vPE, using this opportunity to adjust the
+	 * doorbell. Mouahahahaha. We loves it, Precious.
+	 */
+	its_send_vmovi(its_dev, event);
+}
+
 static void its_mask_irq(struct irq_data *d)
 {
+	if (irqd_is_forwarded_to_vcpu(d))
+		its_vlpi_set_doorbell(d, false);
+
 	lpi_update_config(d, LPI_PROP_ENABLED, 0);
 }
 
 static void its_unmask_irq(struct irq_data *d)
 {
+	if (irqd_is_forwarded_to_vcpu(d))
+		its_vlpi_set_doorbell(d, true);
+
 	lpi_update_config(d, 0, LPI_PROP_ENABLED);
 }
 
@@ -850,6 +894,10 @@ static int its_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
 	struct its_collection *target_col;
 	u32 id = its_get_event_id(d);
 
+	/* A forwarded interrupt should use irq_set_vcpu_affinity */
+	if (irqd_is_forwarded_to_vcpu(d))
+		return -EINVAL;
+
        /* lpi cannot be routed to a redistributor that is on a foreign node */
 	if (its_dev->its->flags & ITS_FLAGS_WORKAROUND_CAVIUM_23144) {
 		if (its_dev->its->numa_node >= 0) {
@@ -1018,6 +1066,22 @@ static int its_vlpi_unmap(struct irq_data *d)
 	return ret;
 }
 
+static int its_vlpi_prop_update(struct irq_data *d, struct its_cmd_info *info)
+{
+	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
+
+	if (!its_dev->event_map.vm || !irqd_is_forwarded_to_vcpu(d))
+		return -EINVAL;
+
+	if (info->cmd_type == PROP_UPDATE_AND_INV_VLPI)
+		lpi_update_config(d, 0xff, info->config);
+	else
+		lpi_write_config(d, 0xff, info->config);
+	its_vlpi_set_doorbell(d, !!(info->config & LPI_PROP_ENABLED));
+
+	return 0;
+}
+
 static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
 {
 	struct its_device *its_dev = irq_data_get_irq_chip_data(d);
@@ -1040,6 +1104,7 @@ static int its_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu_info)
 
 	case PROP_UPDATE_VLPI:
 	case PROP_UPDATE_AND_INV_VLPI:
+		return its_vlpi_prop_update(d, info);
 
 	default:
 		return -EINVAL;
-- 
2.11.0

  parent reply	other threads:[~2017-07-31 17:55 UTC|newest]

Thread overview: 354+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-31 17:25 [PATCH v3 00/59] irqchip: KVM: Add support for GICv4 Marc Zyngier
2017-07-31 17:25 ` Marc Zyngier
2017-07-31 17:25 ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 01/59] genirq: Let irq_set_vcpu_affinity() iterate over hierarchy Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 02/59] irqchip/gic-v3: Add redistributor iterator Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 03/59] irqchip/gic-v3: Add VLPI/DirectLPI discovery Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 04/59] irqchip/gic-v3-its: Move LPI definitions around Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 05/59] irqchip/gic-v3-its: Add probing for VLPI properties Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 06/59] irqchip/gic-v3-its: Macro-ize its_send_single_command Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 07/59] irqchip/gic-v3-its: Implement irq_set_irqchip_state for pending state Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 08/59] irqchip/gic-v3-its: Split out property table allocation Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 09/59] irqchip/gic-v3-its: Allow use of indirect VCPU tables Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 10/59] irqchip/gic-v3-its: Split out pending table allocation Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 11/59] irqchip/gic-v3-its: Rework LPI freeing Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 12/59] irqchip/gic-v3-its: Generalize device table allocation Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 13/59] irqchip/gic-v3-its: Generalize LPI configuration Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 14/59] irqchip/gic-v4: Add management structure definitions Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 15/59] irqchip/gic-v3-its: Add GICv4 ITS command definitions Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 16/59] irqchip/gic-v3-its: Add VLPI configuration hook Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 17/59] irqchip/gic-v3-its: Add VLPI map/unmap operations Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` Marc Zyngier [this message]
2017-07-31 17:25   ` [PATCH v3 18/59] irqchip/gic-v3-its: Add VLPI configuration handling Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 19/59] irqchip/gic-v3-its: Add VPE domain infrastructure Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 20/59] irqchip/gic-v3-its: Add VPE irq domain allocation/teardown Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25 ` [PATCH v3 21/59] irqchip/gic-v3-its: Add VPE irq domain [de]activation Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:25   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 22/59] irqchip/gic-v3-its: Add VPENDBASER/VPROPBASER accessors Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 23/59] irqchip/gic-v3-its: Add VPE scheduling Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 24/59] irqchip/gic-v3-its: Add VPE invalidation hook Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 25/59] irqchip/gic-v3-its: Add VPE affinity changes Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 26/59] irqchip/gic-v3-its: Add VPE interrupt masking Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 27/59] irqchip/gic-v3-its: Support VPE doorbell invalidation even when !DirectLPI Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 28/59] irqchip/gic-v3-its: Allow doorbell interrupts to be injected/cleared Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 29/59] irqchip/gic-v3-its: Set implementation defined bit to enable VLPIs Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 30/59] irqchip/gic-v4: Add per-VM VPE domain creation Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 31/59] irqchip/gic-v4: Add VPE command interface Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 32/59] irqchip/gic-v4: Add VLPI configuration interface Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 33/59] irqchip/gic-v4: Add some basic documentation Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 34/59] irqchip/gic-v4: Enable low-level GICv4 operations Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 35/59] irqchip/gic-v3: Advertise GICv4 support to KVM Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 36/59] KVM: arm: Select ARM_GIC_V3 and ARM_GIC_V3_ITS Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-26 19:49   ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 37/59] KVM: arm/arm64: vgic: Move kvm_vgic_destroy call around Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-26 19:49   ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 38/59] KVM: arm/arm64: vITS: Add MSI translation helpers Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-26 19:49   ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 39/59] KVM: arm/arm64: GICv4: Add property field and per-VM predicate Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-26 19:49   ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-30  9:46     ` Marc Zyngier
2017-08-30  9:46       ` Marc Zyngier
2017-08-30  9:46       ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 40/59] KVM: arm/arm64: GICv4: Add init/teardown of the per-VM vPE irq domain Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-26 19:49   ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-26 19:49     ` Christoffer Dall
2017-08-30  9:50     ` Marc Zyngier
2017-08-30  9:50       ` Marc Zyngier
2017-08-30  9:50       ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 41/59] KVM: arm/arm64: GICv4: Wire mapping/unmapping of VLPIs in VFIO irq bypass Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-26 19:48   ` Christoffer Dall
2017-08-26 19:48     ` Christoffer Dall
2017-08-26 19:48     ` Christoffer Dall
2017-08-30  9:42     ` Marc Zyngier
2017-08-30  9:42       ` Marc Zyngier
2017-08-30  9:42       ` Marc Zyngier
2017-08-30 10:20       ` Auger Eric
2017-08-30 10:20         ` Auger Eric
2017-08-30 10:20         ` Auger Eric
2017-08-30 10:42         ` Marc Zyngier
2017-08-30 10:42           ` Marc Zyngier
2017-08-30 10:42           ` Marc Zyngier
2017-08-30 12:54           ` Auger Eric
2017-08-30 12:54             ` Auger Eric
2017-08-30 12:54             ` Auger Eric
2017-08-30 10:28     ` Marc Zyngier
2017-08-30 10:28       ` Marc Zyngier
2017-08-30 10:28       ` Marc Zyngier
2017-08-30 11:46       ` Christoffer Dall
2017-08-30 11:46         ` Christoffer Dall
2017-08-30 11:46         ` Christoffer Dall
2017-08-30 12:53         ` Marc Zyngier
2017-08-30 12:53           ` Marc Zyngier
2017-08-30 12:53           ` Marc Zyngier
2017-08-30 19:59           ` Christoffer Dall
2017-08-30 19:59             ` Christoffer Dall
2017-08-30 19:59             ` Christoffer Dall
2017-08-31 10:24             ` Marc Zyngier
2017-08-31 10:24               ` Marc Zyngier
2017-08-31 10:24               ` Marc Zyngier
2017-08-31 12:36               ` Christoffer Dall
2017-08-31 12:36                 ` Christoffer Dall
2017-08-31 12:36                 ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 42/59] KVM: arm/arm64: GICv4: Handle INT command applied to a VLPI Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 43/59] KVM: arm/arm64: GICv4: Unmap VLPI when freeing an LPI Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-30 11:03     ` Marc Zyngier
2017-08-30 11:03       ` Marc Zyngier
2017-08-30 11:03       ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 44/59] KVM: arm/arm64: GICv4: Handle MOVI applied to a VLPI Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-30 14:08     ` Marc Zyngier
2017-08-30 14:08       ` Marc Zyngier
2017-08-30 14:08       ` Marc Zyngier
2017-08-30 20:04       ` Christoffer Dall
2017-08-30 20:04         ` Christoffer Dall
2017-08-30 20:04         ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 45/59] KVM: arm/arm64: GICv4: Handle CLEAR " Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 46/59] KVM: arm/arm64: GICv4: Handle MOVALL applied to a vPE Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-30 14:46     ` Marc Zyngier
2017-08-30 14:46       ` Marc Zyngier
2017-08-30 14:46       ` Marc Zyngier
2017-08-30 20:10       ` Christoffer Dall
2017-08-30 20:10         ` Christoffer Dall
2017-08-30 20:10         ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 47/59] KVM: arm/arm64: GICv4: Propagate property updates to VLPIs Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 48/59] KVM: arm/arm64: GICv4: Handle INVALL applied to a vPE Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 49/59] KVM: arm/arm64: GICv4: Propagate VLPI properties at map time Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-30 14:56     ` Marc Zyngier
2017-08-30 14:56       ` Marc Zyngier
2017-08-30 14:56       ` Marc Zyngier
2017-08-30 20:12       ` Christoffer Dall
2017-08-30 20:12         ` Christoffer Dall
2017-08-30 20:12         ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 50/59] KVM: arm/arm64: GICv4: Use pending_last as a scheduling hint Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 51/59] KVM: arm/arm64: GICv4: Add doorbell interrupt handling Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-04  7:44   ` Marc Zyngier
2017-08-04  7:44     ` Marc Zyngier
2017-08-04  7:44     ` Marc Zyngier
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18       ` Christoffer Dall
2017-08-28 18:18       ` Christoffer Dall
2017-08-30 10:31       ` Andrew Jones
2017-08-30 10:31         ` Andrew Jones
2017-08-30 10:31         ` Andrew Jones
2017-08-30 11:55         ` Christoffer Dall
2017-08-30 11:55           ` Christoffer Dall
2017-08-30 11:55           ` Christoffer Dall
2017-08-30 12:28           ` Andrew Jones
2017-08-30 12:28             ` Andrew Jones
2017-08-30 12:28             ` Andrew Jones
2017-08-31 12:18       ` Marc Zyngier
2017-08-31 12:18         ` Marc Zyngier
2017-08-31 12:18         ` Marc Zyngier
2017-08-31 12:41         ` Christoffer Dall
2017-08-31 12:41           ` Christoffer Dall
2017-08-31 12:41           ` Christoffer Dall
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-30 15:36     ` Marc Zyngier
2017-08-30 15:36       ` Marc Zyngier
2017-08-30 15:36       ` Marc Zyngier
2017-08-30 20:58       ` Christoffer Dall
2017-08-30 20:58         ` Christoffer Dall
2017-08-30 20:58         ` Christoffer Dall
2017-08-31  8:19         ` Marc Zyngier
2017-08-31  8:19           ` Marc Zyngier
2017-08-31  8:19           ` Marc Zyngier
2017-09-06  9:06   ` Shannon Zhao
2017-09-06  9:06     ` Shannon Zhao
2017-09-06  9:06     ` Shannon Zhao
2017-07-31 17:26 ` [PATCH v3 52/59] KVM: arm/arm64: GICv4: Use the doorbell interrupt as an unblocking source Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:19   ` Christoffer Dall
2017-08-28 18:19     ` Christoffer Dall
2017-08-28 18:19     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 53/59] KVM: arm/arm64: GICv4: Hook vPE scheduling into vgic flush/sync Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:17   ` Christoffer Dall
2017-08-28 18:17     ` Christoffer Dall
2017-08-28 18:17     ` Christoffer Dall
2017-08-30  9:59     ` Marc Zyngier
2017-08-30  9:59       ` Marc Zyngier
2017-08-30  9:59       ` Marc Zyngier
2017-08-30 11:56       ` Christoffer Dall
2017-08-30 11:56         ` Christoffer Dall
2017-08-30 11:56         ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 54/59] KVM: arm/arm64: GICv4: Enable virtual cpuif if VLPIs can be delivered Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:20   ` Christoffer Dall
2017-08-28 18:20     ` Christoffer Dall
2017-08-28 18:20     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 55/59] KVM: arm/arm64: GICv4: Enable VLPI support Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:25   ` Christoffer Dall
2017-08-28 18:25     ` Christoffer Dall
2017-08-28 18:25     ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 56/59] KVM: arm/arm64: GICv4: Prevent heterogenous systems from using GICv4 Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:35   ` Christoffer Dall
2017-08-28 18:35     ` Christoffer Dall
2017-08-28 18:35     ` Christoffer Dall
2017-08-30 16:03     ` Marc Zyngier
2017-08-30 16:03       ` Marc Zyngier
2017-08-30 16:03       ` Marc Zyngier
2017-08-30 21:00       ` Christoffer Dall
2017-08-30 21:00         ` Christoffer Dall
2017-08-30 21:00         ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 57/59] KVM: arm/arm64: GICv4: Theory of operations Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-08-28 18:18   ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-28 18:18     ` Christoffer Dall
2017-08-30 11:30     ` Marc Zyngier
2017-08-30 11:30       ` Marc Zyngier
2017-08-30 11:30       ` Marc Zyngier
2017-08-30 11:58       ` Christoffer Dall
2017-08-30 11:58         ` Christoffer Dall
2017-08-30 11:58         ` Christoffer Dall
2017-07-31 17:26 ` [PATCH v3 58/59] irqchip/gic-v3-its: Pass its_node pointer to each command bulder Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26 ` [PATCH v3 59/59] irqchip/gic-v3-its: Workaround Huawei D05 redistributor addressing Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier
2017-07-31 17:26   ` Marc Zyngier

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=20170731172637.29355-19-marc.zyngier@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=eric.auger@redhat.com \
    --cc=jason@lakedaemon.net \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=shankerd@codeaurora.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.