On 28/02/18 09:25, Shah, Amit wrote: > > On Mi, 2018-02-28 at 08:16 +0000, Roger Pau Monné wrote: >> On Tue, Feb 27, 2018 at 05:32:53PM +0000, Shah, Amit wrote: >>> >>> >>> On Di, 2018-02-27 at 17:07 +0000, Roger Pau Monné wrote: >>>> >>>> On Tue, Feb 27, 2018 at 03:55:58PM +0000, Amit Shah wrote: >>>>> >>>>> >>>>> In case of errors in irq setup for MSI, free up the allocated >>>>> irqs. >>>>> >>>>> Fixes: 4892c9b4ada9f9 ("xen: add support for MSI message >>>>> groups") >>>>> Reported-by: Hooman Mirhadi <mirhadih@xxxxxxxxxx> >>>>> CC: <stable@xxxxxxxxxxxxxxx> >>>>> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx> >>>>> CC: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx> >>>>> CC: Eduardo Valentin <eduval@xxxxxxxxxx> >>>>> CC: Juergen Gross <jgross@xxxxxxxx> >>>>> CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx> >>>>> CC: "K. Y. Srinivasan" <kys@xxxxxxxxxxxxx> >>>>> CC: Liu Shuo <shuo.a.liu@xxxxxxxxx> >>>>> CC: Anoob Soman <anoob.soman@xxxxxxxxxx> >>>>> Signed-off-by: Amit Shah <aams@xxxxxxxxxx> >>>>> --- >>>>> drivers/xen/events/events_base.c | 5 ++++- >>>>> 1 file changed, 4 insertions(+), 1 deletion(-) >>>>> >>>>> diff --git a/drivers/xen/events/events_base.c >>>>> b/drivers/xen/events/events_base.c >>>>> index c86d10e..a299586 100644 >>>>> --- a/drivers/xen/events/events_base.c >>>>> +++ b/drivers/xen/events/events_base.c >>>>> @@ -750,11 +750,14 @@ int xen_bind_pirq_msi_to_irq(struct >>>>> pci_dev >>>>> *dev, struct msi_desc *msidesc, >>>>> >>>>> ret = irq_set_msi_desc(irq, msidesc); >>>>> if (ret < 0) >>>>> - goto error_irq; >>>>> + goto error_desc; >>>>> out: >>>>> mutex_unlock(&irq_mapping_update_lock); >>>>> return irq; >>>>> error_irq: >>>>> + while (--nvec >= i) >>>>> + xen_free_irq(irq + nvec); >>>>> +error_desc: >>>>> while (i > 0) { >>>>> i--; >>>>> __unbind_from_irq(irq + i); >>>> It seems pointless to introduce another label and another loop to >>>> fix >>>> something that can be fixed with a single label and a single >>>> loop, >>>> this just makes the code more complex for no reason. >>> I disagree, just because there are two different cleanups to be >>> made >>> for two different issues; it's not as if the if.. and else >>> conditions >>> are going to be interleaved. >> Oh, I don't mind so much whether it ends up being two patches or a >> single one, but IMHO the code should end up looking similar to what I >> proposed, I would like to avoid having two loops and two labels. >> >> Could you rework the series so that the end result uses a single loop >> (and label)? > > That was the part I didn't like much, so it would be better if the > patch came from you :) I'd prefer Roger's solution, too. Roger, in case you don't want to write the patch, I can do it. Juergen