Messages in this thread Patch in this message | | | Date | Thu, 15 Feb 2007 15:50:34 -0800 | From | Andrew Morton <> | Subject | Re: [-mm patch] pci_iomap_regions error handling fix (was Re: 2.6.20-mm1) |
| |
On Fri, 16 Feb 2007 16:41:59 +0000 Frederik Deweerdt <deweerdt@free.fr> wrote:
> On Thu, Feb 15, 2007 at 05:14:08AM -0800, Andrew Morton wrote: > > > > Temporarily at > > > > http://userweb.kernel.org/~akpm/2.6.20-mm1/ > > > Hi, > > It appears that the pcim_iomap_regions() function doesn't get the error > handling right. It BUGs early at boot with a backtrace along the lines of: > > ahci_init > pci_register_driver > driver_register > [...] > ahci_init_one > pcim_iomap_region > pcim_iounmap > > The following patch allows me to boot. Only the if(mask..) continue; > part fixes the problem actually, the gotos where changed so that we > don't try to unmap something we couldn't map anyway. > > Regards, > Frederik > > Signed-off-by: Frederik Deweerdt <frederik.deweerdt@gmail.com> > > > diff --git a/lib/devres.c b/lib/devres.c > index 2a668dd..eb38849 100644 > --- a/lib/devres.c > +++ b/lib/devres.c > @@ -274,21 +274,21 @@ int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name) > > rc = pci_request_region(pdev, i, name); > if (rc) > - goto err_region; > + goto err_inval; > > rc = -ENOMEM; > if (!pcim_iomap(pdev, i, 0)) > - goto err_iomap; > + goto err_region; > } > > return 0; > > - err_iomap: > - pcim_iounmap(pdev, iomap[i]); > err_region: > pci_release_region(pdev, i); > err_inval: > while (--i >= 0) { > + if (!(mask & (1 << i))) > + continue; > pcim_iounmap(pdev, iomap[i]); > pci_release_region(pdev, i); > }
yep, the fix looks good and is needed in mainline, thanks. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |