search for: drm_dev_unplug

Displaying 20 results from an estimated 20 matches for "drm_dev_unplug".

2020 Nov 03
4
[PATCH 0/3] drm/nouveau: fix a use-after-free in postclose()
...ensure all the operations in the postclose() handler are valid by extending the lifetime of the nouveau_drm structure. This is possible with the new devm_drm_dev_alloc() interface, but the change is somewhat invasive so I thought it best to submit that work separately. Instead, we make use of the drm_dev_unplug() API, clean up all clients in the device removal call, and check to make sure the device has not been unplugged in the postclose() handler. While this does not enable hot-unplug support for nouveau, it's enough to avoid crashing the kernel and leads to all the core_hotunplug tests to pass. Je...
2024 Jul 28
1
[PATCH v2 02/37] drm/nouveau: handle pci/tegra drm_dev_{alloc, register} from common code
...is possibly a better option for most simple things and harder to misuse... > > normal (though most subsystems would call that unregister, not put) > > A DRM device is reference counted and can out-live the driver, hence the > drm_dev_put() call in .remove(). There is also a special drm_dev_unplug() > function, which does not only unregister the DRM device, but also sets a guard > to be able prevent HW accesses after the HW is accessible anymore. Every subsystem has a refcounted object, struct device is inherently refcounted. You call the thing driver calls during .remove() 'unreg...
2024 Jul 28
1
[PATCH v2 02/37] drm/nouveau: handle pci/tegra drm_dev_{alloc, register} from common code
...pretty Yes, I already mentioned that that DRM devices should still work with this workaround. > normal (though most subsystems would call that unregister, not put) A DRM device is reference counted and can out-live the driver, hence the drm_dev_put() call in .remove(). There is also a special drm_dev_unplug() function, which does not only unregister the DRM device, but also sets a guard to be able prevent HW accesses after the HW is accessible anymore. > > Jason >
2020 Feb 11
1
[PATCH v3] drm/bochs: add drm_driver.release callback.
...= 1, .minor = 0, DRM_GEM_VRAM_DRIVER, + .release = bochs_unload, }; /* ---------------------------------------------------------------------- */ @@ -148,9 +148,9 @@ static void bochs_pci_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); + drm_dev_unplug(dev); drm_atomic_helper_shutdown(dev); - drm_dev_unregister(dev); - bochs_unload(dev); + bochs_hw_fini(dev); drm_dev_put(dev); } diff --git a/drivers/gpu/drm/bochs/bochs_hw.c b/drivers/gpu/drm/bochs/bochs_hw.c index b615b7dfdd9d..952199cc0462 100644 --- a/drivers/gpu/drm/bochs/bochs_hw.c +++...
2020 Feb 11
1
[PATCH v4] drm/cirrus: add drm_driver.release callback.
..., }; static int cirrus_pci_probe(struct pci_dev *pdev, @@ -598,12 +630,11 @@ static void cirrus_pci_remove(struct pci_dev *pdev) struct drm_device *dev = pci_get_drvdata(pdev); struct cirrus_device *cirrus = dev->dev_private; - drm_dev_unregister(dev); - drm_mode_config_cleanup(dev); + drm_dev_unplug(dev); + drm_atomic_helper_shutdown(dev); iounmap(cirrus->mmio); iounmap(cirrus->vram); drm_dev_put(dev); - kfree(cirrus); pci_release_regions(pdev); } -- 2.18.2
2020 Feb 11
2
[PATCH v4] drm/bochs: add drm_driver.release callback.
...= 1, .minor = 0, DRM_GEM_VRAM_DRIVER, + .release = bochs_unload, }; /* ---------------------------------------------------------------------- */ @@ -148,9 +148,9 @@ static void bochs_pci_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); + drm_dev_unplug(dev); drm_atomic_helper_shutdown(dev); - drm_dev_unregister(dev); - bochs_unload(dev); + bochs_hw_fini(dev); drm_dev_put(dev); } diff --git a/drivers/gpu/drm/bochs/bochs_hw.c b/drivers/gpu/drm/bochs/bochs_hw.c index b615b7dfdd9d..952199cc0462 100644 --- a/drivers/gpu/drm/bochs/bochs_hw.c +++...
2020 Feb 11
2
[PATCH v4] drm/bochs: add drm_driver.release callback.
...= 1, .minor = 0, DRM_GEM_VRAM_DRIVER, + .release = bochs_unload, }; /* ---------------------------------------------------------------------- */ @@ -148,9 +148,9 @@ static void bochs_pci_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); + drm_dev_unplug(dev); drm_atomic_helper_shutdown(dev); - drm_dev_unregister(dev); - bochs_unload(dev); + bochs_hw_fini(dev); drm_dev_put(dev); } diff --git a/drivers/gpu/drm/bochs/bochs_hw.c b/drivers/gpu/drm/bochs/bochs_hw.c index b615b7dfdd9d..952199cc0462 100644 --- a/drivers/gpu/drm/bochs/bochs_hw.c +++...
2020 Feb 19
0
[PATCH 31/52] drm/cirrus: Fully embrace devm_
...p_vram: - iounmap(cirrus->vram); -err_dev_put: - drm_dev_put(dev); -err_pci_release: - pci_release_regions(pdev); - return ret; } static void cirrus_pci_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); - struct cirrus_device *cirrus = dev->dev_private; drm_dev_unplug(dev); drm_atomic_helper_shutdown(dev); - iounmap(cirrus->mmio); - iounmap(cirrus->vram); - drm_dev_put(dev); - pci_release_regions(pdev); } static const struct pci_device_id pciidlist[] = { -- 2.24.1
2020 Feb 11
2
[PATCH v4] drm/virtio: add drm_driver.release callback.
....h> #include <drm/drm.h> +#include <drm/drm_atomic_helper.h> #include <drm/drm_drv.h> #include <drm/drm_file.h> @@ -135,7 +136,8 @@ static void virtio_gpu_remove(struct virtio_device *vdev) { struct drm_device *dev = vdev->priv; - drm_dev_unregister(dev); + drm_dev_unplug(dev); + drm_atomic_helper_shutdown(dev); virtio_gpu_deinit(dev); drm_dev_put(dev); } @@ -214,4 +216,6 @@ static struct drm_driver driver = { .major = DRIVER_MAJOR, .minor = DRIVER_MINOR, .patchlevel = DRIVER_PATCHLEVEL, + + .release = virtio_gpu_release, }; diff --git a/drivers/gpu/drm/...
2020 Feb 11
2
[PATCH v4] drm/virtio: add drm_driver.release callback.
....h> #include <drm/drm.h> +#include <drm/drm_atomic_helper.h> #include <drm/drm_drv.h> #include <drm/drm_file.h> @@ -135,7 +136,8 @@ static void virtio_gpu_remove(struct virtio_device *vdev) { struct drm_device *dev = vdev->priv; - drm_dev_unregister(dev); + drm_dev_unplug(dev); + drm_atomic_helper_shutdown(dev); virtio_gpu_deinit(dev); drm_dev_put(dev); } @@ -214,4 +216,6 @@ static struct drm_driver driver = { .major = DRIVER_MAJOR, .minor = DRIVER_MINOR, .patchlevel = DRIVER_PATCHLEVEL, + + .release = virtio_gpu_release, }; diff --git a/drivers/gpu/drm/...
2020 Feb 11
0
[PATCH v3] drm/cirrus: add drm_driver.release callback.
..., }; static int cirrus_pci_probe(struct pci_dev *pdev, @@ -598,12 +630,11 @@ static void cirrus_pci_remove(struct pci_dev *pdev) struct drm_device *dev = pci_get_drvdata(pdev); struct cirrus_device *cirrus = dev->dev_private; - drm_dev_unregister(dev); - drm_mode_config_cleanup(dev); + drm_dev_unplug(dev); + drm_atomic_helper_shutdown(dev); iounmap(cirrus->mmio); iounmap(cirrus->vram); drm_dev_put(dev); - kfree(cirrus); pci_release_regions(pdev); } -- 2.18.2
2020 Mar 02
1
[PATCH 30/51] drm/cirrus: Fully embrace devm_
...p_vram: - iounmap(cirrus->vram); -err_dev_put: - drm_dev_put(dev); -err_pci_release: - pci_release_regions(pdev); - return ret; } static void cirrus_pci_remove(struct pci_dev *pdev) { struct drm_device *dev = pci_get_drvdata(pdev); - struct cirrus_device *cirrus = dev->dev_private; drm_dev_unplug(dev); drm_atomic_helper_shutdown(dev); - iounmap(cirrus->mmio); - iounmap(cirrus->vram); - drm_dev_put(dev); - pci_release_regions(pdev); } static const struct pci_device_id pciidlist[] = { -- 2.24.1
2020 Feb 11
0
[PATCH v4] drm/bochs: add drm_driver.release callback.
...> + .release = bochs_unload, > }; > > /* ---------------------------------------------------------------------- */ > @@ -148,9 +148,9 @@ static void bochs_pci_remove(struct pci_dev *pdev) > { > struct drm_device *dev = pci_get_drvdata(pdev); > > + drm_dev_unplug(dev); > drm_atomic_helper_shutdown(dev); > - drm_dev_unregister(dev); > - bochs_unload(dev); > + bochs_hw_fini(dev); > drm_dev_put(dev); > } > > diff --git a/drivers/gpu/drm/bochs/bochs_hw.c b/drivers/gpu/drm/bochs/bochs_hw.c > index b615b7dfdd9d..952199cc0462 1006...
2024 Jul 28
1
[PATCH v2 02/37] drm/nouveau: handle pci/tegra drm_dev_{alloc, register} from common code
On Fri, Jul 26, 2024 at 11:07:19PM +1000, Ben Skeggs wrote: > > Right, I think I took that too literally. > > > > The lifetime of the DRM device (or more precisely one of its references) is > > bound to the binding between the parent device and its corresponding driver. > > > > But the lifetime of the parent device itself is bound to the DRM device. > >
2020 Feb 11
0
[PATCH v3] drm/virtio: add drm_driver.release callback.
....h> #include <drm/drm.h> +#include <drm/drm_atomic_helper.h> #include <drm/drm_drv.h> #include <drm/drm_file.h> @@ -135,7 +136,8 @@ static void virtio_gpu_remove(struct virtio_device *vdev) { struct drm_device *dev = vdev->priv; - drm_dev_unregister(dev); + drm_dev_unplug(dev); + drm_atomic_helper_shutdown(dev); virtio_gpu_deinit(dev); drm_dev_put(dev); } @@ -214,4 +216,6 @@ static struct drm_driver driver = { .major = DRIVER_MAJOR, .minor = DRIVER_MINOR, .patchlevel = DRIVER_PATCHLEVEL, + + .release = virtio_gpu_release, }; diff --git a/drivers/gpu/drm/...
2020 Feb 11
0
[PATCH v4] drm/virtio: add drm_driver.release callback.
...e <drm/drm_atomic_helper.h> > #include <drm/drm_drv.h> > #include <drm/drm_file.h> > > @@ -135,7 +136,8 @@ static void virtio_gpu_remove(struct virtio_device *vdev) > { > struct drm_device *dev = vdev->priv; > > - drm_dev_unregister(dev); > + drm_dev_unplug(dev); > + drm_atomic_helper_shutdown(dev); > virtio_gpu_deinit(dev); > drm_dev_put(dev); > } > @@ -214,4 +216,6 @@ static struct drm_driver driver = { > .major = DRIVER_MAJOR, > .minor = DRIVER_MINOR, > .patchlevel = DRIVER_PATCHLEVEL, > + > + .release = vir...
2018 Apr 26
0
[Intel-gfx] [PATCH] drm/core: Remove drm_dev_unref() and it's uses
...drm/drm_drv.h > @@ -622,7 +622,6 @@ void drm_dev_unregister(struct drm_device *dev); > > void drm_dev_get(struct drm_device *dev); > void drm_dev_put(struct drm_device *dev); > -void drm_dev_unref(struct drm_device *dev); > void drm_put_dev(struct drm_device *dev); > void drm_dev_unplug(struct drm_device *dev); > > -- > 2.14.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx at lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Daniel Vetter Software Engineer, Intel Corporation h...
2018 Apr 26
5
[PATCH] drm/core: Remove drm_dev_unref() and it's uses
...nclude/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -622,7 +622,6 @@ void drm_dev_unregister(struct drm_device *dev); void drm_dev_get(struct drm_device *dev); void drm_dev_put(struct drm_device *dev); -void drm_dev_unref(struct drm_device *dev); void drm_put_dev(struct drm_device *dev); void drm_dev_unplug(struct drm_device *dev); -- 2.14.1
2018 Apr 26
5
[PATCH] drm/core: Remove drm_dev_unref() and it's uses
...nclude/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -622,7 +622,6 @@ void drm_dev_unregister(struct drm_device *dev); void drm_dev_get(struct drm_device *dev); void drm_dev_put(struct drm_device *dev); -void drm_dev_unref(struct drm_device *dev); void drm_put_dev(struct drm_device *dev); void drm_dev_unplug(struct drm_device *dev); -- 2.14.1
2018 Apr 26
5
[PATCH] drm/core: Remove drm_dev_unref() and it's uses
...nclude/drm/drm_drv.h +++ b/include/drm/drm_drv.h @@ -622,7 +622,6 @@ void drm_dev_unregister(struct drm_device *dev); void drm_dev_get(struct drm_device *dev); void drm_dev_put(struct drm_device *dev); -void drm_dev_unref(struct drm_device *dev); void drm_put_dev(struct drm_device *dev); void drm_dev_unplug(struct drm_device *dev); -- 2.14.1