> -----Original Message----- > From: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> > Sent: Sunday, May 15, 2022 8:57 AM > To: Veerasenareddy Burru <vburru@xxxxxxxxxxx>; Abhijit Ayarekar > <aayarekar@xxxxxxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>; Eric > Dumazet <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; > Paolo Abeni <pabeni@xxxxxxxxxx>; Satananda Burla <sburla@xxxxxxxxxxx> > Cc: linux-kernel@xxxxxxxxxxxxxxx; kernel-janitors@xxxxxxxxxxxxxxx; > Christophe JAILLET <christophe.jaillet@xxxxxxxxxx>; > netdev@xxxxxxxxxxxxxxx > Subject: [EXT] [PATCH 2/2] octeon_ep: Fix irq releasing in the error handling > path of octep_request_irqs() > > External Email > > ---------------------------------------------------------------------- > For the error handling to work as expected, the index in the 'oct- > >msix_entries' array must be tweaked because, when the irq are requested > there is: > msix_entry = &oct->msix_entries[i + num_non_ioq_msix]; > > So in the error handling path, 'i + num_non_ioq_msix' should be used instead > of 'i'. > > The 2nd argument of free_irq() also needs to be adjusted. > > Fixes: 37d79d059606 ("octeon_ep: add Tx/Rx processing and interrupt > support") > Signed-off-by: Christophe JAILLET <christophe.jaillet@xxxxxxxxxx> > --- > I think that the wording above is awful, but I'm sure you get it. > Feel free to rephrase everything to have it more readable. > --- > drivers/net/ethernet/marvell/octeon_ep/octep_main.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c > b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c > index 6b60a03574a0..4dcae805422b 100644 > --- a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c > +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c > @@ -257,10 +257,12 @@ static int octep_request_irqs(struct octep_device > *oct) > > return 0; > ioq_irq_err: > + i += num_non_ioq_msix; > while (i > num_non_ioq_msix) { > --i; > irq_set_affinity_hint(oct->msix_entries[i].vector, NULL); > - free_irq(oct->msix_entries[i].vector, oct->ioq_vector[i]); > + free_irq(oct->msix_entries[i].vector, > + oct->ioq_vector[i - num_non_ioq_msix]); Ack. Thanks for the fix. Regards, Veerasenareddy. > } > non_ioq_irq_err: > while (i) { > -- > 2.34.1