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;
                }
        }
 

Reply via email to