iommu: Constify struct iommu_ops

This structure is read-only data and should never be modified.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
Thierry Reding 2014-06-27 09:03:12 +02:00 committed by Joerg Roedel
parent 066f2e98d8
commit b22f6434cf
14 changed files with 30 additions and 21 deletions

View file

@ -80,7 +80,7 @@ LIST_HEAD(hpet_map);
*/ */
static struct protection_domain *pt_domain; static struct protection_domain *pt_domain;
static struct iommu_ops amd_iommu_ops; static const struct iommu_ops amd_iommu_ops;
static ATOMIC_NOTIFIER_HEAD(ppr_notifier); static ATOMIC_NOTIFIER_HEAD(ppr_notifier);
int amd_iommu_max_glx_val = -1; int amd_iommu_max_glx_val = -1;
@ -3395,7 +3395,7 @@ static int amd_iommu_domain_has_cap(struct iommu_domain *domain,
return 0; return 0;
} }
static struct iommu_ops amd_iommu_ops = { static const struct iommu_ops amd_iommu_ops = {
.domain_init = amd_iommu_domain_init, .domain_init = amd_iommu_domain_init,
.domain_destroy = amd_iommu_domain_destroy, .domain_destroy = amd_iommu_domain_destroy,
.attach_dev = amd_iommu_attach_device, .attach_dev = amd_iommu_attach_device,

View file

@ -1609,7 +1609,7 @@ static void arm_smmu_remove_device(struct device *dev)
iommu_group_remove_device(dev); iommu_group_remove_device(dev);
} }
static struct iommu_ops arm_smmu_ops = { static const struct iommu_ops arm_smmu_ops = {
.domain_init = arm_smmu_domain_init, .domain_init = arm_smmu_domain_init,
.domain_destroy = arm_smmu_domain_destroy, .domain_destroy = arm_smmu_domain_destroy,
.attach_dev = arm_smmu_attach_dev, .attach_dev = arm_smmu_attach_dev,

View file

@ -1170,7 +1170,7 @@ static void exynos_iommu_remove_device(struct device *dev)
iommu_group_remove_device(dev); iommu_group_remove_device(dev);
} }
static struct iommu_ops exynos_iommu_ops = { static const struct iommu_ops exynos_iommu_ops = {
.domain_init = exynos_iommu_domain_init, .domain_init = exynos_iommu_domain_init,
.domain_destroy = exynos_iommu_domain_destroy, .domain_destroy = exynos_iommu_domain_destroy,
.attach_dev = exynos_iommu_attach_device, .attach_dev = exynos_iommu_attach_device,

View file

@ -1076,7 +1076,7 @@ static u32 fsl_pamu_get_windows(struct iommu_domain *domain)
return dma_domain->win_cnt; return dma_domain->win_cnt;
} }
static struct iommu_ops fsl_pamu_ops = { static const struct iommu_ops fsl_pamu_ops = {
.domain_init = fsl_pamu_domain_init, .domain_init = fsl_pamu_domain_init,
.domain_destroy = fsl_pamu_domain_destroy, .domain_destroy = fsl_pamu_domain_destroy,
.attach_dev = fsl_pamu_attach_device, .attach_dev = fsl_pamu_attach_device,

View file

@ -450,7 +450,7 @@ EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped);
static DEFINE_SPINLOCK(device_domain_lock); static DEFINE_SPINLOCK(device_domain_lock);
static LIST_HEAD(device_domain_list); static LIST_HEAD(device_domain_list);
static struct iommu_ops intel_iommu_ops; static const struct iommu_ops intel_iommu_ops;
static int __init intel_iommu_setup(char *str) static int __init intel_iommu_setup(char *str)
{ {
@ -4453,7 +4453,7 @@ static void intel_iommu_remove_device(struct device *dev)
iommu_device_unlink(iommu->iommu_dev, dev); iommu_device_unlink(iommu->iommu_dev, dev);
} }
static struct iommu_ops intel_iommu_ops = { static const struct iommu_ops intel_iommu_ops = {
.domain_init = intel_iommu_domain_init, .domain_init = intel_iommu_domain_init,
.domain_destroy = intel_iommu_domain_destroy, .domain_destroy = intel_iommu_domain_destroy,
.attach_dev = intel_iommu_attach_device, .attach_dev = intel_iommu_attach_device,

View file

@ -36,6 +36,10 @@ static struct kset *iommu_group_kset;
static struct ida iommu_group_ida; static struct ida iommu_group_ida;
static struct mutex iommu_group_mutex; static struct mutex iommu_group_mutex;
struct iommu_callback_data {
const struct iommu_ops *ops;
};
struct iommu_group { struct iommu_group {
struct kobject kobj; struct kobject kobj;
struct kobject *devices_kobj; struct kobject *devices_kobj;
@ -698,7 +702,8 @@ struct iommu_group *iommu_group_get_for_dev(struct device *dev)
static int add_iommu_group(struct device *dev, void *data) static int add_iommu_group(struct device *dev, void *data)
{ {
struct iommu_ops *ops = data; struct iommu_callback_data *cb = data;
const struct iommu_ops *ops = cb->ops;
if (!ops->add_device) if (!ops->add_device)
return -ENODEV; return -ENODEV;
@ -714,7 +719,7 @@ static int iommu_bus_notifier(struct notifier_block *nb,
unsigned long action, void *data) unsigned long action, void *data)
{ {
struct device *dev = data; struct device *dev = data;
struct iommu_ops *ops = dev->bus->iommu_ops; const struct iommu_ops *ops = dev->bus->iommu_ops;
struct iommu_group *group; struct iommu_group *group;
unsigned long group_action = 0; unsigned long group_action = 0;
@ -767,10 +772,14 @@ static struct notifier_block iommu_bus_nb = {
.notifier_call = iommu_bus_notifier, .notifier_call = iommu_bus_notifier,
}; };
static void iommu_bus_init(struct bus_type *bus, struct iommu_ops *ops) static void iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops)
{ {
struct iommu_callback_data cb = {
.ops = ops,
};
bus_register_notifier(bus, &iommu_bus_nb); bus_register_notifier(bus, &iommu_bus_nb);
bus_for_each_dev(bus, NULL, ops, add_iommu_group); bus_for_each_dev(bus, NULL, &cb, add_iommu_group);
} }
/** /**
@ -786,7 +795,7 @@ static void iommu_bus_init(struct bus_type *bus, struct iommu_ops *ops)
* is set up. With this function the iommu-driver can set the iommu-ops * is set up. With this function the iommu-driver can set the iommu-ops
* afterwards. * afterwards.
*/ */
int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops) int bus_set_iommu(struct bus_type *bus, const struct iommu_ops *ops)
{ {
if (bus->iommu_ops != NULL) if (bus->iommu_ops != NULL)
return -EBUSY; return -EBUSY;

View file

@ -1120,7 +1120,7 @@ static void ipmmu_remove_device(struct device *dev)
dev->archdata.iommu = NULL; dev->archdata.iommu = NULL;
} }
static struct iommu_ops ipmmu_ops = { static const struct iommu_ops ipmmu_ops = {
.domain_init = ipmmu_domain_init, .domain_init = ipmmu_domain_init,
.domain_destroy = ipmmu_domain_destroy, .domain_destroy = ipmmu_domain_destroy,
.attach_dev = ipmmu_attach_device, .attach_dev = ipmmu_attach_device,

View file

@ -674,7 +674,7 @@ irqreturn_t msm_iommu_fault_handler(int irq, void *dev_id)
return 0; return 0;
} }
static struct iommu_ops msm_iommu_ops = { static const struct iommu_ops msm_iommu_ops = {
.domain_init = msm_iommu_domain_init, .domain_init = msm_iommu_domain_init,
.domain_destroy = msm_iommu_domain_destroy, .domain_destroy = msm_iommu_domain_destroy,
.attach_dev = msm_iommu_attach_dev, .attach_dev = msm_iommu_attach_dev,

View file

@ -1291,7 +1291,7 @@ static void omap_iommu_remove_device(struct device *dev)
kfree(arch_data); kfree(arch_data);
} }
static struct iommu_ops omap_iommu_ops = { static const struct iommu_ops omap_iommu_ops = {
.domain_init = omap_iommu_domain_init, .domain_init = omap_iommu_domain_init,
.domain_destroy = omap_iommu_domain_destroy, .domain_destroy = omap_iommu_domain_destroy,
.attach_dev = omap_iommu_attach_dev, .attach_dev = omap_iommu_attach_dev,

View file

@ -354,7 +354,7 @@ static int shmobile_iommu_add_device(struct device *dev)
return 0; return 0;
} }
static struct iommu_ops shmobile_iommu_ops = { static const struct iommu_ops shmobile_iommu_ops = {
.domain_init = shmobile_iommu_domain_init, .domain_init = shmobile_iommu_domain_init,
.domain_destroy = shmobile_iommu_domain_destroy, .domain_destroy = shmobile_iommu_domain_destroy,
.attach_dev = shmobile_iommu_attach_device, .attach_dev = shmobile_iommu_attach_device,

View file

@ -309,7 +309,7 @@ static int gart_iommu_domain_has_cap(struct iommu_domain *domain,
return 0; return 0;
} }
static struct iommu_ops gart_iommu_ops = { static const struct iommu_ops gart_iommu_ops = {
.domain_init = gart_iommu_domain_init, .domain_init = gart_iommu_domain_init,
.domain_destroy = gart_iommu_domain_destroy, .domain_destroy = gart_iommu_domain_destroy,
.attach_dev = gart_iommu_attach_dev, .attach_dev = gart_iommu_attach_dev,

View file

@ -947,7 +947,7 @@ static void smmu_iommu_domain_destroy(struct iommu_domain *domain)
dev_dbg(smmu->dev, "smmu_as@%p\n", as); dev_dbg(smmu->dev, "smmu_as@%p\n", as);
} }
static struct iommu_ops smmu_iommu_ops = { static const struct iommu_ops smmu_iommu_ops = {
.domain_init = smmu_iommu_domain_init, .domain_init = smmu_iommu_domain_init,
.domain_destroy = smmu_iommu_domain_destroy, .domain_destroy = smmu_iommu_domain_destroy,
.attach_dev = smmu_iommu_attach_dev, .attach_dev = smmu_iommu_attach_dev,

View file

@ -124,7 +124,7 @@ struct bus_type {
const struct dev_pm_ops *pm; const struct dev_pm_ops *pm;
struct iommu_ops *iommu_ops; const struct iommu_ops *iommu_ops;
struct subsys_private *p; struct subsys_private *p;
struct lock_class_key lock_key; struct lock_class_key lock_key;

View file

@ -50,7 +50,7 @@ struct iommu_domain_geometry {
}; };
struct iommu_domain { struct iommu_domain {
struct iommu_ops *ops; const struct iommu_ops *ops;
void *priv; void *priv;
iommu_fault_handler_t handler; iommu_fault_handler_t handler;
void *handler_token; void *handler_token;
@ -140,7 +140,7 @@ struct iommu_ops {
#define IOMMU_GROUP_NOTIFY_UNBIND_DRIVER 5 /* Pre Driver unbind */ #define IOMMU_GROUP_NOTIFY_UNBIND_DRIVER 5 /* Pre Driver unbind */
#define IOMMU_GROUP_NOTIFY_UNBOUND_DRIVER 6 /* Post Driver unbind */ #define IOMMU_GROUP_NOTIFY_UNBOUND_DRIVER 6 /* Post Driver unbind */
extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops); extern int bus_set_iommu(struct bus_type *bus, const struct iommu_ops *ops);
extern bool iommu_present(struct bus_type *bus); extern bool iommu_present(struct bus_type *bus);
extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus); extern struct iommu_domain *iommu_domain_alloc(struct bus_type *bus);
extern struct iommu_group *iommu_group_get_by_id(int id); extern struct iommu_group *iommu_group_get_by_id(int id);