aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/goldfish/patches-2.6.30/0133--ARM-goldfish-qemutrace-Add-mmap-support.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/goldfish/patches-2.6.30/0133--ARM-goldfish-qemutrace-Add-mmap-support.patch')
-rw-r--r--target/linux/goldfish/patches-2.6.30/0133--ARM-goldfish-qemutrace-Add-mmap-support.patch84
1 files changed, 84 insertions, 0 deletions
diff --git a/target/linux/goldfish/patches-2.6.30/0133--ARM-goldfish-qemutrace-Add-mmap-support.patch b/target/linux/goldfish/patches-2.6.30/0133--ARM-goldfish-qemutrace-Add-mmap-support.patch
new file mode 100644
index 0000000000..44554a6176
--- /dev/null
+++ b/target/linux/goldfish/patches-2.6.30/0133--ARM-goldfish-qemutrace-Add-mmap-support.patch
@@ -0,0 +1,84 @@
+From 2309613958ee518f94f1a7ba900e08e604e06048 Mon Sep 17 00:00:00 2001
+From: Jack Veenstra <veenstra@android.com>
+Date: Fri, 1 May 2009 18:50:10 -0700
+Subject: [PATCH 133/134] [ARM] goldfish: qemutrace: Add mmap support.
+
+This makes a page of data available for writing from user-space to allow
+the Dalvik interpreter to send method trace information to the emulator.
+
+Signed-off-by: Jack Veenstra <veenstra@android.com>
+---
+ drivers/misc/qemutrace/qemu_trace.c | 35 ++++++++++++++++++++++++++++++++++-
+ 1 files changed, 34 insertions(+), 1 deletions(-)
+
+--- a/drivers/misc/qemutrace/qemu_trace.c
++++ b/drivers/misc/qemutrace/qemu_trace.c
+@@ -53,6 +53,7 @@
+
+ static unsigned char __iomem *qt_base;
+ static int init_called;
++static uint32_t qemu_trace_paddr;
+
+ /* PIDs that start before our device registered */
+ #define MAX_INIT_PIDS 2048
+@@ -330,8 +331,30 @@ static void qemu_trace_dump_init_threads
+ }
+ }
+
++static int qemu_trace_mmap_fop(struct file *file, struct vm_area_struct *vma)
++{
++ int ret = io_remap_pfn_range(vma, vma->vm_start,
++ (qemu_trace_paddr >> PAGE_SHIFT) + 1,
++ PAGE_SIZE, vma->vm_page_prot);
++ if (ret < 0)
++ return ret;
++ return 0;
++}
++
++static const struct file_operations qemu_trace_fops = {
++ .owner = THIS_MODULE,
++ .mmap = qemu_trace_mmap_fop,
++};
++
++static struct miscdevice qemu_trace_device = {
++ .minor = MISC_DYNAMIC_MINOR,
++ .name = "qemu_trace",
++ .fops = &qemu_trace_fops,
++};
++
+ static int qemu_trace_probe(struct platform_device *pdev)
+ {
++ int err;
+ struct resource *r;
+
+ /* not thread safe, but this should not happen */
+@@ -340,18 +363,28 @@ static int qemu_trace_probe(struct platf
+ return -ENODEV;
+ }
+ r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+- if (r == NULL)
++ if (r == NULL || r->end - r->start < 2 * PAGE_SIZE - 1)
+ return -EINVAL;
++ qemu_trace_paddr = r->start;
+ qt_base = ioremap(r->start, PAGE_SIZE);
+ printk(KERN_INFO "QEMU TRACE Device: The mapped IO base is %p\n", qt_base);
+
+ qemu_trace_dump_init_threads();
++ err = misc_register(&qemu_trace_device);
++ if (err)
++ goto err_misc_register;
+
+ return 0;
++
++err_misc_register:
++ iounmap(qt_base);
++ qt_base = NULL;
++ return err;
+ }
+
+ static int qemu_trace_remove(struct platform_device *pdev)
+ {
++ misc_deregister(&qemu_trace_device);
+ iounmap(qt_base);
+ qt_base = NULL;
+ return 0;