From: Eric Auger <eric.auger-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: Baptiste Reynal
<b.reynal-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>,
kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org,
iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org,
VFIO DRIVER <kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org,
open list <linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [RFC PATCH v3 3/3] vfio: platform: return device properties as arrays of unsigned integers
Date: Thu, 03 Sep 2015 18:49:29 +0200 [thread overview]
Message-ID: <55E87A19.6010009@linaro.org> (raw)
In-Reply-To: <1419024032-1269-4-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
On 12/19/2014 10:20 PM, Antonios Motakis wrote:
> Certain properties of a device are accessible as an array of unsigned
> integers, either u64, u32, u16, or u8. Let the VFIO user query this
> type of device properties.
>
> Signed-off-by: Antonios Motakis <a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
> ---
> drivers/vfio/platform/properties.c | 62 +++++++++++++++++++++++++++++++++++++-
> 1 file changed, 61 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/vfio/platform/properties.c b/drivers/vfio/platform/properties.c
> index 39c6342..645f6e5c 100644
> --- a/drivers/vfio/platform/properties.c
> +++ b/drivers/vfio/platform/properties.c
> @@ -55,7 +55,67 @@ static int dev_property_get_uint(struct device *dev, char *name,
> uint32_t type, unsigned *lenp,
> void __user *datap, unsigned long datasz)
> {
> - return -EINVAL;
> + int ret, n;
> + u8 *out;
> + size_t sz;
> + int (*func)(const struct device *, const char *, void *, size_t)
> + = NULL;
> +
> + switch (type) {
> + case VFIO_DEV_PROPERTY_TYPE_U64:
> + sz = sizeof(u64);
> + func = (int (*)(const struct device *,
> + const char *, void *, size_t))
> + device_property_read_u64_array;
> + break;
> + case VFIO_DEV_PROPERTY_TYPE_U32:
> + sz = sizeof(u32);
> + func = (int (*)(const struct device *,
> + const char *, void *, size_t))
> + device_property_read_u32_array;
> + break;
> + case VFIO_DEV_PROPERTY_TYPE_U16:
> + sz = sizeof(u16);
> + func = (int (*)(const struct device *,
> + const char *, void *, size_t))
> + device_property_read_u16_array;
> + break;
> + case VFIO_DEV_PROPERTY_TYPE_U8:
> + sz = sizeof(u8);
> + func = (int (*)(const struct device *,
> + const char *, void *, size_t))
> + device_property_read_u8_array;
> + break;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + /* get size of array */
> + n = func(dev, name, NULL, 0);
> + if (n < 0)
> + return n;
> +
> + if (lenp)
> + *lenp = n * sz;
is it really relevant to check lenp is allocated? also what if it is not...
> +
> + if (n * sz > datasz)
> + return -EOVERFLOW;
so you could have done that too for strings. Isn't it simpler? Note the
*lengp value is not consistent with what was done for strings.
> +
> + out = kcalloc(n, sz, GFP_KERNEL);
> + if (!out)
> + return -EFAULT;
-ENOMEM?
> +
> + ret = func(dev, name, out, n);
> + if (ret)
> + goto out;
> +
> + if (copy_to_user(datap, out, n * sz))
> + ret = -EFAULT;
> +
> +out:
> + kfree(out);
> + return ret;
> }
>
> int vfio_platform_dev_properties(struct device *dev,
>
next prev parent reply other threads:[~2015-09-03 16:49 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-19 21:20 [RFC PATCH v3 0/3] vfio: platform: return device properties for a platform device Antonios Motakis
[not found] ` <1419024032-1269-1-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2014-12-19 21:20 ` [RFC PATCH v3 1/3] vfio: platform: add device properties skeleton and user API Antonios Motakis
[not found] ` <1419024032-1269-2-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2015-09-03 16:48 ` Eric Auger
2014-12-19 21:20 ` [RFC PATCH v3 2/3] vfio: platform: access device property as a list of strings Antonios Motakis
2015-09-03 16:49 ` Eric Auger
2014-12-19 21:20 ` [RFC PATCH v3 3/3] vfio: platform: return device properties as arrays of unsigned integers Antonios Motakis
[not found] ` <1419024032-1269-4-git-send-email-a.motakis-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2015-09-03 16:49 ` Eric Auger [this message]
2015-08-27 12:52 ` [RFC PATCH v3 0/3] vfio: platform: return device properties for a platform device Eric Auger
2015-08-27 13:36 ` Antonios Motakis
[not found] ` <55DF124F.8020801-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2015-08-27 13:49 ` Eric Auger
[not found] ` <55DF07F0.3070405-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-08-27 14:27 ` Christian Pinto
[not found] ` <55DF1E4B.6040604-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org>
2015-08-27 14:55 ` Eric Auger
2015-08-27 16:11 ` Alex Williamson
2015-08-27 17:16 ` Eric Auger
[not found] ` <55DF45D0.5040704-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-08-30 14:06 ` Christoffer Dall
2015-08-31 17:02 ` Eric Auger
[not found] ` <55E48897.4090907-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-08-31 17:33 ` Christoffer Dall
2015-09-01 7:31 ` Eric Auger
2015-09-01 9:28 ` Christoffer Dall
2015-09-01 15:29 ` Building assigned device guest dt node from host device tree Eric Auger
2015-09-01 15:49 ` Peter Maydell
2015-09-01 17:00 ` Alexander Graf
[not found] ` <83D37F6C-FFE9-4C3C-AA1C-F12603954C2A-l3A5Bk7waGM@public.gmane.org>
2015-09-01 17:16 ` Eric Auger
2015-09-01 15:32 ` [RFC PATCH v3 0/3] vfio: platform: return device properties for a platform device Baptiste Reynal
[not found] ` <CAN9JPjGfuv_YOBEdZA_AD13oHej7wMCR50=zQTZmgzHx-jBj_A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-09-01 15:52 ` Christoffer Dall
2015-09-02 7:21 ` Baptiste Reynal
[not found] ` <CAN9JPjFwsiYzR6RtDA-5UZYoNALGu8crXVyA+m6ptsWv=qJi5A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-09-02 9:21 ` Christoffer Dall
2015-09-02 9:49 ` Baptiste Reynal
2015-09-02 10:32 ` Christoffer Dall
2015-09-02 13:42 ` Baptiste Reynal
2015-09-02 16:52 ` Alex Williamson
[not found] ` <1441212724.20355.306.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-09-03 7:42 ` Baptiste Reynal
[not found] ` <CAN9JPjF0Lex2wD=_iiriTaYdukva+rxhdwPTQnGqC5kQFCEYGg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-09-03 8:49 ` Christoffer Dall
2015-09-03 14:18 ` Alex Williamson
2015-09-03 16:46 ` Eric Auger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55E87A19.6010009@linaro.org \
--to=eric.auger-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
--cc=alex.williamson-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=b.reynal-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
--cc=christoffer.dall-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=kvmarm-FPEHb7Xf0XXUo1n7N8X6UoWGPAHP3yOg@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=tech-lrHrjnjw1UfHK3s98zE1ajGjJy/sRE9J@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox