All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Campbell <Ian.Campbell@citrix.com>
To: Julien Grall <julien.grall@linaro.org>
Cc: christoffer.dall@linaro.org, xen-devel@lists.xenproject.org,
	tim@xen.org, parth.dixit@linaro.org,
	stefano.stabellini@citrix.com
Subject: Re: [PATCH for-4.6 2/4] xen/arm: vgic: Keep track of vIRQ used by a domain
Date: Tue, 13 Jan 2015 16:46:36 +0000	[thread overview]
Message-ID: <1421167596.19103.157.camel@citrix.com> (raw)
In-Reply-To: <54B5476C.6010207@linaro.org>

On Tue, 2015-01-13 at 16:27 +0000, Julien Grall wrote:
> Hi Ian,
> 
> On 13/01/15 15:51, Ian Campbell wrote:
> > On Fri, 2014-12-12 at 14:43 +0000, Julien Grall wrote:
> >> While it's easy to know which hardware IRQ is assigned to a domain, there
> >> is no way to know which IRQ is emulated by Xen for a specific domain.
> > 
> > It seems you are tracking all valid interrupts, including hardware ones,
> > not just those for emulated devices? Perhaps rather than emulated you
> > meant "allocated to the guest" or "routed" or something?
> > 
> >> Introduce a bitmap to keep track of every vIRQ used by a domain. This
> >> will be used later to find free vIRQ for interrupt device assignment and
> >> emulated interrupt.
> > 
> > Actually, don't you implement the alloc/free of vIRQs here too?
> 
> Yes.
> 
> > Is there a usecase for tracking SPIs in this way, or would tracking PPIs
> > only be sufficient?
> 
> We need to track everything for interrupt assignment to a guest/dom0. So
> if the guest ask for a free vIRQ we can give it directly.

Makes sense.

