> From: Jakub Kicinski <kuba@xxxxxxxxxx> > Sent: Wednesday, December 16, 2020 6:14 AM > > On Tue, 15 Dec 2020 01:03:50 -0800 Saeed Mahameed wrote: > > +static ssize_t sfnum_show(struct device *dev, struct device_attribute > > +*attr, char *buf) { > > + struct auxiliary_device *adev = container_of(dev, struct > auxiliary_device, dev); > > + struct mlx5_sf_dev *sf_dev = container_of(adev, struct mlx5_sf_dev, > > +adev); > > + > > + return scnprintf(buf, PAGE_SIZE, "%u\n", sf_dev->sfnum); } static > > +DEVICE_ATTR_RO(sfnum); > > + > > +static struct attribute *sf_device_attrs[] = { > > + &dev_attr_sfnum.attr, > > + NULL, > > +}; > > + > > +static const struct attribute_group sf_attr_group = { > > + .attrs = sf_device_attrs, > > +}; > > + > > +static const struct attribute_group *sf_attr_groups[2] = { > > + &sf_attr_group, > > + NULL > > +}; > > Why the sysfs attribute? Devlink should be able to report device name so > there's no need for a tie in from the other end. There isn't a need to enforce a devlink instance creation either, those mlx5 driver does it. systemd/udev looks after the sysfs attributes, so its parent device, similar to how phys_port_name etc looked for representor side.