From: Mats Karrman <mats.dev.list@gmail.com>
To: Guenter Roeck <linux@roeck-us.net>
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Greg KH <gregkh@linuxfoundation.org>,
Felipe Balbi <felipe.balbi@linux.intel.com>,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org
Subject: Re: USB Type-C Port Manager API concern
Date: Sun, 9 Apr 2017 23:05:28 +0200 [thread overview]
Message-ID: <949bc063-7002-c12c-ba56-8b46f9ea178b@gmail.com> (raw)
In-Reply-To: <20170409151614.GA23984@roeck-us.net>
On 04/09/2017 05:16 PM, Guenter Roeck wrote:
> Hi Mats,
>
> On Sun, Apr 09, 2017 at 01:09:57AM +0200, Mats Karrman wrote:
>> I'm working on a tcpi driver and have some concern about the tcpm api.
>> The tcpm_register_port() is typically called from the probe function of
>> tcpi driver where the tcpm_port reference returned is stored in the
>> driver private data. The problem I ran into is that tcpm_register_port()
>> calls back to the not yet fully initialized tcpi driver, causing null-
>> pointer dereferences. This could of course be solved by extra logic in
>> the tcpi driver but I think it would be more elegant if the registration
>> of a port could be free of premature callbacks. E.g. it could be required
>> that the tcpi driver probe called tcpm_tcpc_reset() once it's done
>> initializing or the necessary data could be supplied in the call to
>> tcpm_register_port().
>> What do you think?
> Let me think about it. In theory it should be possible to avoid callbacks into
> the underlying driver until after the return from the registration code, but
> that would still be racy if the underlying driver is not ready.
>
> Basic problem seems to be that an API in general assumes that the caller is
> ready to serve it once it registers itself. It is kind of unusual to have two
> calls, one to register the driver and one to tell the infrastructure that it
> is ready (which I assume your reset call would do). Ultimately this means
> that the tcpm driver would have to have additional logic to identify if the
> underlying driver is ready to handle callbacks.
>
> Can you delay tcpm registration until after the underlying driver is ready,
> ie typically to the end of its probe function ? Or am I misunderstanding
> your problem ?
The problem I had was that I was trying to pull the same trick that you do ;)
I.e. the probe function calls tcpm_register_port() that is calling back
to the driver that was trying to call back to tcpm, just that the call to
tcpm_register_port() has not yet returned so the pointer to tcpm_port in the
driver data structure was still null.
I was able to fix the issue by commenting out the call to tcpm_init() at the
end of tcpm_register_port() and instead call ("your") tcpm_tcpc_reset(), that
currently does nothing but calling tcpm_init(), after I'm done.
Even though I'm not overly excited about the tcpm register function calling back
to the driver I don't think my fix is much better. I should live by my own words
and refrain from calling back to tcpm until registration has finished...
// Mats
next prev parent reply other threads:[~2017-04-09 21:05 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-21 14:24 [PATCH v17 0/3] USB Type-C Connector class Heikki Krogerus
2017-02-21 14:24 ` [PATCH v17 1/3] lib/string: add sysfs_match_string helper Heikki Krogerus
2017-02-21 14:24 ` [PATCH v17 2/3] usb: USB Type-C connector class Heikki Krogerus
2017-03-02 15:22 ` Mats Karrman
2017-03-03 3:13 ` Guenter Roeck
2017-03-03 7:29 ` Mats Karrman
2017-03-03 9:48 ` Enric Balletbo Serra
2017-03-03 12:59 ` Heikki Krogerus
2017-03-03 14:49 ` Guenter Roeck
2017-03-03 19:27 ` Mats Karrman
2017-03-06 9:37 ` Oliver Neukum
2017-03-06 13:14 ` Heikki Krogerus
2017-03-07 22:30 ` Mats Karrman
2017-03-08 1:38 ` Guenter Roeck
2017-04-08 23:09 ` USB Type-C Port Manager API concern Mats Karrman
2017-04-09 15:16 ` Guenter Roeck
2017-04-09 21:05 ` Mats Karrman [this message]
2017-04-14 2:57 ` Guenter Roeck
2017-04-14 8:30 ` Mats Karrman
2017-03-08 13:58 ` [PATCH v17 2/3] usb: USB Type-C connector class Heikki Krogerus
2017-03-10 22:22 ` Mats Karrman
2017-03-10 23:41 ` Guenter Roeck
2017-04-18 18:52 ` Badhri Jagan Sridharan
2017-04-19 11:23 ` Heikki Krogerus
2017-04-19 14:45 ` Badhri Jagan Sridharan
2017-04-19 15:14 ` Guenter Roeck
2017-04-19 17:22 ` Badhri Jagan Sridharan
2017-04-19 19:29 ` Guenter Roeck
2017-04-20 12:24 ` Heikki Krogerus
2017-04-20 19:46 ` Badhri Jagan Sridharan
2017-04-21 12:12 ` Heikki Krogerus
2017-04-21 13:14 ` Guenter Roeck
2017-04-21 14:27 ` Rajaram R
2017-04-21 16:43 ` Guenter Roeck
2017-04-22 9:23 ` Rajaram R
2017-04-24 17:50 ` Badhri Jagan Sridharan
2017-04-25 8:26 ` Rajaram R
2017-04-25 14:10 ` Guenter Roeck
2017-04-27 6:20 ` Rajaram R
2017-04-27 18:10 ` Guenter Roeck
2017-04-28 10:52 ` Heikki Krogerus
2017-04-20 11:55 ` Heikki Krogerus
2017-03-03 14:41 ` Guenter Roeck
2017-03-03 3:35 ` Peter Chen
2017-03-03 4:29 ` Guenter Roeck
2017-03-03 4:52 ` Peter Chen
2017-03-03 14:36 ` Guenter Roeck
2017-03-06 1:24 ` Peter Chen
2017-03-03 14:31 ` Heikki Krogerus
2017-03-06 1:15 ` Peter Chen
2017-03-06 13:16 ` Heikki Krogerus
2017-03-07 1:36 ` Peter Chen
2017-03-07 8:57 ` Heikki Krogerus
2017-03-08 1:53 ` Guenter Roeck
2017-03-08 6:50 ` Peter Chen
2017-03-08 14:44 ` Guenter Roeck
2017-03-09 2:00 ` Peter Chen
2017-02-21 14:24 ` [PATCH v17 3/3] usb: typec: add driver for Intel Whiskey Cove PMIC USB Type-C PHY Heikki Krogerus
2017-02-21 15:42 ` [PATCH v17 0/3] USB Type-C Connector class Felipe Balbi
2017-03-21 11:14 ` Heikki Krogerus
2017-03-21 10:23 ` Greg KH
2017-03-21 10:37 ` Heikki Krogerus
2017-03-22 21:15 ` Mats Karrman
2017-03-23 8:16 ` Heikki Krogerus
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=949bc063-7002-c12c-ba56-8b46f9ea178b@gmail.com \
--to=mats.dev.list@gmail.com \
--cc=felipe.balbi@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@roeck-us.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome