Re: [PATCH rdma-core 2/5] kernel-boot: Perform device rename to make stable names

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 08, 2019 at 10:13:48PM +0200, Leon Romanovsky wrote:

> > > +static int by_pci(struct data *d)
> > > +{
> > > +	char *path, *token, *pci;
> > > +	char buf[256];
> > > +	long p, s, f;
> > > +	ssize_t len;
> > > +	int ret;
> > > +
> > > +	ret = asprintf(&path, "/sys/class/infiniband/%s", d->curr);
> > > +	if (ret == -1) {
> > > +		path = NULL;
> > > +		ret = -ENOMEM;
> > > +		goto out;
> > > +	}
> > > +
> > > +	len = readlink(path, buf, sizeof(buf)-1);
> > > +	if (len == -1) {
> > > +		ret = -EINVAL;
> > > +		goto out;
> > > +	}
> > > +	pci = buf + strlen("../../devices/pci0000:00/");
> >
> > This is really sketchy.
> >
> > Do
> >   dev_path = realpath(/sys/class/infiniband/%s/device/)
> >
> > Check that
> >
> > stat(dev_path + /subsystem).st_inode == stat("/sys/bus/pci").st_inode
> >
> > To confirm PCI
> >
> > Strip the last path off to get the domain:B:D.f:
> >
> > basename(dev_path)
>
> The current implementation is needed for RXE devices connected in VM
> over virtio devices, in such case your "basename" will return
> virtio_net.

Which is right, RXE isn't a PCI device and shouldn't use PCI naming at
all.

The check on the subsystem should exclude it entirely.

Jason



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Yosemite Photos]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux