mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Alexey Galakhov <agalakhov@gmail.com>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH] Force set console baudrate
Date: Wed, 10 Jul 2013 14:36:33 +0600	[thread overview]
Message-ID: <51DD1D11.1010103@gmail.com> (raw)
In-Reply-To: <FEE56E32-09DD-4D07-BFFD-D986FAEA78F9@jcrosoft.com>

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.

> If the console is not enable there no need to do anything
> you need to set the baud rate ONLY if the device is enable

To be more precice: if the device that was previously disabled is
enabled. Correct. This is better than the current approach. Calling
setbrg() in the else clause of console_baudrate_set() is incorrect as
well so it should be removed (to be more precise, moved to init time).

Regards,
Alex

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

  reply	other threads:[~2013-07-10  8:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-09 15:22 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 [this message]
2013-07-10  9:01           ` Sascha Hauer
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=51DD1D11.1010103@gmail.com \
    --to=agalakhov@gmail.com \
    --cc=barebox@lists.infradead.org \
    --cc=plagnioj@jcrosoft.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