The available properties of a device are not indexed numerically, instead they are accessible by property name. Passing type = VFIO_DEVTREE_PROP_LIST to VFIO_DEVICE_GET_DEVTREE_INFO, returns a list of strings with the available properties that the VFIO user can access. Signed-off-by: Antonios Motakis <a.motakis@xxxxxxxxxxxxxxxxxxxxxx> --- drivers/vfio/platform/devtree.c | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/drivers/vfio/platform/devtree.c b/drivers/vfio/platform/devtree.c index c057be3..032ee16 100644 --- a/drivers/vfio/platform/devtree.c +++ b/drivers/vfio/platform/devtree.c @@ -7,7 +7,42 @@ static int devtree_get_prop_list(struct device_node *np, unsigned *lenp, void __user *datap, unsigned long datasz) { - return -EINVAL; + struct property *prop; + int len = 0, sz; + int ret = 0; + + for_each_property_of_node(np, prop) { + sz = strlen(prop->name) + 1; + + if (datasz < sz) { + ret = -EAGAIN; + break; + } + + if (copy_to_user(datap, prop->name, sz)) + return -EFAULT; + + datap += sz; + datasz -= sz; + len += sz; + } + + /* if overflow occurs, calculate remaining length */ + while (prop) { + len += strlen(prop->name) + 1; + prop = prop->next; + } + + /* we expose the full_name in addition to the usual properties */ + len += sz = strlen("full_name") + 1; + if (datasz < sz) { + ret = -EAGAIN; + } else if (copy_to_user(datap, "full_name", sz)) + return -EFAULT; + + *lenp = len; + + return ret; } static int devtree_get_strings(struct device_node *np, -- 2.1.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html