#define pr_fmt(fmt) …
#include <linux/bug.h>
#include <linux/file.h>
#include <linux/fs.h>
#include <linux/iommufd.h>
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <uapi/linux/iommufd.h>
#include "io_pagetable.h"
#include "iommufd_private.h"
#include "iommufd_test.h"
struct iommufd_object_ops { … };
static const struct iommufd_object_ops iommufd_object_ops[];
static struct miscdevice vfio_misc_dev;
struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx,
size_t size,
enum iommufd_object_type type)
{ … }
void iommufd_object_finalize(struct iommufd_ctx *ictx,
struct iommufd_object *obj)
{ … }
void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj)
{ … }
void iommufd_object_abort_and_destroy(struct iommufd_ctx *ictx,
struct iommufd_object *obj)
{ … }
struct iommufd_object *iommufd_get_object(struct iommufd_ctx *ictx, u32 id,
enum iommufd_object_type type)
{ … }
static int iommufd_object_dec_wait_shortterm(struct iommufd_ctx *ictx,
struct iommufd_object *to_destroy)
{ … }
int iommufd_object_remove(struct iommufd_ctx *ictx,
struct iommufd_object *to_destroy, u32 id,
unsigned int flags)
{ … }
static int iommufd_destroy(struct iommufd_ucmd *ucmd)
{ … }
static int iommufd_fops_open(struct inode *inode, struct file *filp)
{ … }
static int iommufd_fops_release(struct inode *inode, struct file *filp)
{ … }
static int iommufd_option(struct iommufd_ucmd *ucmd)
{ … }
ucmd_buffer;
struct iommufd_ioctl_op { … };
#define IOCTL_OP(_ioctl, _fn, _struct, _last) …
static const struct iommufd_ioctl_op iommufd_ioctl_ops[] = …;
static long iommufd_fops_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg)
{ … }
static const struct file_operations iommufd_fops = …;
void iommufd_ctx_get(struct iommufd_ctx *ictx)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
struct iommufd_ctx *iommufd_ctx_from_file(struct file *file)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
struct iommufd_ctx *iommufd_ctx_from_fd(int fd)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
void iommufd_ctx_put(struct iommufd_ctx *ictx)
{ … }
EXPORT_SYMBOL_NS_GPL(…);
static const struct iommufd_object_ops iommufd_object_ops[] = …;
static struct miscdevice iommu_misc_dev = …;
static struct miscdevice vfio_misc_dev = …;
static int __init iommufd_init(void)
{ … }
static void __exit iommufd_exit(void)
{ … }
module_init(…) …;
module_exit(iommufd_exit);
#if IS_ENABLED(CONFIG_IOMMUFD_VFIO_CONTAINER)
MODULE_ALIAS_MISCDEV(VFIO_MINOR);
MODULE_ALIAS("devname:vfio/vfio");
#endif
MODULE_IMPORT_NS(…);
MODULE_IMPORT_NS(…);
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;