Thu, Nov 07, 2019 at 05:08:21PM CET, parav@xxxxxxxxxxxx wrote: >From: Vu Pham <vuhuong@xxxxxxxxxxxx> [...] >+static ssize_t >+max_mdevs_show(struct kobject *kobj, struct device *dev, char *buf) >+{ >+ struct pci_dev *pdev = to_pci_dev(dev); >+ struct mlx5_core_dev *coredev; >+ struct mlx5_mdev_table *table; >+ u16 max_sfs; >+ >+ coredev = pci_get_drvdata(pdev); >+ table = coredev->priv.eswitch->mdev_table; >+ max_sfs = mlx5_core_max_sfs(coredev, &table->sf_table); >+ >+ return sprintf(buf, "%d\n", max_sfs); >+} >+static MDEV_TYPE_ATTR_RO(max_mdevs); >+ >+static ssize_t >+available_instances_show(struct kobject *kobj, struct device *dev, char *buf) >+{ >+ struct pci_dev *pdev = to_pci_dev(dev); >+ struct mlx5_core_dev *coredev; >+ struct mlx5_mdev_table *table; >+ u16 free_sfs; >+ >+ coredev = pci_get_drvdata(pdev); >+ table = coredev->priv.eswitch->mdev_table; >+ free_sfs = mlx5_get_free_sfs(coredev, &table->sf_table); >+ return sprintf(buf, "%d\n", free_sfs); >+} >+static MDEV_TYPE_ATTR_RO(available_instances); These 2 arbitrary sysfs files are showing resource size/usage for the whole eswitch/asic. That is a job for "devlink resource". Please implement that. >+ >+static struct attribute *mdev_dev_attrs[] = { >+ &mdev_type_attr_max_mdevs.attr, >+ &mdev_type_attr_available_instances.attr, >+ NULL, >+}; >+ >+static struct attribute_group mdev_mgmt_group = { >+ .name = "local", >+ .attrs = mdev_dev_attrs, >+}; >+ >+static struct attribute_group *mlx5_meddev_groups[] = { >+ &mdev_mgmt_group, >+ NULL, >+}; [...]