All of lore.kernel.org
 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: 144+ 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-06-30  5:24   ` Archit Taneja
2015-08-19  8:10   ` Andrzej Hajda
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-06-30  5:24   ` Archit Taneja
2015-08-19  8:46   ` Andrzej Hajda
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 13:13     ` Thierry Reding
2015-08-19 14:17     ` Lucas Stach
2015-08-19 14:34       ` Thierry Reding
2015-08-19 14:34         ` Thierry Reding
2015-08-19 14:52         ` Lucas Stach
2015-08-19 14:52           ` Lucas Stach
2015-08-19 15:02           ` Thierry Reding
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-20 11:48                 ` Thierry Reding
2015-08-21  6:09                 ` Archit Taneja
2015-08-21  6:09                   ` Archit Taneja
2015-09-07 11:46                   ` 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  6:15                         ` Archit Taneja
2015-09-10  7:32                         ` Thierry Reding
2015-09-10  7:32                           ` Thierry Reding
2015-09-15 10:32                           ` Archit Taneja
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-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-06  9:24     ` Archit Taneja
2015-10-30 11:28     ` Andrzej Hajda
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-06  9:24     ` Archit Taneja
2015-10-30 12:42     ` Andrzej Hajda
2015-10-30 12:42       ` Andrzej Hajda
2015-11-02  5:26       ` Archit Taneja
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-06  9:24     ` Archit Taneja
2015-10-30 12:52     ` Andrzej Hajda
2015-11-02  5:28       ` Archit Taneja
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-06  9:24     ` Archit Taneja
2015-10-30 14:21     ` Andrzej Hajda
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  9:24     ` Archit Taneja
2015-10-06 10:00     ` kbuild test robot
2015-10-06 10:00       ` kbuild test robot
2015-11-02 10:50     ` Andrzej Hajda
2015-11-02 10:50       ` Andrzej Hajda
2015-11-03  7:20       ` Archit Taneja
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       ` 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:01       ` Archit Taneja
2015-11-30 12:45       ` kbuild test robot
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  8:59               ` Archit Taneja
2015-12-07  9:10               ` Jani Nikula
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       ` 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:01       ` Archit Taneja
2015-11-30 12:34       ` Andrzej Hajda
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-11-30 12:01       ` 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
2015-12-10 12:41         ` Archit Taneja
2016-01-21 15:31         ` Thierry Reding
2016-01-21 15:31           ` Thierry Reding
2016-01-26 14:59           ` Archit Taneja
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-21 15:46           ` Thierry Reding
2016-01-26 17:05           ` Archit Taneja
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
2015-12-10 12:41         ` Archit Taneja
2016-01-21 16:05         ` Thierry Reding
2016-01-21 16:05           ` Thierry Reding
2016-01-26 18:04           ` Archit Taneja
2016-01-26 18:04             ` Archit Taneja
2015-12-10 12:41       ` [PATCH v4 4/6] drm/dsi: Check for used channels Archit Taneja
2015-12-10 12:41         ` Archit Taneja
2016-01-21 16:11         ` Thierry Reding
2016-01-21 16:11           ` Thierry Reding
2016-01-27  5:16           ` Archit Taneja
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
2015-12-10 12:41         ` Archit Taneja
2016-01-21 16:12         ` Thierry Reding
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
2015-12-10 12:41         ` Archit Taneja
2016-01-21 16:16         ` Thierry Reding
2016-01-21 16:16           ` Thierry Reding
2016-01-27  5:21           ` Archit Taneja
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         ` 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           ` 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           ` 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           ` 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           ` Archit Taneja
2016-02-12  9:18         ` [PATCH v5 5/5] drm/dsi: Get DSI host by DT device node Archit Taneja
2016-02-12  9:18           ` Archit Taneja
2016-03-02 16:05         ` [PATCH v5 0/5] drm/dsi: DSI for devices with different control bus Thierry Reding
2016-03-02 16:05           ` 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 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.