From: Julien Grall <julien.grall@arm.com>
To: Andre Przywara <andre.przywara@linaro.org>,
Stefano Stabellini <sstabellini@kernel.org>,
xen-devel@lists.xenproject.org
Subject: Re: [RFC PATCH 27/49] ARM: new VGIC: Add MMIO handling framework
Date: Tue, 13 Feb 2018 16:52:35 +0000 [thread overview]
Message-ID: <e9c61e1a-a874-e44d-fa1e-8b624ef9fb4d@arm.com> (raw)
In-Reply-To: <20180209143937.28866-28-andre.przywara@linaro.org>
Hi Andre,7
On 09/02/18 14:39, Andre Przywara wrote:
> Add an MMIO handling framework to the VGIC emulation:
> Each register is described by its offset, size (or number of bits per
> IRQ, if applicable) and the read/write handler functions. We provide
> initialization macros to describe each GIC register later easily.
>
> Separate dispatch functions for read and write accesses are connected
> to Xen's MMIO handling framework and binary-search for the responsible
> register handler based on the offset address within the region.
>
> The register handler prototype are courtesy of Christoffer Dall.
>
> This is based on Linux commit 4493b1c4866a, written by Marc Zyngier.
>
> Signed-off-by: Andre Przywara <andre.przywara@linaro.org>
> ---
> xen/arch/arm/vgic/vgic-mmio.c | 192 ++++++++++++++++++++++++++++++++++++++++++
> xen/arch/arm/vgic/vgic-mmio.h | 145 +++++++++++++++++++++++++++++++
> xen/arch/arm/vgic/vgic.h | 4 +
> 3 files changed, 341 insertions(+)
> create mode 100644 xen/arch/arm/vgic/vgic-mmio.c
> create mode 100644 xen/arch/arm/vgic/vgic-mmio.h
>
> diff --git a/xen/arch/arm/vgic/vgic-mmio.c b/xen/arch/arm/vgic/vgic-mmio.c
> new file mode 100644
> index 0000000000..3c70945466
> --- /dev/null
> +++ b/xen/arch/arm/vgic/vgic-mmio.c
> @@ -0,0 +1,192 @@
> +/*
> + * VGIC MMIO handling functions
> + * Imported from Linux ("new" KVM VGIC) and heavily adapted to Xen.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <xen/bitops.h>
> +#include <xen/lib.h>
> +#include <xen/sched.h>
> +#include <asm/arm_vgic.h>
> +#include <asm/byteorder.h>
> +
> +#include "vgic.h"
> +#include "vgic-mmio.h"
> +
> +unsigned long vgic_mmio_read_raz(struct vcpu *vcpu,
> + paddr_t addr, unsigned int len)
Indentation.
> +{
> + return 0;
> +}
> +
> +unsigned long vgic_mmio_read_rao(struct vcpu *vcpu,
> + paddr_t addr, unsigned int len)
Indentation.
> +{
> + return -1UL;
> +}
> +
> +void vgic_mmio_write_wi(struct vcpu *vcpu, paddr_t addr,
> + unsigned int len, unsigned long val)
Indentation.
> +{
> + /* Ignore */
> +}
> +
> +static int match_region(const void *key, const void *elt)
> +{
> + const unsigned int offset = (unsigned long)key;
> + const struct vgic_register_region *region = elt;
> +
> + if ( offset < region->reg_offset )
> + return -1;
> +
> + if ( offset >= region->reg_offset + region->len )
> + return 1;
> +
> + return 0;
> +}
> +
> +const struct vgic_register_region *
> +vgic_find_mmio_region(const struct vgic_register_region *regions,
Any reason to export this?
> + int nr_regions, unsigned int offset)
Indentation.
> +{
> + return bsearch((void *)(uintptr_t)offset, regions, nr_regions,
> + sizeof(regions[0]), match_region);
> +}
> +
> +static bool check_region(const struct domain *d,
> + const struct vgic_register_region *region,
> + paddr_t addr, int len)
Indentation.
> +{
> + int flags, nr_irqs = d->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS;
> + > + switch (len)
switch ( ... )
> + {
> + case sizeof(u8):
s/u8/uint8_t/ here an below.
> + flags = VGIC_ACCESS_8bit;
> + break;
> + case sizeof(u32):
> + flags = VGIC_ACCESS_32bit;
> + break;
> + case sizeof(u64):
> + flags = VGIC_ACCESS_64bit;
> + break;
> + default:
> + return false;
> + }
> +
> + if ( (region->access_flags & flags) && IS_ALIGNED(addr, len) )
> + {
> + if ( !region->bits_per_irq )
> + return true;
> +
> + /* Do we access a non-allocated IRQ? */
> + return VGIC_ADDR_TO_INTID(addr, region->bits_per_irq) < nr_irqs;
> + }
> +
> + return false;
> +}
> +
> +const struct vgic_register_region *
> +vgic_get_mmio_region(struct vcpu *vcpu, struct vgic_io_device *iodev,
Any reason to export this?
> + paddr_t addr, int len)
Indentation and unsigned int please.
> +{
> + const struct vgic_register_region *region;
> +
> + region = vgic_find_mmio_region(iodev->regions, iodev->nr_regions,
> + addr - iodev->base_addr);
> + if ( !region || !check_region(vcpu->domain, region, addr, len) )
> + return NULL;
> +
> + return region;
> +}
> +
> +static int dispatch_mmio_read(struct vcpu *vcpu, mmio_info_t *info,
> + register_t *r, void *priv)
Indentation.
> +{
> + struct vgic_io_device *iodev = priv;
> + const struct vgic_register_region *region;
> + unsigned long data = 0;
> + paddr_t addr = info->gpa;
> + int len = 1U << info->dabt.size;
> +
> + region = vgic_get_mmio_region(vcpu, iodev, addr, len);
> + if ( !region )
> + {
> + memset(r, 0, len);
> + return 0;
> + }
> +
> + switch (iodev->iodev_type)
> + {
> + case IODEV_CPUIF:
> + data = region->read(vcpu, addr, len);
> + break;
> + case IODEV_DIST:
> + data = region->read(vcpu, addr, len);
> + break;
> + case IODEV_REDIST:
> + data = region->read(iodev->redist_vcpu, addr, len);
> + break;
> + case IODEV_ITS:
> + data = region->its_read(vcpu->domain, iodev->its, addr, len);
> + break;
> + }
> +
> + memcpy(r, &data, len);
> +
> + return 1;
> +}
> +
> +static int dispatch_mmio_write(struct vcpu *vcpu, mmio_info_t *info,
> + register_t r, void *priv)
> +{
> + struct vgic_io_device *iodev = priv;
> + const struct vgic_register_region *region;
> + unsigned long data = r;
> + paddr_t addr = info->gpa;
> + int len = 1U << info->dabt.size;
> +
> + region = vgic_get_mmio_region(vcpu, iodev, addr, len);
> + if ( !region )
> + return 0;
> +
> + switch (iodev->iodev_type)
> + {
> + case IODEV_CPUIF:
> + region->write(vcpu, addr, len, data);
> + break;
> + case IODEV_DIST:
> + region->write(vcpu, addr, len, data);
> + break;
> + case IODEV_REDIST:
> + region->write(iodev->redist_vcpu, addr, len, data);
> + break;
> + case IODEV_ITS:
> + region->its_write(vcpu->domain, iodev->its, addr, len, data);
> + break;
> + }
> +
> + return 1;
> +}
> +
> +struct mmio_handler_ops xen_io_gic_ops = {
I would rename to vgic_io_ops.
> + .read = dispatch_mmio_read,
> + .write = dispatch_mmio_write,
> +};
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/arch/arm/vgic/vgic-mmio.h b/xen/arch/arm/vgic/vgic-mmio.h
> new file mode 100644
> index 0000000000..375b70561d
> --- /dev/null
> +++ b/xen/arch/arm/vgic/vgic-mmio.h
> @@ -0,0 +1,145 @@
> +/*
> + * Copyright (C) 2015, 2016 ARM Ltd.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program. If not, see <http://www.gnu.org/licenses/>.
> + */
> +#ifndef __KVM_ARM_VGIC_MMIO_H__
> +#define __KVM_ARM_VGIC_MMIO_H__
Please use update the guard.
> +
> +struct vgic_register_region {
> + unsigned int reg_offset;
> + unsigned int len;
> + unsigned int bits_per_irq;
> + unsigned int access_flags;
> + union
> + {
> + unsigned long (*read)(struct vcpu *vcpu, paddr_t addr,
> + unsigned int len);
> + unsigned long (*its_read)(struct domain *d, struct vgic_its *its,
> + paddr_t addr, unsigned int len);
> + };
> + union
> + {
> + void (*write)(struct vcpu *vcpu, paddr_t addr,
> + unsigned int len, unsigned long val);
> + void (*its_write)(struct domain *d, struct vgic_its *its,
> + paddr_t addr, unsigned int len,
> + unsigned long val);
> + };
> + unsigned long (*uaccess_read)(struct vcpu *vcpu, paddr_t addr,
> + unsigned int len);
> + union
> + {
> + void (*uaccess_write)(struct vcpu *vcpu, paddr_t addr,
> + unsigned int len, unsigned long val);
> + int (*uaccess_its_write)(struct domain *d, struct vgic_its *its,
> + paddr_t addr, unsigned int len,
> + unsigned long val);
> + };
I don't think uaccess helpers makes sense for Xen.
> +};
> +
> +extern struct mmio_handler_ops xen_io_gic_ops;
> +
> +#define VGIC_ACCESS_8bit 1
> +#define VGIC_ACCESS_32bit 2
> +#define VGIC_ACCESS_64bit 4
> +
> +/*
> + * Generate a mask that covers the number of bytes required to address
> + * up to 1024 interrupts, each represented by <bits> bits. This assumes
> + * that <bits> is a power of two.
> + */
> +#define VGIC_ADDR_IRQ_MASK(bits) (((bits) * 1024 / 8) - 1)
> +
> +/*
> + * (addr & mask) gives us the _byte_ offset for the INT ID.
> + * We multiply this by 8 the get the _bit_ offset, then divide this by
> + * the number of bits to learn the actual INT ID.
> + * But instead of a division (which requires a "long long div" implementation),
> + * we shift by the binary logarithm of <bits>.
> + * This assumes that <bits> is a power of two.
> + */
> +#define VGIC_ADDR_TO_INTID(addr, bits) (((addr) & VGIC_ADDR_IRQ_MASK(bits)) * \
> + 8 >> LOG_2(bits))
We are going to switch to ilog2 (see Sameer's patch "xen/bitops: Rename
LOG_2 to ilog2").
> +
> +/*
> + * Some VGIC registers store per-IRQ information, with a different number
> + * of bits per IRQ. For those registers this macro is used.
> + * The _WITH_LENGTH version instantiates registers with a fixed length
> + * and is mutually exclusive with the _PER_IRQ version.
> + */
> +#define REGISTER_DESC_WITH_BITS_PER_IRQ(off, rd, wr, ur, uw, bpi, acc) \
> + { \
> + .reg_offset = off, \
> + .bits_per_irq = bpi, \
> + .len = bpi * 1024 / 8, \
> + .access_flags = acc, \
> + .read = rd, \
> + .write = wr, \
> + .uaccess_read = ur, \
> + .uaccess_write = uw, \
> + }
> +
> +#define REGISTER_DESC_WITH_LENGTH(off, rd, wr, length, acc) \
> + { \
> + .reg_offset = off, \
> + .bits_per_irq = 0, \
> + .len = length, \
> + .access_flags = acc, \
> + .read = rd, \
> + .write = wr, \
> + }
> +
> +#define REGISTER_DESC_WITH_LENGTH_UACCESS(off, rd, wr, urd, uwr, length, acc) \
> + { \
> + .reg_offset = off, \
> + .bits_per_irq = 0, \
> + .len = length, \
> + .access_flags = acc, \
> + .read = rd, \
> + .write = wr, \
> + .uaccess_read = urd, \
> + .uaccess_write = uwr, \
> + }
> +
> +int kvm_vgic_register_mmio_region(struct domain *d, struct vcpu *vcpu,
> + struct vgic_register_region *reg_desc,
> + struct vgic_io_device *region,
> + int nr_irqs, bool offset_private);
You want to do some clean-up in the prototype below. Only the one used
in the patch should be added. The other should either move in there
corresponding patch or dropped if not used.
> +
> +unsigned long vgic_data_mmio_bus_to_host(const void *val, unsigned int len);
> +
> +void vgic_data_host_to_mmio_bus(void *buf, unsigned int len,
> + unsigned long data);
> +
> +unsigned long extract_bytes(u64 data, unsigned int offset,
> + unsigned int num);
> +
> +u64 update_64bit_reg(u64 reg, unsigned int offset, unsigned int len,
> + unsigned long val);
> +
> +unsigned long vgic_mmio_read_raz(struct vcpu *vcpu,
> + paddr_t addr, unsigned int len);
> +
> +unsigned long vgic_mmio_read_rao(struct vcpu *vcpu,
> + paddr_t addr, unsigned int len);
> +
> +void vgic_mmio_write_wi(struct vcpu *vcpu, paddr_t addr,
> + unsigned int len, unsigned long val);
> +
> +/* Find the proper register handler entry given a certain address offset */
> +const struct vgic_register_region *
> +vgic_find_mmio_region(const struct vgic_register_region *regions,
> + int nr_regions, unsigned int offset);
> +
> +#endif
> diff --git a/xen/arch/arm/vgic/vgic.h b/xen/arch/arm/vgic/vgic.h
> index 771ca6f046..426b34d0ce 100644
> --- a/xen/arch/arm/vgic/vgic.h
> +++ b/xen/arch/arm/vgic/vgic.h
> @@ -27,6 +27,10 @@ static inline bool irq_is_pending(struct vgic_irq *irq)
> return irq->pending_latch || irq->line_level;
> }
>
> +const struct vgic_register_region *
> +vgic_get_mmio_region(struct vcpu *vcpu, struct vgic_io_device *iodev,
> + paddr_t addr, int len);
> +
Why this one is added in vgic.h and not kept in vgic-mmio.h?
> struct vgic_irq *vgic_get_irq(struct domain *d, struct vcpu *vcpu,
> u32 intid);
> void vgic_put_irq(struct domain *d, struct vgic_irq *irq);
>
Cheers,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply other threads:[~2018-02-13 16:52 UTC|newest]
Thread overview: 154+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-09 14:38 [RFC PATCH 00/49] New VGIC(-v2) implementation Andre Przywara
2018-02-09 14:38 ` [RFC PATCH 01/49] tools: ARM: vGICv3: avoid inserting optional DT properties Andre Przywara
2018-02-09 19:14 ` Julien Grall
2018-02-09 14:38 ` [RFC PATCH 02/49] ARM: vGICv3: drop GUEST_GICV3_RDIST_REGIONS symbol Andre Przywara
2018-02-09 14:38 ` [RFC PATCH 03/49] ARM: GICv3: use hardware GICv3 redistributor regions for Dom0 Andre Przywara
2018-02-09 14:38 ` [RFC PATCH 04/49] ARM: GICv3: simplify GICv3 redistributor stride handling Andre Przywara
2018-02-09 14:38 ` [RFC PATCH 05/49] ARM: vGICv3: always use architected redist stride Andre Przywara
2018-02-09 14:38 ` [RFC PATCH 06/49] ARM: vGICv3: remove rdist_stride from VGIC structure Andre Przywara
2018-02-09 14:38 ` [RFC PATCH 07/49] ARM: VGIC: move gic_remove_from_lr_pending() prototype Andre Przywara
2018-02-09 19:15 ` Julien Grall
2018-02-09 14:38 ` [RFC PATCH 08/49] ARM: VGIC: move max_vcpus VGIC limit to struct arch_domain Andre Przywara
2018-02-09 19:27 ` Julien Grall
2018-02-28 12:32 ` Andre Przywara
2018-02-28 13:04 ` Julien Grall
2018-02-09 14:38 ` [RFC PATCH 09/49] ARM: VGIC: change to level-IRQ compatible IRQ injection interface Andre Przywara
2018-02-12 11:15 ` Julien Grall
2018-02-12 11:59 ` Andre Przywara
2018-02-12 12:19 ` Julien Grall
2018-02-12 14:24 ` Andre Przywara
2018-02-13 11:49 ` Julien Grall
2018-02-09 14:38 ` [RFC PATCH 10/49] ARM: VGIC: carve out struct vgic_cpu and struct vgic_dist Andre Przywara
2018-02-12 11:19 ` Julien Grall
2018-02-09 14:38 ` [RFC PATCH 11/49] ARM: VGIC: reorder prototypes in vgic.h Andre Przywara
2018-02-12 11:53 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 12/49] ARM: VGIC: introduce gic_get_nr_lrs() Andre Przywara
2018-02-12 11:57 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 13/49] ARM: VGIC: Add hypervisor base address to vgic_v2_setup_hw() Andre Przywara
2018-02-12 12:07 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 14/49] ARM: VGIC: extend GIC CPU interface definitions Andre Przywara
2018-02-12 12:34 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 15/49] ARM: GIC: Allow tweaking the active state of an IRQ Andre Przywara
2018-02-12 13:55 ` Julien Grall
2018-02-12 17:53 ` Andre Przywara
2018-02-13 12:02 ` Julien Grall
2018-02-13 15:01 ` Andre Przywara
2018-02-16 15:07 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 16/49] ARM: GIC: allow reading pending state of a hardware IRQ Andre Przywara
2018-02-12 14:00 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 17/49] ARM: timer: Handle level triggered IRQs correctly Andre Przywara
2018-02-12 15:19 ` Julien Grall
2018-02-12 18:23 ` Andre Przywara
2018-02-13 12:05 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 18/49] ARM: evtchn: " Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 19/49] ARM: vPL011: Use the VGIC's level triggered IRQs handling if available Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 20/49] ARM: new VGIC: Add data structure definitions Andre Przywara
2018-02-12 16:42 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 21/49] ARM: new VGIC: Add acccessor to new struct vgic_irq instance Andre Przywara
2018-02-12 17:42 ` Julien Grall
2018-02-13 11:18 ` Andre Przywara
2018-02-16 15:16 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 22/49] ARM: new VGIC: Implement virtual IRQ injection Andre Przywara
2018-02-12 18:59 ` Julien Grall
2018-02-27 10:17 ` Andre Przywara
2018-02-27 10:43 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 23/49] ARM: new VGIC: Add IRQ sorting Andre Przywara
2018-02-13 12:30 ` Julien Grall
2018-02-13 14:56 ` Andre Przywara
2018-02-13 15:00 ` Julien Grall
2018-02-13 16:21 ` Christoffer Dall
2018-02-09 14:39 ` [RFC PATCH 24/49] ARM: new VGIC: Add IRQ sync/flush framework Andre Przywara
2018-02-13 12:41 ` Julien Grall
2018-02-13 15:40 ` Andre Przywara
2018-02-16 15:22 ` Julien Grall
2018-02-13 14:31 ` Julien Grall
2018-02-13 14:56 ` Andre Przywara
2018-02-13 15:01 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 25/49] ARM: new VGIC: Add GICv2 world switch backend Andre Przywara
2018-02-13 14:31 ` Julien Grall
2018-02-26 15:13 ` Andre Przywara
2018-02-26 16:02 ` Julien Grall
2018-02-26 16:19 ` Andre Przywara
2018-02-26 15:16 ` Andre Przywara
2018-02-26 15:59 ` Julien Grall
2018-02-26 16:23 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 26/49] ARM: new VGIC: Implement vgic_vcpu_pending_irq Andre Przywara
2018-02-13 16:35 ` Julien Grall
2018-02-13 16:36 ` Julien Grall
2018-02-26 15:29 ` Andre Przywara
2018-02-26 15:55 ` Julien Grall
2018-02-26 16:25 ` Andre Przywara
2018-02-26 16:30 ` Julien Grall
2018-03-02 13:53 ` Andre Przywara
2018-03-02 13:58 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 27/49] ARM: new VGIC: Add MMIO handling framework Andre Przywara
2018-02-13 16:52 ` Julien Grall [this message]
2018-02-13 18:17 ` Andre Przywara
2018-02-16 15:25 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 28/49] ARM: new VGIC: Add GICv2 " Andre Przywara
2018-02-16 15:39 ` Julien Grall
2018-02-19 12:23 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 29/49] ARM: new VGIC: Add CTLR, TYPER and IIDR handlers Andre Przywara
2018-02-16 15:56 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 30/49] ARM: new VGIC: Add ENABLE registers handlers Andre Przywara
2018-02-16 16:57 ` Julien Grall
2018-02-19 12:41 ` Andre Przywara
2018-02-19 14:13 ` Julien Grall
2018-02-27 13:54 ` Andre Przywara
2018-02-27 14:34 ` Julien Grall
2018-02-23 15:18 ` Andre Przywara
2018-02-26 11:20 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 31/49] ARM: new VGIC: Add PENDING " Andre Przywara
2018-02-16 17:16 ` Julien Grall
2018-02-19 15:32 ` Andre Przywara
2018-02-19 15:43 ` Julien Grall
2018-03-02 16:36 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 32/49] ARM: new VGIC: Add ACTIVE " Andre Przywara
2018-02-16 17:30 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 33/49] ARM: new VGIC: Add PRIORITY " Andre Przywara
2018-02-16 17:38 ` Julien Grall
2018-02-23 14:47 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 34/49] ARM: new VGIC: Add CONFIG " Andre Przywara
2018-02-19 11:39 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 35/49] ARM: new VGIC: Add TARGET " Andre Przywara
2018-02-19 11:53 ` Julien Grall
2018-02-23 11:25 ` Andre Przywara
2018-02-19 12:30 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 36/49] ARM: new VGIC: Add SGIR register handler Andre Przywara
2018-02-19 11:59 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 37/49] ARM: new VGIC: Add SGIPENDR register handlers Andre Przywara
2018-02-19 12:02 ` Julien Grall
2018-02-23 11:39 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 38/49] ARM: new VGIC: handle hardware mapped IRQs Andre Przywara
2018-02-19 12:19 ` Julien Grall
2018-02-23 18:02 ` Andre Przywara
2018-02-23 18:14 ` Julien Grall
2018-02-26 16:48 ` Andre Przywara
2018-02-26 16:57 ` Julien Grall
2018-02-26 17:19 ` Andre Przywara
2018-02-26 17:26 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 39/49] ARM: new VGIC: Add event channel IRQ handling Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 40/49] ARM: new VGIC: Handle virtual IRQ allocation/reservation Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 41/49] ARM: new VGIC: dump virtual IRQ info Andre Przywara
2018-02-19 12:26 ` Julien Grall
2018-02-26 16:58 ` Andre Przywara
2018-02-26 17:01 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 42/49] ARM: new VGIC: provide system register emulation stub Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 43/49] ARM: new VGIC: Add preliminary stub implementations Andre Przywara
2018-02-19 12:34 ` Julien Grall
2018-02-27 17:05 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 44/49] ARM: new VGIC: vgic-init: register VGIC Andre Przywara
2018-02-19 12:39 ` Julien Grall
2018-02-26 17:33 ` Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 45/49] ARM: new VGIC: vgic-init: implement vgic_init Andre Przywara
2018-02-19 13:21 ` Julien Grall
2018-02-19 15:53 ` Andre Przywara
2018-02-19 15:58 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 46/49] ARM: new VGIC: vgic-init: implement map_resources Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 47/49] ARM: new VGIC: Add vgic_v2_enable Andre Przywara
2018-02-09 14:39 ` [RFC PATCH 48/49] ARM: allocate two pages for struct vcpu Andre Przywara
2018-02-19 14:07 ` Julien Grall
2018-02-09 14:39 ` [RFC PATCH 49/49] ARM: VGIC: wire new VGIC(-v2) files into Xen build system Andre Przywara
2018-02-09 15:06 ` [RFC PATCH 00/49] New VGIC(-v2) implementation Andre Przywara
2018-02-12 11:48 ` Julien Grall
2018-02-12 11:53 ` Andre Przywara
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=e9c61e1a-a874-e44d-fa1e-8b624ef9fb4d@arm.com \
--to=julien.grall@arm.com \
--cc=andre.przywara@linaro.org \
--cc=sstabellini@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/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).