From: Julien Grall <julien.grall@arm.com>
To: Shannon Zhao <zhaoshenglong@huawei.com>, xen-devel@lists.xen.org
Cc: stefano.stabellini@citrix.com, shannon.zhao@linaro.org,
peter.huangpeng@huawei.com
Subject: Re: [PATCH v6 17/22] arm/gic: Add a new callback to deny Dom0 access to GIC regions
Date: Tue, 22 Mar 2016 19:33:20 +0000 [thread overview]
Message-ID: <56F19E00.5090501@arm.com> (raw)
In-Reply-To: <1458207668-12012-18-git-send-email-zhaoshenglong@huawei.com>
Hi Shannon,
On 17/03/16 09:41, Shannon Zhao wrote:
> From: Shannon Zhao <shannon.zhao@linaro.org>
>
> Add a new member in gic_hw_operations which is used to deny Dom0 access
> to GIC regions.
>
> Signed-off-by: Shannon Zhao <shannon.zhao@linaro.org>
> ---
> v6: use SZ_64K for GICv3 distributor
> ---
> xen/arch/arm/gic-v2.c | 31 +++++++++++++++++++++++++++++++
> xen/arch/arm/gic-v3.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
> xen/arch/arm/gic.c | 5 +++++
> xen/include/asm-arm/gic.h | 3 +++
> 4 files changed, 84 insertions(+)
>
> diff --git a/xen/arch/arm/gic-v2.c b/xen/arch/arm/gic-v2.c
> index 02db5f2..186f944 100644
> --- a/xen/arch/arm/gic-v2.c
> +++ b/xen/arch/arm/gic-v2.c
> @@ -22,6 +22,7 @@
> #include <xen/init.h>
> #include <xen/mm.h>
> #include <xen/irq.h>
> +#include <xen/iocap.h>
> #include <xen/sched.h>
> #include <xen/errno.h>
> #include <xen/softirq.h>
> @@ -714,6 +715,31 @@ static u32 gicv2_make_hwdom_madt(const struct domain *d, u32 offset)
> return table_len;
> }
>
> +static int gicv2_iomem_deny_access(const struct domain *d)
> +{
> + int rc;
> + unsigned long gfn, nr;
> +
> + gfn = dbase >> PAGE_SHIFT;
> + rc = iomem_deny_access(d, gfn, gfn + 1);
> + if ( rc )
> + return rc;
> +
> + gfn = hbase >> PAGE_SHIFT;
> + rc = iomem_deny_access(d, gfn, gfn + 1);
> + if ( rc )
> + return rc;
> +
> + gfn = cbase >> PAGE_SHIFT;
> + nr = DIV_ROUND_UP(csize, PAGE_SIZE);
> + rc = iomem_deny_access(d, gfn, gfn + nr);
> + if ( rc )
> + return rc;
> +
> + gfn = vbase >> PAGE_SHIFT;
> + return iomem_deny_access(d, gfn, gfn + nr);
> +}
> +
> static int __init
> gic_acpi_parse_madt_cpu(struct acpi_subtable_header *header,
> const unsigned long end)
> @@ -809,6 +835,10 @@ static u32 gicv2_make_hwdom_madt(const struct domain *d, u32 offset)
> {
> return 0;
> }
> +static int gicv2_iomem_deny_access(const struct domain *d)
> +{
> + return 0;
> +}
I don't see any benefits to have iomem_deny_access only implemented when
CONFIG_ACPI is built.
Because in this case, you will also deny the iomem when Xen is booting
using device tree.
> #endif
>
> static int __init gicv2_init(void)
> @@ -902,6 +932,7 @@ const static struct gic_hw_operations gicv2_ops = {
> .read_apr = gicv2_read_apr,
> .make_hwdom_dt_node = gicv2_make_hwdom_dt_node,
> .make_hwdom_madt = gicv2_make_hwdom_madt,
> + .iomem_deny_access = gicv2_iomem_deny_access,
> };
>
> /* Set up the GIC */
> diff --git a/xen/arch/arm/gic-v3.c b/xen/arch/arm/gic-v3.c
> index d9fce4b..7f9634d 100644
> --- a/xen/arch/arm/gic-v3.c
> +++ b/xen/arch/arm/gic-v3.c
> @@ -27,6 +27,7 @@
> #include <xen/cpu.h>
> #include <xen/mm.h>
> #include <xen/irq.h>
> +#include <xen/iocap.h>
> #include <xen/sched.h>
> #include <xen/errno.h>
> #include <xen/delay.h>
> @@ -1278,6 +1279,45 @@ static u32 gicv3_make_hwdom_madt(const struct domain *d, u32 offset)
> return table_len;
> }
>
> +static int gicv3_iomem_deny_access(const struct domain *d)
> +{
> + int rc, i;
> + unsigned long gfn, nr;
> +
> + gfn = dbase >> PAGE_SHIFT;
> + nr = DIV_ROUND_UP(SZ_64K, PAGE_SIZE);
> + rc = iomem_deny_access(d, gfn, gfn + nr);
> + if ( rc )
> + return rc;
> +
> + for ( i = 0; i < gicv3.rdist_count; i++ )
> + {
> + gfn = gicv3.rdist_regions[i].base >> PAGE_SHIFT;
> + nr = DIV_ROUND_UP(gicv3.rdist_regions[i].size, PAGE_SIZE);
> + rc = iomem_deny_access(d, gfn, gfn + nr);
> + if ( rc )
> + return rc;
> + }
> +
> + if ( cbase != INVALID_PADDR )
> + {
> + gfn = cbase >> PAGE_SHIFT;
> + nr = DIV_ROUND_UP(csize, PAGE_SIZE);
> + rc = iomem_deny_access(d, gfn, gfn + nr);
> + if ( rc )
> + return rc;
> + }
> +
> + if ( vbase != INVALID_PADDR )
> + {
> + gfn = vbase >> PAGE_SHIFT;
> + nr = DIV_ROUND_UP(csize, PAGE_SIZE);
> + return iomem_deny_access(d, gfn, gfn + nr);
> + }
> +
> + return 0;
> +}
> +
> static int __init
> gic_acpi_parse_madt_cpu(struct acpi_subtable_header *header,
> const unsigned long end)
> @@ -1426,6 +1466,10 @@ static u32 gicv3_make_hwdom_madt(const struct domain *d, u32 offset)
> {
> return 0;
> }
> +static int gicv3_iomem_deny_access(const struct domain *d)
> +{
> + return 0;
> +}
Ditto
> #endif
>
> /* Set up the GIC */
> @@ -1521,6 +1565,7 @@ static const struct gic_hw_operations gicv3_ops = {
> .secondary_init = gicv3_secondary_cpu_init,
> .make_hwdom_dt_node = gicv3_make_hwdom_dt_node,
> .make_hwdom_madt = gicv3_make_hwdom_madt,
> + .iomem_deny_access = gicv3_iomem_deny_access,
> };
>
> static int __init gicv3_dt_preinit(struct dt_device_node *node, const void *data)
> diff --git a/xen/arch/arm/gic.c b/xen/arch/arm/gic.c
> index 6d32432..65022ee 100644
> --- a/xen/arch/arm/gic.c
> +++ b/xen/arch/arm/gic.c
> @@ -744,6 +744,11 @@ u32 gic_make_hwdom_madt(const struct domain *d, u32 offset)
> return gic_hw_ops->make_hwdom_madt(d, offset);
> }
>
> +int gic_iomem_deny_access(const struct domain *d)
> +{
> + return gic_hw_ops->iomem_deny_access(d);
> +}
> +
> /*
> * Local variables:
> * mode: C
> diff --git a/xen/include/asm-arm/gic.h b/xen/include/asm-arm/gic.h
> index 4cf003d..932fc02 100644
> --- a/xen/include/asm-arm/gic.h
> +++ b/xen/include/asm-arm/gic.h
> @@ -360,6 +360,8 @@ struct gic_hw_operations {
> const struct dt_device_node *gic, void *fdt);
> /* Create MADT table for the hardware domain */
> u32 (*make_hwdom_madt)(const struct domain *d, u32 offset);
> + /* Deny access to GIC regions */
> + int (*iomem_deny_access)(const struct domain *d);
> };
>
> void register_gic_ops(const struct gic_hw_operations *ops);
> @@ -367,6 +369,7 @@ int gic_make_hwdom_dt_node(const struct domain *d,
> const struct dt_device_node *gic,
> void *fdt);
> u32 gic_make_hwdom_madt(const struct domain *d, u32 offset);
> +int gic_iomem_deny_access(const struct domain *d);
>
> #endif /* __ASSEMBLY__ */
> #endif
>
Regards,
--
Julien Grall
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
next prev parent reply other threads:[~2016-03-22 19:33 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-17 9:40 [PATCH v6 00/22] Prepare UEFI and ACPI tables for Dom0 on ARM64 Shannon Zhao
2016-03-17 9:40 ` [PATCH v6 01/22] arm/acpi: Estimate memory required for acpi/efi tables Shannon Zhao
2016-03-18 18:44 ` Julien Grall
2016-03-21 13:01 ` Jan Beulich
2016-03-22 13:01 ` Shannon Zhao
2016-03-22 0:28 ` Julien Grall
2016-03-24 12:36 ` Stefano Stabellini
2016-03-17 9:40 ` [PATCH v6 02/22] arm/acpi: Add a helper function to get the acpi table offset Shannon Zhao
2016-03-21 12:16 ` Julien Grall
2016-03-24 12:32 ` Stefano Stabellini
2016-03-17 9:40 ` [PATCH v6 03/22] arm/acpi: Prepare FADT table for Dom0 Shannon Zhao
2016-03-21 12:25 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 04/22] arm/gic: Add a new callback for creating MADT " Shannon Zhao
2016-03-21 15:18 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 05/22] arm/acpi: Prepare " Shannon Zhao
2016-03-21 15:26 ` Julien Grall
2016-03-21 15:51 ` Jan Beulich
2016-03-17 9:40 ` [PATCH v6 06/22] arm/acpi: Prepare STAO " Shannon Zhao
2016-03-21 15:31 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 07/22] arm/acpi: Prepare XSDT " Shannon Zhao
2016-03-21 15:43 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 08/22] arm/acpi: Prepare RSDP " Shannon Zhao
2016-03-21 15:47 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 09/22] arm/p2m: Add helper functions to map memory regions Shannon Zhao
2016-03-21 15:52 ` Julien Grall
2016-03-22 13:05 ` Shannon Zhao
2016-03-22 15:59 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 10/22] arm/acpi: Map all other tables for Dom0 Shannon Zhao
2016-03-21 15:57 ` Julien Grall
2016-03-17 9:40 ` [PATCH v6 11/22] arm/acpi: Prepare EFI system table " Shannon Zhao
2016-03-21 16:10 ` Julien Grall
2016-03-22 13:06 ` Shannon Zhao
2016-03-22 13:24 ` Jan Beulich
2016-03-17 9:40 ` [PATCH v6 12/22] arm/acpi: Prepare EFI memory descriptor " Shannon Zhao
2016-03-21 16:51 ` Julien Grall
2016-03-22 13:16 ` Shannon Zhao
2016-03-22 16:04 ` Julien Grall
2016-03-24 15:06 ` Shannon Zhao
2016-03-24 15:23 ` Julien Grall
2016-03-24 12:39 ` Stefano Stabellini
2016-03-17 9:40 ` [PATCH v6 13/22] arm/acpi: Map the new created EFI and ACPI tables to Dom0 Shannon Zhao
2016-03-22 0:42 ` Julien Grall
2016-03-22 13:18 ` Shannon Zhao
2016-03-22 16:16 ` Julien Grall
2016-03-24 14:59 ` Shannon Zhao
2016-03-24 15:35 ` Julien Grall
2016-03-17 9:41 ` [PATCH v6 14/22] arm/acpi: Create min DT stub for Dom0 Shannon Zhao
2016-03-22 1:07 ` Julien Grall
2016-03-22 13:23 ` Shannon Zhao
2016-03-17 9:41 ` [PATCH v6 15/22] arm/acpi: Permit access all Xen unused SPIs " Shannon Zhao
2016-03-22 18:18 ` Julien Grall
2016-03-24 15:01 ` Shannon Zhao
2016-03-24 15:37 ` Julien Grall
2016-03-25 7:13 ` Shannon Zhao
2016-03-17 9:41 ` [PATCH v6 16/22] arm/acpi: Configure SPI interrupt type and route to Dom0 dynamically Shannon Zhao
2016-03-22 19:17 ` Julien Grall
2016-03-24 12:41 ` Stefano Stabellini
2016-03-17 9:41 ` [PATCH v6 17/22] arm/gic: Add a new callback to deny Dom0 access to GIC regions Shannon Zhao
2016-03-22 19:33 ` Julien Grall [this message]
2016-03-24 12:45 ` Stefano Stabellini
2016-03-24 15:03 ` Shannon Zhao
2016-03-24 15:39 ` Julien Grall
2016-03-17 9:41 ` [PATCH v6 18/22] arm/acpi: Permit MMIO access of Xen unused devices for Dom0 Shannon Zhao
2016-03-23 11:50 ` Julien Grall
2016-03-17 9:41 ` [PATCH v6 19/22] hvm/params: Add a new delivery type for event-channel in HVM_PARAM_CALLBACK_IRQ Shannon Zhao
2016-03-17 10:42 ` Jan Beulich
2016-03-17 11:04 ` Shannon Zhao
2016-03-17 11:29 ` Jan Beulich
2016-03-17 11:56 ` Shannon Zhao
2016-03-17 12:42 ` Jan Beulich
2016-03-17 9:41 ` [PATCH v6 20/22] xen/acpi: Fix event-channel interrupt when booting with ACPI Shannon Zhao
2016-03-23 12:15 ` Julien Grall
2016-03-17 9:41 ` [PATCH v6 21/22] xen/arm: Add a hypercall for device mmio mapping Shannon Zhao
2016-03-17 9:41 ` [PATCH v6 22/22] xen/arm64: Add ACPI support Shannon Zhao
2016-03-17 10:52 ` Jan Beulich
2016-03-17 11:03 ` Shannon Zhao
2016-03-17 11:31 ` Jan Beulich
2016-03-17 13:10 ` Shannon Zhao
2016-03-17 13:24 ` Jan Beulich
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=56F19E00.5090501@arm.com \
--to=julien.grall@arm.com \
--cc=peter.huangpeng@huawei.com \
--cc=shannon.zhao@linaro.org \
--cc=stefano.stabellini@citrix.com \
--cc=xen-devel@lists.xen.org \
--cc=zhaoshenglong@huawei.com \
/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.