lkml.org 
[lkml]   [2016]   [Nov]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v14 04/22] vfio: Common function to increment container_users
    Date
    This change rearrange functions to have common function to increment
    container_users

    Signed-off-by: Kirti Wankhede <kwankhede@nvidia.com>
    Signed-off-by: Neo Jia <cjia@nvidia.com>
    Reviewed-by: Jike Song <jike.song@intel.com>

    Change-Id: I8bdeb352bc8439b107ffd519480fd4dc238677f2
    ---
    drivers/vfio/vfio.c | 34 +++++++++++++++++++++-------------
    1 file changed, 21 insertions(+), 13 deletions(-)

    diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c
    index 23bc86c1d05d..2e83bdf007fe 100644
    --- a/drivers/vfio/vfio.c
    +++ b/drivers/vfio/vfio.c
    @@ -1385,6 +1385,23 @@ static bool vfio_group_viable(struct vfio_group *group)
    group, vfio_dev_viable) == 0);
    }

    +static int vfio_group_add_container_user(struct vfio_group *group)
    +{
    + if (!atomic_inc_not_zero(&group->container_users))
    + return -EINVAL;
    +
    + if (group->noiommu) {
    + atomic_dec(&group->container_users);
    + return -EPERM;
    + }
    + if (!group->container->iommu_driver || !vfio_group_viable(group)) {
    + atomic_dec(&group->container_users);
    + return -EINVAL;
    + }
    +
    + return 0;
    +}
    +
    static const struct file_operations vfio_device_fops;

    static int vfio_group_get_device_fd(struct vfio_group *group, char *buf)
    @@ -1694,23 +1711,14 @@ static const struct file_operations vfio_device_fops = {
    struct vfio_group *vfio_group_get_external_user(struct file *filep)
    {
    struct vfio_group *group = filep->private_data;
    + int ret;

    if (filep->f_op != &vfio_group_fops)
    return ERR_PTR(-EINVAL);

    - if (!atomic_inc_not_zero(&group->container_users))
    - return ERR_PTR(-EINVAL);
    -
    - if (group->noiommu) {
    - atomic_dec(&group->container_users);
    - return ERR_PTR(-EPERM);
    - }
    -
    - if (!group->container->iommu_driver ||
    - !vfio_group_viable(group)) {
    - atomic_dec(&group->container_users);
    - return ERR_PTR(-EINVAL);
    - }
    + ret = vfio_group_add_container_user(group);
    + if (ret)
    + return ERR_PTR(ret);

    vfio_group_get(group);

    --
    2.7.0
    \
     
     \ /
      Last update: 2016-11-16 21:51    [W:4.051 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site