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:
parent
066f2e98d8
commit
b22f6434cf
14 changed files with 30 additions and 21 deletions
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue