Thomas Zimmermann
2024-Aug-12 08:28 UTC
[PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
Amdgpu and nouveau call vga_switcheroo_process_delayed_switch() from their lastclose callbacks. Call it from drm_lastclose(), so that the driver functions can finally be removed. Only PCI devices with enabled switcheroo do the delayed switching. The call has no effect on other hardware. v2: - move change to drm_lastclose() (Sima) - update docs for vga_switcheroo_process_delayed_switch() Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de> --- drivers/gpu/drm/drm_file.c | 4 ++++ drivers/gpu/vga/vga_switcheroo.c | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c index 714e42b05108..513bef816ae9 100644 --- a/drivers/gpu/drm/drm_file.c +++ b/drivers/gpu/drm/drm_file.c @@ -38,6 +38,7 @@ #include <linux/pci.h> #include <linux/poll.h> #include <linux/slab.h> +#include <linux/vga_switcheroo.h> #include <drm/drm_client.h> #include <drm/drm_drv.h> @@ -404,6 +405,9 @@ void drm_lastclose(struct drm_device * dev) drm_dbg_core(dev, "driver lastclose completed\n"); drm_client_dev_restore(dev); + + if (dev_is_pci(dev->dev)) + vga_switcheroo_process_delayed_switch(); } /** diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c index 365e6ddbe90f..18f2c92beff8 100644 --- a/drivers/gpu/vga/vga_switcheroo.c +++ b/drivers/gpu/vga/vga_switcheroo.c @@ -926,8 +926,7 @@ static void vga_switcheroo_debugfs_init(struct vgasr_priv *priv) /** * vga_switcheroo_process_delayed_switch() - helper for delayed switching * - * Process a delayed switch if one is pending. DRM drivers should call this - * from their ->lastclose callback. + * Process a delayed switch if one is pending. * * Return: 0 on success. -EINVAL if no delayed switch is pending, if the client * has unregistered in the meantime or if there are other clients blocking the -- 2.46.0
Daniel Vetter
2024-Aug-12 09:23 UTC
[PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
On Mon, Aug 12, 2024 at 10:28:22AM +0200, Thomas Zimmermann wrote:> Amdgpu and nouveau call vga_switcheroo_process_delayed_switch() from > their lastclose callbacks. Call it from drm_lastclose(), so that the > driver functions can finally be removed. Only PCI devices with enabled > switcheroo do the delayed switching. The call has no effect on other > hardware. > > v2: > - move change to drm_lastclose() (Sima) > - update docs for vga_switcheroo_process_delayed_switch() > > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>A bit an aside: The entire vgaswitcheroo code is still a midlayer mess, where the locking is at the wrong layers resulting in the can_switch check potentially being racy. But that's a different can of worms. Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>> --- > drivers/gpu/drm/drm_file.c | 4 ++++ > drivers/gpu/vga/vga_switcheroo.c | 3 +-- > 2 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c > index 714e42b05108..513bef816ae9 100644 > --- a/drivers/gpu/drm/drm_file.c > +++ b/drivers/gpu/drm/drm_file.c > @@ -38,6 +38,7 @@ > #include <linux/pci.h> > #include <linux/poll.h> > #include <linux/slab.h> > +#include <linux/vga_switcheroo.h> > > #include <drm/drm_client.h> > #include <drm/drm_drv.h> > @@ -404,6 +405,9 @@ void drm_lastclose(struct drm_device * dev) > drm_dbg_core(dev, "driver lastclose completed\n"); > > drm_client_dev_restore(dev); > + > + if (dev_is_pci(dev->dev)) > + vga_switcheroo_process_delayed_switch(); > } > > /** > diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c > index 365e6ddbe90f..18f2c92beff8 100644 > --- a/drivers/gpu/vga/vga_switcheroo.c > +++ b/drivers/gpu/vga/vga_switcheroo.c > @@ -926,8 +926,7 @@ static void vga_switcheroo_debugfs_init(struct vgasr_priv *priv) > /** > * vga_switcheroo_process_delayed_switch() - helper for delayed switching > * > - * Process a delayed switch if one is pending. DRM drivers should call this > - * from their ->lastclose callback. > + * Process a delayed switch if one is pending. > * > * Return: 0 on success. -EINVAL if no delayed switch is pending, if the client > * has unregistered in the meantime or if there are other clients blocking the > -- > 2.46.0 >-- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
Alex Deucher
2024-Aug-12 19:05 UTC
[PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
On Mon, Aug 12, 2024 at 4:30?AM Thomas Zimmermann <tzimmermann at suse.de> wrote:> > Amdgpu and nouveau call vga_switcheroo_process_delayed_switch() from > their lastclose callbacks. Call it from drm_lastclose(), so that the > driver functions can finally be removed. Only PCI devices with enabled > switcheroo do the delayed switching. The call has no effect on other > hardware. > > v2: > - move change to drm_lastclose() (Sima) > - update docs for vga_switcheroo_process_delayed_switch() > > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>Reviewed-by: Alex Deucher <alexander.deucher at amd.com>> --- > drivers/gpu/drm/drm_file.c | 4 ++++ > drivers/gpu/vga/vga_switcheroo.c | 3 +-- > 2 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c > index 714e42b05108..513bef816ae9 100644 > --- a/drivers/gpu/drm/drm_file.c > +++ b/drivers/gpu/drm/drm_file.c > @@ -38,6 +38,7 @@ > #include <linux/pci.h> > #include <linux/poll.h> > #include <linux/slab.h> > +#include <linux/vga_switcheroo.h> > > #include <drm/drm_client.h> > #include <drm/drm_drv.h> > @@ -404,6 +405,9 @@ void drm_lastclose(struct drm_device * dev) > drm_dbg_core(dev, "driver lastclose completed\n"); > > drm_client_dev_restore(dev); > + > + if (dev_is_pci(dev->dev)) > + vga_switcheroo_process_delayed_switch(); > } > > /** > diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c > index 365e6ddbe90f..18f2c92beff8 100644 > --- a/drivers/gpu/vga/vga_switcheroo.c > +++ b/drivers/gpu/vga/vga_switcheroo.c > @@ -926,8 +926,7 @@ static void vga_switcheroo_debugfs_init(struct vgasr_priv *priv) > /** > * vga_switcheroo_process_delayed_switch() - helper for delayed switching > * > - * Process a delayed switch if one is pending. DRM drivers should call this > - * from their ->lastclose callback. > + * Process a delayed switch if one is pending. > * > * Return: 0 on success. -EINVAL if no delayed switch is pending, if the client > * has unregistered in the meantime or if there are other clients blocking the > -- > 2.46.0 >
I do not know which list this is. How can I get these emails to stop? Thank you. On Mon, Aug 12, 2024 at 3:40?AM Thomas Zimmermann <tzimmermann at suse.de> wrote:> Amdgpu and nouveau call vga_switcheroo_process_delayed_switch() from > their lastclose callbacks. Call it from drm_lastclose(), so that the > driver functions can finally be removed. Only PCI devices with enabled > switcheroo do the delayed switching. The call has no effect on other > hardware. > > v2: > - move change to drm_lastclose() (Sima) > - update docs for vga_switcheroo_process_delayed_switch() > > Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de> > --- > drivers/gpu/drm/drm_file.c | 4 ++++ > drivers/gpu/vga/vga_switcheroo.c | 3 +-- > 2 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c > index 714e42b05108..513bef816ae9 100644 > --- a/drivers/gpu/drm/drm_file.c > +++ b/drivers/gpu/drm/drm_file.c > @@ -38,6 +38,7 @@ > #include <linux/pci.h> > #include <linux/poll.h> > #include <linux/slab.h> > +#include <linux/vga_switcheroo.h> > > #include <drm/drm_client.h> > #include <drm/drm_drv.h> > @@ -404,6 +405,9 @@ void drm_lastclose(struct drm_device * dev) > drm_dbg_core(dev, "driver lastclose completed\n"); > > drm_client_dev_restore(dev); > + > + if (dev_is_pci(dev->dev)) > + vga_switcheroo_process_delayed_switch(); > } > > /** > diff --git a/drivers/gpu/vga/vga_switcheroo.c > b/drivers/gpu/vga/vga_switcheroo.c > index 365e6ddbe90f..18f2c92beff8 100644 > --- a/drivers/gpu/vga/vga_switcheroo.c > +++ b/drivers/gpu/vga/vga_switcheroo.c > @@ -926,8 +926,7 @@ static void vga_switcheroo_debugfs_init(struct > vgasr_priv *priv) > /** > * vga_switcheroo_process_delayed_switch() - helper for delayed switching > * > - * Process a delayed switch if one is pending. DRM drivers should call > this > - * from their ->lastclose callback. > + * Process a delayed switch if one is pending. > * > * Return: 0 on success. -EINVAL if no delayed switch is pending, if the > client > * has unregistered in the meantime or if there are other clients > blocking the > -- > 2.46.0 > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/nouveau/attachments/20240819/bd66e849/attachment.htm>
Maybe Matching Threads
- [PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
- [PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
- [PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
- [PATCH v2 1/9] drm: Do delayed switcheroo in drm_lastclose()
- [PATCH v2 0/9] drm/{amdgpu,nouveau}: Remove old fbdev hooks