On Mi, 2016-10-05 at 12:30 +0200, Daniel Vetter wrote:
On Wed, Oct 05, 2016 at 08:34:57AM +0200, Gerd Hoffmann wrote:
On Di, 2016-10-04 at 09:43 +0200, Gerd Hoffmann wrote:
Hi,
diff --git a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c index a59d0e309bfc..1fcf739bf509 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c +++ b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c @@ -68,6 +68,10 @@ int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev) dev->pdev = pdev; if (vga) virtio_pci_kick_out_firmware_fb(pdev);
ret = drm_dev_set_unique(dev, dev_name(dev->pdev));
if (ret)
goto err_free; }
Approach looks sensible to me, I'll give it a try ...
Well, dev_name() returns a string without the "pci:" prefix, we have to add that to make things actually work, like this:
Hm right, I missed that in digging through the piles of layers of struct device naming.
--- a/drivers/gpu/drm/virtio/virtgpu_drm_bus.c +++ b/drivers/gpu/drm/virtio/virtgpu_drm_bus.c @@ -60,13 +60,22 @@ int drm_virtio_init(struct drm_driver *driver, struct virtio_device *vdev)
if (strcmp(vdev->dev.parent->bus->name, "pci") == 0) { struct pci_dev *pdev = to_pci_dev(vdev->dev.parent);
const char *pname = dev_name(&pdev->dev); bool vga = (pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA;
char unique[20];
Iirc we kfree this on unload. Needs to be a kasprintf I think.
drm_dev_set_unique() does this:
dev->unique = kstrdup(name, GFP_KERNEL);
So it should not matter at all where the caller stores name. Or do you mean something else?
cheers, Gerd