/* 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() */
}
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);
#include <linux/sizes.h>
#include <linux/slab.h>
#include <linux/uaccess.h>
+#include <linux/ctype.h>
#include "pool.h"
#include "util.h"
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);
+}
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