All of lore.kernel.org
 help / color / mirror / Atom feed
From: Takashi Iwai <tiwai@suse.de>
To: Benson Leung <bleung@google.com>
Cc: Takashi Iwai <tiwai@suse.de>,
	Heikki Krogerus <heikki.krogerus@linux.intel.com>,
	Won Chung <wonchung@google.com>, Jaroslav Kysela <perex@perex.cz>,
	Takashi Iwai <tiwai@suse.com>,
	Mika Westerberg <mika.westerberg@linux.intel.com>,
	Benson Leung <bleung@chromium.org>,
	Prashant Malani <pmalani@chromium.org>,
	linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH v2] sound/hda: Add NULL check to component match callback function
Date: Thu, 31 Mar 2022 17:37:09 +0200	[thread overview]
Message-ID: <s5hpmm2cevu.wl-tiwai@suse.de> (raw)
In-Reply-To: <YkXJr2KhSzHJHxRF@google.com>

On Thu, 31 Mar 2022 17:33:03 +0200,
Benson Leung wrote:
> 
> Hi Takashi,
> 
> On Thu, Mar 31, 2022 at 04:19:15PM +0200, Takashi Iwai wrote:
> > On Thu, 31 Mar 2022 15:29:10 +0200,
> > Takashi Iwai wrote:
> > > 
> > > On Thu, 31 Mar 2022 11:45:47 +0200,
> > > Takashi Iwai wrote:
> > > > 
> > > > On Thu, 31 Mar 2022 11:34:38 +0200,
> > > > Heikki Krogerus wrote:
> > > > > 
> > > > > On Thu, Mar 31, 2022 at 11:28:20AM +0200, Takashi Iwai wrote:
> > > > > > On Thu, 31 Mar 2022 11:25:43 +0200,
> > > > > > Heikki Krogerus wrote:
> > > > > > > 
> > > > > > > On Thu, Mar 31, 2022 at 11:12:55AM +0200, Takashi Iwai wrote:
> > > > > > > > > > > -     if (!strcmp(dev->driver->name, "i915") &&
> > > > > > > > > > > +     if (dev->driver && !strcmp(dev->driver->name, "i915") &&
> > > > > > > > > >
> > > > > > > > > > Can NULL dev->driver be really seen?  I thought the components are
> > > > > > > > > > added by the drivers, hence they ought to have the driver field set.
> > > > > > > > > > But there can be corner cases I overlooked.
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > thanks,
> > > > > > > > > >
> > > > > > > > > > Takashi
> > > > > > > > > 
> > > > > > > > > Hi Takashi,
> > > > > > > > > 
> > > > > > > > > When I try using component_add in a different driver (usb4 in my
> > > > > > > > > case), I think dev->driver here is NULL because the i915 drivers do
> > > > > > > > > not have their component master fully bound when this new component is
> > > > > > > > > registered. When I test it, it seems to be causing a crash.
> > > > > > > > 
> > > > > > > > Hm, from where component_add*() is called?  Basically dev->driver must
> > > > > > > > be already set before the corresponding driver gets bound at
> > > > > > > > __driver_probe_deviec().  So, if the device is added to component from
> > > > > > > > the corresponding driver's probe, dev->driver must be non-NULL.
> > > > > > > 
> > > > > > > The code that declares a device as component does not have to be the
> > > > > > > driver of that device.
> > > > > > > 
> > > > > > > In our case the components are USB ports, and they are devices that
> > > > > > > are actually never bind to any drivers: drivers/usb/core/port.c
> > > > > > 
> > > > > > OK, that's what I wanted to know.  It'd be helpful if it's more
> > > > > > clearly mentioned in the commit log.
> > > > > 
> > > > > Agree.
> > > > > 
> > > > > > BTW, the same problem must be seen in MEI drivers, too.
> > > > > 
> > > > > Wasn't there a patch for those too? I lost track...
> > > > 
> > > > I don't know, I just checked the latest Linus tree.
> > > > 
> > > > And, looking at the HD-audio code, I still wonder how NULL dev->driver
> > > > can reach there.  Is there any PCI device that is added to component
> > > > without binding to a driver?  We have dev_is_pci() check at the
> > > > beginning, so non-PCI devices should bail out there...
> > > 
> > > Further reading on, I'm really confused.  How data=NULL can be passed
> > > to this function?  The data argument is the value passed from the
> > > component_match_add_typed() call in HD-audio driver, hence it must be
> > > always the snd_hdac_bus object.
> > > 
> > > And, I guess the i915 string check can be omitted completely, at
> > > least, for HD-audio driver.  It already have a check of the parent of
> > > the device and that should be enough.
> > 
> > That said, something like below (supposing data NULL check being
> > superfluous), instead.
> > 
> > 
> > Takashi
> > 
> > --- a/sound/hda/hdac_i915.c
> > +++ b/sound/hda/hdac_i915.c
> > @@ -102,18 +102,13 @@ static int i915_component_master_match(struct device *dev, int subcomponent,
> >  	struct pci_dev *hdac_pci, *i915_pci;
> >  	struct hdac_bus *bus = data;
> >  
> > -	if (!dev_is_pci(dev))
> > +	if (subcomponent != I915_COMPONENT_AUDIO || !dev_is_pci(dev))
> >  		return 0;
> >  
> 
> If I recall this bug correctly, it's not the usb port perse that is falling
> through this !dev_is_pci(dev) check, it's actually the usb4-port in a new
> proposed patch by Heikki and Mika to extend the usb type-c component to
> encompass the usb4 specific pieces too. Is it possible usb4 ports are considered
> pci devices, and that's how we got into this situation?

Yes, that explains for one of two changes in the original patch.
But why data==NULL check is needed is still unclear.

> Also, a little more background information: This crash happens because in
> our kernel configs, we config'd the usb4 driver as =y (built in) instead of
> =m module, which meant that the usb4 port's driver was adding a component
> likely much earlier than hdac_i915.

Thanks, it's what I supposed, too.


Takashi

  reply	other threads:[~2022-03-31 15:43 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-30 21:19 [PATCH v2] sound/hda: Add NULL check to component match callback function Won Chung
2022-03-31  7:27 ` Takashi Iwai
2022-03-31  8:38   ` Won Chung
2022-03-31  9:12     ` Takashi Iwai
2022-03-31  9:25       ` Heikki Krogerus
2022-03-31  9:28         ` Takashi Iwai
2022-03-31  9:34           ` Heikki Krogerus
2022-03-31  9:45             ` Takashi Iwai
2022-03-31 13:29               ` Takashi Iwai
2022-03-31 14:19                 ` Takashi Iwai
2022-03-31 15:33                   ` Benson Leung
2022-03-31 15:37                     ` Takashi Iwai [this message]
2022-03-31 16:10                     ` Mika Westerberg
2022-03-31 16:38                     ` Greg KH
2022-03-31 16:58                       ` Won Chung
2022-03-31 17:18                         ` Greg KH
2022-03-31 17:33                           ` Benson Leung
2022-03-31 17:46                             ` Greg KH
2022-04-01  7:02                   ` Heikki Krogerus
2022-03-31 11:39         ` Greg KH
2022-03-31 12:52           ` Heikki Krogerus
2022-03-31 12:56             ` Greg KH
2022-03-31 13:15             ` Takashi Iwai
  -- strict thread matches above, loose matches on Subject: below --
2022-03-30 20:55 Won Chung
2022-03-30 21:15 ` Won Chung

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=s5hpmm2cevu.wl-tiwai@suse.de \
    --to=tiwai@suse.de \
    --cc=bleung@chromium.org \
    --cc=bleung@google.com \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=perex@perex.cz \
    --cc=pmalani@chromium.org \
    --cc=stable@vger.kernel.org \
    --cc=tiwai@suse.com \
    --cc=wonchung@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.