In that case you 0/4 mail doesn't fully describe the use case for the
series, since it talks about the dom0 PPI only.
> > 
> >> +    if ( !d->arch.vgic.allocated_irqs )
> >> +        return -ENOMEM;
> >> +
> >> +    /* vIRQ0-15 (SGIs) are reserved */
> >> +    for (i = 0; i <= 15; i++)
> >> +        set_bit(i, d->arch.vgic.allocated_irqs);
> >> +
> >>      return 0;
> >>  }
> >>  
> >> @@ -119,6 +130,7 @@ void domain_vgic_free(struct domain *d)
> >>  {
> >>      xfree(d->arch.vgic.shared_irqs);
> >>      xfree(d->arch.vgic.pending_irqs);
> >> +    xfree(d->arch.vgic.allocated_irqs);
> >>  }
> >>  
> >>  int vcpu_vgic_init(struct vcpu *v)
> >> @@ -441,6 +453,70 @@ int vgic_emulate(struct cpu_user_regs *regs, union hsr hsr)
> >>      return v->domain->arch.vgic.handler->emulate_sysreg(regs, hsr);
> >>  }
> >>  
> >> +bool_t vgic_reserve_virq(struct domain *d, unsigned int virq)
> >> +{
> >> +    bool_t reserved;
> >> +
> >> +    if ( virq >= vgic_num_irqs(d) )
> >> +        return 0;
> > 
> > EINVAL?
> 
> vgic_reserve_irq returns a boolean:

Please use true/false then.

In Xen we have xen/stdbool.h which differs from normal stdboot.h. I'm
not sure what the rules are for use.

> 	0 => not reserved
> 	1 => reserved
> 
> I don't see why we should return an int in this case, as the caller
> should know how to use it.

It's slightly more conventional to return error codes, but I guess I
don't mind much.

> >> @@ -49,6 +49,21 @@ int domain_vtimer_init(struct domain *d)
> >>  {
> >>      d->arch.phys_timer_base.offset = NOW();
> >>      d->arch.virt_timer_base.offset = READ_SYSREG64(CNTPCT_EL0);
> >> +
> >> +    /* At this stage vgic_reserve_virq can't fail */
> >> +    if ( is_hardware_domain(d) )
> >> +    {
> >> +        BUG_ON(!vgic_reserve_virq(d, timer_get_irq(TIMER_PHYS_SECURE_PPI)));
> >> +        BUG_ON(!vgic_reserve_virq(d, timer_get_irq(TIMER_PHYS_NONSECURE_PPI)));
> >> +        BUG_ON(!vgic_reserve_virq(d, timer_get_irq(TIMER_VIRT_PPI)));
> >> +    }
> >> +    else
> >> +    {
> >> +        BUG_ON(!vgic_reserve_virq(d, GUEST_TIMER_PHYS_S_PPI));
> >> +        BUG_ON(!vgic_reserve_virq(d, GUEST_TIMER_PHYS_NS_PPI));
> >> +        BUG_ON(!vgic_reserve_virq(d, GUEST_TIMER_VIRT_PPI));
> > 
> > Although BUG_ON is not conditional on $debug I think we still should
> > avoid side effects in the condition.
> 
> I know, but this should never fail as it called during on domain
> construction. If so we may have some other issue later if we decide to
> assign PPI to a guest.
> 
> I would prefer to keep the BUG_ON here

I'm not objecting the the BUG_ON itself but to the fact that the
condition has a side effect. Please use:
        if (!do_something())
        	BUG()
instead to avoid this.

Ian.

  reply	other threads:[~2015-01-13 16:46 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-12 14:43 [PATCH for-4.6 0/4] Find automatically a PPI for the DOM0 even channel IRQ Julien Grall
2014-12-12 14:43 ` [PATCH for-4.6 1/4] xen/arm: vgic: Rename nr_lines into nr_spis Julien Grall
2015-01-13 15:38   ` Ian Campbell
2015-01-13 15:52     ` Julien Grall
2015-01-13 15:59       ` Ian Campbell
2014-12-12 14:43 ` [PATCH for-4.6 2/4] xen/arm: vgic: Keep track of vIRQ used by a domain Julien Grall
2014-12-15 15:32   ` Stefano Stabellini
2014-12-15 16:07     ` Julien Grall
2014-12-17 15:23       ` Julien Grall
2015-01-13 15:51   ` Ian Campbell
2015-01-13 16:27     ` Julien Grall
2015-01-13 16:46       ` Ian Campbell [this message]
2015-01-13 16:57         ` Julien Grall
2015-01-13 17:18           ` Ian Campbell
2015-01-13 17:35             ` Julien Grall
2015-01-13 17:22           ` Julien Grall
2015-01-13 17:34         ` Julien Grall
2014-12-12 14:43 ` [PATCH for-4.6 3/4] xen/arm: vgic: notice if the vIRQ is not allocated when the guest enable it Julien Grall
2015-01-13 15:55   ` Ian Campbell
2015-01-13 20:33     ` Julien Grall
2015-01-14 12:28       ` Ian Campbell
2015-01-14 12:42         ` Julien Grall
2015-01-15 13:27           ` Julien Grall
2015-01-15 13:31             ` Ian Campbell
2014-12-12 14:43 ` [PATCH for-4.6 4/4] xen/arm: Find automatically a PPI for the DOM0 event channel interrupt Julien Grall
2014-12-12 17:00   ` Julien Grall
2014-12-15 15:35   ` Stefano Stabellini
2014-12-15 16:09     ` Julien Grall
2015-01-13 15:58       ` Ian Campbell
2015-01-14 12:24         ` Julien Grall
2015-01-14 12:30           ` 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=1421167596.19103.157.camel@citrix.com \
    --to=ian.campbell@citrix.com \
    --cc=christoffer.dall@linaro.org \
    --cc=julien.grall@linaro.org \
    --cc=parth.dixit@linaro.org \
    --cc=stefano.stabellini@citrix.com \
    --cc=tim@xen.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 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.