All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Simon Horman <horms@verge.net.au>,
	Magnus Damm <magnus.damm@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	"linux-serial@vger.kernel.org" <linux-serial@vger.kernel.org>,
	Linux-sh list <linux-sh@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Linux PM list <linux-pm@vger.kernel.org>
Subject: Re: [PATCH 07/25] serial: sh-sci: Convert from clk_get() to devm_clk_get()
Date: Sun, 13 Dec 2015 19:39:02 +0000	[thread overview]
Message-ID: <1466956.fL4LZVx6Ru@avalon> (raw)
In-Reply-To: <CAMuHMdXn4xa-0wfL8DXbhzfsPwymT5XXBR70eSL-OF5Fv67+mg@mail.gmail.com>

Hi Geert,

On Thursday 10 December 2015 13:30:18 Geert Uytterhoeven wrote:
> On Thu, Nov 19, 2015 at 9:38 PM, Laurent Pinchart wrote:
> > On Thursday 19 November 2015 19:38:46 Geert Uytterhoeven wrote:
> >> Transfer clock cleanup handling to the core device management code.
> >> 
> >> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> >> ---
> >> 
> >>  drivers/tty/serial/sh-sci.c | 8 +++-----
> >>  1 file changed, 3 insertions(+), 5 deletions(-)
> >> 
> >> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> >> index cba51da604253db6..9442961a198378c7 100644
> >> --- a/drivers/tty/serial/sh-sci.c
> >> +++ b/drivers/tty/serial/sh-sci.c
> >> @@ -2216,7 +2216,7 @@ static struct uart_ops sci_uart_ops = {
> >> 
> >>  static int sci_init_clocks(struct sci_port *sci_port, struct device
> >>  *dev)
> >>  {
> >>  
> >>       /* Get the SCI functional clock. It's called "fck" on ARM. */
> >> 
> >> -     sci_port->fclk = clk_get(dev, "fck");
> >> +     sci_port->fclk = devm_clk_get(dev, "fck");
> > 
> > Have you tested what happens if you unbind the device from the driver
> > while userspace has the serial port open ?
> 
> Yes I have. And I didn't notice any user-visible behavioral differences.
> 
> There is a small ordering difference, though: with clk_get() and clk_put(),
> the explicit clk_put() is done before removing the device from its PM
> Domain (which involces another call to clk_put() on the module clock):
> 
>     device_release_driver
>         __device_release_driver
>             platform_drv_remove
>                 sci_remove
>                     sci_cleanup_single
>                         __clk_put
>                 genpd_dev_pm_detach
>                     pm_genpd_remove_device
>                         pm_clk_destroy
>                             __pm_clk_remove
>                                 __clk_put
> 
> When using devm_clk_get(), the managed cleanup is done after the device has
> been removed from its PM Domain:
> 
>     device_release_driver
>         __device_release_driver
>             platform_drv_remove
>                 genpd_dev_pm_detach
>                     pm_genpd_remove_device
>                         pm_clk_destroy
>                             __pm_clk_remove
>                                 __clk_put
>             release_nodes
>                 __clk_put
> 
> This shouldn't make a difference, and applies to all other drivers using
> devm_*(), and devices that are part of a PM Domain.

I was more concerned about the clk_disable_unprepare() calls. The function is 
called through the uart pm handler which is called when closing the uart 
(uart_close()). It's a bit difficult to follow the dynamic code paths as I'm 
not very familiar with the framework, but I was concerned that the would end 
up calling clk_disable_unprepare() on a clock for which we have no reference 
anymore. What prevents clk_disable_unprepare() from being called in the close 
path after the device has been unbound ? And what ensures that the clocks get 
unprepared when unbinding the device if the port is held open by a userspace 
process ?

-- 
Regards,

Laurent Pinchart


WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Geert Uytterhoeven <geert+renesas@glider.be>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Simon Horman <horms@verge.net.au>,
	Magnus Damm <magnus.damm@gmail.com>,
	Yoshinori Sato <ysato@users.sourceforge.jp>,
	"linux-serial@vger.kernel.org" <linux-serial@vger.kernel.org>,
	Linux-sh list <linux-sh@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Linux PM list <linux-pm@vger.kernel.org>
Subject: Re: [PATCH 07/25] serial: sh-sci: Convert from clk_get() to devm_clk_get()
Date: Sun, 13 Dec 2015 21:39:02 +0200	[thread overview]
Message-ID: <1466956.fL4LZVx6Ru@avalon> (raw)
In-Reply-To: <CAMuHMdXn4xa-0wfL8DXbhzfsPwymT5XXBR70eSL-OF5Fv67+mg@mail.gmail.com>

Hi Geert,

On Thursday 10 December 2015 13:30:18 Geert Uytterhoeven wrote:
> On Thu, Nov 19, 2015 at 9:38 PM, Laurent Pinchart wrote:
> > On Thursday 19 November 2015 19:38:46 Geert Uytterhoeven wrote:
> >> Transfer clock cleanup handling to the core device management code.
> >> 
> >> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> >> ---
> >> 
> >>  drivers/tty/serial/sh-sci.c | 8 +++-----
> >>  1 file changed, 3 insertions(+), 5 deletions(-)
> >> 
> >> diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
> >> index cba51da604253db6..9442961a198378c7 100644
> >> --- a/drivers/tty/serial/sh-sci.c
> >> +++ b/drivers/tty/serial/sh-sci.c
> >> @@ -2216,7 +2216,7 @@ static struct uart_ops sci_uart_ops = {
> >> 
> >>  static int sci_init_clocks(struct sci_port *sci_port, struct device
> >>  *dev)
> >>  {
> >>  
> >>       /* Get the SCI functional clock. It's called "fck" on ARM. */
> >> 
> >> -     sci_port->fclk = clk_get(dev, "fck");
> >> +     sci_port->fclk = devm_clk_get(dev, "fck");
> > 
> > Have you tested what happens if you unbind the device from the driver
> > while userspace has the serial port open ?
> 
> Yes I have. And I didn't notice any user-visible behavioral differences.
> 
> There is a small ordering difference, though: with clk_get() and clk_put(),
> the explicit clk_put() is done before removing the device from its PM
> Domain (which involces another call to clk_put() on the module clock):
> 
>     device_release_driver
>         __device_release_driver
>             platform_drv_remove
>                 sci_remove
>                     sci_cleanup_single
>                         __clk_put
>                 genpd_dev_pm_detach
>                     pm_genpd_remove_device
>                         pm_clk_destroy
>                             __pm_clk_remove
>                                 __clk_put
> 
> When using devm_clk_get(), the managed cleanup is done after the device has
> been removed from its PM Domain:
> 
>     device_release_driver
>         __device_release_driver
>             platform_drv_remove
>                 genpd_dev_pm_detach
>                     pm_genpd_remove_device
>                         pm_clk_destroy
>                             __pm_clk_remove
>                                 __clk_put
>             release_nodes
>                 __clk_put
> 
> This shouldn't make a difference, and applies to all other drivers using
> devm_*(), and devices that are part of a PM Domain.

I was more concerned about the clk_disable_unprepare() calls. The function is 
called through the uart pm handler which is called when closing the uart 
(uart_close()). It's a bit difficult to follow the dynamic code paths as I'm 
not very familiar with the framework, but I was concerned that the would end 
up calling clk_disable_unprepare() on a clock for which we have no reference 
anymore. What prevents clk_disable_unprepare() from being called in the close 
path after the device has been unbound ? And what ensures that the clocks get 
unprepared when unbinding the device if the port is held open by a userspace 
process ?

-- 
Regards,

Laurent Pinchart


  reply	other threads:[~2015-12-13 19:39 UTC|newest]

Thread overview: 151+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19 18:38 [PATCH 00/25] serial: sh-sci: Add external clock and BRG Support Geert Uytterhoeven
2015-11-19 18:38 ` Geert Uytterhoeven
     [not found] ` <1447958344-836-1-git-send-email-geert+renesas-gXvu3+zWzMSzQB+pC5nmwQ@public.gmane.org>
2015-11-19 18:38   ` [PATCH 01/25] serial: sh-sci: Update DT binding documentation for external clock input Geert Uytterhoeven
2015-11-19 18:38     ` Geert Uytterhoeven
2015-11-19 18:38     ` Geert Uytterhoeven
     [not found]     ` <1447958344-836-2-git-send-email-geert+renesas-gXvu3+zWzMSzQB+pC5nmwQ@public.gmane.org>
2015-11-19 20:19       ` Laurent Pinchart
2015-11-19 20:19         ` Laurent Pinchart
2015-11-19 20:19         ` Laurent Pinchart
2015-11-19 20:27         ` Laurent Pinchart
2015-11-19 20:27           ` Laurent Pinchart
2015-11-19 20:39           ` Geert Uytterhoeven
2015-11-19 20:39             ` Geert Uytterhoeven
2015-11-19 20:39             ` Geert Uytterhoeven
     [not found]             ` <CAMuHMdUnT2zCnj9QBVgxJaHV2fk5iuc7cxq=fh+fVTv3toOVaQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-11-19 21:17               ` Laurent Pinchart
2015-11-19 21:17                 ` Laurent Pinchart
2015-11-19 21:17                 ` Laurent Pinchart
2015-11-20  8:00                 ` Geert Uytterhoeven
2015-11-20  8:00                   ` Geert Uytterhoeven
2015-11-19 20:33         ` Geert Uytterhoeven
2015-11-19 20:33           ` Geert Uytterhoeven
     [not found]           ` <CAMuHMdX4ToefbBLR6o2AMuzCMoKcYo9XRZOzHJzgtQn552vmNg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-12-21 14:20             ` Geert Uytterhoeven
2015-12-21 14:20               ` Geert Uytterhoeven
2015-12-21 14:20               ` Geert Uytterhoeven
2015-11-19 18:38   ` [PATCH 02/25] serial: sh-sci: Update DT binding documentation for BRG support Geert Uytterhoeven
2015-11-19 18:38     ` Geert Uytterhoeven
2015-11-19 18:38     ` Geert Uytterhoeven
2015-11-19 20:26     ` Laurent Pinchart
2015-11-19 20:26       ` Laurent Pinchart
2015-11-19 20:44       ` Geert Uytterhoeven
2015-11-19 20:44         ` Geert Uytterhoeven
     [not found]         ` <CAMuHMdWHbc1kK7MipyZ_M_C6gPyPqvC4H35eZLXQezjbQNK2Jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-11-19 21:13           ` Laurent Pinchart
2015-11-19 21:13             ` Laurent Pinchart
2015-11-19 21:13             ` Laurent Pinchart
2015-11-20  7:58             ` Geert Uytterhoeven
2015-11-20  7:58               ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 03/25] serial: sh-sci: Drop useless check for zero sampling_rate Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 04/25] serial: sh-sci: Grammar s/Get ... for/Get ... from/ Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 05/25] serial: sh-sci: Drop unused frame_len parameter for sci_baud_calc_hscif() Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 06/25] serial: sh-sci: Don't overwrite clock selection in serial_console_write() Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 07/25] serial: sh-sci: Convert from clk_get() to devm_clk_get() Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 20:38   ` Laurent Pinchart
2015-11-19 20:38     ` Laurent Pinchart
2015-12-10 12:30     ` Geert Uytterhoeven
2015-12-10 12:30       ` Geert Uytterhoeven
2015-12-13 19:39       ` Laurent Pinchart [this message]
2015-12-13 19:39         ` Laurent Pinchart
2015-12-14 10:34         ` Geert Uytterhoeven
2015-12-14 10:34           ` Geert Uytterhoeven
2015-12-14 15:47           ` Laurent Pinchart
2015-12-14 15:47             ` Laurent Pinchart
2015-11-19 18:38 ` [PATCH 08/25] serial: sh-sci: Make unsigned values in sci_baud_calc_hscif() unsigned Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 20:36   ` Laurent Pinchart
2015-11-19 20:36     ` Laurent Pinchart
2015-11-19 20:49     ` Geert Uytterhoeven
2015-11-19 20:49       ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 09/25] serial: sh-sci: Avoid overflow in sci_baud_calc_hscif() Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 20:37   ` Laurent Pinchart
2015-11-19 20:37     ` Laurent Pinchart
2015-11-19 20:50     ` Geert Uytterhoeven
2015-11-19 20:50       ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 10/25] serial: sh-sci: Improve bit rate error calculation for HSCIF Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 11/25] serial: sh-sci: Avoid calculating the receive margin " Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 12/25] serial: sh-sci: Merge sci_scbrr_calc() and sci_baud_calc_hscif() Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 13/25] serial: sh-sci: Take into account sampling rate for max baud rate Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 14/25] serial: sh-sci: Add BRG register definitions Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 20:45   ` Laurent Pinchart
2015-11-19 20:45     ` Laurent Pinchart
2015-11-19 18:38 ` [PATCH 15/25] serial: sh-sci: Replace struct sci_port_info by type/regtype encoding Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 16/25] serial: sh-sci: Correct SCIF type on RZ/A1H Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 17/25] serial: sh-sci: Correct SCIF type on R-Car for BRG Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 20:55   ` Laurent Pinchart
2015-11-19 20:55     ` Laurent Pinchart
2015-11-20  7:46     ` Geert Uytterhoeven
2015-11-20  7:46       ` Geert Uytterhoeven
2015-11-20 14:52       ` Laurent Pinchart
2015-11-20 14:52         ` Laurent Pinchart
2015-11-20 15:30         ` Geert Uytterhoeven
2015-11-20 15:30           ` Geert Uytterhoeven
2015-11-20 15:33           ` Laurent Pinchart
2015-11-20 15:33             ` Laurent Pinchart
2015-12-10  9:21             ` Geert Uytterhoeven
2015-12-10  9:21               ` Geert Uytterhoeven
2015-12-11  1:12               ` Simon Horman
2015-12-11  1:12                 ` Simon Horman
2015-12-13 19:18               ` Laurent Pinchart
2015-12-13 19:18                 ` Laurent Pinchart
2015-11-19 18:38 ` [PATCH 18/25] serial: sh-sci: Prepare for multiple clocks and baud rate generators Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 21:04   ` Laurent Pinchart
2015-11-19 21:04     ` Laurent Pinchart
2015-11-20  7:52     ` Geert Uytterhoeven
2015-11-20  7:52       ` Geert Uytterhoeven
2015-11-20 14:47       ` Laurent Pinchart
2015-11-20 14:47         ` Laurent Pinchart
2015-11-20 15:17         ` Geert Uytterhoeven
2015-11-20 15:17           ` Geert Uytterhoeven
2015-11-20 15:31           ` Laurent Pinchart
2015-11-20 15:31             ` Laurent Pinchart
2015-11-19 18:38 ` [PATCH 19/25] serial: sh-sci: Add support for optional external (H)SCK input Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:38 ` [PATCH 20/25] serial: sh-sci: Add support for optional BRG on (H)SCIF Geert Uytterhoeven
2015-11-19 18:38   ` Geert Uytterhoeven
2015-11-19 18:39 ` [PATCH 21/25] ARM: shmobile: r8a7791 dtsi: Add BRG support for (H)SCIF Geert Uytterhoeven
2015-11-19 18:39   ` Geert Uytterhoeven
2015-11-19 18:39 ` [PATCH 22/25] ARM: shmobile: koelsch dts: Enable SCIF_CLK frequency and pins Geert Uytterhoeven
2015-11-19 18:39   ` Geert Uytterhoeven
2015-11-19 18:39 ` [PATCH 23/25] arm64: renesas: r8a7795 dtsi: Add BRG support for (H)SCIF Geert Uytterhoeven
2015-11-19 18:39   ` Geert Uytterhoeven
2015-11-19 21:07   ` Laurent Pinchart
2015-11-19 21:07     ` Laurent Pinchart
2015-11-20  8:17     ` Geert Uytterhoeven
2015-11-20  8:17       ` Geert Uytterhoeven
2015-11-19 18:39 ` [PATCH 24/25] arm64: renesas: salvator-x dts: Enable SCIF_CLK frequency and pins Geert Uytterhoeven
2015-11-19 18:39   ` Geert Uytterhoeven
2015-11-19 18:39 ` [PATCH 25/25] sh: sh7734: Correct SCIF type for BRG Geert Uytterhoeven
2015-11-19 18:39   ` Geert Uytterhoeven
2015-11-19 21:08 ` [PATCH 00/25] serial: sh-sci: Add external clock and BRG Support Laurent Pinchart
2015-11-19 21:08   ` Laurent Pinchart
2015-11-20  8:22   ` Geert Uytterhoeven
2015-11-20  8:22     ` Geert Uytterhoeven
2015-11-20  8:58     ` Laurent Pinchart
2015-11-20  8:58       ` Laurent Pinchart
2015-11-20  9:07       ` Geert Uytterhoeven
2015-11-20  9:07         ` Geert Uytterhoeven
2015-11-20 14:50         ` Laurent Pinchart
2015-11-20 14:50           ` Laurent Pinchart
2015-11-20 15:31           ` Geert Uytterhoeven
2015-11-20 15:31             ` Geert Uytterhoeven
2015-11-20  9:09 ` Geert Uytterhoeven
2015-11-20  9:09   ` Geert Uytterhoeven
2015-12-13  6:43   ` Greg Kroah-Hartman
2015-12-13  6:43     ` Greg Kroah-Hartman
2015-12-13  9:09     ` Geert Uytterhoeven
2015-12-13  9:09       ` Geert Uytterhoeven
2015-11-24  2:43 ` Simon Horman
2015-11-24  2:43   ` Simon Horman

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=1466956.fL4LZVx6Ru@avalon \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=geert+renesas@glider.be \
    --cc=geert@linux-m68k.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=horms@verge.net.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=ysato@users.sourceforge.jp \
    /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.