All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Alexey Galakhov <agalakhov@gmail.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH] Force set console baudrate
Date: Wed, 10 Jul 2013 11:01:31 +0200	[thread overview]
Message-ID: <20130710090131.GE516@pengutronix.de> (raw)
In-Reply-To: <51DD1D11.1010103@gmail.com>

On Wed, Jul 10, 2013 at 02:36:33PM +0600, Alexey Galakhov wrote:
> On 07/10/2013 02:07 PM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> 
> > This does force the same baud rate on ALL console device at register time => wrong
> 
> I think it is correct, and I'll explain why.
> 
> If the baudrate for the device is set explicitly via "baudrate"
> parameter, it WILL override any register time setting, so the register
> time setting does not matter at all.
> 
> If the baudrate for the device is not set, CONFIG_BAUDRATE is
> applicable. If the "baudrate" property is read, it even returns
> CONFIG_BAUDRATE value. The device is expected to work at CONFIG_BAUDRATE
> if "baudrate" is not set.
> 
> Calling setbrg() at registration time just ensures that the "baudrate"
> formal parameter matches actual device settings.
> 
> >> There is "chicken and egg" problem. barebox_banner() requires valid
> >> baudrate setting and may deadlock without it. (It WILL deadlock on most
> >> serial drivers and really deadlocks on S3C one).
> > 
> > so do is at enable time not register time
> 
> Maybe, but why then we have if (cdev->f_active) ... else
> cdev->setbrg(...) in console_baudrate_set()? Doesn't this mean that
> setbrg() is meant to be called BEFORE enable time?
> 
> >> If the device does not have setbrg() function defined, nothing will be
> >> called. This all is under if (newcdev->setbrg) anyway.
> > 
> > this will result is a call of a NULL pointer -> crash
> 
> No, it won't of course! The pointer IS checked before setbrg() call by
> an existing if(newcdev->setbrg), so no NULL-pointer reference will be
> called.
> 
> Please look at the code one more time:
> 
> // If the device being registered has setbrg function defined...
> if (newcdev->setbrg) {
>         // ... then set its default baudrate...
>         newcdev->baudrate = CONFIG_BAUDRATE;
>         // ... add "baudrate" parameter to allow this to be changed...
>         dev_add_param_int(dev, "baudrate", console_baudrate_set,
>                 NULL, &newcdev->baudrate, "%u", newcdev);
>         // ... and MY ADDITION - actually activate this parameter.
>         newcdev->setbrg(newcdev, newcdev->baudrate);
> }
> NULL-pointer dereference is guaranteed not to happen here.

Which makes the hardware state consistent with the logical state inside
the data structures. This can't be too wrong.

Anyway, maybe Jean-Christophe is right and we should do this in
console_std_set by adding:

	if(flag && cdev->setbrg)
		cdev->setbrg(cdev, cdev->baudrate);

This makes sure the hardware is only ever touched when the console is
actually used.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2013-07-10  9:02 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-09 15:22 [PATCH] Force set console baudrate Alexey Galakhov
2013-07-09 17:43 ` Sascha Hauer
2013-07-09 18:57   ` Jean-Christophe PLAGNIOL-VILLARD
2013-07-09 20:09     ` Alexey Galakhov
2013-07-10  8:07       ` Jean-Christophe PLAGNIOL-VILLARD
2013-07-10  8:36         ` Alexey Galakhov
2013-07-10  9:01           ` Sascha Hauer [this message]
2013-07-10  9:36             ` Alexey Galakhov
2013-07-10 10:15             ` [PATCH 1/2] Revert "Force set console baudrate" Alexey Galakhov
2013-07-10 10:15             ` [PATCH 2/2] Force set console baudrate at enable time Alexey Galakhov
2013-07-10 21:28               ` Sascha Hauer
2013-07-11  7:13                 ` Alexey Galakhov

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=20130710090131.GE516@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=agalakhov@gmail.com \
    --cc=barebox@lists.infradead.org \
    /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.