All of lore.kernel.org
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@citrix.com>
To: vijay.kilari@gmail.com, Ian.Campbell@citrix.com,
	stefano.stabellini@eu.citrix.com, stefano.stabellini@citrix.com,
	tim@xen.org, xen-devel@lists.xen.org
Cc: Prasun.Kapoor@caviumnetworks.com,
	Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com>,
	manish.jaggi@caviumnetworks.com
Subject: Re: [PATCH v6 19/31] xen/arm: ITS: Export ITS info to Virtual ITS
Date: Thu, 3 Sep 2015 17:48:19 +0100	[thread overview]
Message-ID: <55E879D3.7040902@citrix.com> (raw)
In-Reply-To: <1441019208-2764-20-git-send-email-vijay.kilari@gmail.com>

On 31/08/15 12:06, vijay.kilari@gmail.com wrote:
> From: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com>
> 
> Export physical ITS information to virtual ITS driver
> 
> Signed-off-by: Vijaya Kumar K <Vijaya.Kumar@caviumnetworks.com>
> ---
> v6: - Passed only one physical ITS info
>     - Passed all the values as parameters
>     - Initialize vITS only if physical ITS is available
> ---
>  xen/arch/arm/gic-v3-its.c     |   11 +++++++++++
>  xen/arch/arm/vgic-v3-its.c    |   28 ++++++++++++++++++++++++++++
>  xen/include/asm-arm/gic-its.h |    7 +++++++
>  3 files changed, 46 insertions(+)
> 
> diff --git a/xen/arch/arm/gic-v3-its.c b/xen/arch/arm/gic-v3-its.c
> index 0865a93..77abbc6 100644
> --- a/xen/arch/arm/gic-v3-its.c
> +++ b/xen/arch/arm/gic-v3-its.c

[...]

