linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Archit Taneja <architt@codeaurora.org>
To: Andrzej Hajda <a.hajda@samsung.com>, dri-devel@lists.freedesktop.org
Cc: linux-kernel@vger.kernel.org, airlied@linux.ie, daniel@ffwll.ch,
	treding@nvidia.com, l.stach@pengutronix.de, robh@kernel.org,
	linux-arm-msm@vger.kernel.org, jani.nikula@linux.intel.com
Subject: Re: [RFC v2 4/5] drm/dsi: Add routine to unregister dsi device
Date: Tue, 3 Nov 2015 12:48:16 +0530	[thread overview]
Message-ID: <56385FB8.5080207@codeaurora.org> (raw)
In-Reply-To: <56373DFD.9050303@samsung.com>



On 11/02/2015 04:12 PM, Andrzej Hajda wrote:
> On 11/02/2015 07:28 AM, Archit Taneja wrote:
>>
>> On 10/30/2015 07:51 PM, Andrzej Hajda wrote:
>>> On 10/06/2015 11:24 AM, Archit Taneja wrote:
>>>> A driver calling mipi_dsi_device_new might want to unregister the device
>>>> once it's done. It might also require it in an error handling path in
>>>> case something didn't go right.
>>>>
>>>> When the dsi host driver calls mipi_dsi_host_unregister, the devices
>>>> created by both DT and and without DT will be removed. This does leave
>>>> the possibility of the host removing the dsi device without the
>>>> peripheral driver being aware of it. I don't know a good way to solve
>>>> this. Some suggestions here would be of help too.
>>> The 2nd paragraph is not relevant here. It is another issue. Some comments
>>> about it:
>> Yes, it's probably not the best to put it in the commit message of this
>> patch.
>>
>>> I am not sure, but I guess device should not be removed if it is refcounted
>>> properly, it will be just detached from the driver, bus and system (whatever it
>>> means:) ).
>>> It does not mean it will be usable and probably some races can occur anyway.
>>> I guess i2c and other buses have the same problem, am I right?
>> I was concerned about one particular sequence:
>>
>> 1) DSI host driver calls mipi_dsi_host_unregister: All dsi devices would
>> be unregistered.
>>
>> 2) dsi device driver calls mipi_dsi_device_unregister: This will try to
>> unregister our dsi device
>>
>> The problem here is that the device will cease to exist after step (1)
>> itself, because the refcount of our device will never be 2.
>>
>> mipi_dsi_host_register() will only register devices represented in DT,
>> not the one the drivers register manually.
>>
>> In other words, the dsi pointer in our driver will point to nothing
>> valid after mipi_dsi_host_unregister is called.
>>
>> As you said, I guess this exists in other buses too, and it's the
>> drivers job to not use them.
>
> I think the whole problem is due to fact we try to use devices
> as interfaces to some bus hosts (DSI in our case), these devices
> are owned by bus host and we cannot control their lifetime from other code.
> The best solution IMO would be to create separate lightweight framework
> as I suggested in previous discussion[1]. It should be cleaner solution
> without any 'dummy' proxy devices.
> But even in this case we would need some callbacks to notify that the provider
> is about to be removed.
>
> 2nd 'solution' is to leave it as is and pretend everything is OK,
> as in case of other frameworks :)
>
> Maybe it would be possible 3rd solution - we could use probe and remove callbacks
> from dsi driver to notify clients about adding/removal of dsi device to/from bus.
> So during dummy dsi dev creation we would provide some callbacks which would be
> called
> by dummy dsi driver probe/remove to notifiy client it can start/stop using dsi
> device.
> This crazy construction probably can work but looks insane :)
>
> [1]: http://www.spinics.net/lists/linux-arm-msm/msg16945.html

I'm okay with the 2nd solution :). We can add callbacks or a
notification mechanism if anyone needs it in the future.

Thanks,
Archit

