From: Joe Perches <joe@perches.com>
To: Greg KH <gregkh@linuxfoundation.org>, Jyoti Singh <jssengar92@gmail.com>
Cc: arnd@arndb.de, linux-kernel@vger.kernel.org,
Jyoti Singh <jssengar@gmail.com>
Subject: Re: [PATCH] char: Prefer pr_* instead of printk
Date: Mon, 06 Jun 2016 08:23:29 -0700 [thread overview]
Message-ID: <1465226609.25087.10.camel@perches.com> (raw)
In-Reply-To: <20160604163640.GA6559@kroah.com>
On Sat, 2016-06-04 at 09:36 -0700, Greg KH wrote:
> On Sat, Jun 04, 2016 at 08:15:11PM +0530, Jyoti Singh wrote:
> >
> > This patch replaces all the printk[KERN_INFO] with pr_* in the file
> > "ttyprintk.c" addressing the following warning:
> >
> > WARNING:Prefer [subsystem eg: netdev]_info([subsystem]dev, ...
> > then dev_info(dev,... then pr_info(... to printk(KERN_INFO ...
> > Found with checkpatch
> Sometimes checkpatch tells you to do things that are incorrect :)
>
> Are you _sure_ the code works the same before and after this? The
> ttyprintk driver is a bit "special".
when pr_fmt is not defined (and ttyprint doesn't use pr_fmt),
pr_<level> uses are printks.
#define pr_info(fmt, ...) \
printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
The only one that is not a printk is pr_debug.
It'd be simpler code if all the printks in this file were
consolidated into something like a single tpk_flush function
and the tpk_tag removed.
Something like (completely untested, just typed and compiled
with a couple typos fixed)
---
drivers/char/ttyprintk.c | 69 ++++++++++++++++++++++--------------------------
1 file changed, 31 insertions(+), 38 deletions(-)
diff --git a/drivers/char/ttyprintk.c b/drivers/char/ttyprintk.c
index b098d2d..67549ce 100644
--- a/drivers/char/ttyprintk.c
+++ b/drivers/char/ttyprintk.c
@@ -31,60 +31,53 @@ static struct ttyprintk_port tpk_port;
* printk messages (also suitable for logging service):
* - any cr is replaced by nl
* - adds a ttyprintk source tag in front of each line
- * - too long message is fragmeted, with '\'nl between fragments
- * - TPK_STR_SIZE isn't really the write_room limiting factor, bcause
+ * - too long message is fragmented, with '\'nl between fragments
+ * - TPK_STR_SIZE isn't really the write_room limiting factor, because
* it is emptied on the fly during preformatting.
*/
#define TPK_STR_SIZE 508 /* should be bigger then max expected line length */
#define TPK_MAX_ROOM 4096 /* we could assume 4K for instance */
-static const char *tpk_tag = "[U] "; /* U for User */
static int tpk_curr;
+static char tpk_buffer[TPK_STR_SIZE + 4];
+
+static void tpk_flush(void)
+{
+ if (tpk_curr > 0) {
+ tpk_buffer[tpk_curr] = '\0';
+ pr_info("[U] %s\n", tpk_buffer);
+ tpk_curr = 0;
+ }
+}
+
static int tpk_printk(const unsigned char *buf, int count)
{
- static char tmp[TPK_STR_SIZE + 4];
int i = tpk_curr;
if (buf == NULL) {
- /* flush tmp[] */
- if (tpk_curr > 0) {
- /* non nl or cr terminated message - add nl */
- tmp[tpk_curr + 0] = '\n';
- tmp[tpk_curr + 1] = '\0';
- printk(KERN_INFO "%s%s", tpk_tag, tmp);
- tpk_curr = 0;
- }
+ tpk_flush();
return i;
}
for (i = 0; i < count; i++) {
- tmp[tpk_curr] = buf[i];
- if (tpk_curr < TPK_STR_SIZE) {
- switch (buf[i]) {
- case '\r':
- /* replace cr with nl */
- tmp[tpk_curr + 0] = '\n';
- tmp[tpk_curr + 1] = '\0';
- printk(KERN_INFO "%s%s", tpk_tag, tmp);
- tpk_curr = 0;
- if ((i + 1) < count && buf[i + 1] == '\n')
- i++;
- break;
- case '\n':
- tmp[tpk_curr + 1] = '\0';
- printk(KERN_INFO "%s%s", tpk_tag, tmp);
- tpk_curr = 0;
- break;
- default:
- tpk_curr++;
- }
- } else {
+ if (tpk_curr >= TPK_STR_SIZE) {
/* end of tmp buffer reached: cut the message in two */
- tmp[tpk_curr + 1] = '\\';
- tmp[tpk_curr + 2] = '\n';
- tmp[tpk_curr + 3] = '\0';
- printk(KERN_INFO "%s%s", tpk_tag, tmp);
- tpk_curr = 0;
+ tpk_buffer[tpk_curr++] = '\\';
+ tpk_flush();
+ }
+
+ switch (buf[i]) {
+ case '\r':
+ tpk_flush();
+ if ((i + 1) < count && buf[i + 1] == '\n')
+ i++;
+ break;
+ case '\n':
+ tpk_flush();
+ break;
+ default:
+ tpk_buffer[tpk_curr++] = buf[i];
+ break;
}
}
prev parent reply other threads:[~2016-06-06 15:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-04 14:45 [PATCH] char: Prefer pr_* instead of printk Jyoti Singh
2016-06-04 16:36 ` Greg KH
[not found] ` <CADAjwjQq5u2LYeOQa-L5BJ40hTYcp-23PiBLLHABznVhvkHRUg@mail.gmail.com>
[not found] ` <20160605150322.GB14267@kroah.com>
[not found] ` <CADAjwjSiztcEVMrZEAj34QJK+sn6E8P98edE8Y7=udXYfYWv_g@mail.gmail.com>
2016-06-06 6:14 ` jyoti singh
2016-06-06 14:30 ` Greg KH
2016-06-06 15:23 ` Joe Perches [this message]
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=1465226609.25087.10.camel@perches.com \
--to=joe@perches.com \
--cc=arnd@arndb.de \
--cc=gregkh@linuxfoundation.org \
--cc=jssengar92@gmail.com \
--cc=jssengar@gmail.com \
--cc=linux-kernel@vger.kernel.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.