> @@ -1402,6 +1405,7 @@ int its_cpu_init(void)
>  
>  int __init its_init(struct rdist_prop *rdists)
>  {
> +    struct its_node *its;
>      struct dt_device_node *np = NULL;
>  
>      static const struct dt_device_match its_device_ids[] __initconst =
> @@ -1424,6 +1428,13 @@ int __init its_init(struct rdist_prop *rdists)
>      its_alloc_lpi_tables();
>      its_lpi_init(rdists->id_bits);
>  
> +    its = list_first_entry(&its_nodes, struct its_node, entry);
> +    if ( !its )
> +        return -ENOMEM;

This check is not necessary, you already check is the its_nodes list is
not empty.

> +
> +    vits_setup_hw(its_data.dev_bits, its_data.eventid_bits,
> +                  its->phys_base, its->phys_size);

It would have been nice to have a comment explaining that we always
expose a single ITS to DOM0.

> +
>      return 0;
>  }
>  
> diff --git a/xen/arch/arm/vgic-v3-its.c b/xen/arch/arm/vgic-v3-its.c
> index cef6139..53f2a27 100644
> --- a/xen/arch/arm/vgic-v3-its.c
> +++ b/xen/arch/arm/vgic-v3-its.c
> @@ -68,6 +68,26 @@ static inline uint16_t vits_get_max_collections(struct domain *d)
>      return (d->max_vcpus + 1);
>  }
>  
> +static struct {
> +    bool_t enabled;
> +    uint32_t dev_bits;
> +    uint32_t eventid_bits;


Please have consistent name. I.e

eventID_bits
devID_bits

Also, those fields can be stored each on uint8_t (both are only 4 bits).

> +    /* GITS physical base */
> +    paddr_t phys_base;
> +    /* GITS physical size */
> +    unsigned long phys_size;
> +} vits_hw;
> +
> +void vits_setup_hw(uint32_t dev_bits, uint32_t eventid_bits,
> +                   paddr_t phys_base, unsigned long phys_size)
> +{
> +    vits_hw.enabled = 1;
> +    vits_hw.dev_bits = dev_bits;
> +    vits_hw.eventid_bits = eventid_bits;
> +    vits_hw.phys_base = phys_base;
> +    vits_hw.phys_size = phys_size;
> +}
> +
>  int vits_access_guest_table(struct domain *d, paddr_t entry, void *addr,
>                              uint32_t size, bool_t set)
>  {
> @@ -547,6 +567,14 @@ int vits_domain_init(struct domain *d)
>  
>      ASSERT(is_hardware_domain(d));
>  
> +    if ( !vits_hw.enabled )

An ASSERT would have been enough given that this should never be called
when LPIs is not supported and ITS not enabled (see caller).

> +    {
> +        printk(XENLOG_G_ERR
> +               "%"PRIu16": VITS is not supported on this platform.\n",

s/PRIu16/u/ to be consistent with the rest of Xen.

> +               d->domain_id);
> +        return -ENODEV;
> +    }
> +        
>      d->arch.vgic.nr_lpis = nr_lpis;
>  
>      d->arch.vgic.vits = xzalloc(struct vgic_its);
> diff --git a/xen/include/asm-arm/gic-its.h b/xen/include/asm-arm/gic-its.h
> index 4327ba2..7077477 100644
> --- a/xen/include/asm-arm/gic-its.h
> +++ b/xen/include/asm-arm/gic-its.h
> @@ -320,6 +320,11 @@ struct vitt {
>      uint32_t vlpi;
>  };
>  
> +struct gic_its_info {
> +    uint32_t eventid_bits;
> +    uint32_t dev_bits;

See my remark on the vits_hw.

> +};
> +

This is only used internally to gic-v3-its.c. So you could have directly
done

static struct
{
	uint32_t eventid_bits;
	uint32_t dev_bits;
} its_data;

>  void irqdesc_set_lpi_event(struct irq_desc *desc, unsigned id);
>  unsigned int irqdesc_get_lpi_event(struct irq_desc *desc);
>  struct its_device *irqdesc_get_its_device(struct irq_desc *desc);
> @@ -337,6 +342,8 @@ int vits_get_vitt_entry(struct domain *d, uint32_t devid,
>                          uint32_t event, struct vitt *entry);
>  int vits_get_vdevice_entry(struct domain *d, uint32_t devid,
>                             struct vdevice_table *entry);
> +void vits_setup_hw(uint32_t dev_bits, uint32_t eventid_bits,
> +                   paddr_t base, unsigned long size);
>  
>  #endif /* __ASM_ARM_GIC_ITS_H__ */
>  /*
> 

Regards,

-- 
Julien Grall

  reply	other threads:[~2015-09-03 16:48 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-31 11:06 [PATCH v6 00/31] Add ITS support vijay.kilari
2015-08-31 11:06 ` [PATCH v6 01/31] xen/dt: Handle correctly node with interrupt-map in dt_for_each_irq_map vijay.kilari
2015-08-31 14:20   ` Julien Grall
2015-09-02 15:28     ` Ian Campbell
2015-09-02 15:30       ` Wei Liu
2015-09-02 15:45       ` Julien Grall
2015-09-02 15:52         ` Ian Campbell
2015-09-04 14:41         ` Ian Campbell
2015-08-31 11:06 ` [PATCH v6 02/31] xen/arm: Add bitmap_find_next_zero_area helper function vijay.kilari
2015-08-31 11:06 ` [PATCH v6 03/31] xen: Add log2 functionality vijay.kilari
2015-08-31 11:21   ` Jan Beulich
2015-08-31 11:06 ` [PATCH v6 04/31] xen/arm: Set nr_cpu_ids to available number of cpus vijay.kilari
2015-08-31 14:25   ` Julien Grall
2015-09-09 12:48     ` Ian Campbell
2015-08-31 11:06 ` [PATCH v6 05/31] xen/arm: Rename NR_IRQs and vgic_num_irqs helper function vijay.kilari
2015-08-31 14:40   ` Julien Grall
2015-09-09 13:08     ` Ian Campbell
2015-09-09 13:23       ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 06/31] xen/arm: ITS: Port ITS driver to Xen vijay.kilari
2015-08-31 15:41   ` Julien Grall
2015-09-03 17:02   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 07/31] xen/arm: ITS: Add helper functions to manage its_devices vijay.kilari
2015-08-31 11:06 ` [PATCH v6 08/31] xen/arm: ITS: Introduce msi_desc for LPIs vijay.kilari
2015-08-31 16:20   ` Julien Grall
2015-09-09 13:16   ` Ian Campbell
2015-09-09 13:28     ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 09/31] xen/arm: ITS: Add APIs to add and assign device vijay.kilari
2015-09-03 17:34   ` Julien Grall
2015-09-09 13:28     ` Ian Campbell
2015-09-09 13:44       ` Julien Grall
2015-09-09 15:07         ` Ian Campbell
2015-09-09 16:19           ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 10/31] xen/arm: ITS: Introduce gic_is_lpi helper function vijay.kilari
2015-08-31 16:49   ` Julien Grall
2015-09-01  9:02     ` Vijay Kilari
2015-09-01 11:40       ` Julien Grall
2015-09-01 11:56         ` Vijay Kilari
2015-09-01 13:02           ` Julien Grall
2015-09-03  6:32             ` Vijay Kilari
2015-09-03  9:48               ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 11/31] xen/arm: ITS: Enable compilation of physical ITS driver vijay.kilari
2015-08-31 11:06 ` [PATCH v6 12/31] xen/arm: Move vgic locking inside get_irq_priority callback vijay.kilari
2015-08-31 16:34   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 13/31] xen/arm: ITS: implement hw_irq_controller for LPIs vijay.kilari
2015-08-31 17:53   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 14/31] xen/arm: ITS: Initialize physical ITS and export lpi support vijay.kilari
2015-08-31 18:35   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 15/31] xen/arm: ITS: Add virtual ITS driver vijay.kilari
2015-09-02 17:20   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 16/31] xen/arm: ITS: Add virtual ITS commands support vijay.kilari
2015-09-03 15:07   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 17/31] xen/arm: ITS: Store LPIs allocated and IRQ ID bits per domain vijay.kilari
2015-09-03 16:25   ` Julien Grall
2015-09-07  6:59     ` Vijay Kilari
2015-09-07 10:56       ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 18/31] xen/arm: ITS: Enable virtual ITS driver vijay.kilari
2015-08-31 11:06 ` [PATCH v6 19/31] xen/arm: ITS: Export ITS info to Virtual ITS vijay.kilari
2015-09-03 16:48   ` Julien Grall [this message]
2015-08-31 11:06 ` [PATCH v6 20/31] xen/arm: ITS: Introduce helper to get number of event IDs vijay.kilari
2015-09-03 17:51   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 21/31] xen/arm: ITS: Add GITS registers emulation vijay.kilari
2015-09-07 13:14   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 22/31] xen/arm: ITS: Add virtual ITS availability check helper vijay.kilari
2015-09-07 13:41   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 23/31] xen/arm: ITS: Add 32-bit access to GICR_TYPER vijay.kilari
2015-08-31 16:06   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 24/31] xen/arm: ITS: Add GICR register emulation vijay.kilari
2015-09-07 14:20   ` Julien Grall
2015-09-07 15:26     ` Vijay Kilari
2015-09-09 13:55       ` Ian Campbell
2015-09-09 16:11         ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 25/31] xen/arm: ITS: Allocate irq descriptors for LPIs vijay.kilari
2015-08-31 11:06 ` [PATCH v6 26/31] xen/arm: ITS: Allocate pending_lpi " vijay.kilari
2015-08-31 11:06 ` [PATCH v6 27/31] xen/arm: ITS: Route LPIs vijay.kilari
2015-08-31 11:06 ` [PATCH v6 28/31] xen/arm: ITS: Add domain specific ITS initialization vijay.kilari
2015-08-31 11:06 ` [PATCH v6 29/31] xen/arm: ITS: Map ITS translation space vijay.kilari
2015-08-31 19:07   ` Julien Grall
2015-08-31 11:06 ` [PATCH v6 30/31] xen/arm: ITS: Generate ITS node for Dom0 vijay.kilari
2015-08-31 11:06 ` [PATCH v6 31/31] xen/arm: ITS: Add pci devices in ThunderX vijay.kilari
2015-09-09 15:22   ` Ian Campbell
2015-09-02 15:38 ` [PATCH v6 00/31] Add ITS support Ian Campbell
2015-09-02 15:52   ` Ian Campbell
2015-09-03 16:45 ` Julien Grall
2015-09-09 15:29 ` Ian Campbell
2015-09-14 11:00   ` Vijay Kilari
2015-09-14 11:09     ` Julien Grall
2015-09-14 13:04       ` Vijay Kilari

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=55E879D3.7040902@citrix.com \
    --to=julien.grall@citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Prasun.Kapoor@caviumnetworks.com \
    --cc=Vijaya.Kumar@caviumnetworks.com \
    --cc=manish.jaggi@caviumnetworks.com \
    --cc=stefano.stabellini@citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=tim@xen.org \
    --cc=vijay.kilari@gmail.com \
    --cc=xen-devel@lists.xen.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 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.