static ssize_t debug_read_tlb(struct file *file, char __user *userbuf, size_t count, loff_t *ppos) { struct device *dev = file->private_data; struct omap_iommu *obj = dev_to_omap_iommu(dev); char *p, *buf; ssize_t bytes, rest; buf = kmalloc(count, GFP_KERNEL); if (!buf) return -ENOMEM; p = buf; mutex_lock(&iommu_debug_lock); p += sprintf(p, "%8s %8s\n", "cam:", "ram:"); p += sprintf(p, "-----------------------------------------\n"); rest = count - (p - buf); p += omap_dump_tlb_entries(obj, p, rest); bytes = simple_read_from_buffer(userbuf, count, ppos, buf, p - buf); mutex_unlock(&iommu_debug_lock); kfree(buf); return bytes; }
static int debug_read_tlb(struct seq_file *s, void *data) { struct omap_iommu *obj = s->private; if (is_omap_iommu_detached(obj)) return -EPERM; mutex_lock(&iommu_debug_lock); seq_printf(s, "%8s %8s\n", "cam:", "ram:"); seq_puts(s, "-----------------------------------------\n"); omap_dump_tlb_entries(obj, s); mutex_unlock(&iommu_debug_lock); return 0; }