Commit 92d03904 authored by Halil Pasic's avatar Halil Pasic Committed by Vasily Gorbik
Browse files

s390/vfio-ap: Make mdev_types not look like a fake flex array



The vfio-ap driver and the vfio parent device provided by it
(matrix_dev) support just a single mdev_type, and this is not likely to
change any time soon.  Despite that matrix_dev->mdev_types started out
as a C99 flexible array presumably as a typo, and since the typo messed
up the allocation, commit e2c8cee9f489 ("s390/vfio-ap: Fix memory
allocation for mdev_types array") changed it to an array of size 1. And
to make things worse mdev_types happens to be the last member of struct
ap_matrix_dev.

Now the problem with that is that before C99 the usual way to get
something similar to a flexible array member was to use a trailing array of
size 0 or 1. This is what I called fake flex array. For a while now the
community is trying to get rid of fake flex arrays. And while mdev_types
is not a fake flex array but an array of size one (to match the mdev
interfaces nicer), it can easily be and was mistaken for a fake flex
array.

So, let us make mdev_types a pointer to struct mdev_type and pass in the
address of that pointer as the 4th formal parameter of
mdev_register_parent().

Signed-off-by: default avatarHalil Pasic <pasic@linux.ibm.com>
Reviewed-by: default avatarAnthony Krowiak <akrowiak@linux.ibm.com>
Reviewed-by: default avatarMatthew Rosato <mjrosato@linux.ibm.com>
Reviewed-by: default avatarEric Farman <farman@linux.ibm.com>
Tested-by: default avatarAnthony Krowiak <akrowiak@linux.ibm.com>
Link: https://lore.kernel.org/r/20250217100614.3043620-2-pasic@linux.ibm.com


Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent e83188e1
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2316,10 +2316,10 @@ int vfio_ap_mdev_register(void)

	matrix_dev->mdev_type.sysfs_name = VFIO_AP_MDEV_TYPE_HWVIRT;
	matrix_dev->mdev_type.pretty_name = VFIO_AP_MDEV_NAME_HWVIRT;
	matrix_dev->mdev_types[0] = &matrix_dev->mdev_type;
	matrix_dev->mdev_types = &matrix_dev->mdev_type;
	ret = mdev_register_parent(&matrix_dev->parent, &matrix_dev->device,
				   &vfio_ap_matrix_driver,
				   matrix_dev->mdev_types, 1);
				   &matrix_dev->mdev_types, 1);
	if (ret)
		goto err_driver;
	return 0;
+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ struct ap_matrix_dev {
	struct mutex guests_lock; /* serializes access to each KVM guest */
	struct mdev_parent parent;
	struct mdev_type mdev_type;
	struct mdev_type *mdev_types[1];
	struct mdev_type *mdev_types;
};

extern struct ap_matrix_dev *matrix_dev;