vfio-mdev: Make mdev_parent private
authorAlex Williamson <alex.williamson@redhat.com>
Fri, 30 Dec 2016 15:13:41 +0000 (08:13 -0700)
committerAlex Williamson <alex.williamson@redhat.com>
Fri, 30 Dec 2016 15:13:41 +0000 (08:13 -0700)
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 <zhenyuw@linux.intel.com>
Cc: Zhi Wang <zhi.a.wang@intel.com>
Cc: Jike Song <jike.song@intel.com>
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Reviewed by: Kirti Wankhede <kwankhede@nvidia.com>

Documentation/vfio-mediated-device.txt
drivers/gpu/drm/i915/gvt/kvmgt.c
drivers/vfio/mdev/mdev_core.c
drivers/vfio/mdev/mdev_private.h
include/linux/mdev.h
samples/vfio-mdev/mtty.c

index cfee106a367984727d8f3c64df0473e479dd7ab0..d226c7a5ba8bee46aeded6bfd181b840259fd4bb 100644 (file)
@@ -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,
index 081ada238107be171a1fc779cd400a6633e98cc6..38500329aa923fb41339a618b17e2adac31374a4 100644 (file)
@@ -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));
index bf3b3b0b3d2b1c2e838061e6ec7f8bd02fc211be..30d05304241e5b21f70c8d81bc76c1021eb58ac8 100644 (file)
@@ -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;
index 0b72c2d9ee408701332a63ea4ed3e7d1a9448ec4..b05dd22fc9a6fd2adbfcf054347193edcde1ca80 100644 (file)
 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;
index 853bb78e5866b22afc1052d5b9273aa57bc1b404..f586222b6c25b8c9039bf4ea350add2031aec515 100644 (file)
 #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;
@@ -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 */
index 1a74f0e488da6ed3b3d4eb7f7aec0f07443ca966..5e13efc62badf86811b2201c63b6730cce88a53e 100644 (file)
@@ -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;