From: Javier Martinez Canillas <javi...@redhat.com> Sent: Tuesday, September 2, 
2025 8:41 AM
> 
> Thomas Zimmermann <tzimmerm...@suse.de> writes:
> 
> [...]
> 
> >>
> >> I'm not familiar with hyperv to know whether is a problem or not for the
> >> host to not be notified that the guest display is disabled. But I thought
> >> that should raise this question for the folks familiar with it.
> >
> > The feedback I got at
> > https://lore.kernel.org/dri-devel/sn6pr02mb4157f630284939e084486afed4...@sn6pr02mb4157.namprd02.prod.outlook.com/
> >  
> > is that the vblank timer solves the problem of excessive CPU consumption
> > on hypervdrm. Ans that's also the observation I had with other drivers.
> > I guess, telling the host about the disabled display would still make sense.
> >
> 
> Yes, I read the other thread you referenced and that's why I said that
> your patch is correct to solve the issue.
> 
> I just wanted to point out, since it could be that as a follow-up the
> driver could need its own .atomic_disable instead of using the default
> drm_crtc_vblank_atomic_disable(). Something like the following maybe:
> 
> +static void hyperv_crtc_helper_atomic_disable(struct drm_crtc *crtc,
> +                                             struct drm_atomic_state *state)
> +{
> +       struct hyperv_drm_device *hv = to_hv(crtc->dev);
> +       struct drm_plane *plane = &hv->plane;
> +       struct drm_plane_state *plane_state = plane->state;
> +       struct drm_crtc_state *crtc_state = crtc->state;
> +
> +       hyperv_hide_hw_ptr(hv->hdev);
> +       /* Notify the host that the guest display is disabled */
> +       hyperv_update_situation(hv->hdev, 0,  hv->screen_depth,
> +                               crtc_state->mode.hdisplay,
> +                               crtc_state->mode.vdisplay,
> +                               plane_state->fb->pitches[0]);
> +
> +       drm_crtc_vblank_off(crtc);
> +}
> +
>  static const struct drm_crtc_helper_funcs hyperv_crtc_helper_funcs = {
>         .atomic_check = drm_crtc_helper_atomic_check,
>         .atomic_flush = drm_crtc_vblank_atomic_flush,
>         .atomic_enable = hyperv_crtc_helper_atomic_enable,
> -       .atomic_disable = drm_crtc_vblank_atomic_disable,
> +       .atomic_disable = hyperv_crtc_helper_atomic_disable,
>  };

I have some historical expertise in the Hyper-V fbdev driver from
back when I was a Microsoft employee (I'm now retired). The fbdev
driver is similar to the DRM driver in that it tells the Hyper-V host
that the device is "active" during initial setup, but there's never a
time when the driver tells Hyper-V that the device is "not active".

I agree that symmetry suggests having disable function that sets
"active" to 0, but I don't know what the effect would be. I don't know
if Hyper-V anticipates any circumstances when the driver should tell
Hyper-V the device is not active. My chances are not good in finding
someone on the Hyper-V team who could give a definitive answer,
as it's probably an area that is not under active development. The
Hyper-V VMBus frame buffer device functionality is what it is, and
isn't likely to be getting enhancements.

I suggest that we assume it's not necessary to add a "disable"
function, and proceed with Thomas' proposed changes to the Hyper-V
DRM driver. Adding "disable" now risks breaking something due
to effects we're unaware of. If in the future the need arises to mark
the device not active, the "disable" function can be added after
a clarifying conversation with the Hyper-V team.

If anyone at Microsoft wants to chime in, please do so. :-)

Michael

Reply via email to