iommufd: Add iommufd_ctx_from_fd()
It's common to get a reference to the iommufd context from a given file descriptor. So adds an API for it. Existing users of this API are compiled only when IOMMUFD is enabled, so no need to have a stub for the IOMMUFD disabled case. Tested-by: Yanting Jiang <yanting.jiang@intel.com> Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Yi Liu <yi.l.liu@intel.com> Link: https://lore.kernel.org/r/20230718135551.6592-21-yi.l.liu@intel.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
5c6de3ea73
commit
1c9dc07487
@ -377,6 +377,30 @@ struct iommufd_ctx *iommufd_ctx_from_file(struct file *file)
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(iommufd_ctx_from_file, IOMMUFD);
|
||||
|
||||
/**
|
||||
* iommufd_ctx_from_fd - Acquires a reference to the iommufd context
|
||||
* @fd: File descriptor to obtain the reference from
|
||||
*
|
||||
* Returns a pointer to the iommufd_ctx, otherwise ERR_PTR. On success
|
||||
* the caller is responsible to call iommufd_ctx_put().
|
||||
*/
|
||||
struct iommufd_ctx *iommufd_ctx_from_fd(int fd)
|
||||
{
|
||||
struct file *file;
|
||||
|
||||
file = fget(fd);
|
||||
if (!file)
|
||||
return ERR_PTR(-EBADF);
|
||||
|
||||
if (file->f_op != &iommufd_fops) {
|
||||
fput(file);
|
||||
return ERR_PTR(-EBADFD);
|
||||
}
|
||||
/* fget is the same as iommufd_ctx_get() */
|
||||
return file->private_data;
|
||||
}
|
||||
EXPORT_SYMBOL_NS_GPL(iommufd_ctx_from_fd, IOMMUFD);
|
||||
|
||||
/**
|
||||
* iommufd_ctx_put - Put back a reference
|
||||
* @ictx: Context to put back
|
||||
|
@ -54,6 +54,7 @@ void iommufd_ctx_get(struct iommufd_ctx *ictx);
|
||||
|
||||
#if IS_ENABLED(CONFIG_IOMMUFD)
|
||||
struct iommufd_ctx *iommufd_ctx_from_file(struct file *file);
|
||||
struct iommufd_ctx *iommufd_ctx_from_fd(int fd);
|
||||
void iommufd_ctx_put(struct iommufd_ctx *ictx);
|
||||
bool iommufd_ctx_has_group(struct iommufd_ctx *ictx, struct iommu_group *group);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user