Skip to content

Commit

Permalink
vfio-mdev: Make mdev_parent private
Browse files Browse the repository at this point in the history
Rather than hoping for good behavior by marking some elements
internal, enforce it by making the entire structure private and
creating an accessor function for the one useful external field.

Cc: Zhenyu Wang <[email protected]>
Cc: Zhi Wang <[email protected]>
Cc: Jike Song <[email protected]>
Signed-off-by: Alex Williamson <[email protected]>
Reviewed by: Kirti Wankhede <[email protected]>
  • Loading branch information
awilliam committed Dec 30, 2016
1 parent 4293055 commit 9372e6f
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 15 deletions.
3 changes: 3 additions & 0 deletions Documentation/vfio-mediated-device.txt
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,9 @@ Directories and files under the sysfs for Each Physical Device

sprintf(buf, "%s-%s", dev_driver_string(parent->dev), group->name);

(or using mdev_parent_dev(mdev) to arrive at the parent device outside
of the core mdev code)

* device_api

This attribute should show which device API is being created, for example,
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/i915/gvt/kvmgt.c
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ static int intel_vgpu_create(struct kobject *kobj, struct mdev_device *mdev)
struct device *pdev;
void *gvt;

pdev = mdev->parent->dev;
pdev = mdev_parent_dev(mdev);
gvt = kdev_to_i915(pdev)->gvt;

type = intel_gvt_find_vgpu_type(gvt, kobject_name(kobj));
Expand Down
6 changes: 6 additions & 0 deletions drivers/vfio/mdev/mdev_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ static struct class_compat *mdev_bus_compat_class;
static LIST_HEAD(mdev_list);
static DEFINE_MUTEX(mdev_list_lock);

struct device *mdev_parent_dev(struct mdev_device *mdev)
{
return mdev->parent->dev;
}
EXPORT_SYMBOL(mdev_parent_dev);

static int _find_mdev_device(struct device *dev, void *data)
{
struct mdev_device *mdev;
Expand Down
10 changes: 10 additions & 0 deletions drivers/vfio/mdev/mdev_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@
int mdev_bus_register(void);
void mdev_bus_unregister(void);

struct mdev_parent {
struct device *dev;
const struct mdev_parent_ops *ops;
struct kref ref;
struct mutex lock;
struct list_head next;
struct kset *mdev_types_kset;
struct list_head type_list;
};

struct mdev_type {
struct kobject kobj;
struct kobject *devices_kobj;
Expand Down
15 changes: 2 additions & 13 deletions include/linux/mdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,6 @@
#ifndef MDEV_H
#define MDEV_H

/* Parent device */
struct mdev_parent {
struct device *dev;
const struct mdev_parent_ops *ops;

/* internal */
struct kref ref;
struct mutex lock;
struct list_head next;
struct kset *mdev_types_kset;
struct list_head type_list;
};

/* Mediated device */
struct mdev_device {
struct device dev;
Expand Down Expand Up @@ -165,4 +152,6 @@ extern void mdev_unregister_device(struct device *dev);
extern int mdev_register_driver(struct mdev_driver *drv, struct module *owner);
extern void mdev_unregister_driver(struct mdev_driver *drv);

extern struct device *mdev_parent_dev(struct mdev_device *mdev);

#endif /* MDEV_H */
2 changes: 1 addition & 1 deletion samples/vfio-mdev/mtty.c
Original file line number Diff line number Diff line change
Expand Up @@ -734,7 +734,7 @@ int mtty_create(struct kobject *kobj, struct mdev_device *mdev)

for (i = 0; i < 2; i++) {
snprintf(name, MTTY_STRING_LEN, "%s-%d",
dev_driver_string(mdev->parent->dev), i + 1);
dev_driver_string(mdev_parent_dev(mdev)), i + 1);
if (!strcmp(kobj->name, name)) {
nr_ports = i + 1;
break;
Expand Down

0 comments on commit 9372e6f

Please sign in to comment.