add debug log code
authorKay Sievers <kay@vrfy.org>
Tue, 18 Mar 2014 21:17:22 +0000 (22:17 +0100)
committerKay Sievers <kay@vrfy.org>
Tue, 18 Mar 2014 21:17:22 +0000 (22:17 +0100)
connection.c
pool.c
pool.h

index b3227ef7f6b2ff8bd207ae66094ba957935faeaa..a226f084eea8a25b5fcbe686e0764b6981b4419d 100644 (file)
@@ -702,6 +702,7 @@ static int kdbus_conn_queue_insert(struct kdbus_conn *conn,
        /* link the message into the receiver's queue */
        mutex_lock(&conn->lock);
        kdbus_conn_queue_add(conn, queue);
+       kdbus_pool_log(conn->pool, queue->off, queue->size, "SEND", conn_src ? conn_src->id : 0, conn->id, queue->cookie);
        mutex_unlock(&conn->lock);
 
        /* wake up poll() */
@@ -1073,6 +1074,7 @@ int kdbus_cmd_msg_recv(struct kdbus_conn *conn,
        }
 
        ret = kdbus_conn_msg_install(conn, queue);
+       kdbus_pool_log(conn->pool, queue->off, queue->size, "RECV", 0 , conn->id, queue->cookie);
        kdbus_conn_queue_remove(conn, queue);
        kdbus_conn_queue_cleanup(queue);
 
diff --git a/pool.c b/pool.c
index cbf8ee7d76ba185da7f70288ded4c6789cd1f562..16de3693c3f5aa3aa77007afa27828e70bd41ac6 100644 (file)
--- a/pool.c
+++ b/pool.c
@@ -24,6 +24,7 @@
 #include <linux/sizes.h>
 #include <linux/slab.h>
 #include <linux/uaccess.h>
+#include <linux/ctype.h>
 
 #include "pool.h"
 #include "util.h"
@@ -678,3 +679,45 @@ int kdbus_pool_mmap(const struct kdbus_pool *pool, struct vm_area_struct *vma)
 
        return pool->f->f_op->mmap(pool->f, vma);
 }
+
+void kdbus_pool_log(const struct kdbus_pool *pool, size_t off, size_t len,
+                   const char *s, u64 src, u64 dst, u64 cookie)
+{
+       struct address_space *mapping = pool->f->f_mapping;
+       struct page *page;
+       char *kaddr;
+       size_t o = off & (PAGE_CACHE_SIZE - 1);
+       char buf[256];
+       unsigned int i;
+
+       page = find_get_page(mapping, off >> PAGE_CACHE_SHIFT);
+       if (!page)
+               return;
+
+       kaddr = kmap(page);
+
+       for (i = 0; i < len && i < sizeof(buf)-1; i++) {
+               char c = kaddr[o + i];
+
+               switch (c) {
+               case '1' ... '9':
+               case 'a' ... 'z':
+               case 'A' ... 'Z':
+               case '-':
+               case '/':
+               case ':':
+                       buf[i] = c;
+                       break;
+               case '\0':
+                       buf[i] = '_';
+                       break;
+               default:
+                       buf[i] = '.';
+               }
+       }
+       buf[i] = '\0';
+       printk(KERN_INFO "XXX %s %04llu %04llu %08zu %08zu %04llu '%s'\n", s, src, dst, len, off, cookie, buf);
+
+       kunmap(page);
+       put_page(page);
+}
diff --git a/pool.h b/pool.h
index d1df4252031ffdf9b5f6e0deb8e4e75beed3f172..e0a1faadb20aef9ec3270ee6d8e3b2c92780ca0f 100644 (file)
--- a/pool.h
+++ b/pool.h
@@ -31,4 +31,6 @@ int kdbus_pool_move(struct kdbus_pool *dst_pool,
 void kdbus_pool_flush_dcache(const struct kdbus_pool *pool,
                             size_t off, size_t len);
 int kdbus_pool_mmap(const struct kdbus_pool *pool, struct vm_area_struct *vma);
+void kdbus_pool_log(const struct kdbus_pool *pool, size_t off, size_t len,
+                   const char *s, u64 src, u64 dst, u64 cookie);
 #endif