On Mon, 20 Jun 2022 17:31:09 +0200, Kai Vehmanen wrote: > > Hi, > > On Mon, 20 Jun 2022, Takashi Iwai wrote: > > > So this looks like a bug due to the use of pci_get_class(). > > Since there is no pci_get_base_class(), we likely need to open-code > > the search, e.g. something like below. > > yes, this indeed seems to be the case. > > > diff --git a/sound/hda/hdac_i915.c b/sound/hda/hdac_i915.c > > index 3f35972e1cf7..161a9711cd63 100644 > > --- a/sound/hda/hdac_i915.c > > +++ b/sound/hda/hdac_i915.c > > @@ -119,21 +119,18 @@ static int i915_component_master_match(struct device *dev, int subcomponent, > [...] > > - do { > > - display_dev = pci_get_class(class, display_dev); > > - > > - if (display_dev && display_dev->vendor == PCI_VENDOR_ID_INTEL && > > + for_each_pci_dev(display_dev) { > > + if (display_dev->vendor == PCI_VENDOR_ID_INTEL && > > + (display_dev->class >> 16) == PCI_BASE_CLASS_DISPLAY && > > connectivity_check(display_dev, hdac_pci)) { > > pci_dev_put(display_dev); > > - match = true; > > + return true; > > } > > - } while (!match && display_dev); > > + } > > To open code a bit less, I was first thinking: > > --cut-- > --- a/sound/hda/hdac_i915.c > +++ b/sound/hda/hdac_i915.c > @@ -124,9 +124,9 @@ static int i915_gfx_present(struct pci_dev *hdac_pci) > bool match = false; > > do { > - display_dev = pci_get_class(class, display_dev); > + display_dev = pci_get_device(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, display_dev); > > - if (display_dev && display_dev->vendor == PCI_VENDOR_ID_INTEL && > + if (display_dev && (display_dev->class >> 16) == PCI_BASE_CLASS_DISPLAY && > connectivity_check(display_dev, hdac_pci)) { > --cut-- > > But it's a marginal difference, so for your version: > > Reviewed-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx> OK, could you throw the patch to CI for verification? I can merge it for the next pull request (probably in this week) once after confirmation. thanks, Takashi