lkml.org 
[lkml]   [2018]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/9] iommu: Introduce wrappers around dev->iommu_fwspec
    Date
    From: Joerg Roedel <jroedel@suse.de>

    These wrappers will be used to easily change the location of
    the field later when all users are converted.

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    drivers/iommu/iommu.c | 14 +++++++-------
    include/linux/iommu.h | 11 +++++++++++
    2 files changed, 18 insertions(+), 7 deletions(-)

    diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
    index edbdf5d6962c..4cfd407b972c 100644
    --- a/drivers/iommu/iommu.c
    +++ b/drivers/iommu/iommu.c
    @@ -1976,7 +1976,7 @@ const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode)
    int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode,
    const struct iommu_ops *ops)
    {
    - struct iommu_fwspec *fwspec = dev->iommu_fwspec;
    + struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);

    if (fwspec)
    return ops == fwspec->ops ? 0 : -EINVAL;
    @@ -1988,26 +1988,26 @@ int iommu_fwspec_init(struct device *dev, struct fwnode_handle *iommu_fwnode,
    of_node_get(to_of_node(iommu_fwnode));
    fwspec->iommu_fwnode = iommu_fwnode;
    fwspec->ops = ops;
    - dev->iommu_fwspec = fwspec;
    + dev_iommu_fwspec_set(dev, fwspec);
    return 0;
    }
    EXPORT_SYMBOL_GPL(iommu_fwspec_init);

    void iommu_fwspec_free(struct device *dev)
    {
    - struct iommu_fwspec *fwspec = dev->iommu_fwspec;
    + struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);

    if (fwspec) {
    fwnode_handle_put(fwspec->iommu_fwnode);
    kfree(fwspec);
    - dev->iommu_fwspec = NULL;
    + dev_iommu_fwspec_set(dev, NULL);
    }
    }
    EXPORT_SYMBOL_GPL(iommu_fwspec_free);

    int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids)
    {
    - struct iommu_fwspec *fwspec = dev->iommu_fwspec;
    + struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
    size_t size;
    int i;

    @@ -2016,11 +2016,11 @@ int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids)

    size = offsetof(struct iommu_fwspec, ids[fwspec->num_ids + num_ids]);
    if (size > sizeof(*fwspec)) {
    - fwspec = krealloc(dev->iommu_fwspec, size, GFP_KERNEL);
    + fwspec = krealloc(fwspec, size, GFP_KERNEL);
    if (!fwspec)
    return -ENOMEM;

    - dev->iommu_fwspec = fwspec;
    + dev_iommu_fwspec_set(dev, fwspec);
    }

    for (i = 0; i < num_ids; i++)
    diff --git a/include/linux/iommu.h b/include/linux/iommu.h
    index a1d28f42cb77..f93fdcf7d130 100644
    --- a/include/linux/iommu.h
    +++ b/include/linux/iommu.h
    @@ -398,6 +398,17 @@ void iommu_fwspec_free(struct device *dev);
    int iommu_fwspec_add_ids(struct device *dev, u32 *ids, int num_ids);
    const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode);

    +static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
    +{
    + return dev->iommu_fwspec;
    +}
    +
    +static inline void dev_iommu_fwspec_set(struct device *dev,
    + struct iommu_fwspec *fwspec)
    +{
    + dev->iommu_fwspec = fwspec;
    +}
    +
    #else /* CONFIG_IOMMU_API */

    struct iommu_ops {};
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-12-11 13:20    [W:2.920 / U:0.448 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site