Jason Gunthorpe
9c799c224d
vfio/mdev: add mdev available instance checking to the core
...
Many of the mdev drivers use a simple counter for keeping track of the
available instances. Move this code to the core code and store the counter
in the mdev_parent. Implement it using correct locking, fixing mdpy.
Drivers just provide the value in the mdev_driver at registration time
and the core code takes care of maintaining it and exposing the value in
sysfs.
[hch: count instances per-parent instead of per-type, use an atomic_t
to avoid taking mdev_list_lock in the show method]
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Link: https://lore.kernel.org/r/20220923092652.100656-15-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Christoph Hellwig
685a1537f4
vfio/mdev: consolidate all the description sysfs into the core code
...
Every driver just emits a string, simply add a method to the mdev_driver
to return it and provide a standard sysfs show function.
Remove the now unused types_attrs field in struct mdev_driver and the
support code for it.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Link: https://lore.kernel.org/r/20220923092652.100656-14-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Christoph Hellwig
f2fbc72e6d
vfio/mdev: consolidate all the available_instance sysfs into the core code
...
Every driver just print a number, simply add a method to the mdev_driver
to return it and provide a standard sysfs show function.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Link: https://lore.kernel.org/r/20220923092652.100656-13-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Christoph Hellwig
0bc79069cc
vfio/mdev: consolidate all the name sysfs into the core code
...
Every driver just emits a static string, simply add a field to the
mdev_type for the driver to fill out or fall back to the sysfs name and
provide a standard sysfs show function.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Link: https://lore.kernel.org/r/20220923092652.100656-12-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Jason Gunthorpe
290aac5df8
vfio/mdev: consolidate all the device_api sysfs into the core code
...
Every driver just emits a static string, simply feed it through the ops
and provide a standard sysfs show function.
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Link: https://lore.kernel.org/r/20220923092652.100656-11-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Christoph Hellwig
da44c340c4
vfio/mdev: simplify mdev_type handling
...
Instead of abusing struct attribute_group to control initialization of
struct mdev_type, just define the actual attributes in the mdev_driver,
allocate the mdev_type structures in the caller and pass them to
mdev_register_parent.
This allows the caller to use container_of to get at the containing
structure and thus significantly simplify the code.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Link: https://lore.kernel.org/r/20220923092652.100656-6-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Christoph Hellwig
89345d5177
vfio/mdev: embedd struct mdev_parent in the parent data structure
...
Simplify mdev_{un}register_device by requiring the caller to pass in
a structure allocate as part of the parent device structure. This
removes the need for a list of parents and the separate mdev_parent
refcount as we can simplify rely on the reference to the parent device.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Link: https://lore.kernel.org/r/20220923092652.100656-5-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Christoph Hellwig
bdef2b7896
vfio/mdev: make mdev.h standalone includable
...
Include <linux/device.h> and <linux/uuid.h> so that users of this headers
don't need to do that and remove those includes that aren't needed
any more.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Eric Farman <farman@linux.ibm.com >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Tony Krowiak <akrowiak@linux.ibm.com >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Link: https://lore.kernel.org/r/20220923092652.100656-4-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-10-04 12:06:58 -06:00
Yi Liu
3d5d18e1f8
vfio/mbochs: Use the new device life cycle helpers
...
and manage avail_mbytes inside @init/@release.
Signed-off-by: Yi Liu <yi.l.liu@intel.com >
Signed-off-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/20220921104401.38898-8-kevin.tian@intel.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-09-21 14:15:11 -06:00
Yi Liu
67c5a1814f
vfio/mtty: Use the new device life cycle helpers
...
and manage available ports inside @init/@release.
Signed-off-by: Yi Liu <yi.l.liu@intel.com >
Signed-off-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/20220921104401.38898-7-kevin.tian@intel.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-09-21 14:15:11 -06:00
Yi Liu
603c09f287
vfio/mdpy: Use the new device life cycle helpers
...
and manage mdpy_count inside @init/@release.
Signed-off-by: Yi Liu <yi.l.liu@intel.com >
Signed-off-by: Kevin Tian <kevin.tian@intel.com >
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/20220921104401.38898-6-kevin.tian@intel.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2022-09-21 14:15:10 -06:00
Jason Gunthorpe
6b42f491e1
vfio/mdev: Remove mdev_parent_ops
...
The last useful member in this struct is the supported_type_groups, move
it to the mdev_driver and delete mdev_parent_ops.
Replace it with mdev_driver as an argument to mdev_register_device()
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Signed-off-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Zhi Wang <zhi.a.wang@intel.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20220411141403.86980-33-hch@lst.de
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Zhi Wang <zhi.a.wang@intel.com >
2022-04-21 07:36:56 -04:00
Jason Gunthorpe
e6486939d8
vfio/mdev: Remove mdev_parent_ops dev_attr_groups
...
This is only used by one sample to print a fixed string that is pointless.
In general, having a device driver attach sysfs attributes to the parent
is horrific. This should never happen, and always leads to some kind of
liftime bug as it become very difficult for the sysfs attribute to go back
to any data owned by the device driver.
Remove the general mechanism to create this abuse.
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Signed-off-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Zhi Wang <zhi.a.wang@intel.com >
Link: http://patchwork.freedesktop.org/patch/msgid/20220411141403.86980-32-hch@lst.de
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com >
Reviewed-by: Zhi Wang <zhi.a.wang@intel.com >
2022-04-21 07:36:56 -04:00
Linus Torvalds
5c904c66ed
Merge tag 'char-misc-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
...
Pull char/misc driver updates from Greg KH:
"Here is the big set of char and misc and other tiny driver subsystem
updates for 5.16-rc1.
Loads of things in here, all of which have been in linux-next for a
while with no reported problems (except for one called out below.)
Included are:
- habanana labs driver updates, including dma_buf usage, reviewed and
acked by the dma_buf maintainers
- iio driver update (going through this tree not staging as they
really do not belong going through that tree anymore)
- counter driver updates
- hwmon driver updates that the counter drivers needed, acked by the
hwmon maintainer
- xillybus driver updates
- binder driver updates
- extcon driver updates
- dma_buf module namespaces added (will cause a build error in arm64
for allmodconfig, but that change is on its way through the drm
tree)
- lkdtm driver updates
- pvpanic driver updates
- phy driver updates
- virt acrn and nitr_enclaves driver updates
- smaller char and misc driver updates"
* tag 'char-misc-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (386 commits)
comedi: dt9812: fix DMA buffers on stack
comedi: ni_usb6501: fix NULL-deref in command paths
arm64: errata: Enable TRBE workaround for write to out-of-range address
arm64: errata: Enable workaround for TRBE overwrite in FILL mode
coresight: trbe: Work around write to out of range
coresight: trbe: Make sure we have enough space
coresight: trbe: Add a helper to determine the minimum buffer size
coresight: trbe: Workaround TRBE errata overwrite in FILL mode
coresight: trbe: Add infrastructure for Errata handling
coresight: trbe: Allow driver to choose a different alignment
coresight: trbe: Decouple buffer base from the hardware base
coresight: trbe: Add a helper to pad a given buffer area
coresight: trbe: Add a helper to calculate the trace generated
coresight: trbe: Defer the probe on offline CPUs
coresight: trbe: Fix incorrect access of the sink specific data
coresight: etm4x: Add ETM PID for Kryo-5XX
coresight: trbe: Prohibit trace before disabling TRBE
coresight: trbe: End the AUX handle on truncation
coresight: trbe: Do not truncate buffer on IRQ
coresight: trbe: Fix handling of spurious interrupts
...
2021-11-04 08:21:47 -07:00
Greg Kroah-Hartman
16b0314aa7
dma-buf: move dma-buf symbols into the DMA_BUF module namespace
...
In order to better track where in the kernel the dma-buf code is used,
put the symbols in the namespace DMA_BUF and modify all users of the
symbols to properly import the namespace to not break the build at the
same time.
Now the output of modinfo shows the use of these symbols, making it
easier to watch for users over time:
$ modinfo drivers/misc/fastrpc.ko | grep import
import_ns: DMA_BUF
Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com >
Cc: David Airlie <airlied@linux.ie >
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com >
Cc: Maxime Ripard <mripard@kernel.org >
Cc: Thomas Zimmermann <tzimmermann@suse.de >
Cc: Mauro Carvalho Chehab <mchehab@kernel.org >
Cc: dri-devel@lists.freedesktop.org
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch >
Acked-by: Christian König <christian.koenig@amd.com >
Acked-by: Arnd Bergmann <arnd@arndb.de >
Acked-by: Sumit Semwal <sumit.semwal@linaro.org >
Acked-by: Alex Deucher <alexander.deucher@amd.com >
Link: https://lore.kernel.org/r/20211010124628.17691-1-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2021-10-25 14:53:08 +02:00
Christoph Hellwig
c68ea0d00a
vfio: simplify iommu group allocation for mediated devices
...
Reuse the logic in vfio_noiommu_group_alloc to allocate a fake
single-device iommu group for mediated devices by factoring out a common
function, and replacing the noiommu boolean field in struct vfio_group
with an enum to distinguish the three different kinds of groups.
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Kevin Tian <kevin.tian@intel.com >
Link: https://lore.kernel.org/r/20210924155705.4258-8-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-09-30 12:46:44 -06:00
Jason Gunthorpe
3cb2482714
vfio/mbochs: Fix close when multiple device FDs are open
...
mbochs_close() iterates over global device state and frees it. Currently
this is done every time a device FD is closed, but if multiple device FDs
are open this could corrupt other still active FDs.
Change this to use close_device() so it only runs on the last close.
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/11-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-08-11 09:50:11 -06:00
Jason Gunthorpe
17a1e4fa3f
vfio/samples: Delete useless open/close
...
The core code no longer requires these ops to be defined, so delete these
empty functions and leave the op as NULL. mtty's functions only log a
pointless message, delete that entirely.
Signed-off-by: Yishai Hadas <yishaih@nvidia.com >
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/5-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-08-11 09:50:11 -06:00
Max Gurtovoy
ae03c3771b
vfio: Introduce a vfio_uninit_group_dev() API call
...
This pairs with vfio_init_group_dev() and allows undoing any state that is
stored in the vfio_device unrelated to registration. Add appropriately
placed calls to all the drivers.
The following patch will use this to add pre-registration state for the
device set.
Signed-off-by: Max Gurtovoy <mgurtovoy@nvidia.com >
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/3-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-08-11 09:50:10 -06:00
Jason Gunthorpe
de5494af48
vfio/mbochs: Fix missing error unwind of mbochs_used_mbytes
...
Convert mbochs to use an atomic scheme for this like mtty was changed
into. The atomic fixes various race conditions with probing. Add the
missing error unwind. Also add the missing kfree of mdev_state->pages.
Fixes: 681c1615f8 ("vfio/mbochs: Convert to use vfio_register_group_dev()")
Reported-by: Cornelia Huck <cohuck@redhat.com >
Co-developed-by: Alex Williamson <alex.williamson@redhat.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Link: https://lore.kernel.org/r/2-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-08-11 09:50:10 -06:00
Jason Gunthorpe
e1706f0764
vfio/samples: Remove module get/put
...
The patch to move the get/put to core and the patch to convert the samples
to use vfio_device crossed in a way that this was missed. When both
patches are together the samples do not need their own get/put.
Fixes: 437e41368c ("vfio/mdpy: Convert to use vfio_register_group_dev()")
Fixes: 681c1615f8 ("vfio/mbochs: Convert to use vfio_register_group_dev()")
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com >
Link: https://lore.kernel.org/r/1-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-08-11 09:50:10 -06:00
Alex Williamson
97d0a68744
vfio/mtty: Enforce available_instances
...
The sample mtty mdev driver doesn't actually enforce the number of
device instances it claims are available. Implement this properly.
Link: https://lore.kernel.org/r/162465624894.3338367.12935940647049917981.stgit@omen
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com >
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Reviewed by: Kirti Wankhede <kwankhede@nvidia.com >
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-06-28 14:09:01 -06:00
Jason Gunthorpe
0dd1b7fc3e
vfio/mtty: Delete mdev_devices_list
...
Dan points out that an error case left things on this list. It is also
missing locking in available_instances_show().
Further study shows the list isn't needed at all, just store the total
ports in use in an atomic and delete the whole thing.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com >
Fixes: 09177ac919 ("vfio/mtty: Convert to use vfio_register_group_dev()")
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Link: https://lore.kernel.org/r/0-v1-0bc56b362ca7+62-mtty_used_ports_jgg@nvidia.com
Reviewed-by: Cornelia Huck <cohuck@redhat.com >
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-06-28 08:52:15 -06:00
Colin Ian King
0af5160edb
vfio/mdpy: Fix memory leak of object mdev_state->vconfig
...
In the case where the call to vfio_register_group_dev fails the error
return path kfree's mdev_state but not mdev_state->vconfig. Fix this
by kfree'ing mdev_state->vconfig before returning.
Addresses-Coverity: ("Resource leak")
Fixes: 437e41368c ("vfio/mdpy: Convert to use vfio_register_group_dev()")
Signed-off-by: Colin Ian King <colin.king@canonical.com >
Link: https://lore.kernel.org/r/20210622183710.28954-1-colin.king@canonical.com
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-06-24 13:31:28 -06:00
Jason Gunthorpe
681c1615f8
vfio/mbochs: Convert to use vfio_register_group_dev()
...
This is straightforward conversion, the mdev_state is actually serving as
the vfio_device and we can replace all the mdev_get_drvdata()'s and the
wonky dead code with a simple container_of().
Reviewed-by: Christoph Hellwig <hch@lst.de >
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com >
Signed-off-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Link: https://lore.kernel.org/r/20210617142218.1877096-11-hch@lst.de
Signed-off-by: Alex Williamson <alex.williamson@redhat.com >
2021-06-21 15:29:25 -06:00