From patchwork Mon Aug 26 20:41:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Parav Pandit X-Patchwork-Id: 1153436 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46HP763MpTz9sMr for ; Tue, 27 Aug 2019 06:41:38 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729441AbfHZUlg (ORCPT ); Mon, 26 Aug 2019 16:41:36 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:37878 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728053AbfHZUlf (ORCPT ); Mon, 26 Aug 2019 16:41:35 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 26 Aug 2019 23:41:30 +0300 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x7QKfPDP021168; Mon, 26 Aug 2019 23:41:28 +0300 From: Parav Pandit To: alex.williamson@redhat.com, jiri@mellanox.com, kwankhede@nvidia.com, cohuck@redhat.com, davem@davemloft.net Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Parav Pandit Subject: [PATCH 1/4] mdev: Introduce sha1 based mdev alias Date: Mon, 26 Aug 2019 15:41:16 -0500 Message-Id: <20190826204119.54386-2-parav@mellanox.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190826204119.54386-1-parav@mellanox.com> References: <20190826204119.54386-1-parav@mellanox.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Whenever a parent requests to generate mdev alias, generate a mdev alias. It is an optional attribute that parent can request to generate for each of its child mdev. mdev alias is generated using sha1 from the mdev name. Signed-off-by: Parav Pandit --- drivers/vfio/mdev/mdev_core.c | 98 +++++++++++++++++++++++++++++++- drivers/vfio/mdev/mdev_private.h | 5 +- drivers/vfio/mdev/mdev_sysfs.c | 13 +++-- include/linux/mdev.h | 4 ++ 4 files changed, 111 insertions(+), 9 deletions(-) diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index b558d4cfd082..e825ff38b037 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -10,9 +10,11 @@ #include #include #include +#include #include #include #include +#include #include "mdev_private.h" @@ -27,6 +29,8 @@ static struct class_compat *mdev_bus_compat_class; static LIST_HEAD(mdev_list); static DEFINE_MUTEX(mdev_list_lock); +static struct crypto_shash *alias_hash; + struct device *mdev_parent_dev(struct mdev_device *mdev) { return mdev->parent->dev; @@ -164,6 +168,18 @@ int mdev_register_device(struct device *dev, const struct mdev_parent_ops *ops) goto add_dev_err; } + if (ops->get_alias_length) { + unsigned int digest_size; + unsigned int aligned_len; + + aligned_len = roundup(ops->get_alias_length(), 2); + digest_size = crypto_shash_digestsize(alias_hash); + if (aligned_len / 2 > digest_size) { + ret = -EINVAL; + goto add_dev_err; + } + } + parent = kzalloc(sizeof(*parent), GFP_KERNEL); if (!parent) { ret = -ENOMEM; @@ -259,6 +275,7 @@ static void mdev_device_free(struct mdev_device *mdev) mutex_unlock(&mdev_list_lock); dev_dbg(&mdev->dev, "MDEV: destroying\n"); + kvfree(mdev->alias); kfree(mdev); } @@ -269,18 +286,86 @@ static void mdev_device_release(struct device *dev) mdev_device_free(mdev); } -int mdev_device_create(struct kobject *kobj, - struct device *dev, const guid_t *uuid) +static const char * +generate_alias(const char *uuid, unsigned int max_alias_len) +{ + struct shash_desc *hash_desc; + unsigned int digest_size; + unsigned char *digest; + unsigned int alias_len; + char *alias; + int ret = 0; + + /* Align to multiple of 2 as bin2hex will generate + * even number of bytes. + */ + alias_len = roundup(max_alias_len, 2); + alias = kvzalloc(alias_len + 1, GFP_KERNEL); + if (!alias) + return NULL; + + /* Allocate and init descriptor */ + hash_desc = kvzalloc(sizeof(*hash_desc) + + crypto_shash_descsize(alias_hash), + GFP_KERNEL); + if (!hash_desc) + goto desc_err; + + hash_desc->tfm = alias_hash; + + digest_size = crypto_shash_digestsize(alias_hash); + + digest = kvzalloc(digest_size, GFP_KERNEL); + if (!digest) { + ret = -ENOMEM; + goto digest_err; + } + crypto_shash_init(hash_desc); + crypto_shash_update(hash_desc, uuid, UUID_STRING_LEN); + crypto_shash_final(hash_desc, digest); + bin2hex(&alias[0], digest, + min_t(unsigned int, digest_size, alias_len / 2)); + /* When alias length is odd, zero out and additional last byte + * that bin2hex has copied. + */ + if (max_alias_len % 2) + alias[max_alias_len] = 0; + + kvfree(digest); + kvfree(hash_desc); + return alias; + +digest_err: + kvfree(hash_desc); +desc_err: + kvfree(alias); + return NULL; +} + +int mdev_device_create(struct kobject *kobj, struct device *dev, + const char *uuid_str, const guid_t *uuid) { int ret; struct mdev_device *mdev, *tmp; struct mdev_parent *parent; struct mdev_type *type = to_mdev_type(kobj); + unsigned int alias_len = 0; + const char *alias = NULL; parent = mdev_get_parent(type->parent); if (!parent) return -EINVAL; + if (parent->ops->get_alias_length) + alias_len = parent->ops->get_alias_length(); + if (alias_len) { + alias = generate_alias(uuid_str, alias_len); + if (!alias) { + ret = -ENOMEM; + goto alias_fail; + } + } + mutex_lock(&mdev_list_lock); /* Check for duplicate */ @@ -300,6 +385,8 @@ int mdev_device_create(struct kobject *kobj, } guid_copy(&mdev->uuid, uuid); + mdev->alias = alias; + alias = NULL; list_add(&mdev->next, &mdev_list); mutex_unlock(&mdev_list_lock); @@ -346,6 +433,8 @@ int mdev_device_create(struct kobject *kobj, up_read(&parent->unreg_sem); put_device(&mdev->dev); mdev_fail: + kvfree(alias); +alias_fail: mdev_put_parent(parent); return ret; } @@ -406,6 +495,10 @@ EXPORT_SYMBOL(mdev_get_iommu_device); static int __init mdev_init(void) { + alias_hash = crypto_alloc_shash("sha1", 0, 0); + if (!alias_hash) + return -ENOMEM; + return mdev_bus_register(); } @@ -415,6 +508,7 @@ static void __exit mdev_exit(void) class_compat_unregister(mdev_bus_compat_class); mdev_bus_unregister(); + crypto_free_shash(alias_hash); } module_init(mdev_init) diff --git a/drivers/vfio/mdev/mdev_private.h b/drivers/vfio/mdev/mdev_private.h index 7d922950caaf..cf1c0d9842c6 100644 --- a/drivers/vfio/mdev/mdev_private.h +++ b/drivers/vfio/mdev/mdev_private.h @@ -33,6 +33,7 @@ struct mdev_device { struct kobject *type_kobj; struct device *iommu_device; bool active; + const char *alias; }; #define to_mdev_device(dev) container_of(dev, struct mdev_device, dev) @@ -57,8 +58,8 @@ void parent_remove_sysfs_files(struct mdev_parent *parent); int mdev_create_sysfs_files(struct device *dev, struct mdev_type *type); void mdev_remove_sysfs_files(struct device *dev, struct mdev_type *type); -int mdev_device_create(struct kobject *kobj, - struct device *dev, const guid_t *uuid); +int mdev_device_create(struct kobject *kobj, struct device *dev, + const char *uuid_str, const guid_t *uuid); int mdev_device_remove(struct device *dev); #endif /* MDEV_PRIVATE_H */ diff --git a/drivers/vfio/mdev/mdev_sysfs.c b/drivers/vfio/mdev/mdev_sysfs.c index 7570c7602ab4..43afe0e80b76 100644 --- a/drivers/vfio/mdev/mdev_sysfs.c +++ b/drivers/vfio/mdev/mdev_sysfs.c @@ -63,15 +63,18 @@ static ssize_t create_store(struct kobject *kobj, struct device *dev, return -ENOMEM; ret = guid_parse(str, &uuid); - kfree(str); if (ret) - return ret; + goto err; - ret = mdev_device_create(kobj, dev, &uuid); + ret = mdev_device_create(kobj, dev, str, &uuid); if (ret) - return ret; + goto err; - return count; + ret = count; + +err: + kfree(str); + return ret; } MDEV_TYPE_ATTR_WO(create); diff --git a/include/linux/mdev.h b/include/linux/mdev.h index 0ce30ca78db0..f036fe9854ee 100644 --- a/include/linux/mdev.h +++ b/include/linux/mdev.h @@ -72,6 +72,9 @@ struct device *mdev_get_iommu_device(struct device *dev); * @mmap: mmap callback * @mdev: mediated device structure * @vma: vma structure + * @get_alias_length: Generate alias for the mdevs of this parent based on the + * mdev device name when it returns non zero alias length. + * It is optional. * Parent device that support mediated device should be registered with mdev * module with mdev_parent_ops structure. **/ @@ -92,6 +95,7 @@ struct mdev_parent_ops { long (*ioctl)(struct mdev_device *mdev, unsigned int cmd, unsigned long arg); int (*mmap)(struct mdev_device *mdev, struct vm_area_struct *vma); + unsigned int (*get_alias_length)(void); }; /* interface for exporting mdev supported type attributes */ From patchwork Mon Aug 26 20:41:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Parav Pandit X-Patchwork-Id: 1153440 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46HP7d3lfCz9sMr for ; Tue, 27 Aug 2019 06:42:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726562AbfHZUle (ORCPT ); Mon, 26 Aug 2019 16:41:34 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:37879 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727658AbfHZUle (ORCPT ); Mon, 26 Aug 2019 16:41:34 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 26 Aug 2019 23:41:32 +0300 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x7QKfPDQ021168; Mon, 26 Aug 2019 23:41:30 +0300 From: Parav Pandit To: alex.williamson@redhat.com, jiri@mellanox.com, kwankhede@nvidia.com, cohuck@redhat.com, davem@davemloft.net Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Parav Pandit Subject: [PATCH 2/4] mdev: Make mdev alias unique among all mdevs Date: Mon, 26 Aug 2019 15:41:17 -0500 Message-Id: <20190826204119.54386-3-parav@mellanox.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190826204119.54386-1-parav@mellanox.com> References: <20190826204119.54386-1-parav@mellanox.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Mdev alias should be unique among all the mdevs, so that when such alias is used by the mdev users to derive other objects, there is no collision in a given system. Signed-off-by: Parav Pandit --- drivers/vfio/mdev/mdev_core.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/vfio/mdev/mdev_core.c b/drivers/vfio/mdev/mdev_core.c index e825ff38b037..6eb37f0c6369 100644 --- a/drivers/vfio/mdev/mdev_core.c +++ b/drivers/vfio/mdev/mdev_core.c @@ -375,6 +375,11 @@ int mdev_device_create(struct kobject *kobj, struct device *dev, ret = -EEXIST; goto mdev_fail; } + if (tmp->alias && strcmp(tmp->alias, alias) == 0) { + mutex_unlock(&mdev_list_lock); + ret = -EEXIST; + goto mdev_fail; + } } mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); From patchwork Mon Aug 26 20:41:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Parav Pandit X-Patchwork-Id: 1153438 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46HP7G2b6Bz9sMr for ; Tue, 27 Aug 2019 06:41:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729953AbfHZUll (ORCPT ); Mon, 26 Aug 2019 16:41:41 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:37907 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729691AbfHZUlj (ORCPT ); Mon, 26 Aug 2019 16:41:39 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 26 Aug 2019 23:41:35 +0300 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x7QKfPDR021168; Mon, 26 Aug 2019 23:41:32 +0300 From: Parav Pandit To: alex.williamson@redhat.com, jiri@mellanox.com, kwankhede@nvidia.com, cohuck@redhat.com, davem@davemloft.net Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Parav Pandit Subject: [PATCH 3/4] mdev: Expose mdev alias in sysfs tree Date: Mon, 26 Aug 2019 15:41:18 -0500 Message-Id: <20190826204119.54386-4-parav@mellanox.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190826204119.54386-1-parav@mellanox.com> References: <20190826204119.54386-1-parav@mellanox.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Expose mdev alias as string in a sysfs tree so that such attribute can be used to generate netdevice name by systemd/udev or can be used to match other kernel objects based on the alias of the mdev. Signed-off-by: Parav Pandit --- drivers/vfio/mdev/mdev_sysfs.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/vfio/mdev/mdev_sysfs.c b/drivers/vfio/mdev/mdev_sysfs.c index 43afe0e80b76..59f4e3cc5233 100644 --- a/drivers/vfio/mdev/mdev_sysfs.c +++ b/drivers/vfio/mdev/mdev_sysfs.c @@ -246,7 +246,20 @@ static ssize_t remove_store(struct device *dev, struct device_attribute *attr, static DEVICE_ATTR_WO(remove); +static ssize_t alias_show(struct device *device, + struct device_attribute *attr, char *buf) +{ + struct mdev_device *dev = mdev_from_dev(device); + + if (!dev->alias) + return -EOPNOTSUPP; + + return sprintf(buf, "%s\n", dev->alias); +} +static DEVICE_ATTR_RO(alias); + static const struct attribute *mdev_device_attrs[] = { + &dev_attr_alias.attr, &dev_attr_remove.attr, NULL, }; From patchwork Mon Aug 26 20:41:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Parav Pandit X-Patchwork-Id: 1153437 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46HP7B3jm6z9sML for ; Tue, 27 Aug 2019 06:41:42 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730066AbfHZUll (ORCPT ); Mon, 26 Aug 2019 16:41:41 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:37912 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1729599AbfHZUlj (ORCPT ); Mon, 26 Aug 2019 16:41:39 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 26 Aug 2019 23:41:36 +0300 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x7QKfPDS021168; Mon, 26 Aug 2019 23:41:34 +0300 From: Parav Pandit To: alex.williamson@redhat.com, jiri@mellanox.com, kwankhede@nvidia.com, cohuck@redhat.com, davem@davemloft.net Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Parav Pandit Subject: [PATCH 4/4] mtty: Optionally support mtty alias Date: Mon, 26 Aug 2019 15:41:19 -0500 Message-Id: <20190826204119.54386-5-parav@mellanox.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190826204119.54386-1-parav@mellanox.com> References: <20190826204119.54386-1-parav@mellanox.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Provide a module parameter to set alias length to optionally generate mdev alias. Example to request mdev alias. $ modprobe mtty alias_length=12 Signed-off-by: Parav Pandit --- samples/vfio-mdev/mtty.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c index 92e770a06ea2..92208245b057 100644 --- a/samples/vfio-mdev/mtty.c +++ b/samples/vfio-mdev/mtty.c @@ -1410,6 +1410,15 @@ static struct attribute_group *mdev_type_groups[] = { NULL, }; +static unsigned int mtty_alias_length; +module_param_named(alias_length, mtty_alias_length, uint, 0444); +MODULE_PARM_DESC(alias_length, "mdev alias length; default=0"); + +static unsigned int mtty_get_alias_length(void) +{ + return mtty_alias_length; +} + static const struct mdev_parent_ops mdev_fops = { .owner = THIS_MODULE, .dev_attr_groups = mtty_dev_groups, @@ -1422,6 +1431,7 @@ static const struct mdev_parent_ops mdev_fops = { .read = mtty_read, .write = mtty_write, .ioctl = mtty_ioctl, + .get_alias_length = mtty_get_alias_length }; static void mtty_device_release(struct device *dev) From patchwork Thu Aug 29 11:19:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Parav Pandit X-Patchwork-Id: 1155200 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46K0W50Y80z9s5b for ; Thu, 29 Aug 2019 21:19:29 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728263AbfH2LT1 (ORCPT ); Thu, 29 Aug 2019 07:19:27 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:43800 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728229AbfH2LTZ (ORCPT ); Thu, 29 Aug 2019 07:19:25 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 29 Aug 2019 14:19:22 +0300 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x7TBJ8v6020002; Thu, 29 Aug 2019 14:19:20 +0300 From: Parav Pandit To: alex.williamson@redhat.com, jiri@mellanox.com, kwankhede@nvidia.com, cohuck@redhat.com, davem@davemloft.net Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Parav Pandit Subject: [PATCH v2 5/6] mdev: Update sysfs documentation Date: Thu, 29 Aug 2019 06:19:03 -0500 Message-Id: <20190829111904.16042-6-parav@mellanox.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190829111904.16042-1-parav@mellanox.com> References: <20190826204119.54386-1-parav@mellanox.com> <20190829111904.16042-1-parav@mellanox.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Updated documentation for optional read only sysfs attribute. Signed-off-by: Parav Pandit --- Documentation/driver-api/vfio-mediated-device.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/driver-api/vfio-mediated-device.rst b/Documentation/driver-api/vfio-mediated-device.rst index 25eb7d5b834b..0ab03d3f5629 100644 --- a/Documentation/driver-api/vfio-mediated-device.rst +++ b/Documentation/driver-api/vfio-mediated-device.rst @@ -270,6 +270,7 @@ Directories and Files Under the sysfs for Each mdev Device |--- remove |--- mdev_type {link to its type} |--- vendor-specific-attributes [optional] + |--- alias [optional] * remove (write only) @@ -281,6 +282,10 @@ Example:: # echo 1 > /sys/bus/mdev/devices/$mdev_UUID/remove +* alias (read only) +Whenever a parent requested to generate an alias, each mdev is assigned a unique +alias by the mdev core. This file shows the alias of the mdev device. + Mediated device Hot plug ------------------------ From patchwork Thu Aug 29 11:19:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Parav Pandit X-Patchwork-Id: 1155201 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=mellanox.com Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46K0W95c6yz9sML for ; Thu, 29 Aug 2019 21:19:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728336AbfH2LTc (ORCPT ); Thu, 29 Aug 2019 07:19:32 -0400 Received: from mail-il-dmz.mellanox.com ([193.47.165.129]:43818 "EHLO mellanox.co.il" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728303AbfH2LTa (ORCPT ); Thu, 29 Aug 2019 07:19:30 -0400 Received: from Internal Mail-Server by MTLPINE1 (envelope-from parav@mellanox.com) with ESMTPS (AES256-SHA encrypted); 29 Aug 2019 14:19:24 +0300 Received: from sw-mtx-036.mtx.labs.mlnx (sw-mtx-036.mtx.labs.mlnx [10.12.150.149]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x7TBJ8v7020002; Thu, 29 Aug 2019 14:19:22 +0300 From: Parav Pandit To: alex.williamson@redhat.com, jiri@mellanox.com, kwankhede@nvidia.com, cohuck@redhat.com, davem@davemloft.net Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Parav Pandit Subject: [PATCH v2 6/6] mtty: Optionally support mtty alias Date: Thu, 29 Aug 2019 06:19:04 -0500 Message-Id: <20190829111904.16042-7-parav@mellanox.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20190829111904.16042-1-parav@mellanox.com> References: <20190826204119.54386-1-parav@mellanox.com> <20190829111904.16042-1-parav@mellanox.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Provide a module parameter to set alias length to optionally generate mdev alias. Example to request mdev alias. $ modprobe mtty alias_length=12 Make use of mtty_alias() API when alias_length module parameter is set. Signed-off-by: Parav Pandit --- Changelog: v1->v2: - Added mdev_alias() usage sample --- samples/vfio-mdev/mtty.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/samples/vfio-mdev/mtty.c b/samples/vfio-mdev/mtty.c index 92e770a06ea2..075d65440bc0 100644 --- a/samples/vfio-mdev/mtty.c +++ b/samples/vfio-mdev/mtty.c @@ -150,6 +150,10 @@ static const struct file_operations vd_fops = { .owner = THIS_MODULE, }; +static unsigned int mtty_alias_length; +module_param_named(alias_length, mtty_alias_length, uint, 0444); +MODULE_PARM_DESC(alias_length, "mdev alias length; default=0"); + /* function prototypes */ static int mtty_trigger_interrupt(const guid_t *uuid); @@ -770,6 +774,9 @@ static int mtty_create(struct kobject *kobj, struct mdev_device *mdev) list_add(&mdev_state->next, &mdev_devices_list); mutex_unlock(&mdev_list_lock); + if (mtty_alias_length) + dev_dbg(mdev_dev(mdev), "alias is %s\n", mdev_alias(mdev)); + return 0; } @@ -1410,6 +1417,11 @@ static struct attribute_group *mdev_type_groups[] = { NULL, }; +static unsigned int mtty_get_alias_length(void) +{ + return mtty_alias_length; +} + static const struct mdev_parent_ops mdev_fops = { .owner = THIS_MODULE, .dev_attr_groups = mtty_dev_groups, @@ -1422,6 +1434,7 @@ static const struct mdev_parent_ops mdev_fops = { .read = mtty_read, .write = mtty_write, .ioctl = mtty_ioctl, + .get_alias_length = mtty_get_alias_length }; static void mtty_device_release(struct device *dev)