>
> Regards
> Andrzej
>
>>
>>>> Signed-off-by: Archit Taneja <architt@codeaurora.org>
>>>> ---
>>>>    drivers/gpu/drm/drm_mipi_dsi.c | 7 +++++++
>>>>    include/drm/drm_mipi_dsi.h     | 2 ++
>>>>    2 files changed, 9 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
>>>> index db6130a..cbb7373 100644
>>>> --- a/drivers/gpu/drm/drm_mipi_dsi.c
>>>> +++ b/drivers/gpu/drm/drm_mipi_dsi.c
>>>> @@ -183,6 +183,13 @@ err:
>>>>    }
>>>>    EXPORT_SYMBOL(mipi_dsi_device_new);
>>>>
>>>> +void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi)
>>>> +{
>>>> +	if (dsi)
>>>> +		device_unregister(&dsi->dev);
>>>> +}
>>>> +EXPORT_SYMBOL(mipi_dsi_device_unregister);
>>>> +
>>> I guess NULL check can be removed and the whole function can be inlined.
>> Yeah, this check won't help anyway.
>>
>> I think I'll mention that drivers should use this only in error
>> handling paths, and not in the driver's remove() op.
>>
>> I'll also change this to inlined.
>>
>> Archit
>>
>>> Regards
>>> Andrzej
>>>>    static struct mipi_dsi_device *
>>>>    of_mipi_dsi_device_add(struct mipi_dsi_host *host, struct device_node *node)
>>>>    {
>>>> diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
>>>> index 93dec7b..68f49f4 100644
>>>> --- a/include/drm/drm_mipi_dsi.h
>>>> +++ b/include/drm/drm_mipi_dsi.h
>>>> @@ -197,6 +197,8 @@ ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params,
>>>>
>>>>    struct mipi_dsi_device *mipi_dsi_device_new(struct mipi_dsi_host *host,
>>>>    					    struct mipi_dsi_device_info *info);
>>>> +void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi);
>>>> +
>>>>    /**
>>>>     * enum mipi_dsi_dcs_tear_mode - Tearing Effect Output Line mode
>>>>     * @MIPI_DSI_DCS_TEAR_MODE_VBLANK: the TE output line consists of V-Blanking
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
Forum, hosted by The Linux Foundation

  reply	other threads:[~2015-11-03  7:18 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-30  5:24 [RFC 0/2] drm/dsi: DSI for devices with different control bus Archit Taneja
2015-06-30  5:24 ` [RFC 1/2] drm/dsi: Create dummy DSI devices Archit Taneja
2015-08-19  8:10   ` Andrzej Hajda
2015-08-19  9:30     ` Archit Taneja
2015-06-30  5:24 ` [RFC 2/2] drm/dsi: Get DSI host by DT device node Archit Taneja
2015-08-19  8:46   ` Andrzej Hajda
2015-08-19  5:07 ` [RFC 0/2] drm/dsi: DSI for devices with different control bus Archit Taneja
2015-08-19 13:13   ` Thierry Reding
2015-08-19 14:17     ` Lucas Stach
2015-08-19 14:34       ` Thierry Reding
2015-08-19 14:52         ` Lucas Stach
2015-08-19 15:02           ` Thierry Reding
2015-08-19 15:39             ` Jani Nikula
2015-08-20  4:16             ` Archit Taneja
2015-08-20 11:48               ` Thierry Reding
2015-08-21  6:09                 ` Archit Taneja
2015-09-07 11:46                   ` Archit Taneja
2015-09-08 10:27                     ` Andrzej Hajda
2015-09-10  6:15                       ` Archit Taneja
2015-09-10  7:32                         ` Thierry Reding
2015-09-15 10:32                           ` Archit Taneja
2015-09-15 15:43                             ` Rob Herring
2015-09-17  8:56                               ` Archit Taneja
2015-09-15 10:41                           ` Archit Taneja
2015-10-06  9:24 ` [RFC v2 0/5] " Archit Taneja
2015-10-06  9:24   ` [RFC v2 1/5] drm/dsi: Refactor device creation Archit Taneja
2015-10-30 11:28     ` Andrzej Hajda
2015-10-06  9:24   ` [RFC v2 2/5] drm/dsi: Try to match non-DT dsi devices Archit Taneja
2015-10-30 12:42     ` Andrzej Hajda
2015-11-02  5:26       ` Archit Taneja
2015-10-06  9:24   ` [RFC v2 3/5] drm/dsi: Check for used channels Archit Taneja
2015-10-30 12:52     ` Andrzej Hajda
2015-11-02  5:28       ` Archit Taneja
2015-10-06  9:24   ` [RFC v2 4/5] drm/dsi: Add routine to unregister dsi device Archit Taneja
2015-10-30 14:21     ` Andrzej Hajda
2015-11-02  6:28       ` Archit Taneja
2015-11-02 10:42         ` Andrzej Hajda
2015-11-03  7:18           ` Archit Taneja [this message]
2015-10-06  9:24   ` [RFC v2 5/5] drm/dsi: Get DSI host by DT device node Archit Taneja
2015-10-06 10:00     ` kbuild test robot
2015-11-02 10:50     ` Andrzej Hajda
2015-11-03  7:20       ` Archit Taneja
2015-11-30 12:01   ` [PATCH v3 0/5] drm/dsi: DSI for devices with different control bus Archit Taneja
2015-11-30 12:01     ` [PATCH v3 1/5] drm/dsi: Refactor device creation Archit Taneja
2015-11-30 12:01     ` [PATCH v3 2/5] drm/dsi: Try to match non-DT dsi devices Archit Taneja
2015-11-30 12:45       ` kbuild test robot
2015-12-07  5:29         ` Archit Taneja
2015-12-07  8:45           ` Jani Nikula
2015-12-07  8:59             ` Archit Taneja
2015-12-07  9:10               ` Jani Nikula
2015-12-07  9:18                 ` Archit Taneja
2015-12-07 10:07                   ` Jani Nikula
2015-12-07 16:55             ` Rob Clark
2015-11-30 12:01     ` [PATCH v3 3/5] drm/dsi: Check for used channels Archit Taneja
2015-11-30 12:01     ` [PATCH v3 4/5] drm/dsi: Add routine to unregister dsi device Archit Taneja
2015-11-30 12:34       ` Andrzej Hajda
2015-11-30 12:01     ` [PATCH v3 5/5] drm/dsi: Get DSI host by DT device node Archit Taneja
2015-12-10 12:41     ` [PATCH v4 0/6] drm/dsi: DSI for devices with different control bus Archit Taneja
2015-12-10 12:41       ` [PATCH v4 1/6] drm/dsi: check for CONFIG_OF when defining of_mipi_dsi_device_add Archit Taneja
2016-01-21 15:31         ` Thierry Reding
2016-01-26 14:59           ` Archit Taneja
2015-12-10 12:41       ` [PATCH v4 2/6] drm/dsi: Refactor device creation Archit Taneja
2016-01-21 15:46         ` Thierry Reding
2016-01-26 17:05           ` Archit Taneja
2015-12-10 12:41       ` [PATCH v4 3/6] drm/dsi: Try to match non-DT dsi devices Archit Taneja
2016-01-21 16:05         ` Thierry Reding
2016-01-26 18:04           ` Archit Taneja
2015-12-10 12:41       ` [PATCH v4 4/6] drm/dsi: Check for used channels Archit Taneja
2016-01-21 16:11         ` Thierry Reding
2016-01-27  5:16           ` Archit Taneja
2015-12-10 12:41       ` [PATCH v4 5/6] drm/dsi: Add routine to unregister dsi device Archit Taneja
2016-01-21 16:12         ` Thierry Reding
2016-01-27  5:20           ` Archit Taneja
2015-12-10 12:41       ` [PATCH v4 6/6] drm/dsi: Get DSI host by DT device node Archit Taneja
2016-01-21 16:16         ` Thierry Reding
2016-01-27  5:21           ` Archit Taneja
2016-01-05  5:29       ` [PATCH v4 0/6] drm/dsi: DSI for devices with different control bus Archit Taneja
2016-02-12  9:18       ` [PATCH v5 0/5] " Archit Taneja
2016-02-12  9:18         ` [PATCH v5 1/5] drm/dsi: check for CONFIG_OF when defining of_mipi_dsi_device_add Archit Taneja
2016-02-12  9:18         ` [PATCH v5 2/5] drm/dsi: Use mipi_dsi_device_register_full for DSI device creation Archit Taneja
2016-02-12  9:18         ` [PATCH v5 3/5] drm/dsi: Try to match non-DT DSI devices Archit Taneja
2016-02-12  9:18         ` [PATCH v5 4/5] drm/dsi: Add routine to unregister a DSI device Archit Taneja
2016-02-12  9:18         ` [PATCH v5 5/5] drm/dsi: Get DSI host by DT device node Archit Taneja
2016-03-02 16:05         ` [PATCH v5 0/5] drm/dsi: DSI for devices with different control bus Thierry Reding

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=56385FB8.5080207@codeaurora.org \
    --to=architt@codeaurora.org \
    --cc=a.hajda@samsung.com \
    --cc=airlied@linux.ie \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=l.stach@pengutronix.de \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robh@kernel.org \
    --cc=treding@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).