forked from Minki/linux
iommu/omap: Make pagetable debugfs entry read-only
Remove the writeability on the 'pagetable' debugfs entry, so that the mapping/unmapping into an OMAP IOMMU is only limited to actual client devices/drivers at kernel-level. Signed-off-by: Suman Anna <s-anna@ti.com> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
68570a7446
commit
3ca5db072c
@ -24,8 +24,6 @@
|
|||||||
#include "omap-iopgtable.h"
|
#include "omap-iopgtable.h"
|
||||||
#include "omap-iommu.h"
|
#include "omap-iommu.h"
|
||||||
|
|
||||||
#define MAXCOLUMN 100 /* for short messages */
|
|
||||||
|
|
||||||
static DEFINE_MUTEX(iommu_debug_lock);
|
static DEFINE_MUTEX(iommu_debug_lock);
|
||||||
|
|
||||||
static struct dentry *iommu_debug_root;
|
static struct dentry *iommu_debug_root;
|
||||||
@ -82,39 +80,6 @@ static ssize_t debug_read_tlb(struct file *file, char __user *userbuf,
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t debug_write_pagetable(struct file *file,
|
|
||||||
const char __user *userbuf, size_t count, loff_t *ppos)
|
|
||||||
{
|
|
||||||
struct iotlb_entry e;
|
|
||||||
struct cr_regs cr;
|
|
||||||
int err;
|
|
||||||
struct device *dev = file->private_data;
|
|
||||||
struct omap_iommu *obj = dev_to_omap_iommu(dev);
|
|
||||||
char buf[MAXCOLUMN], *p = buf;
|
|
||||||
|
|
||||||
count = min(count, sizeof(buf));
|
|
||||||
|
|
||||||
mutex_lock(&iommu_debug_lock);
|
|
||||||
if (copy_from_user(p, userbuf, count)) {
|
|
||||||
mutex_unlock(&iommu_debug_lock);
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
sscanf(p, "%x %x", &cr.cam, &cr.ram);
|
|
||||||
if (!cr.cam || !cr.ram) {
|
|
||||||
mutex_unlock(&iommu_debug_lock);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
omap_iotlb_cr_to_e(&cr, &e);
|
|
||||||
err = omap_iopgtable_store_entry(obj, &e);
|
|
||||||
if (err)
|
|
||||||
dev_err(obj->dev, "%s: fail to store cr\n", __func__);
|
|
||||||
|
|
||||||
mutex_unlock(&iommu_debug_lock);
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define dump_ioptable_entry_one(lv, da, val) \
|
#define dump_ioptable_entry_one(lv, da, val) \
|
||||||
({ \
|
({ \
|
||||||
int __err = 0; \
|
int __err = 0; \
|
||||||
@ -202,14 +167,6 @@ static ssize_t debug_read_pagetable(struct file *file, char __user *userbuf,
|
|||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEBUG_FOPS(name) \
|
|
||||||
static const struct file_operations debug_##name##_fops = { \
|
|
||||||
.open = simple_open, \
|
|
||||||
.read = debug_read_##name, \
|
|
||||||
.write = debug_write_##name, \
|
|
||||||
.llseek = generic_file_llseek, \
|
|
||||||
};
|
|
||||||
|
|
||||||
#define DEBUG_FOPS_RO(name) \
|
#define DEBUG_FOPS_RO(name) \
|
||||||
static const struct file_operations debug_##name##_fops = { \
|
static const struct file_operations debug_##name##_fops = { \
|
||||||
.open = simple_open, \
|
.open = simple_open, \
|
||||||
@ -219,7 +176,7 @@ static ssize_t debug_read_pagetable(struct file *file, char __user *userbuf,
|
|||||||
|
|
||||||
DEBUG_FOPS_RO(regs);
|
DEBUG_FOPS_RO(regs);
|
||||||
DEBUG_FOPS_RO(tlb);
|
DEBUG_FOPS_RO(tlb);
|
||||||
DEBUG_FOPS(pagetable);
|
DEBUG_FOPS_RO(pagetable);
|
||||||
|
|
||||||
#define __DEBUG_ADD_FILE(attr, mode) \
|
#define __DEBUG_ADD_FILE(attr, mode) \
|
||||||
{ \
|
{ \
|
||||||
@ -230,7 +187,6 @@ DEBUG_FOPS(pagetable);
|
|||||||
return -ENOMEM; \
|
return -ENOMEM; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEBUG_ADD_FILE(name) __DEBUG_ADD_FILE(name, 0600)
|
|
||||||
#define DEBUG_ADD_FILE_RO(name) __DEBUG_ADD_FILE(name, 0400)
|
#define DEBUG_ADD_FILE_RO(name) __DEBUG_ADD_FILE(name, 0400)
|
||||||
|
|
||||||
static int iommu_debug_register(struct device *dev, void *data)
|
static int iommu_debug_register(struct device *dev, void *data)
|
||||||
@ -263,7 +219,7 @@ static int iommu_debug_register(struct device *dev, void *data)
|
|||||||
|
|
||||||
DEBUG_ADD_FILE_RO(regs);
|
DEBUG_ADD_FILE_RO(regs);
|
||||||
DEBUG_ADD_FILE_RO(tlb);
|
DEBUG_ADD_FILE_RO(tlb);
|
||||||
DEBUG_ADD_FILE(pagetable);
|
DEBUG_ADD_FILE_RO(pagetable);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user