On Thu, 2024-10-10 at 17:46 +0300, Andy Shevchenko wrote: > On Wed, Oct 09, 2024 at 10:35:08AM +0200, Philipp Stanner wrote: > > pci_intx() is a hybrid function which can sometimes be managed > > through > > devres. To remove this hybrid nature from pci_intx(), it is > > necessary to > > port users to either an always-managed or a never-managed version. > > > > hda_intel enables its PCI-Device with pcim_enable_device(). Thus, > > it needs > > the always-managed version. > > > > Replace pci_intx() with pcim_intx(). > > ... > > > bus->irq = chip->pci->irq; > > chip->card->sync_irq = bus->irq; > > - pci_intx(chip->pci, !chip->msi); > > + pcim_intx(chip->pci, !chip->msi); > > return 0; > > I believe each driver needs an individual approach. Looking at the > above > I would first to understand why this one is being used and why we > can't > switch to pci{m}_alloc_irq_vectors(). (Yeah, managed > pci_alloc_irq_vectors() > is probably still missing, I don't remember if you introduced it or > not. > Alright alright – we touched it in the other mail briefly, but let me point out another specific problem: pci_alloc_irq_vectors() *uses* pci_intx(). And pci_intx() can be managed sometimes. See the problem? :( So it's not just that I couldn't port the driver Alex is concerned about, it's also that MSI itself is a user of pci_intx(). So a pcim_alloc_irq_vectors() might end up doing double-devres or God knows what else. Only once pci_intx() is clean one can start thinking about the code in pci/msi/ It's the biggest reason why I want to clean it up as suggested here, and also why the only patch I'm really nervous about is number 8. P.