All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vijay Kilari <vijay.kilari@gmail.com>
To: Ian Campbell <ian.campbell@citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>,
	Prasun Kapoor <Prasun.Kapoor@caviumnetworks.com>,
	Vijaya Kumar K <vijaya.kumar@caviumnetworks.com>,
	Tim Deegan <tim@xen.org>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	Julien Grall <julien.grall@citrix.com>,
	Stefano Stabellini <stefano.stabellini@citrix.com>,
	manish.jaggi@caviumnetworks.com
Subject: Re: [PATCH v4 05/17] xen/arm: ITS: implement hw_irq_controller for LPIs
Date: Wed, 15 Jul 2015 22:31:26 +0530	[thread overview]
Message-ID: <CALicx6u4OE3nPTNLO0vkv41oKubgnSVMcQZKpAaZ9EzCGgNB+g@mail.gmail.com> (raw)
In-Reply-To: <1436970531.32371.96.camel@citrix.com>

On Wed, Jul 15, 2015 at 7:58 PM, Ian Campbell <ian.campbell@citrix.com> wrote:
> On Wed, 2015-07-15 at 19:45 +0530, Vijay Kilari wrote:
>> On Wed, Jul 15, 2015 at 3:02 PM, Ian Campbell <ian.campbell@citrix.com> wrote:
>> > On Wed, 2015-07-15 at 10:26 +0200, Julien Grall wrote:
>> >
>> >> >>> @@ -149,7 +173,7 @@ int gic_route_irq_to_guest(struct domain *d, unsigned
>> >> >>> int virq,
>> >> >>>             test_bit(GIC_IRQ_GUEST_ENABLED, &p->status) )
>> >> >>>            goto out;
>> >> >>>
>> >> >>> -    desc->handler = gic_hw_ops->gic_guest_irq_type;
>> >> >>> +    desc->handler = get_guest_hw_irq_controller(desc->irq);
>> >> >>>        set_bit(_IRQ_GUEST, &desc->status);
>> >> >>>
>> >> >>>        gic_set_irq_properties(desc, cpumask_of(v_target->processor),
>> >> >>> priority);
>> >> >>> diff --git a/xen/arch/arm/irq.c b/xen/arch/arm/irq.c
>> >> >>> index 2dd43ee..ba8528a 100644
>> >> >>> --- a/xen/arch/arm/irq.c
>> >> >>> +++ b/xen/arch/arm/irq.c
>> >> >>> @@ -35,7 +35,13 @@ static DEFINE_SPINLOCK(local_irqs_type_lock);
>> >> >>>    struct irq_guest
>> >> >>>    {
>> >> >>>        struct domain *d;
>> >> >>> -    unsigned int virq;
>> >> >>> +    union
>> >> >>> +    {
>> >> >>> +        /* virq refer to virtual irq in case of spi */
>> >> >>> +        unsigned int virq;
>> >> >>> +        /* virq refer to event ID in case of lpi */
>> >> >>> +        unsigned int vid;
>> >> >>
>> >> >>
>> >> >> Why can't we store the event ID in the irq_guest? As said on v3, this is not
>> >> >
>> >> > Are you referring to irq_desc in above statement?
>> >>
>> >> Yes sorry.
>> >
>> > I'm afraid I don't follow your suggestion here, are you suggesting that
>> > the vid field added above should be moved to irq_desc?
>> >
>> > But the vid _is_ domain specific, it is the virtual event ID which is
>> > per-domain (it's the thing looked up in the ITT to get a vLPI to be
>> > injected). I think it is a pretty direct analogue of the virq field used
>> > for non-LPI irq_guest structs.
>> >
>> > If we had need for the physical event id then that would like belong in
>> > the irq_desc.
>> >
>> > Your proposal on v3 looks to be around moving the its_device pointer to
>> > the irq_desc, which appears to have been done here, along with turning
>> > the virq+vid into a union as requested there too.
>> >
>> >> >> It has been suggested by Ian to move col_id in the its_device in the
>> >> >> previous version [4]. Any reason to not doing it?
>> >> >
>> >> > In round robin fashion each plpi is attached to col_id. So storing
>> >> > in its_device is not possible. In linux latest col_id is stored in its_device
>> >> > structure for which set_affinity is called.
>> >
>> > Are you saying that in Linux all Events/LPIs associated with a given ITS
>> > device are routed to the same collection?
>>
>>  Not associated with same collection. Events are associated with cpu
>> for which cpu_mask is set and the collection id of that cpu is stored
>> in the its_device,
>
> Surely storing the collection ID is precisely equivalent to storing the
> cpu mask of the one CPU to which that collection ID is routed?
>
> But that is orthogonal to my question anyway, so let me try again:
>
> Are you saying that in Linux all Events/LPIs associated with a given ITS
> device are routed to the same CPU?
>
>>  which is later used for SYNC.
>
>
>> So effectively it_device
>> does not store collection id associated for all Events of that device.
>
> Right above you said "and the collection id of that cpu is stored in the
> its_device", which contradicts what you now say here. (Unless it_device
> is not a typo of its_device but a separate thing?)

Sorry. I may not be clear.

In Linux when MSIx is enabled.
Device is created first and its_device->its_collection is set for
first onine cpu
and mapvi is called with collection set in its_create_device() as below.

struct its_device *its_create_device(struct its_node *its, u32 dev_id,
                                                     int nvecs)
{
....
    /* Bind the device to the first possible CPU */
    cpu = cpumask_first(cpu_online_mask);
    dev->collection = &its->collections[cpu];
....
}

int its_alloc_device_irq(struct its_device *dev, u32 id,
                                  int *hwirq, unsigned int *irq)
{
...
    /* Map the GIC irq ID to the device */
    its_send_mapvi(dev, *hwirq, id);
...
}

When affinity is set, movi is sent with collection id selected
for the cpu_mask.

static int its_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
                                    bool force)
{
    unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask);
    ...
    target_col = &its_dev->its->collections[cpu];
    ....
    its_send_movi(its_dev, target_col, id);
    its_dev->collection = target_col;
    ...
}

So, collection id to Event/LPI mapping is not stored.

Regards
Vijay

  reply	other threads:[~2015-07-15 17:01 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-10  7:42 [PATCH v4 00/17] Add ITS support vijay.kilari
2015-07-10  7:42 ` [PATCH v4 01/17] xen/arm: Add bitmap_find_next_zero_area helper function vijay.kilari
2015-07-10  9:01   ` Jan Beulich
2015-07-10  9:28     ` Vijay Kilari
2015-07-10  9:30       ` Vijay Kilari
2015-07-10  9:45     ` Vijay Kilari
2015-07-10 10:07       ` Jan Beulich
2015-07-10  7:42 ` [PATCH v4 02/17] xen: Add log2 functionality vijay.kilari
2015-07-10  7:42 ` [PATCH v4 03/17] xen/arm: ITS: Port ITS driver to Xen vijay.kilari
2015-07-10 13:01   ` Ian Campbell
2015-07-15 10:23   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 04/17] xen/arm: ITS: Add helper functions to manage its_devices vijay.kilari
2015-07-10 13:05   ` Ian Campbell
2015-07-15 10:37   ` Julien Grall
2015-07-15 14:21     ` Vijay Kilari
2015-07-15 14:28       ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 05/17] xen/arm: ITS: implement hw_irq_controller for LPIs vijay.kilari
2015-07-10 13:46   ` Ian Campbell
2015-07-11 14:40     ` Vijay Kilari
2015-07-11 18:08       ` Julien Grall
2015-07-13  9:17       ` Ian Campbell
2015-07-13 21:18   ` Julien Grall
2015-07-15  7:16     ` Vijay Kilari
2015-07-15  8:26       ` Julien Grall
2015-07-15  9:32         ` Ian Campbell
2015-07-15  9:49           ` Julien Grall
2015-07-15 10:01             ` Ian Campbell
2015-07-15 14:15           ` Vijay Kilari
2015-07-15 14:22             ` Julien Grall
2015-07-15 14:28             ` Ian Campbell
2015-07-15 17:01               ` Vijay Kilari [this message]
2015-07-16 14:49                 ` Ian Campbell
2015-07-16 15:21                   ` Marc Zyngier
2015-07-16 16:18                     ` Ian Campbell
2015-07-16 16:27                       ` Marc Zyngier
2015-07-16 16:37                         ` Ian Campbell
2015-07-18 10:13           ` Julien Grall
2015-07-20 11:52             ` Ian Campbell
2015-07-20 12:22             ` Ian Campbell
2015-07-15 18:19   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 06/17] xen/arm: ITS: Add virtual ITS driver vijay.kilari
2015-07-10 13:54   ` Ian Campbell
2015-07-11 14:48     ` Vijay Kilari
2015-07-13  9:27       ` Ian Campbell
2015-07-10 14:15   ` Ian Campbell
2015-07-11 14:48     ` Vijay Kilari
2015-07-13  9:25       ` Ian Campbell
2015-07-15 12:17   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 07/17] xen/arm: ITS: Add virtual ITS commands support vijay.kilari
2015-07-10 14:35   ` Ian Campbell
2015-07-11 14:49     ` Vijay Kilari
2015-07-13  9:22       ` Ian Campbell
2015-07-13 11:15         ` Vijay Kilari
2015-07-13 11:37           ` Ian Campbell
2015-07-17 15:01             ` Vijay Kilari
2015-07-15 13:02     ` Julien Grall
2015-07-15 13:56       ` Ian Campbell
2015-07-15 12:57   ` Julien Grall
2015-07-17 14:12     ` Vijay Kilari
2015-07-17 15:15       ` Julien Grall
2015-07-17 15:34         ` Ian Campbell
2015-07-17 15:44           ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 08/17] xen/arm: ITS: Add APIs to add and assign device vijay.kilari
2015-07-10 14:52   ` Ian Campbell
2015-07-15 13:14     ` Julien Grall
2015-07-16 13:40       ` Vijay Kilari
2015-07-16 14:38         ` Julien Grall
2015-07-15 14:15   ` Julien Grall
2015-07-18  9:44     ` Vijay Kilari
2015-07-18 10:06       ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 09/17] xen/arm: ITS: Add GITS registers emulation vijay.kilari
2015-07-10 14:56   ` Ian Campbell
2015-07-15 16:13   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 10/17] xen/arm: ITS: Enable physical and virtual ITS driver compilation vijay.kilari
2015-07-15 16:16   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 11/17] xen/arm: ITS: Add GICR register emulation vijay.kilari
2015-07-10 15:10   ` Ian Campbell
2015-07-11 18:25     ` Julien Grall
2015-07-13  9:28       ` Ian Campbell
2015-07-13  9:53         ` Ian Campbell
2015-07-13 16:53   ` Stefano Stabellini
2015-07-15 17:32   ` Julien Grall
2015-07-16 14:15     ` Vijay Kilari
2015-07-16 14:41       ` Julien Grall
2015-07-16 14:46         ` Vijay Kilari
2015-07-16 14:58           ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 12/17] xen/arm: ITS: Initialize LPI irq descriptors and route vijay.kilari
2015-07-10 15:30   ` Ian Campbell
2015-07-20 13:07     ` Vijay Kilari
2015-07-20 13:25       ` Julien Grall
2015-07-22 13:31     ` Vijay Kilari
2015-07-22 13:39       ` Julien Grall
2015-07-22 14:17         ` Julien Grall
2015-07-13 17:03   ` Stefano Stabellini
2015-07-13 17:13   ` Stefano Stabellini
2015-07-13 17:36     ` Julien Grall
2015-07-15 18:13   ` Julien Grall
2015-07-16  8:06     ` Julien Grall
2015-07-16  8:37   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 13/17] xen/arm: ITS: Initialize physical ITS vijay.kilari
2015-07-13 17:06   ` Stefano Stabellini
2015-07-10  7:42 ` [PATCH v4 14/17] xen/arm: ITS: Add domain specific ITS initialization vijay.kilari
2015-07-10 15:41   ` Ian Campbell
2015-07-15 17:41   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 15/17] xen/arm: ITS: Map ITS translation space vijay.kilari
2015-07-10 15:43   ` Ian Campbell
2015-07-15  9:01   ` Julien Grall
2015-07-10  7:42 ` [PATCH v4 16/17] xen/arm: ITS: Generate ITS node for Dom0 vijay.kilari
2015-07-13 16:32   ` Stefano Stabellini
2015-07-13 17:31     ` Julien Grall
2015-07-13 17:36       ` Stefano Stabellini
2015-07-10  7:42 ` [PATCH v4 17/17] xen/arm: ITS: Add pci devices in ThunderX vijay.kilari
2015-07-10 15:45   ` Ian Campbell

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=CALicx6u4OE3nPTNLO0vkv41oKubgnSVMcQZKpAaZ9EzCGgNB+g@mail.gmail.com \
    --to=vijay.kilari@gmail.com \
    --cc=Prasun.Kapoor@caviumnetworks.com \
    --cc=ian.campbell@citrix.com \
    --cc=julien.grall@citrix.com \
    --cc=manish.jaggi@caviumnetworks.com \
    --cc=stefano.stabellini@citrix.com \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=tim@xen.org \
    --cc=vijaya.kumar@caviumnetworks.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.